跳到主要内容

2.17. 为子 SA 生成密钥材料

2.17. 为子 SA 生成密钥材料​

单个 Child SA 由 IKE_AUTH 交换创建, 额外的 Child SA 可以选择在 CREATE_CHILD_SA 交换中创建。它们的密钥材料生成如下:

KEYMAT = prf+(SK_d, Ni | Nr)

其中 Ni 和 Nr 是来自 IKE_SA_INIT 交换的随机数, 如果此请求是创建的第一个 Child SA; 或者是来自 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 交换的共享密钥 (表示为一个大端顺序的八字节字符串, 必要时用零填充高位比特以使其达到模数的长度)。

单次 Child SA 协商可能产生多个安全关联。ESP 和 AH 的 SA 成对存在 (每个方向一个), 因此在单次 Child SA 协商中为它们创建两个 SA。此外, Child SA 协商除 ESP 或 AH 之外或替代它们 (例如, [ROHCV2] 中描述的 ROHC_INTEG) 可能包含某些未来的 IPsec 协议。在任何情况下, 每个 Child SA 的密钥材料必须 (MUST) 使用以下规则从扩展的 KEYMAT 中取出:

o 所有承载从发起方到响应方数据的 SA 的密钥, 都在承载从响应方到发起方数据的 SA 的密钥之前取出。

o 如果协商了多个 IPsec 协议, 每个 Child SA 的密钥材料按照协议头部在封装数据包中出现的顺序取出。

o 如果一个 IPsec 协议需要多个密钥, 它们从 SA 的密钥材料中被取出的顺序需要在该协议的规范中描述。对于 ESP 和 AH, [IPSECARCH] 定义了顺序, 即: 加密密钥 (如果有) 必须 (MUST) 从最初的位中取出, 完整性密钥 (如果有) 必须 (MUST) 从剩余的位中取出。

每种密码算法取走作为算法一部分指定的固定数量的密钥材料比特, 或者在 SA 载荷中协商 (关于密钥长度的描述见第 2.13 节, 密钥长度变换属性的定义见第 3.3.5 节)。