概述
什么是 四次握手?
四次握手是 AP (authenticator) 和 (supplicant)進行四次資訊互動,生成一個用于加密無線資料的秘鑰,
Wifi的連接
讓我們 從一次Wifi連接的程序入手,
用事實說話(先抓個包)

- 這個圖的確是很抽象,可能有點勸退,不過不用擔心,這個圖可以先不看,
- 這個圖只是想說明一點,WIFI建立連接的時候,在空氣中傳播的就是這些資料包,
- 而我們接下來就是要解釋一下為什么要傳這些包,包中都有一些什么比較重要的資料,
再重申一遍,四次握手是為了生成一個秘鑰,
為什么要生成這個秘鑰?
- 當然是為了加密 之后傳輸的資料包啊,不然你在網上沖浪的小秘密不就被發現了!!
WPA認證程序
先上圖(上述抓包圖的精簡版):

先說明一下 上圖的虛線部分(為什么是虛線呢?)
- WPA2 是沒有后續的那四次資料互動的 ,WPA才有,(當 設備同時支持WPA/WPA2時,默認選擇更新一代的 WPA2)
- 首先是 認證 (Authentication):STA 和 AP 互相認證一下對方是不是 802.11設備,
- 當然,主要是 AP 對 STA 做一下鏈路認證,確認其的合法性,
- 其次是 關聯 (Association):關聯總是由STA發起的,實際上關聯就是STA和AP間無線鏈路服務協商的程序,
- AP 在這時就已經將連接數 +1了(后續握手失敗了 再 -1)
- 由 STA 發出請求包(內含 STA 支持的速率、信道、QoS 的能力,以及選擇的接入認證和加密演算法等等)
- 關聯完成之后,就標志著 STA 與 AP 之間已經建立好了 無線鏈路,如果 STA 沒有選擇安全認證機制,STA 獲得 IP 之后就可以直接進行資料互動了,(這就是鏈接數為什么在這就可以 +1 了,)
接下來就是重點了,
四次握手
還是先上圖,后解釋,
大家放心,圖中的文字說明,后續會提取出來,方便大家閱讀,
我錯了,我還是先說一下圖中出現的 “名詞”吧,
- STA:就是客戶端,最常見的一個實體就是——“手機”
- AP:接入點,無線局域網構建者,通常情況下就是——“路由器”
- PSK:STA 與 AP 直接約定的 “暗語” ,用于認證(Authentication)的,通常情況下就是 WIFI密碼,
- SNonce:STA 生成的亂數,
- ANonce:AP生成的亂數,
- PMK:PMK 是由 ESSID + PSK(通俗的密碼) 通過 SHA-1 (一個Hash 演算法) 計算出來的,
- PTK:Pairwise Transit Key,用來加密 AP 和 STA 通訊的單播資料包,AP 與每個 STA 通訊的PTK都是唯一的,
- PTK = PRF(PMK + ANonce + SNonce + Mac(AA) + Mac (SA))
- PRF:是一個隨機的函式
- PMK:Pairwise Master Key,PMK 會駐留在 AP 和 所有的 STA 中,
- MAC(AA/SA):AP 和 STA 對應的 Mac 地址,
- MIC:Message Integrity Check,PTK 的前 16 位,用于校驗訊息的完整性,

STA 和 AP 利用各自已知的 SSID 和 PSK 生成 PMK,
AP 的 SSID 和 PSK 是不會出現問題的;
SSID 也是 在掃描程序中 告知STA的,一般也不會有出入;
但 PSK(Wifi密碼) 就不一定了,存在輸入錯誤的可能,
- 如果STA端 PSK 錯誤,生成的 PMK 必然也會和 AP 生成的有出入,這會導致后續握手失敗,
- 至于為什么失敗,后續解釋,
在第一次握手程序中,STA 利用自己生成的 PMK 和 SNonce 與 從 AP 那里拿到的 ASonce 生成了 PTK,
這里我們為了做區分,將這里的 PTK 叫做 —— sta_PTK,
在第二次握手程序中,AP 利用自己生成的 PMK 和 ANonce 與 從 STA 那里拿到的 SNonce 生成了PTK,
同樣,我們把這里的 PTK 叫做——ap_PTK,
在第二次握手程序中,STA 將 自己生成 MIC 傳給了AP,
MIC 是 sta_PTK 的前16位,它會去和 ap_PTK 的前16位去比對
- 如果校對失敗,則握手失敗,AP 將不會在理 STA 了,
- 如果校對成功,則進行后續確認環節,從這之后,每個資料包中都會包含 MIC,
小細節:大家有沒有發現,重要的 PMK 和 PTK 是不會在資料包中體現的,
總結
說實話,我不太愛寫最后的總結,一般都是 這樣草草了事:
- That’s all , , thank you ! !
但這次還是稍微寫一點吧,因為這次準備的時間比較長,但看上去并不充分,很多細節都被忽略了,只是簡單聊了聊 “四次握手” 這回事兒,說的也不是很詳細,但基本上把大致的結構說清楚了,也加了一些自己的理解,分享了一些自己發現的小細節,
當然,如有紕漏 歡迎指正,
That’s all , , thank you ! ! !
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/396096.html
標籤:其他
下一篇:源代碼防泄密SDC介紹
