资讯动态

wifit3 WiFi 审计工具 WPA PSK 派生实现完整走读:从 PSK 字符串到 M2 的 MIC

发布时间:2026/10/4 22:48:18 来源:尧图企业网站定制
wifit3 WiFi 审计工具 WPA PSK 派生实现完整走读从 PSK 字符串到 M2 的 MIC【免费下载链接】wifit3Wifite but USB-only cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3wifit3 是一个跨平台、仅依赖 USB 网卡的 WiFi 审计工具Wifite 的 USB-only cross-platform 版本可抓取 WPA2 四次握手并离线破密。本文完整走读它的 WPA PSK 派生实现WiFi 密码字符串如何一步步变成 PMK、PTK并最终算出四次握手中 M2 消息的 MIC——这是判断密码对不对的最后一道闸门。为什么 WiFi 密码不能直接当密钥在 WPA/WPA2-PSK 中你在路由器里设置的那串密码PSK并不直接参与加密。802.11i 规定了一条派生链PSK 字符串 → PMK32字节→ PTK48字节→ KCK16字节→ M2 的 MIC16字节其中 MICMessage Integrity Check是四次握手 M2 帧里的数字签名AP 用它验证客户端确实知道密码。反过来hashcat-m 22000破密时也是逐条猜测 PSK、重算 MIC、与抓到的 M2 对比——所以这套派生代码是 wifit3 破密管线的数学核心。四条消息中各自携带什么摘自 handshake.py 的模块注释消息方向Nonce 字段有 MIC对破密的价值M1AP→STAANonce无供体提供 ANonceM2STA→APSNonce有基石SNonce MIC EAPOL 全在这里M3AP→STAANonce 重复有供体M4STA→AP通常为 0有仅当 nonce 未清零时可用wifit3 把这条派生链放在一个零 I/O的纯函数模块里方便在任何场景在线应答、离线验证、单元测试复用。第一步PSK 字符串 → PMKPBKDF2-HMAC-SHA14096 轮入口是 wpa_psk.py 中的pmk()全部核心就一行def pmk(psk: str, ssid: str) - bytes: return hashlib.pbkdf2_hmac(sha1, psk.encode(), ssid.encode(), 4096, 32)三个值得注意的点算法是 PBKDF2-HMAC-SHA1固定 4096 次迭代输出 32 字节——这正是 IEEE 802.11i 对 PSK 类网络的 PMK 定义SSID 是盐同一个密码连不同 SSIDPMK 完全不同改 WiFi 名字就等于换了密钥基础这一步计算量最大4096 轮 HMAC破密工具也在这里最耗算力。第二步PMK → PTKPRF-512 与排序对的巧妙设计ptk() 用 PRF-512以 HMAC-SHA1 为基底把 32 字节 PMK 扩成 48 字节 PTK输入数据是两对 32/6 字节的配对值data min(aa, spa) max(aa, spa) min(anonce, snonce) max(anonce, snonce) return _prf(pmk_bytes, bPairwise key expansion, data, 48)aa/spa是AP 与客户端的 MACanonce/snonce是双方随机数妙处在于min/max 排序无论哪一方先写代码AP 端和客户端算出的 PTK 都相同天然消除谁先谁后的歧义48 字节 PTK 的前 16 字节即kck()截出的KCK专门用来计算 MIC。对应的单元测试test_wpa_psk.py直接断言了交换参数后结果不变验证了这个对称性。第三步KCK 与 M2 的 MICHMAC-SHA1 取前 16 字节MIC 的计算在 eapol_mic()return hmac.new(kck_bytes, eapol_payload_mic_zeroed, hashlib.sha1).digest()[:16]规则只有一条但两个细节容易踩坑先清零再签名对 EAPOL 载荷计算时MIC 字段本身必须先置 16 个零字节否则签名覆盖签名自引用偏移量是 81在 802.1X 载荷内MIC 固定从第 81 字节起、长 16 字节——这个常量定义在 eapol.py也是 hashcat 读取 MIC 的位置。上图中焦点页逐条列出 M1–M4 的 Nonce 与 MIC 字段并给出 Valid 4-Way Handshake (M2M3) 的判定——底层用的就是同一套偏移与长度常量。一条调用链打通实战mic_for()mic_for() 把整条链串成一次调用拥有这个 PSK 的客户端对这段 EAPOL 字节会算出什么 MICdef mic_for(psk, ssid, aa, spa, anonce, snonce, eapol_payload_mic_zeroed): k kck(ptk(pmk(psk, ssid), aa, spa, anonce, snonce)) return eapol_mic(k, eapol_payload_mic_zeroed)wifit3 用它做了两件性质相反的事在线伪造fake_auth.py 的受害者客户端模拟器收到 M1 后用已知 PSK 现场算出合法 MIC 并回发 M2——AP 只有在 MIC 正确时才会推进握手所以收到 M3 就等价于我们的 WPA2 密码学被真机验证正确离线验证crack.py 逐条读取.hc22000哈希行对每个候选密码重算 MIC 并与目标比对不依赖 hashcat 也能独立证明一条 EvilTwin 抓包可被破解EvilTwin 端到端测试 在无硬件环境下走通 M1 → 客户端 M2真实 MIC→ 解析 → 组装 hc22000 → 破解的全链路保证这条数学链自洽。用 IEEE 标准测试向量守住正确性密码学代码最怕差一字节。wifit3 在 test_wpa_psk.py 中直接内置了 IEEE 802.11i 附录 J 的官方向量如pmk(password, IEEE)必须等于f42c6fc5…9710a12e再加一个错误密码必须算出不同 MIC的反向断言——标准向量 对称性 反例三层验证覆盖了整条派生链。关键文件清单文件作用src/wifit3/crack/wpa_psk.pyPMK/PTK/KCK/MIC 纯函数派生链本文主角src/wifit3/dot11/eapol.pyEAPOL-Key 帧组装MIC 偏移 81 / 长度 16src/wifit3/crack/handshake.py握手可破解性判定 hc22000 哈希行生成scripts/ap/fake_auth.py在线用真实 MIC 应答 M2验证密码学scripts/ap/crack.py离线逐候选重算 MIC 验证哈希行tests/crack/test_wpa_psk.pyIEEE 802.11i 标准向量回归测试一句话总结wifit3 把 802.11i 附录 J 的四步密码学压缩进约 50 行纯函数——PBKDF2 出 PMK排序对出 PTKKCK 出 MIC——再用标准向量钉死正确性让验证握手与破密走的是同一套数学。【免费下载链接】wifit3Wifite but USB-only cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