使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中PMK=PSK
PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)
2 第一次握手
AP广播SSID,AP_MAC(AA)→STATION
STATION 端
使用接受到的SSID,AP_MAC(AA)和passphares使用同样算法产生PSK
3 第二次握手
STATION 发送一个随机数SNonce,STATION_MAC(SA)→AP
AP端
接受到SNonce,STATION_MAC(SA)后产生一个随机数ANonce.然后用PMK,AP_MAC(AA),STATION_MAC(SA),SNonce,ANonce 用以下算法产生PTK
PTK=SHA1_PRF(PMK, Len(PMK), "Pairwise key expansion",MIN(AA,SA) ||
Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))
提取这个PTK 前16 个字节组成一个MIC KEY
4 第三次握手
AP发送上面产生的ANonce→STATION
STATION 端
用接收到ANonce 和以前产生PMK,SNonce,AP_MAC(AA),STATION_MAC(SA)
用同样的算法产生PTK。
提取这个PTK 前16 个字节组成一个MIC KEY
使用以下算法产生MIC值
用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值
MIC = HMAC_MD5(MIC Key,16,802.1x data)
5 第四次握手
STATION 发送802.1x data ,MIC→AP
STATION 端
用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进
制)让后发送这个数据帧到AP。
AP端
收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进
制)这时用这个802.1x data 数据帧,和用上面AP产生的MIC KEY 使用同样的
算法得出MIC’。如果MIC’等于STATION 发送过来的MIC。那么第四次握手成
功。若不等说明则AP 和STATION 的密钥不相同,或STATION 发过来的数据帧
受到过中间人攻击,原数据被篡改过。握手失败了。
6 下面的交互仅仅是一个流程,对内部的一些数据的处理就不细说了
1/4:Authenticator -> Supplicant
Authenticator把ANonce送给Supplicant。Supplicant收到1/4后,就有了生成PTK的所有元素。因为1/4里同时也包含了Authenticator的MAC地址。
2/4:Supplicant -> Authenticator
Supplicant计算出PTK,把SNonce和自己的MAC地址送给Authenticator。同时,从2/4报文开始,后面的每个报文都会有MIC。1/4没有。
3/4:Authenticator -> Supplicant
Authenticator向Supplicant证明自己有有效的,同样有MIC加入其中
4/4:Supplicant -> Authenticator
仅是对3/4的一个ACK。说明PTK已经装好,后面的数据可以加密了。
-
AP生成APnonce,构造并发送Message1给STA,该消息中包含密钥信息和APnonce, 表明当前处于PTK发布过程。
-
STA在收到Message1帧后,计算并存储随机数Snone, 调用PRE函数计算PTK,并存储APnonce。然后向AP发送Message2,该消息包括密钥信息,Snonce、STA的RSN IE和运用PTK对Message2计算出MIC。
-
AP在收到Message2后,得到Snonce,调用PRE函数计算出PTK,并用PTK对message2计算出MIC‘, 若MIC=MIC’, 则构造并发送Message3给STA, 否则,丢弃该消息; Message3中包括密钥信息, APnonce、MIC及AP的RSN IE等信息。
-
STA在收到Message3后,同样校验MIC的值, 若校验成功,则STA安装PTK,构造Message4发给AP,表示已经安装PTK。AP在收到Message4后,校验MIC,正确后也安装PTK。四次握手过程完成,PTK产生并完成安装。