關於4次握手及握手之前PMK的生成的理解

關於成對密鑰與組密鑰的結構
  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四次握手和PTK

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已經裝好,後面的數據可以加密了。

 

發佈了235 篇原創文章 · 獲贊 112 · 訪問量 57萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章