WPA2 与 WPA3 无线安全
WPA2 与 WPA3 无线安全
KRACK 攻击与 WPA2 的崩塌
2017 年 10 月,比利时鲁汶大学 Mathy Vanhoef 发表了一篇论文 Key Reinstallation Attacks(KRACK),用不到 100 行 Python 代码演示了对 WPA2 协议本身的攻击。攻击者无需破解 Wi-Fi 密码就能解密流量,所有支持 WPA2 的设备都受影响——iOS、Android、Windows、Linux、macOS 全部中招。
攻击的核心是 WPA2 的 4 次握手在重传场景下会被利用。论文发出后几个月内,所有主流操作系统发布补丁。但这件事改变了业界对 Wi-Fi 安全的认知:协议本身有缺陷,密码再长也没用。
这一章从 WEP 的崩塌讲起,理解 WPA2 的 4 次握手设计,再看 WPA3 怎么用 SAE 协议彻底解决这个问题。
问题一:WEP 为什么被淘汰
WEP(Wired Equivalent Privacy)1999 年成为 802.11 标准的第一代安全协议,目标是"让无线网络像有线一样安全"。
WEP 设计:
- 共享密钥:AP 和客户端配置相同的 5/13 字节字符串(如 "MySecret12345")
- 加密:RC4 流密码,加密每个包
- 完整性:CRC-32 校验
RC4 加密的伪流程:
1. IV(24 位随机数)拼接共享密钥 → RC4 keystream
2. keystream XOR 明文 = 密文
3. 发送:IV + 密文
4. 接收:用 IV + 共享密钥重算 keystream,XOR 密文 = 明文致命缺陷 1:IV 只有 24 位。
2^24 = 16777216 种可能。一个繁忙的 AP 每秒发 1000 个包,5 小时内 IV 必然重复。IV 重复时,相同 IV + 相同密钥 → 相同 keystream。两个密文相减就能消除 keystream,得到明文 XOR——统计学攻击(FMS 攻击)能恢复密钥。
致命缺陷 2:密钥静态。
WEP 共享密钥是固定的(除非人工改),所有包用同一密钥加密。攻击者捕获几百万个包就能破解。
WEP 实际破解时间(2004 年后):
- 抓 4 万个包(约 1 分钟抓包)→ 60% 概率破解
- 抓 10 万个包 → 95% 概率破解
- 工具:aircrack-ng,几分钟出结果
WEP 在 2004 年被 Wi-Fi Alliance 正式弃用,802.11i(后来的 WPA/WPA2)成为强制要求。
问题二:WPA 是怎么过渡的
WPA(Wi-Fi Protected Access)2003 年发布,是 WEP 到 802.11i 的过渡方案。WPA 用 TKIP(Temporal Key Integrity Protocol)加密:
- 密钥动态:每个包用不同的密钥(per-packet key mixing)
- IV 长度:48 位(足够大,长期不重复)
- 完整性:MIC(Message Integrity Code),抗篡改
TKIP 仍基于 RC4,只是为了兼容老硬件。WPA 协议本身设计良好,但底层 RC4 算法在 2010 年后被认为不再安全。
问题三:WPA2 的 4 次握手
WPA2(802.11i)2004 年强制,至今仍是 Wi-Fi 安全的事实标准。WPA2 用 AES-CCMP 加密(CCM 模式的 AES),加密和认证都强。
WPA2-PSK 4 次握手:
图注:PTK = PRF(PSK, ANonce, SNonce, AP_MAC, Client_MAC),派生 KCK/KEK/TK 三把密钥。
4 次握手的核心:
- AP 发 ANonce:256 位随机数
- Client 用 PSK + ANonce + SNonce 计算 PTK(Pairwise Transient Key):
PTK = PRF(PSK, ANonce, SNonce, AP_MAC, Client_MAC)
PTK 拆成 KCK(确认密钥)、KEK(加密密钥)、TK(临时密钥)三部分。
Client 用 PTK 派生 MIC,发给 AP。 - AP 验证 MIC 后发 GTK(Group Transient Key):组播密钥
- Client 确认 GTK:握手完成
关键问题:4 次握手的"重传"。
如果第 3 步 AP 发出的 EAPOL-3 在网络里丢了,AP 会重传同样的 EAPOL-3。重传时用相同的 ANonce、SNonce、PTK。
这就是 KRACK 攻击的入口。
问题四:KRACK 攻击详解
2017 年 Mathy Vanhoef 的 KRACK 论文(USENIX Security 2017)描述的攻击:
- 攻击者作为中间人,重传 EAPOL-3 给 Client
- Client 收到重传的 EAPOL-3,重装 PTK——把 PTK 计数器重置为 0
- 攻击者现在知道 Client 重用了一个已知密钥 + 重置计数器加密的包
- 攻击者用这个包进行解密或注入
具体到 4-way handshake resend:
图注:KRACK 核心是利用 EAPOL-3 重传导致 nonce 重置。修复:重传的 EAPOL-3 应丢弃,不重装 PTK。
为什么攻击者能得到两个相同 nonce 的包?
Client 装 PTK 时,nonce(packet number)从 0 开始递增。重装 PTK 后 nonce 再次重置为 0。下一次客户端用 nonce=0 加密的包和第一次用 nonce=0 加密的包内容相似(很多包的固定字段相同),XOR 就能恢复明文。
影响:
- HTTPS 流量安全(TLS 独立加密)
- 但 HTTP、FTP、SMTP 等明文协议完全暴露
- 攻击者可以注入数据到加密流(如 DNS 篡改)
修复:
- 安装 2017 年 10 月后所有操作系统的 Wi-Fi 驱动补丁
- 关键修复:收到重传的 EAPOL-3 时不要重装 PTK,丢弃或重新握手
为什么协议本身有这个问题?
WPA2 协议设计时假设"重传的 EAPOL-3 是 AP 真的没收到,所以重发"。但没考虑攻击者主动重放。这是协议层的逻辑漏洞,不是密码学漏洞。
问题五:WPA3 的 SAE 协议
WPA3 2018 年发布,2020 年起在主流设备普及。WPA3 用 SAE(Simultaneous Authentication of Equals) 协议替代 WPA2 的 4 次握手 + PSK。
SAE 的核心创新:
SAE 是一种零知识证明 + 抗离线字典攻击 的密钥交换协议。2018 年由 IEEE 802.11-2016 标准化。
SAE 握手过程:
图注:SAE 每次握手标量随机,攻击者捕获报文也无法离线暴力破解密码。完美前向保密 + 抗 KRACK。
SAE 的密码学原理(Dragonfly Key Exchange):
- Password Element (PE):把密码
mypassword123映射到一个椭圆曲线点PE = Hash(mypassword123) × G(G 是椭圆曲线生成元) - 随机标量:双方各选一个随机数
r1(AP)和r2(Client) - Commit 交换:双方发
r1 × PE和r2 × PE给对方,但加上承诺(commitment)防止作弊 - 共享秘密计算:
AP 算:r1 × (r2 × PE) = r1 × r2 × PEClient 算:r2 × (r1 × PE) = r1 × r2 × PE
双方得到相同共享秘密SS = r1 × r2 × PE - Confirm 验证:双方用 SS 派生 Confirm 值,验证对方确实知道 SS
SAE 的安全性:
- 抗离线字典攻击:攻击者捕获 SAE Commit 报文,但每次握手的标量 r1、r2 都不同。即使攻击者有"字典"(候选密码列表),每次握手都要在线与设备交互,无法离线破解
- 完美前向保密(PFS):即使 PSK 未来某天泄露,历史会话密钥也推不出来
- 防 KRACK:SAE 没有 4 次握手的重装问题,根本不依赖 PTK 重传
WPA3-Personal vs WPA3-Enterprise:
- WPA3-Personal:用 SAE 替代 PSK
- WPA3-Enterprise:仍用 802.1X + EAP-TLS,但加密套件强制 192 位(GCMP-256)
问题六:WPA3 的过渡问题
WPA3 兼容模式(Transition Mode):
WPA3 设备在 802.11 协议层做了一件事——AP 同时广播 WPA2 和 WPA3 的 BSS 信息,老设备按 WPA2 接入,新设备按 WPA3 接入。但这引入了降级攻击(Downgrade Attack)风险:
AP 广播: "支持 WPA3 + WPA2"
↓
攻击者伪造 AP 广播: "只支持 WPA2"
↓
新设备被骗,按 WPA2 接入修复:WPA3 强制使用 Management Frame Protection (PMF, 802.11w)——管理帧(Beacon、Probe Response)也加密+认证,攻击者不能伪造。
# 看路由器是否启用了 PMF
# OpenWrt 系统
uci show wireless | grep ieee80211w
# 0 = 禁用, 1 = 可选, 2 = 强制WPA3 设备普及率:
- 2024 年 iPhone 6+、Mac 2018+、Pixel 3+、Windows 10/11 都支持
- 路由器:Wi-Fi 6 路由器普遍支持 WPA3
- 2026 年 WPA3 实际部署率超过 60%
问题七:KRACK 后的现实
KRACK 之后,Wi-Fi Alliance 加了 WPA3-Personal Transition Mode,允许 WPA2 设备继续接入。但实际 KRACK 漏洞在 2017-2018 年的所有补丁里都修了。
安全建议(2026 年):
- 优先选 WPA3:能开就开
- 必须用 WPA2 时:用 WPA2-PSK + AES-CCMP,不要选 TKIP
- 密码长度足够:WPA2-PSK 是基于密码的密钥,密码短容易被离线字典攻击(虽然需要 4 次握手报文)
- 关闭 WPS:WPS 一键连接的 8 位 PIN 容易被暴力破解(4 小时内必出)
- 企业网络用 802.1X:基于证书的 EAP-TLS 比 PSK 强几个数量级
# 看 Wi-Fi 连接用的协议
# Linux
iw dev wlan0 link
# 输出包含:... WPA3-Personal SAE ...
# Android
adb shell dumpsys wifi | grep -i "wpa\|rsn"问题八:WPA2/WPA3 的真实握手抓包
Wireshark 抓 Wi-Fi 流量(需网卡支持 monitor 模式):
# Linux 启用 monitor 模式
sudo ip link set wlan0 down
sudo iw dev wlan0 set type monitor
sudo ip link set wlan0 up
# 抓 WPA2 4 次握手
sudo tcpdump -ni wlan0 -X 'ether proto 0x888e' -w /tmp/wpa2.pcap
# 0x888e = EAPOL 协议号Wireshark 打开会显示 4 个 EAPOL 报文,对应 4 次握手。eapol.type == 3 过滤第 3 个包(AP → Client 的 GTK 传输),eapol.type == 2 过滤 Client 的 SNonce 回复。
SAE 抓包:
sudo tcpdump -ni wlan0 -X 'ether proto 0x888e' -w /tmp/wpa3.pcap
# SAE 用 EAPOL-Key 协议,但 payload 是 SAE 元素Wireshark 在 SAE 握手时会显示 Auth: SAE,能看到双方交换的 scalar 和 element。
问题九:WPA3-Enterprise 和 192 位安全
WPA3-Enterprise 引入 192 位最低安全套件:
- 加密:AES-256-GCMP(替代 AES-128-CCMP)
- 认证:Suite-B(基于 ECDSA + ECDH P-384)
- 完整性:HMAC-SHA-384
这套套件是 NSA 的 Suite B Cryptography 套件,符合美国政府最高机密保护标准。WPA3-Enterprise 的 192 位安全意味着整套加密学栈(从密钥交换到加密到完整性)都达到 192 位等效强度。
适用场景:
- 政府、军事网络
- 金融、医疗隐私
- 对安全有极致要求的企业
实战命令
# 看 Wi-Fi 连接状态
iw dev wlan0 link
# 输出:SSID, freq, signal, WPA3-Personal SAE
# 抓 EAPOL 报文
sudo tcpdump -ni wlan0 -X 'ether proto 0x888e' -w /tmp/eapol.pcap
# 抓 4 次握手
tshark -r /tmp/eapol.pcap -Y 'eapol' -T fields -e frame.number -e eapol.type
# 模拟 KRACK(仅在受控环境)
# 详见 krackattacks-scripts 项目
# 看 Wi-Fi 驱动是否打过 KRACK 补丁
dmesg | grep -i krack
# 或检查内核版本 > 4.13.2
# 用 aircrack-ng 测试 PSK 强度
aircrack-ng -w /usr/share/wordlists/rockyou.txt -e YourSSID /tmp/wpa2.pcap
# 强密码:数年破解不出来
# 弱密码(如 "12345678"):几秒
# 启用 monitor 模式
sudo airmon-ng start wlan0思考题
- 假设你的 Wi-Fi 用 WPA2-PSK,密码是 8 位纯数字(如
12345678)。WPA2-PSK 实际安全性受什么影响?4 次握手的 PSK 怎么用?攻击者需要多久破解? - WEP 用 24 位 IV 是 1999 年的设计,那时 24 位 = 1600 万被认为"足够大"。但今天一台 PC 几小时内就能枚举完所有 IV。如果当年用 48 位 IV,WEP 是不是就不会被破解?为什么加密算法的"足够大"是相对而言的?
- KRACK 攻击不依赖密码——它攻击协议本身。如果你的 Wi-Fi 用 32 位强密码,KRACK 仍然有效吗?为什么?
- SAE 抗离线字典攻击的关键在哪一步?如果攻击者捕获 SAE 报文并尝试 1000 万个候选密码,验证需要多久?验证是本地完成还是必须在线?
- WPA3 兼容模式(WPA2 + WPA3 同时)允许老设备接入。一个攻击者如何用降级攻击强制 WPA3 设备走 WPA2?怎么防御?
- 假设你是企业网络管理员,要给 1000 员工的工厂部署 Wi-Fi。要求覆盖整个 5000 平方米车间、支持漫游、单 AP 至少 50 设备、5G 频段优先。WPA3 还是 WPA2?怎么设计?
延伸阅读
- RFC 7664: Dragonfly Key Exchange
- IEEE 802.11-2016: SAE 标准
- Vanhoef & Piessens 2017 论文 Key Reinstallation Attacks
- Wi-Fi Alliance: WPA3 规范
- 《802.11 无线网络权威指南》(Matthew Gast)
- 动手实验:用 aircrack-ng 抓包并破解 WEP 流量(仅限自己网络),体会 WEP 的脆弱性