簡單描述一下WPA/WPA2的4次握手中的一些關鍵詞:
WPA/WPA2使用4次握手的方式來產生所需要的密鑰。四次握手通過一系列的交互,從PMK(Pairwise Master Key)生成PTK(Pairwise Transient Key)。PMK來自MSK(Master Session Key),是MSK的前256位,32字節。
PTK包含3個部分,KCK(Key Confirmation Key),KEK(Key Encryption Key),TK(Temporal Key)。
PTK的總長度根據加密方式不同而不同。
當加密方式是TKIP時,PTK長512位,按順序分別為KCK占128位,KEK占128位,TK占128位,MIC key占128位。
當加密方式是CCMP時,PTK長384位,按順序分別為KCK占128位,KEK占128位,TK占128位。

KEK和KCK是給EAPOL-Key,也就是四次握手時,加密和完整性驗證用的。TK用於后續的數據加密。
四次握手的報文都是基於EAPOL-Key的,EAPOL-Key的結構如下:

PTK如何生成
生成PTK,需要5個必要元素,PMK,ANonce(Nonce 1),SNonce(Nonce 2),Authenticate MAC(MAC 1),Supplicant MAC(MAC 2)。如下圖:

2個Nonce分別是Authenticator和Supplicant生成的隨機數。
這張圖里的輸出包含4個部分,其實Data Encr和Data MIC合起來就是前面提到的TK。而EAPOL Encr/MIC分別對應前面的KEK和KCK。
4次握手的交互過程
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已經裝好,后面的數據可以加密了。
WPA與WPA2在4次握手上的區別
WPA的GTK會在4次握手完成以后進行安裝,而WPA2的GTK則是在4次握手的過程中就進行了安裝;如下圖:
WPA:4-way handshake (PTK)

WPA:2-way handshake (GTK)

WPA2-的4步握手協議

