WIFI接入之supplicant 四次握手流程

目錄

1.四次握手的目的

2.四次握手分析

2.1第一次握手:Authenticator->Supplicant

2.2第二次握手:Supplicant->Authenticator

2.3第三次握手:Authenticator->Supplicant

2.4第四次握手:Supplicant->Authenticator

3.名詞解釋:


 

1.四次握手的目的

通過握手過程協商出PTK和GTK,關於這兩個名詞的解釋間“名詞解釋”小節。

先說一下PTK的結構如下,它的結構跟加密算法相關,前兩段長度是一樣的,區別在與第3段。舉例說明,當加密算法爲TKIP時,TK字段佔256位,當加密算法爲CCMP時,TK字段爲128位。

TKIP加密算法:

 

CCMP加密算法:

 

KEK和KCK字段是給EAPOL-KEY使用的,即用於四次握手的過程中的加密和完整性校驗。TK字段用於後續的加密。

再看一下EAPOL數據包的結構如下:

本想結合wireshark抓取數據包進行分析,怎奈何自己的電腦不給力,無法抓取到EAPOL數據包。只能獲取到手機端的日誌,如下所示,wpa_supplicant在正常情況下打印很少。可以看到明顯的四次握手過程。

 

立兩個flag:將來能夠獲取到EAPOL數據包時,再瞭解一下它的數據包結果。再者,隨着工作經驗的積累,總結一下常見的握手異常分析方法。

 

2.四次握手分析

2.1第一次握手:Authenticator->Supplicant

在本例中,Authenticator就是路由器,supplicant指的是手機端的supplicant。Authentor生存SNonce,然後將SNonce和自己的MAC地址發送出去。

supplicant接收到後,就可以計算出PTK。怎麼來計算呢?計算公式可以參見名詞解釋小節,計算所用的輸入值:PMK、AA、SPK、ANonce、SNonce都是已經知道的了,帶入相應加密算法的公式,即可以得到PTK。

2.2第二次握手:Supplicant->Authenticator

Supplicant發送SNonce、自己的MAC、MIC給Authenticator。這裏有引入了一個新的名詞,我們在這裏解釋一下,MIC的中文解釋是報文完整性校驗值,怎麼得到的呢?這樣得到的:KCK(PTK中的前128位)加密該EAPOL報文得到的值,我們可以用這樣一個公式來表示:MIC=mic(KCK,EAPOL)。

Authenticator接收到了之後,同樣擁有了計算PTK的所有輸入:PMK、AA、SPK、ANonce、SNonce,所有它也可以計算出PTK的值,然後取出KCK中的部分對EAPOL報文進行校驗,即計算出MIC的值,如果該值與Supplicant計算出的值一致,則說明校驗成功,否則,則說明校驗失敗。

更進一步,校驗失敗,則說明Supplicant端的PMK是錯誤的;

再進一步,PMK錯誤,則說明Supplicant端輸入的密碼是錯誤的。

2.3第三次握手:Authenticator->Supplicant

Authenticator發送的數據包括:組臨時密鑰GTK, WPA KEY MIC。GTK:用於後續更新組密鑰,該密鑰被KEK加密,KEK是PTK的中間128bit,MIC同樣是KCK加密得來。

Supplicant接收到之後,同樣進行MIC的檢測(其實還有數據段的其他檢測,在這裏就不深入了)。如果校驗成功了,Supplicant端就獲取了GTK。

2.4第四次握手:Supplicant->Authenticator

Client 最後發送一次EAPOL-KEYAP用於確認,如果認證成功,雙方將安裝(Installkey。而Authenticator中的校驗也是對MIC進行檢測。

什麼是安裝key?就是雙發都決定了以後進行通信時,用什麼Key來做加密(用了商定好的key加密、解密,雙發的溝通才沒有障礙)。Authenticator安裝了PTKSupplicant端安裝了PTKGTK

最後附一下四次握手的流程圖,該圖是從80211-216文檔中截取的。希望在深入學習後,根據自己的理解再畫一下這個流程,因爲畢竟“紙上得來終覺淺”嘛!

從下圖可以看到,每次EAPOL-KEY的計算算法是有差異的,計算出來的MIC值肯定是不一樣的。

 

3.名詞解釋:

PTK(pairwise transient key):成對傳輸祕鑰,它用於單播數據幀的加密和解密

GTK(group temporal key):組臨時祕鑰,它用於組播數據幀和廣播數據幀的加密和解密,管理幀、控制幀和空數據幀是不用加密的。

AA:client(即手機)的MAC

SPA:AP(即Authentor)的MAC

ANonce:AP產生的隨機值

SNonce:Client 產生的隨機值

PMK:跟認證方式有關,如果是PSK認證方式,PMK是由SSID和密碼導出,公式如下:

PMK=pdkdf2_SHA1(passphrase,SSID,SSID length, 4096), 其中passphrase就是客戶輸入的登錄密碼。

如何計算PTK?

PMK轉化成PTK是通過下面的函數完成的:

PTK<----PRF-X(pPMK,

"Pairwise key expansion", Min(AA,SPA)||Max(AA,SPA)||Min(ANoce,SNoce)||Max(ANonce, SNoce))。X指生成的PTK的長度,X=256+TK_bit,即KCK加KEK的256固定位加上TK位數,不同的加密方式TK_bits不一樣。可查下表:

 

 

如果感覺本文對您有益,請辛苦點個贊吧~
歡迎掃碼關注個人公衆號或者微信搜索wanwuhulianjishu(萬物互聯技術)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章