關於成對密鑰與組密鑰的結構
1.成對密鑰
PMK 是基本元素
然後通過 supplicant MAC(SA), supplicant nouces(SN),authenticator MAC(AA),authenticator nouces(AN)進行擴展獲得PTK (Pairwise Transient Key) 成對傳輸密碼.
公式如下:
PTK=SHA1_PRF(PMK,Len(PMK),"Pairwise key expansion",MIN(AA,SA)||MAX(AA,SA)||MIN(AN,SN)||MAX(AN,SN))
公式參考了:http://blog.csdn.net/gueter/article/details/4812822
PTK 有兩種格式:TKIP,和CCMP.其中TKIP是動態WEP所用RC4+Michael完整性校驗的組成;CCMP是全新的組密碼AES方式
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有)
2.組密鑰
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
其中並沒有密鑰確認密鑰,和密鑰加密密鑰,因爲密鑰交換是以成對EAPOL密鑰,來分配密鑰的
更新成對密鑰的4次握手
在更新成對密鑰前需要進行4次握手,成對密鑰是用來加密單播幀的(就是AP與工作站之間的通訊幀),4次握手就是爲了完成密鑰的交換,成對密鑰只有1個,通過交換讓雙方都知道
在WPA-PSK中 PMK=PSK 由ssid,和密碼等導出,公式如下:
PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096)
所以第1次Autenticator 將自己的nonce 傳給supplicant ,這時候supplicatn 就可以計算PTK了.接下來supplicant 將自己的nonce和第1次和網絡關聯是所取得的安全參數傳給Authenticator,這樣Authenticator 獲得了supplicant 的nonce ,就可以計算PTK了.注意 第2步的整個消息是用EAPOL密鑰確認密鑰(KCK)來進行完整性校驗值校驗的,如果authenticator根據已經算出的PTK中的KCK對整個消息進行完整性校驗未成功,握手就失敗了這時消息還不能通過KEK加密,是因爲還沒有計算出PTK
到了第3步雙方的PTK都已經就緒,這時authenticator將一個消息傳送給supplicant,次消息包含成對密鑰的序列號,(可能是生成TK的次數?)並且包含GTK(組臨時密鑰),注意這時authenticator已經可以生成GTK了.GTK 通過EAPOL KEK加密,然後整個消息通過KCK來認證
第4步supplicant 再次確認,並告訴authenticator已經接收到密鑰生成消息,可以開始使用TK了,次消息通過KCK認證(因爲是ACK,不需要再用KEK加密了)
更新組密鑰握手:
1.Authenticator送出GTK,這個GTK是利用前面成對密鑰4次握手的成果PTK中的EPAOL KEK 來加密,EAPOL KCK 來驗證
2. supplicant 送出ACK消息,此消息通過KCK 驗證
PTK的生成元素中的PMK獲得
1. WPA-PSK
PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096),其中passphrase,SSID ,是身份驗證前authenticator,和supplicant都應該知道的
2. 802.1X+EAP中
PMK =L(MSK, 0, 256)
MSK 需要通過802.1X交換獲得
其中EAP-Request/Method 中Method 表示EAP認證的方式,如下:
4 - MD5 Challenge EAP 中類似CHAP的認證方式
6 - GTC 原本打算與RSA SecurID之類的token card 一起使用
13 - EAP-TLS 以數字證書相互認證
21 - TTLS 隧道式TLS;以TLS加密保護較弱的身份驗證方式
25 - PEAP 防護型EAP;以TLS加密保護較弱的EAP驗證方式
18 - EAP-SIM SIM卡方式進行身份驗證
29 - MS-CHAP-V2
Method 之後如果認證成功,authenticator會發出EAP-Success表示授權使用連接端口,再接下來AP就可以立即使用EAPOL-Key消息將MSK發給supplicant,以後就和WPA-PSK一樣用MSK最終導出PTK(MSK,PMK就是PTK的密鑰生成密鑰)
其中EAPOL(EAP over lan)的幀格式如下
-------------------------------------------------------------------------------
| 802.11 header | SNAP header | Ethernet Type (88-8E) | Version |Packet Type |
-------------------------------------------------------------------------------
EAPOL 是EAP 的擴展,除了P156相關EAP信息,EAPOL還加入了一些額外的消息讓EAP 能夠適用於基於連接端口的LAN環境
EAPOL 消息的類型:
EAP-Packet 包含了1個經過封裝的 EAP幀
EAPOL-Start 申請者可以主動送出EAPOL-Start幀,不必等候來自認證者的質詢
信息,認證者會送出1個 EAP-Request/Identity幀作爲響應
EAPOL-Logoff 當某個系統不再需要使用網絡時,便可以發出1個EAPOL-Logoff幀
讓連接端口回到未授權狀態
EAPOL-Key EAPOL 可以用來交換加密密鑰信息 (0000 0011)
EAPOL-Encap-sulated-ASF-Alert
WPA/RSN使用四次握手(4-Way Handshake)的方式生成所需的密鑰。
作用
四次握手通過一系列的交互,從PMK(Pairwise Master Key)生成PTK(Pairwise Transient Key)。PMK來自MSK(Master Session Key),是MSK的前256位,32字節。
本文的主要目的是講PTK,所以暫時忽略PMK和MSK。
PTK的內容
PTK包含3個部分,KCK(Key Confirmation Key),KEK(Key Encryption Key),TK(Temporal Key)。
PTK的總長度根據加密方式不同而不同:
當加密方式是TKIP時,PTK長512位,按順序分別爲KCK佔128位,KEK佔128位,TK佔256位。
當加密方式是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。
四次握手的交互過程
下面的交互僅僅是一個流程,對內部的一些數據的處理就不細說了。
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已經裝好,後面的數據可以加密了。