跳到主要内容

1.3. CREATE_CHILD_SA 交换

1.3. CREATE_CHILD_SA 交换​

CREATE_CHILD_SA 交换用于创建新的子 SA,以及对 IKE SA 和子 SA 进行重密钥。此交换由单个请求/响应对组成,其部分功能在 IKEv1 中被称为第二阶段交换。在初始交换完成之后,IKE SA 的任一端都可以发起此交换。

SA 通过创建新的 SA 然后再删除旧的 SA 来进行重密钥。本节描述重密钥的第一部分,即新 SA 的创建;第 2.8 节涵盖了重密钥的机制,包括将流量从旧 SA 迁移到新 SA 以及删除旧 SA。要理解重密钥的整个过程,必须将这两节内容结合起来阅读。

任一端点都可以发起 CREATE_CHILD_SA 交换,因此在本节中,术语"发起方"指的是发起此交换的端点。实现可以在一个 IKE SA 内拒绝所有 CREATE_CHILD_SA 请求。

CREATE_CHILD_SA 请求可以(可选地)包含一个 KE 载荷,用于额外的 Diffie-Hellman 交换,以提供更强的子 SA 前向保密保证。子 SA 的密钥材料是建立 IKE SA 时建立的 SK_d、CREATE_CHILD_SA 交换期间交换的随机数,以及 Diffie-Hellman 值(如果 CREATE_CHILD_SA 交换中包含 KE 载荷)的函数。

如果 CREATE_CHILD_SA 交换包含 KEi 载荷,则至少有一个 SA 提议必须包含 KEi 的 Diffie-Hellman 组。KEi 的 Diffie-Hellman 组必须是发起方期望响应方接受的组中的一个元素(可以提议额外的 Diffie-Hellman 组)。如果响应方选择了一个使用不同 Diffie-Hellman 组(NONE 除外)的提议,则响应方必须拒绝该请求,并在 INVALID_KE_PAYLOAD Notify 载荷中指明其首选的 Diffie-Hellman 组。此通知关联两个八位组的数据:以大端序排列的、被接受的 Diffie-Hellman 组编号。在发生此类拒绝的情况下,CREATE_CHILD_SA 交换失败,发起方可能会使用响应方在 INVALID_KE_PAYLOAD Notify 载荷中给出的 Diffie-Hellman 提议和该组中的 KEi 重试该交换。

响应方发送 NO_ADDITIONAL_SAS 通知,以表明 CREATE_CHILD_SA 请求不可接受,因为响应方不愿意在此 IKE SA 上接受更多子 SA。此通知也可以用来拒绝 IKE SA 重密钥。某些最简实现可能只接受在初始 IKE 交换上下文中的单个子 SA 建立,并拒绝任何随后添加更多子 SA的尝试。