WPA/WPA2 安全协议
WPA(Wi-Fi Protected Access)
WPA 是 Wi-Fi Alliance 在 802.11i 标准完成之前推出的过渡性安全方案(2003年)。
TKIP(Temporal Key Integrity Protocol)
WPA 使用 TKIP 替代 WEP 的 RC4:
每帧密钥混合:将传输密钥与发送方 MAC 地址和包计数器结合,生成唯一的每帧密钥
消息完整性检查:MIC(Michael)算法,检测篡改
重放攻击防护:每帧包含序列号,接收端丢弃旧序号的帧
TKIP 密钥派生:
Per-Packet Key = PRF+((TA || TxTLK || PacketNumber) mod 4096, "TKIP", 128)
加密:
Ciphertext = RC4(TKIP_Key) ⊕ Plaintext
MIC = Michael(Key_MIC, Plaintext)
TKIP 的局限
仍基于 RC4:只是增加了密钥混合层,未解决 RC4 根本问题
向后兼容 WEP 硬件:通过固件升级实现
已被攻破:Klein(2008)和 Pyshkin(2008)攻击可恢复 TKIP 密钥
WPA2(Wi-Fi Protected Access II)
WPA2 基于完整的 IEEE 802.11i 标准(2004年),使用 AES-CCMP 替代 TKIP。
AES-CCMP(Counter Mode with CBC-MAC Protocol)
特性 |
CCMP |
|---|---|
加密模式 |
AES-CTR(计数器模式) |
完整性保护 |
AES-CBC-MAC(CMAC) |
密钥长度 |
128-bit / 256-bit |
安全关联 |
PTW(Pairwise Transient Key)+ GTK(Group Temporal Key) |
CCMP 帧格式
┌──────────┬──────────────┬───────────┬──────────┐
│ PN (8B) │ Ciphertext │ MIC (4/8B)│ Header │
│ │ │ │ (明文) │
└──────────┴──────────────┴───────────┴──────────┘
PN = Packet Number(64-bit,防止重放)
MIC = Message Integrity Code(CCMP-128: 4B, CCMP-256: 8B)
四次握手(4-Way Handshake)
WPA/WPA2 使用 EAPOL(Extensible Authentication Protocol over LAN)完成密钥协商:
Personal 模式(PSK)
Step 1: AP → STA
ANonce (AP 生成的随机数)
Step 2: STA → AP
STNonce (STA 生成的随机数)
MIC(ANonce || STNonce || ... )
── STA 已计算 PTK = PRF(PMK, "PTK", AA || SA || ANonce || SNonce)
Step 3: AP → STA
GTK (Group Temporal Key,用于组播/广播加密)
MIC(...)
── AP 已验证 STA 的 MIC(确认 STA 拥有正确的 PMK)
── AP 安装 PTK 用于解密
Step 4: STA → AP
Acknowledge (确认收到 GTK)
── STA 安装 PTK 用于加密
密钥层次结构
PSK / Authenticator
│
PMK (Pairwise Master Key)
│
┌────────────┴────────────┐
▼ ▼
PTK (Pairwise GTK (Group
Transient Key) Temporal Key)
│ │
┌─────────┼─────────┐ │
▼ ▼ ▼ ▼
KCK(128) KEK(128) TK(128/256) 组播加密
(MIC密钥) (密钥封装) (数据加密) (所有STA共享)
Enterprise 模式(802.1X)
Enterprise 模式的四次握手与 Personal 相同,区别在于 PMK 的来源:
Personal: PMK = PBKDF2-PRF(password, SSID, 4096 iterations)
Enterprise: PMK = MSK[0:128] (来自 EAP 认证过程,由 RADIUS 服务器提供)
WPA2 的已知漏洞
KRACK(Key Reinstallation Attack, 2017)
原理:强制 STA 重新安装已使用的 PTK,将重放计数器重置为零
影响:可解密部分流量、注入数据包
修复:补丁确保密钥只安装一次(不重复安装)
PMKID Attack(2019)
原理:利用 802.11w PTSA(Pairwise Transient SA)建立过程中的 PMKID
影响:无需捕获完整四次握手即可离线破解 PSK
PMKID = PRF(PMK, "PMK Name", Min(AA,SPA) || Max(AA,SPA))
Dragonblood(2019)
针对 GCMP(WPA3 使用的加密模式)的实现漏洞
影响部分 WPA3 设备的实现
WPA2 配置建议
设置 |
推荐值 |
|---|---|
加密套件 |
AES-CCMP(禁用 TKIP) |
密钥长度 |
192-bit 或 256-bit PSK |
PMF (802.11w) |
Required(强制) |
WPS |
Disabled(禁用) |
Beacon 间隔 |
100 TU(默认) |