目錄
2.1第一次握手:Authenticator->Supplicant
2.2第二次握手:Supplicant->Authenticator
2.3第三次握手:Authenticator->Supplicant
2.4第四次握手:Supplicant->Authenticator
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-KEY給AP用於確認,如果認證成功,雙方將安裝(Install)key。而Authenticator中的校驗也是對MIC進行檢測。
什麼是安裝key?就是雙發都決定了以後進行通信時,用什麼Key來做加密(用了商定好的key加密、解密,雙發的溝通才沒有障礙)。Authenticator安裝了PTK,Supplicant端安裝了PTK和GTK。
最後附一下四次握手的流程圖,該圖是從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(萬物互聯技術)