2.13. Generating Keying Material (生成密钥材料)
2.13. Generating Keying Material (生成密钥材料)
在 IKE SA (Internet Key Exchange 安全关联) 的语境下, 会协商四种密码算法: 加密算法 (encryption algorithm), 完整性保护算法 (integrity protection algorithm), Diffie-Hellman 群, 以及伪随机函数 (pseudorandom function, PRF). PRF 用于为 IKE SA 与 Child SA (子安全关联) 中所用全部密码算法构造密钥材料 (keying material).
我们假定每种加密算法与完整性保护算法使用固定长度的密钥, 且该固定长度下任意随机选取的值均可作为合适密钥. 对于接受可变长度密钥的算法, 必须在所协商的密码变换 (cryptographic transform) 中规定固定密钥长度 (见 3.3.5 节对 Key Length 变换属性的定义). 对于并非任意值都构成合法密钥的算法 (例如带密钥奇偶校验的 DES 或 3DES), 从任意值导出密钥的算法必须由该密码变换规定. 对于基于 Hashed Message Authentication Code (HMAC, 散列消息认证码) 的完整性保护函数, 固定密钥长度即底层散列函数的输出长度.
假定 PRF 接受任意长度的密钥, 但具有首选密钥长度 (preferred key size). SK_d, SK_pi 与 SK_pr 的长度必须使用 PRF 的首选密钥长度 (见 2.14 节). 对于基于 HMAC 构造的 PRF, 首选密钥长度等于底层散列函数的输出长度. 其他类型的 PRF 必须规定其首选密钥长度.
密钥材料始终作为所协商 PRF 算法的输出导出. 由于所需密钥材料长度可能大于 PRF 单次输出长度, 需迭代使用 PRF. 术语 "prf+" 描述一种函数, 它基于名为 "prf" 的伪随机函数的输入, 输出伪随机流.
下文用 | 表示拼接 (concatenation). 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 位 Advanced Encryption Standard (AES, 高级加密标准) 密钥与 160 位 HMAC 密钥, 而 prf 每次生成 160 位, 则 AES 密钥取自 T1 以及 T2 的开头, HMAC 密钥取自 T2 的剩余部分以及 T3 的开头).
每次 prf 调用末尾拼接的常量为单个八位组 (octet). prf+ 在超过 255 倍 prf 输出长度之外未予定义.