四次握手

詳細(xì)過程可參考《802.11-2012》11.6.6 4-Way Handshake

WPA2 或者WPA認(rèn)證在association成功前都是基于open的認(rèn)證方式,然后在association以后通過四次握手協(xié)商出PTK和GTK

WPA2-PSK認(rèn)證過程

四次握手的目的:

1.Client生成SNonce并告知AP

2.AP生成ANonce并告知Client

3.AP和Client自己計算出PMK,并通過PMK在四次握手中衍生出PTK,GTK,并在四次握手中驗證對方的PTK和GTK是正確的。

PTK(pairwise transient key):成對傳輸秘鑰,它用于單播數(shù)據(jù)幀的加密和解密

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


四次握手前需要具備的初始化參數(shù)值:

AA:client的MAC

SPA:AP的MAC

ANonce:AP產(chǎn)生的隨機(jī)值

SNonce:Client 產(chǎn)生的隨機(jī)值

PMK


不同的協(xié)議需要不同的方式獲取初始參數(shù)值:

對于PSK和EAP,AA、SPA、ANonce、SNonce這四個值的獲取方式?jīng)]有區(qū)別都是現(xiàn)成的或者隨機(jī)生成的。但是PMK不一樣:

PSK:PMK由SSID和密碼等導(dǎo)出,公式如下

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

EAP:在Radius認(rèn)證成功后,AP和client同時會獲得一個相同的key(MSK, 這個可以參考另外一篇文章802.1x+EAP的認(rèn)證過程.)這個key就是用于派生出PMK.

PMK=L(MSK, 0, 256)


如何計算PTK:

PMK轉(zhuǎn)化成PTK是通過下面的函數(shù)完成的:

PTK<----PRF-X(pPMK, "Pairwise key expansion", Min(AA,SPA)||Max(AA,SPA)||Min(ANoce,SNoce)||Max(ANonce, SNoce))

(1)X指生成的PTK的長度,X=256+TK_bit,即256加上對應(yīng)加密的TK位數(shù),不同的加密方式TK_bits不一樣。可查下表:

不同加密方式對應(yīng)的TK位數(shù)

(2)KCK ← L(PTK, 0, 128),它是PTK的前128bit(0-127),用于計算密鑰生成消息的完整性校驗值.使用方法可參考四次握手流程里面。

(3)KEK ← L(PTK, 128, 128),它是PTK的中間128bit(128–255),用來加密密鑰生成消息。使用方法可以參考四次握手流程

(4)TK ← L(PTK, 256, TK_bits),它是PTK中256bit以后的所有位(256 — 255 + TK_bits),用來對數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行加密。從表中可看出,對于TKIP加密PTK的長度是512bit, 對于CCMP加密PTK的長度是384bit。


四次握手的流程:


四次握手流程

四次握手第一個報文:

發(fā)送方向:AP---->Station

攜帶參數(shù):ANonce

四次握手報文一

第一次我握手后,Client將會獲取到AP的ANonce和AA,這個時候client已經(jīng)擁有了可以計算出PTK的所有參數(shù),通過

PTK=PRF(PMK+ANonce+SNonce+AA+SPA)

Client將會派生出密鑰PTK。生成的PTK前128位是KCK,用于計算密鑰生成消息的完整性密鑰值。

四次握手第二個報文:

發(fā)送方向:Station------>AP

攜帶參數(shù):SNonce和MIC。其中MIC=mic(KCK,EAPOL),計算方法是令這個第二個報文的初始key mic為0,然后使用KCK加密該EAPOL報文得到報文完整性校驗值即為WPA KEY MIC的值。

四次握手報文二

第二次握手后,AP將會從client處得到SNonce和已經(jīng)計算好的MIC, 這個時候AP擁有了所有能計算出PTK的參數(shù),然后AP將進(jìn)行同樣的計算得到PTK, 然后用得到的前128位對EAPOL報文進(jìn)行完整性校驗,看得到的值是否和收到報文中的WPA KEY MIC的值一致,如果一致,則驗證成功,說明client端擁有的PMK是正確的,否則判定Client端擁有的PMK錯誤,整個握手就此停止。

