跳到主要内容

2.14. 为 IKE SA 生成密钥材料

2.14. 为 IKE SA 生成密钥材料​

共享密钥的计算如下。一个称为 SKEYSEED 的量是从 IKE_SA_INIT 交换期间交换的随机数 (nonces) 和该交换期间建立的 Diffie-Hellman 共享密钥计算出来的。SKEYSEED 用于计算其他七个秘密: SK_d 用于为用此 IKE SA 建立的 Child SA 派生新密钥; SK_ai 和 SK_ar 用作完整性保护算法的密钥, 用于认证后续交换的组成消息; SK_ei 和 SK_er 用于加密 (当然也用于解密) 所有后续交换; 以及 SK_pi 和 SK_pr, 它们在生成 AUTH 载荷时使用。SK_d, SK_pi 和 SK_pr 的长度必须 (MUST) 为所商定的 PRF 的首选密钥长度。

SKEYSEED 及其派生值计算如下:

SKEYSEED = prf(Ni | Nr, g^ir)

{SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr } = prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr )

(表示 SK_d, SK_ai, SK_ar, SK_ei, SK_er, SK_pi 和 SK_pr 这些量按次序从 prf+ 生成的位中取出)。g^ir 是来自临时 Diffie-Hellman 交换的共享密钥。g^ir 表示为一个大端 (big endian) 顺序的八字节字符串, 必要时用零填充以使其达到模数的长度。Ni 和 Nr 是随机数, 去除了任何头部。出于历史向后兼容的原因, 在此计算中有两个 PRF 被特殊处理。如果协商的 PRF 是 AES-XCBC-PRF-128 [AESXCBCPRF128] 或 AES-CMAC-PRF-128 [AESCMACPRF128], 在计算 SKEYSEED 时仅使用 Ni 的前 64 位和 Nr 的前 64 位, 但所有位都用作 prf+ 函数的输入。

两个流量方向使用不同的密钥。用于保护来自原始发起方的消息的密钥是 SK_ai 和 SK_ei。用于保护另一个方向消息的密钥是 SK_ar 和 SK_er。