跳到主要内容

2.17. Generating Keying Material for Child SAs (为 Child SA 生成密钥材料)

2.17. Generating Keying Material for Child SAs (为 Child SA 生成密钥材料)

IKE_AUTH 交换创建一个 Child SA, 还可以在 CREATE_CHILD_SA 交换中可选地创建更多 Child SA. 其密钥材料生成如下:

KEYMAT = prf+(SK_d, Ni | Nr)

其中, 若本请求创建的是首个 Child SA, Ni 与 Nr 来自 IKE_SA_INIT 交换; 若为后续创建, 则来自 CREATE_CHILD_SA 交换的新 Ni 与 Nr.

对于包含可选 Diffie-Hellman 交换的 CREATE_CHILD_SA 交换, 密钥材料定义为:

KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr)

其中 g^ir (new) 为本 CREATE_CHILD_SA 交换中临时 Diffie-Hellman 交换的共享秘密 (表示为大端序八位组串, 必要时在高阶位以零填充至模数长度).

单次 CREATE_CHILD_SA 协商可产生多个安全关联 (Security Association). ESP 与 AH 的 SA 成对存在 (每个方向一个), 因此对它们的单次 Child SA 协商会创建两个 SA. 此外, Child SA 协商除 ESP 或 AH 外还可包含未来某些 IPsec 协议 (例如 [ROHCV2] 所述 ROHC_INTEG). 无论何种情况, 每个 Child SA 的密钥材料必须按以下规则从扩展后的 KEYMAT 中取出:

  • 承载从发起方到响应方数据的 SA 的密钥先于反方向 SA 取出.

  • 若协商多个 IPsec 协议, 各 Child SA 的密钥材料按封装后数据包中协议首部出现的顺序取出.

  • 若某 IPsec 协议需要多个密钥, 从该 SA 密钥材料中取密钥的顺序须在该协议规范中说明. 对 ESP 与 AH, [IPSECARCH] 规定顺序为: 加密密钥 (若有) 必须从首部比特取出, 完整性密钥 (若有) 必须从剩余比特取出.

每种密码算法从算法规定或在 SA 载荷中协商的固定长度密钥材料中取位 (密钥长度见 2.13 节, Key Length 变换属性见 3.3.5 节).