AP對于第二個包的處理流程:

1.檢查重播計數(shù)器看是否和第一包相關(guān)聯(lián),如果不是AP將默默丟掉報文

2.生成PTK

3.根據(jù)生成的PTK,得到前128位為KCK,然后計算EAPOL報文得到MIC值,如果不相等,AP將默默丟掉報文

4.如果MIC是相等的,且沒有打開roaming,AP將會check 第二個EAPOL報文中攜帶的RSNE信息和Association request報文中的RSNE信息是否一致。

? ? i)如果不完全一致,AP發(fā)送MLME-DEAUTHENTICATE去終止這次關(guān)聯(lián)

? ? ii)如果完全比配,AP開始構(gòu)造四次握手的報文三。

四次握手的第三個報文:

發(fā)送方向:AP------>Station

攜帶參數(shù):組臨時密鑰GTK, WPA KEY MIC

GTK:用于后續(xù)更新組密鑰,該密鑰被KEK加密,KEK是PTK的中間128bit,MIC同樣是KCK加密得來

GTK被包含于KEY DATA中.

KEY DATA中包含的數(shù)據(jù)有:AP在Beacon或者Probe Response中包含的RSNE,GTK,如果管理幀保護(hù)同樣被協(xié)商了,也包含IGTK KDE。。。。。

四次握手報文三

Client收到報文三后

1. 如果key Reply Counter的值已經(jīng)被使用或者報文三中的ANonce和報文一種的不一樣,則Client默默丟棄該報文

2.利用KEK解密查看報文三中的RSNE, 如果沒有開啟Roaming,對比Station收到的AP發(fā)送的Beason或者Probe Response的RSNE,如果不匹配,取消關(guān)聯(lián)AP,如果信息中有提供第二個RSNE,Client使用第二個RSNE中指定的密鑰套件或者取消認(rèn)證

3.檢查MIC,同第二個報文檢查流程一樣,如果不一致,將默默丟棄第三個報文

步驟2和3的目的都是為了驗證AP擁有正確的PMK

4.更新最后看到key replay Counter 的值

5.構(gòu)造第四個報文

四次握手第四個報文:

發(fā)送方向:Station------>AP

攜帶參數(shù):WPA KEY MIC

四次握手報文四

Client 最后發(fā)送一次EAPOL-KEY給AP用于確認(rèn),如果認(rèn)證成功,雙方將安裝(Install)key,Install的意思是指使用它們來對數(shù)據(jù)進(jìn)行加密。

AP在收到第四個報文后

1.檢查Key Replay Counter的值,如果不是四次握手中使用的那個,就默默丟棄這個報文,如果是繼續(xù)下面的流程

2.檢查MIC,通報文二,三的檢查方法一直,如果不一樣默默丟棄該報文,如果一樣,將告訴802.11 MAC去使用新的PTK發(fā)送或者接受MPDU

3.AP更新KEY Replay Counter的值,以方便需要rekey的時候能使用新值

Controlled Port Unlocked

雙方完成認(rèn)證以后,authenticator的控制端口將會被打開,這樣802.11的數(shù)據(jù)幀將能夠正常通過,而且所有的單播數(shù)據(jù)幀將會被PTK保護(hù),所有的組播數(shù)據(jù)以及廣播數(shù)據(jù)將會被GTK保護(hù)。

Supplicant和Authenticator就此完成密鑰派生和組對, 雙方可以正常進(jìn)行通信了


后續(xù):

每個STA都有一個獨立的PTK,所有的STA和AP共同擁有一個相同的GTK。如下圖所示:


AP和station的秘鑰存儲關(guān)系

比如我們比較常見的TKIP和CCMP混合加密,前者用于兼容舊的設(shè)備,后者用于規(guī)范新的加密, 一般來說,為了兼容不同版本的設(shè)備, GTK會使用TKIP加密(因為GTK是所有設(shè)備共享的), PTK既可以是TKIP加密,也可以是CCMP加密。如下圖所示:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。