2.14. Generating Keying Material for the IKE SA (为 IKE SA 生成密钥材料)
2.14. Generating Keying Material for the IKE SA (为 IKE SA 生成密钥材料)
共享密钥按下述方式计算. 量 SKEYSEED 由 IKE_SA_INIT 交换期间交换的 nonce 以及该交换中建立的 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 的长度必须为所协商 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 表示为大端序的八位组串, 必要时以零填充至模数长度. Ni 与 Nr 为去掉任何首部后的 nonce. 出于历史向后兼容, 有两种 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.