四次握手

詳細(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自己計(jì)算出PMK,并通過PMK在四次握手中衍生出PTK,GTK,并在四次握手中驗(yàn)證對(duì)方的PTK和GTK是正確的。

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

GTK(group temporal key):組臨時(shí)秘鑰,它用于組播數(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ù)值:

對(duì)于PSK和EAP,AA、SPA、ANonce、SNonce這四個(gè)值的獲取方式?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同時(shí)會(huì)獲得一個(gè)相同的key(MSK, 這個(gè)可以參考另外一篇文章802.1x+EAP的認(rèn)證過程.)這個(gè)key就是用于派生出PMK.

PMK=L(MSK, 0, 256)


如何計(jì)算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加上對(duì)應(yīng)加密的TK位數(shù),不同的加密方式TK_bits不一樣??刹橄卤恚?/p>

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

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

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

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


四次握手的流程:


四次握手流程

四次握手第一個(gè)報(bào)文:

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

攜帶參數(shù):ANonce

四次握手報(bào)文一

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

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

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

四次握手第二個(gè)報(bào)文:

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

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

四次握手報(bào)文二

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

AP對(duì)于第二個(gè)包的處理流程:

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

2.生成PTK

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

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

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

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

四次握手的第三個(gè)報(bào)文:

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

攜帶參數(shù):組臨時(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。。。。。

四次握手報(bào)文三

Client收到報(bào)文三后

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

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

3.檢查MIC,同第二個(gè)報(bào)文檢查流程一樣,如果不一致,將默默丟棄第三個(gè)報(bào)文

步驟2和3的目的都是為了驗(yàn)證AP擁有正確的PMK

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

5.構(gòu)造第四個(gè)報(bào)文

四次握手第四個(gè)報(bào)文:

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

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

四次握手報(bào)文四

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

AP在收到第四個(gè)報(bào)文后

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

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

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

Controlled Port Unlocked

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

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


后續(xù):

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


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

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容