IKE 阶段 1 和阶段 2

网络工程 虚拟专用网 网络安全 验证 艾克
2021-07-12 00:30:37

正在经历 IKE 阶段 1 和阶段 2。我有一些与主模式和快速模式相关的问题。如果我在某处出错,请纠正我。

第一阶段主模式

1) 第一个和第二个数据包是 SA 提议和 cookie 的传输。

问题:cookie 不是通过散列发送方的 IP、端口、协议和时间戳生成的吗?如果是这种情况,接收方是否需要用于计算散列的算法,以便他可以确认数据,或者它只是接收方不必打扰的随机值。

2)第3个和第4个数据包交换Diffie Hellman公钥和随机数,生成一个共享秘密以再次计算额外的3个密钥。

问题:Nonce 与psk结合生成种子值那么如何以及何时交换PSK它是在这些数据包交换之外进行通信还是属于这些数据包的一部分。

3)种子值计算出来后,结合共享秘密生成额外的3个密钥进行认证、加密,并作为密钥材料生成阶段2的密钥。

问题:这些密钥用于通过阶段 1(数据包 1 和 2)协商的算法(认证和加密)对阶段 2 中使用的数据包进行身份验证和加密,对吗?并且还对阶段 1 的第 5 个和第 6 个数据包进行加密和验证。

那么我们到底在第 5 和第 6 个数据包中传输什么来对它们进行身份验证和加密?发起方和响应方都宣布了所有 3 个会话密钥吗?那 3 个密钥(身份验证、加密和派生密钥)是对称的吗?

我浏览了 RFC 和许多其他文档,但找不到这些问题的答案我知道这些可能是愚蠢的,但请帮助我弄清楚我是否理解全部错误。

2个回答

好问题。

1) 第一个和第二个数据包是 SA 提议和 cookie 的传输。

问题:cookie 不是通过散列发送方的 IP、端口、协议和时间戳生成的吗?如果是这种情况,接收方是否需要用于计算散列的算法,以便他可以确认数据,或者它只是接收方不必打扰的随机值。

cookie 是任意生成的(通常是随机生成的)。它们是来自发起方的 64 位和来自响应方的 64 位,并且共同(128 位)用作特定 ISAKMP“隧道”(或 ISAKMP“SA”)的标识——即 3 个 ISAKMP 的特定集合密钥(加密、认证、派生)。

(很像 SPI 会识别特定的 IPsec SA/隧道)

这些值也在 3 个 ISAKMP 密钥的计算中使用,但是直到消息 3 和 4 之后才会发生这种情况,因此发起方和响应方已经就必要的散列算法达成一致。

2)第3个和第4个数据包交换Diffie Hellman公钥和随机数,并生成一个共享秘密以再次计算额外的3个密钥。

问题:Nonce 与 psk 结合生成种子值。那么如何以及何时交换 PSK。它是在这些数据包交换之外进行通信还是属于这些数据包的一部分。

在隧道尝试建立之前,PSK 在对等体之间“交换”。理论上可以通过电话或手动配置双方的 PSK。

在消息 5 和 6 中,双方都被验证具有正确的 PSK。创建 E/A/D ISAKMP 密钥是 PSK,所以如果双方没有以正确的 PSK 开始,他们永远无法创建相同的E/A/D 键,并且无法“理解”彼此的消息 5 和 6。

3)种子值计算出来后,结合共享秘密生成额外的3个密钥进行认证、加密,并作为密钥材料生成阶段2的密钥。

问题:这些密钥用于通过阶段 1(数据包 1 和 2)协商的算法(认证和加密)对阶段 2 中使用的数据包进行身份验证和加密,对吗?并且还对阶段 1 的第 5 个和第 6 个数据包进行加密和验证。

是的。在主模式的消息 1-4 之后,存在三个 ISAKMP 密钥:加密密钥、认证密钥、派生密钥。

加密密钥和认证密钥将保护主模式的消息 5 和 6,以及任何随后的快速模式协商消息。

ISAKMP 不使用派生密钥,而是将其提供给 IPsec,以便 IPsec 可以生成自己的加密和身份验证密钥。

那么我们到底在第 5 和第 6 个数据包中传输什么来对它们进行身份验证和加密?

什么是交换是有点随心所欲,为什么是什么是非常重要的。消息 5/6 的目的是验证另一方的身份(也就是,另一方拥有正确的预共享密钥)。

以下是计算消息 5 和 6 中交换的价值的(部分)内容,更重要的是它的用途:

  • Pre-Shared-Key -- 只有对话中的预期接收者才能知道的值
  • Diffie-Hellman Shared Secret——一个只有交换消息的双方才能知道的值 3/4
  • 任意数据——在消息 1-4 中交换的值,将这个特定的身份验证尝试与这个特定的对话联系起来(防止回复先前连接的身份验证尝试)

任意数据有两部分,一组来自发起方,另一组来自响应方。所以最后,你在信息 5 和 6 中交换了两个集体价值:

  • PSK / DH 共享秘密 / 任意发起方数据
  • PSK / DH 共享秘密 / 任意响应者数据

Initiator 和 Responder 都拥有将上述两个放在一起所需的信息因此,这两个发起者和响应者有他们可以用它来证明价值,他们是谁,他们说他们是,他们可以用它来验证值其他是他们说他们是谁。

RFC 2409 的第 10 页概述了具体细节我还在这个答案中解释了这个过程的一些细节

发起方和响应方都宣布了所有 3 个会话密钥吗?那 3 个密钥(身份验证、加密和派生密钥)是对称的吗?

是和是。

在主模式中,它们保护上述消息 5 和 6 中描述的身份值的交换。

ISAKMP/IKEv1 已被弃用,不应再使用,它​​已被 IKEv2 取代。

不是通过散列发件人 IP、端口、协议和时间戳生成的 cookie 吗?

它们如何生成 cookie(或 IKEv2 中称为 SPI)的实现是开放的。RFC 2408 第 2.5.3 节描述了一些可能性(但例如 strongSwan 5.x 仅生成随机 SPI)。

如果是这种情况,接收方是否需要用于计算散列的算法,以便他可以确认数据,或者它只是接收方不必打扰的随机值。

接收方无法验证对等方提供的 cookie 值。但这不是重点,发送到对等方的 cookie 值可以在稍后处理入站消息时进行验证。

Nonce 与 psk 结合以生成种子值。那么如何以及何时交换 PSK。它是在这些数据包交换之外进行通信还是属于这些数据包的一部分。

PSK 永远不会通过 IKE 交换。顾名思义(Pre-Shared Key),必须在建立连接之前共享和配置。

那么我们到底在第 5 和第 6 个数据包中传输什么来对它们进行身份验证和加密?发起方和响应方都宣布了所有 3 个会话密钥吗?那 3 个密钥(身份验证、加密和派生密钥)是对称的吗?

是的,这些密钥是对称的,并且由双方计算。消息 5 和 6 使用已建立的加密密钥 ( SKEYID_e)进行加密,用于验证 IKE SAHASH_I|R/SIG_I|R有效负载是使用生成的共享基本密钥 ( SKEYID)生成的身份验证密钥 ( SKEYID_a) 仅用于通过HASH(1..3)有效载荷验证阶段 2 消息(快速模式、信息)(不过,这些消息也使用加密SKEYID_e)。更多细节可以在RFC 2409, section 5 中找到