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