# 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(默认) |