好问题。
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 中描述的身份值的交换。