2020年6月11日 星期四

Wi-Fi 網路連接的三部曲

Wi-Fi 幾乎是現代人天天都在使用的技術。這裡想看一下,一個裝置(後面用STA來代表,就是STATION的意思)是如何與AP完成連線的。

簡單說,就是三部曲:

1. 掃描(Scanning):就是拿出手機找基地台的動作。
2. 認證(Authentication):在一堆基地台,選擇一個連上網路,通常還會輸入一個AP的密碼。
3. 關聯(Association):連接成功後,紀錄密碼,之後到了這個AP的服務範圍,就會自動連線。

一、掃描

這動作就是尋找基地台(Access Point)。基地台通常有一個名字,就是所謂的SSID。掃描分為主動掃描(Active Scanning)與被動掃描(Passive Scanning)兩種方式。

(一) 被動掃描(Passive Scanning)

這是目前的主流。AP 每 100ms 將 SSID (服務標識) 經由 Beacon (姑且翻譯為信標好了)封包廣播一次,Beacon的傳輸速率是 1 Mbit/s。STA在一開始的時候,會在通道表(Channel List)之間不斷切換,把來自於AP的Beacon收集下來 。這些收到的Beacon,就會存起來,同時在清單上顯示。

實際的行為,就是使用者掃描AP之後,看到一堆基地台的SSID與他的信號強度。有時候,你會等半天都等不到你像要連的AP所發出的Beacon。大致的原因就是運氣不好:

1. STA每次掃到這個AP所使用的CHANNEL時,AP剛好沒有發出 Beacon,於是要下一輪。這種狀況在5GHz最常發生,因為5GHz的頻段比較多。
2. 頻道實在太擁擠,又有人拼命傳Video,所以一直搶不到CHANNEL的使用權。 

Beacon 之中包含這個AP的BSS (基本服務集(Basic Service Set),如果STA決定要與這個AP來連線,就可以應用這個資訊。

(二) 主動掃描(Active Scanning)

即我們的手機(工作站STA)以主動的方式,在每個Wi-Fi的Channel (通道)上發出Probe Request Frame,希望這個AP如果有人收到這個信號可以主動回應。

目前少有人在用了,所以就不說太多了。

 在Linux系統之中,AP是由 hostapd 來負責實現的,QTN 860是使用 Jouni Malinen's hostapd v2.7。目前官網 (http://w1.fi/hostapd) 是v2.9版。 

hostapd 用使用 hostapd.conf 來定義所有對Access Point的所有服務。後面會用專文來介紹。hostapd 還要搭配另外一個專門用來處理密碼的工具 wpa_supplicant ,留到下一節再介紹。這工具也是用 wpa_supplicant.conf來控制。
/script/wpa_supplicant.conf
/script/hostapd.conf
二、認證

當連上基地台時候,如果是第一次連接,必然就會出現輸入密碼的畫面,這個過程叫做:認證(Authentication)。

如果看型錄會發現有Router有一堆不同的加密技術,在Router AP的設定選單當中也會有一堆加密技術可以選擇,這裡就不囉嗦把這些已經被拋棄到歷史長河中的加密技術,都拿出來說一次。就談目前最新的加密技術即可。

這加密技術叫做 WPA2-PSK。

早期的IEEE802.11定義了兩種認證方式:
(1)開放系統認證(Open System authentication);
(2)共享金鑰認證(Shared Key authentication)。

WPA2-PSK屬於第二種,當然這第一種也不用談了,沒人使用。

認證過程由以下兩個步驟組成:

第一,工作站傳送身份宣告和認證請求;
第二,基站應答認證結果,如果返回的結果是“successful”,表示兩者已相互認證成功。

PSK是 Pre Shared Key的簡寫,也有人把它叫做 WPA2-Personal。

WPA2是在802.11i 發佈之後,WI-FI聯盟依照 802.11i 標準,所推出的無線安全標準,基本上
WPA2-PSK =  PSK + AES + CCMP
PSK:Pre Shared Key,預共享金鑰,它是一種802.11身份驗證方式,以預先設定好的靜態金鑰進行身份驗證,此金鑰必須手動進行傳遞,即是我們的手機連線WIFI熱點時需要輸入的密碼。

AES:Advanced Encryption Standard,高階加密標準。AES是美國NIST用來取代DES的加密演算法,具有128、192、256位的金鑰,802.11規定CCMP中的AES使用的是128位金鑰,它的加密塊大小也是128位。

CCMP:Counter modewith Cipher-block chaining Message authentication code Protocol,翻譯成計數器模式及密碼塊鏈訊息認證碼協議。它是基於AES的CCM(CTR with CBC-MAC)模式。CCM是一種通用的模式,它可以使用在任何成塊的加密演算法中。CCM模式使用CTR(Counter Mode)提供資料保密,並採用密碼塊鏈資訊認證碼(Cipher-Block Chaining with Message Authentication Code,CBC-MAC)來提供資料認證和完整性服務。

CCMP加密時由以下四個輸入項組成:

(1) 明文(Plaintext MPDU)
(2) 臨時金鑰(TK)
(3) 封包編號(PN)
(4) 金鑰識別符號(KeyId)

CCMP的加密過程如下圖:

CCMP加密過程
 CCMP加密過程


CCMP Package Format
CCMP Package Format

上圖中

 格式 長度說明 
MAC 是明文(Plaintext MPDU)原封不動傳遞過來的,MAC Header符合802.11MAC 標準。
CCMP 8 ByteCCMP Header由PN0、PN1、Rsvd、KeyID、PN2、PN3、PN4、PN5組成。
KeyID ( 0..3: Rsvd, b5: ExtIV, B5..B6: Key ID)
Data (PDU) >= 1 B是我們需要傳輸的資料。
MIC 8 ByteMIC(Message Integrity Code)是訊息完整性檢驗碼,它是針對一組欲保護資料計算出來的雜湊值,用以防止資料遭人篡改。
 FCS 4 ByteFCS(Frame Check Sequence)是幀檢驗序列,處於802.11網路幀的尾部,用來偵測資料是否損壞,若接收端所計算出的FCS與幀中記載的FCS值不同,則可推斷出該幀已經損壞並將其丟棄。

三、關聯 (Association)

當認證成功之後,STA變與AP進行關聯,在邏輯上等同於在有線網路中插入網線,這時候就可以上網了。

STA送出一個ARP訊號,讓該STA的MAC地址得以跟與AP連線的交換埠(就是無線網卡)形成關聯。

和認證一樣,關聯過程是由STA發起的,有三個步驟:

1、一旦STA與AP完成認證,便可送出關聯請求(Association Request)封包。尚未經過身份認證的工作站,會在AP的答覆中收到一個解除認證(Deauthenticaton)的封包。

2、AP隨後會對關聯請求進行處理。IEEE 802.11標準並未規範如何為允許關聯的條件;所以每台AP的做法也許不同。較常見的方式是考慮封包暫存所需要的空間大小。以Association Request封包中的聆聽間隔(Listen Interval)欄位來推算,大致上可以粗略推算出。

a. 一旦關聯請求獲准,AP就會以代表成功的狀態碼0及關聯識別碼(Association ID,簡稱 AID)來回應給STA。AID本身是數值形式的識別碼,在邏輯上則是用來辨識暫存封包所要傳遞的STA。

b. 關聯請求如果失敗,就只會返回狀態碼,並且中止整個過程。

3、AP開始為STA處理封包。




沒有留言:

張貼留言