WiFi四部握手
术语
PTK(Pairwise Transient Key):成对传输密钥,用于单播数据的加密和解密,
GTK(Group Temporal Key):组临时密钥,用于组播数据的加密和解密
PMK(pairwise master key):成对主密钥
AA: client的MAC地址 SPA:
AP的MAC地址 ANonce:
AP产生的随机数 SNonce:Client产生的随机数
导出公式
PMK=pdkf2_SHA1(passphrase, SSID, SSID_length, 4096),
passphrase就是用户连接无线时输入的密码
PTK=SHA1_PRF(PMK,Len(PMK),"Pairwise key expansion",MIN(AA,SA)||MAX(AA,SA)||MIN(AN,SN)||MAX(AN,SN))
目前常见的PTK有两种CCMP和TKIP,其长度如下图:
TKIP和CCMP的PTK被分成下面部分
1.EAPOL KCK(key confirmation key) 密钥确认密钥,用来计算密钥生成消息的完整性
2.EAPOL KEK(key Encryption key) 密钥加密密钥,用来加密密钥生成消息
3.TKIP TK(CCMP TK) 这部分是正真用来进行数据加密的
4.TKIP MIC key 用于Michael完整性校验的(只有TKIP有)
GMK主组密钥(group master key)以作为临时密钥的基础 和成对密钥一样扩展获得GTK (groupTransient Key) ,公式如下:
GTK=PRF-X(GMK,"Group key expansion",AA||GN)
GN - Authenticator生成的 Nonce
AA - Authenticator MAC地址
注意和成对密钥扩展不同的是没有supplicant的 AA,AN
4步握手流程
每个STA都有一个独立的PTK,所有STA共同拥有一个相同的PTK,我们比较常见的TKIP和CCMP混合加密,前者用于兼容老旧设备,后者用于新设备的加密解密,一般来说为了兼容不同的版本,GTK会使用TKIP加密(因为GTK是所有设备共享的),PTK一般TKIP和CCMP混合,不同终端可根据实际进行协商使用CCMP或者TKIP