摘要
- WPA2 四次握手在第 4 条消息似乎丢失时,会合法地重传第 3 条消息;有漏洞的客户端却把这次重传当成再次安装同一会话密钥的授权。
- 密钥本身仍然保密,Wi-Fi 密码也没有被破解。真正被重置的是发送包号与接收重放计数器,使本应单调前进的安全状态重新起步。
- 有效修复并未取消重传:客户端仍可再次回复,但每把新密钥只能安装一次,已使用密钥的 nonce 与重放状态不得归零。
四次握手的重传机制本来是在解决无线链路最普通的问题。接入点发送第 3 条消息后,客户端安装双方协商出的成对临时密钥,并发回第 4 条消息。如果最后这条回复在空中丢失,接入点只能再次发送第 3 条消息。否则,一次正常丢包就会让连接永远无法完成。
漏洞出现在“再次收到”与“再次执行”之间。Mathy Vanhoef 与 Frank Piessens 在 CCS 2017 发表的攻击中,位于无线范围内、能够建立信道中间人位置的攻击者阻止第 4 条消息到达接入点,促使接入点重传第 3 条消息,再把这条真实且可验证的消息交给受害客户端。实现接受它并不奇怪;危险在于一些实现随之把已经生效的密钥又安装了一遍。
安装密钥不是把相同字节复制到同一位置那么简单。这个动作还会初始化围绕密钥运行的状态,包括发送方向的包序号 nonce 和接收方向的重放计数器。密钥没有泄露,身份认证也没有突然消失,但计数器一旦回到旧值,同一把密钥就可能再次配合同一 nonce 使用,原本只能向前的防重放边界也可能倒退。
因此,把 KRACK 说成“破解 WPA2 密码”会直接误导处置。更换密码不会改变重复安装语义。把所有设备的影响写成同一种后果也不准确:原论文对 CCMP、TKIP、GCMP,单播与组播,以及不同握手分别分析。CCMP 场景可导致重放与解密,但不会直接赋予任意 Wi-Fi 帧伪造能力;TKIP 与 GCMP 还可能暴露伪造能力。进一步操纵 TCP 或 HTTP 需要合适流量与额外步骤。
Android 与 Linux 上部分 wpa_supplicant 行为尤其严重:重新安装时可能使用全零临时密钥。不过,这是特定实现路径,不是所有 WPA2 设备共有的结果。把最严重变体扩大为统一结论,既高估部分设备,也会掩盖真正需要逐角色核验的补丁范围。
KRACK 的深层价值在于它连接了形式证明与运行代码之间的空隙。研究者引用的既有证明能够说明密钥保密性和会话认证,却没有建模“密钥在什么时候被安装”以及“安装动作能否重复”。密码学对象保持安全,不代表实现它的状态转换自动安全。只有阅读和测试真实代码,才能看见这个未被证明覆盖的动作。
修复原则非常窄:收到合法重传后可以再次发送第 4 条消息,但不能再次安装会话密钥。实现可以拒绝为已使用密钥重新初始化计数器,也可以规定每次握手产生的新密钥只拥有一次安装机会。两种做法都把“可重复回复”与“不可重复提交”分开。
这条约束无需改变空中报文格式。已修复客户端仍能与未修复接入点完成连接,因为第 3 条消息仍可重传,第 4 条消息仍可再次回复。各方无须在同一时刻升级协议,安全边界却能先在本地代码中建立。这正是最小共同规则与自主采用可以同时成立的例子。
但补丁盘点不能只看一句口号。CERT/CC 的 VU#228519 列出从 CVE-2017-13077 开始的一组编号,覆盖成对密钥、组密钥、快速转换等路径。hostapd/wpa_supplicant 上游公告又区分客户端、接入点、802.11r、组密钥更新、驱动与固件。Android 将相关修复放入 2017-11-06 安全补丁级别,同时提醒厂商还可能需要芯片供应商补丁。
2018 年后续研究提供了必要的校正:被测试的大多数厂商已经发布修复,但仍发现残余实现错误和一个影响较低的组密钥绕过。结论不是“第一次修复无效”,而是补丁声明必须接受产品级复测。真实运行状态才是最终证据。
KRACK 最后留下的是一条通用判断:消息真实,只能证明它来自谁;它不能自动证明同一个不可逆动作可以安全地再做一次。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
