2.13. 生成密钥材料
2.13. 生成密钥材料
在 IKE SA 的上下文中, 协商了四种密码算法: 一个加密算法, 一个完整性保护算法, 一个 Diffie-Hellman 组, 以及一个伪随机函数 (PRF)。PRF 用于为 IKE SA 和 Child SA 中使用的所有密码算法构造密钥材料。
我们假设每个加密算法和完整性保护算法都使用固定大小的密钥, 并且该固定大小的任意随机选取值都可以作为适当的密钥。对于接受可变长度密钥的算法, 必须 (MUST) 将固定密钥大小指定为所协商密码变换的一部分 (关于密钥长度变换属性的定义, 见第 3.3.5 节)。对于并非所有值都是有效密钥的算法 (如具有密钥奇偶校验的 DES 或 3DES), 从任意值派生密钥的算法必须 (MUST) 由该密码变换指定。
对于基于哈希消息认证码 (HMAC) 的完整性保护函数, 固定密钥大小是底层哈希函数输出的大小。
假设 PRF 接受任意长度的密钥, 但具有首选密钥大小。首选密钥大小必须 (MUST) 用作 SK_d, SK_pi 和 SK_pr 的长度 (见第 2.14 节)。对于基于 HMAC 构造的 PRF, 首选密钥大小等于底层哈希函数输出的长度。其他类型的 PRF 必须 (MUST) 指定其首选密钥大小。
密钥材料将始终作为协商的 PRF 算法的输出派生。由于所需的密钥材料量可能大于 PRF 输出的大小, PRF 被迭代使用。术语 "prf+" 描述了一个函数, 它基于称为 "prf" 的伪随机函数的输入输出一个伪随机流。
在下文中, | 表示连接。prf+ 定义为:
prf+ (K,S) = T1 | T2 | T3 | T4 | ...
其中: T1 = prf (K, S | 0x01) T2 = prf (K, T1 | S | 0x02) T3 = prf (K, T2 | S | 0x03) T4 = prf (K, T3 | S | 0x04) ...
这持续进行, 直到计算所有所需密钥所需的全部材料都已从 prf+ 输出。密钥取自输出字符串而不考虑边界 (例如, 如果所需的密钥是一个 256 位的先进加密标准 (AES) 密钥和一个 160 位的 HMAC 密钥, 并且 prf 函数生成 160 位, 则 AES 密钥将来自 T1 和 T2 的开头, 而 HMAC 密钥将来自 T2 的其余部分和 T3 的开头)。
连接到每个 prf 函数末尾的常量是单个八字节。prf+ 函数的定义不超出 prf 函数输出的 255 倍大小。