Wireshark WPA 4 次握手

cYr*_*rus 13 wpa wireshark decryption

这个维基页面

WPA 和 WPA2 使用从 EAPOL 握手派生的密钥来加密流量。除非您尝试解密的会话的所有四个握手数据包都存在,否则Wireshark 将无法解密流量。您可以使用显示过滤器 eapol 来定位捕获中的 EAPOL 数据包。

我注意到解密也适用于 (1, 2, 4),但不适用于 (1, 2, 3)。据我所知,前两个数据包就足够了,至少对于单播流量而言是这样的。有人可以解释一下 Wireshark 是如何处理的,换句话说,为什么只有前一个序列有效,因为第四个数据包只是一个确认?另外,是否保证 (1, 2, 4) 在 (1, 2, 3, 4) 工作时总是工作?

测试用例

这是 gzipped 握手 (1, 2, 4) 和加密ARP数据包 (SSID: SSID, password: password)base64编码:

H4sICEarjU8AA2hhbmRzaGFrZS5jYXAAu3J400ImBhYGGPj/n4GhHkhfXNHr37KQgWEqAwQzMAgx
6HkAKbFWzgUMhxgZGDiYrjIwKGUqcW5g4Ldd3rcFQn5IXbWKGaiso4+RmSH+H0MngwLUZMarj4Rn
S8vInf5yfO7mgrMyr9g/Jpa9XVbRdaxH58v1fO3vDCQDkCNv7mFgWMsAwXBHMoEceQ3kSMZbDFDn
ITk1gBnJkeX/GDkRjmyccfus4BKl75HC2cnW1eXrjExNf66uYz+VGLl+snrF7j2EnHQy3JjDKPb9
3fOd9zT0TmofYZC4K8YQ8IkR6JaAT0zIJMjxtWaMmCEMdvwNnI5PYEYJYSTHM5EegqhggYbFhgsJ
9gJXy42PMx9JzYKEcFkcG0MJULYE2ZEGrZwHIMnASwc1GSw4mmH1JCCNQYEF7C7tjasVT+0/J3LP
gie59HFL+5RDIdmZ8rGMeldN5s668eb/tp8vQ+7OrT9jPj/B7425QIGJI3Pft72dLxav8BefvcGU
7+kfABxJX+SjAgAA

解码:

$ base64 -d | gunzip > handshake.cap
Run Code Online (Sandbox Code Playgroud)

运行tshark以查看是否正确解密了ARP数据包:

$ tshark -r handshake.cap -o wlan.enable_decryption:TRUE -o wlan.wep_key1:wpa-pwd:password:SSID
Run Code Online (Sandbox Code Playgroud)

它应该打印:

  1 0.000000 D-Link_a7:8e:b4 -> HonHaiPr_22:09:b0 EAPOL 密钥
  2 0.006997 HonHaiPr_22:09:b0 -> D-Link_a7:8e:b4 EAPOL 密钥
  3 0.038137 HonHaiPr_22:09:b0 -> D-Link_a7:8e:b4 EAPOL 密钥
  4 0.376050 ZyxelCom_68:3a:e4 -> HonHaiPr_22:09:b0 ARP 192.168.1.1 位于 00:a0:c5:68:3a:e4

Old*_*Pro 0

嗯,显然 WireShark 文档是错误的。:-)

在这里关闭文档:

  • 在 EAPOL 1 和 2 之后,双方都知道将用于解密流量的临时密钥。
  • 第三条消息证明双方都知道临时密钥,并表明认证器(基站)已准备好开始使用临时密钥。
  • 第四条消息触发从 EAPOL 之前建立的 PMK 到 EAPOL 中导出的临时密钥的切换

因此,这是有道理的。WireShark 不需要消息 3。它知道消息 1 和 2 之后的密钥,但要等到收到消息 4 后才开始使用它们来解密流量。

生活中的任何事情都无法保证,尤其是自由软件的行为,但可以合理地打赌,WireShark 不需要出现消息 3 来解密会话。