我知道三个会话密钥是由diffi-helmen和nonce生成的,在阶段1 msg 3和msg 4都交换了diffi-helmen公钥并生成共享密钥,并且共享密钥和随机数混合在一起以创建三个会话密钥, 1 加密密钥 2 认证密钥 3 派生密钥
现在我想知道在 msg 5 msg 6 中发送了什么,预共享密钥是如何加密的,以及两者如何使用预共享密钥验证彼此的身份验证
我知道三个会话密钥是由diffi-helmen和nonce生成的,在阶段1 msg 3和msg 4都交换了diffi-helmen公钥并生成共享密钥,并且共享密钥和随机数混合在一起以创建三个会话密钥, 1 加密密钥 2 认证密钥 3 派生密钥
现在我想知道在 msg 5 msg 6 中发送了什么,预共享密钥是如何加密的,以及两者如何使用预共享密钥验证彼此的身份验证
您的所有问题都已在您的原始问题中得到解答。
在主模式下,预共享密钥 (PSK) 在消息 5 和 6 中进行验证。消息 5 和 6 受 ISAKMP 生成的会话密钥保护,如上所述。
在积极模式下,协商中的任何消息都不会被加密。并且在消息 2 和 3 中验证了 PSK。注意,在这两种情况下,我都说 PSK 是经过验证的,而我从未说过 PSK 是交换的。显然,如果在积极模式下没有加密,而您只是通过未加密的线路发送预共享密钥,则会出现巨大的安全漏洞。
幸运的是,ISAKMP 的作者已经想到了这一点。因此,他们创建了一种特殊的方法来验证每一方是否具有正确的 PSK,而无需实际通过网络共享它。有两个项目用于向每个 Peer 验证它们都具有相同的 PSK:Identity Method和Identity Hash。
VPN Peers 可以选择通过多种方式识别自己;最常见的是,对等方将简单地使用它们的源 IP 地址。但他们可以选择使用 FQDN 或主机名。这些中的每一个,连同所选方法的相关值,构成了标识方法。因此,例如,如果我的 IP 为 5.5.5.5,并且我想使用我的 IP 地址来标识自己,那么我的ID 方法实际上将是[IP Address, 5.5.5.5]。 (注意:这两个值构成了整个 ID 方法)
然后将 ID 方法与我们之前讨论的种子值 (SKEYID) 和其他一些值组合(使用 PRF),以创建身份哈希。回想一下,首先创建 SKEYID 的是预共享密钥。
然后通过网络发送 ID 方法和 ID 哈希,另一方尝试使用相同的公式重新创建 ID 哈希。如果接收方能够重新创建相同的 ID 哈希,则向接收方证明发送方必须拥有正确的预共享密钥。
和
在进行预共享密钥认证时,主模式定义如下:
Initiator Responder ---------- ----------- HDR, SA --> <-- HDR, SA HDR, KE, Ni --> <-- HDR, KE, Nr HDR*, IDii, HASH_I --> <-- HDR*, IDir, HASH_R
消息 5 是 HDR、IDii 和 HASH_I
消息 6 是 HRD、IDir 和 HASH_R
在我的描述中,IDix 是 ID Method,而 HASH_x 是 ID Hash。里面有什么不合理的吗?
如果 Firewall1 的 IP 为 1.1.1.1,Firewall2 的 IP 为 2.2.2.2,并且它们都使用“Zebra”的预共享密钥,那么消息 5 和消息 6 将包含以下信息:
1.1.1.1 2.2.2.2
---------- -----------
HDR*, IDii, HASH_I ---5-->
<--6--- HDR*, IDir, HASH_R
消息 5 将包括:
消息 6 将包括:
上面的公共值是在明文消息 1、2、3 和 4 中交换的值,如果他们在网络上窃听,任何人都可以访问这些值。种子值是哈希的唯一部分,只有拥有原始预共享密钥的人才能知道。作为创建种子值的值之一是字符串“ Zebra ”——也就是预共享密钥。请参见上文,以及有关如何形成的更多详细信息的原始答案。