IEEE 802.11 所制定的是技術性標準 ,Wi-Fi 聯盟所制定的是商業化標準 , 而 Wi-Fi 所制定的商業化標準基本上也都符合 IEEE 所制定的技術性標準。 WPA(Wi-Fi Protected Access) 事實上就是由 Wi-Fi 聯盟所制定的安全性標準 , 這個商業化標準存在的目的就是為了要支持 IEEE 802.11i 這個以技術為導向的安全性標準。而 WPA2 其實就是 WPA 的第二個版本。 WPA 之所以會出現兩個版本的原因就在于 Wi-Fi 聯盟的商業化運作。 我們知道 802.11i 這個任務小組成立的目的就是為了打造一個更安全的無線局域網 , 所以在加密項目里規范了兩個新的安全加密協定 – TKIP 與 CCMP 。其中 TKIP 雖然針對 WEP 的弱點作了重大的改良 , 但保留了 RC4 演算法和基本架構 , 言下之意 ,TKIP 亦存在著 RC4 本身所隱含的弱點。因而 802.11i 再打造一個全新、安全性更強、更適合應用在無線局域網環境的加密協定 -CCMP 。所以在 CCMP 就緒之前 ,TKIP 就已經完成了。但是要等到 CCMP 完成 , 再發布完整的 IEEE 802.11i 標準 , 可能尚需一段時日 , 而 Wi-Fi 聯盟為了要使得新的安全性標準能夠盡快被布署 , 以消弭使用者對無線局域網安全性的疑慮 , 進而讓無線局域網的市場可以迅速擴展開來 , 因而使用已經完成 TKIP 的 IEEE 802.11i 第三版草案 (IEEE 802.11i draft 3) 為基準 , 制定了 WPA 。而于 IEEE 完成并公布 IEEE 802.11i 無線局域網安全標準后 ,Wi-Fi 聯盟也隨即公布了 WPA 第 2 版 (WPA 2) 。所以: WPA = IEEE 802.11i draft 3 = IEEE 802.1X/EAP + WEP( 選擇性項目 )/TKIP WPA2 = IEEE 802.11i = IEEE 802.1X/EAP + WEP( 選擇性項目 )/TKIP/CCMP ( 有些無線網路設備中會以 AES 、 AES-CCMP 的字眼來取代 CCMP) 在有些無線網路設備的規格中會看到像 WPA-Enterprise / WPA2-Enterprise 以及 WPA-Personal / WPA2-Personal 的字眼 , 其實 WPA-Enterprise / WPA2-Enterprise 就是 WPA / WPA2 ; WPA-Personal / WPA2-Personal 其實就是 WPA-PSK / WPA2-PSK, 也就是以 ”pre-share key” 或 ” passphrase” 的驗證 (authentication) 模式來代替 IEEE 802.1X/EAP 的驗證模式 ,PSK 模式下不須使用驗證服務器 ( 例如 RADIUS Server), 所以特別適合家用或 SOHO 的使用者。
1 WPA的技術實現:
WPA的密鑰生成、管理系統結合了認證和數據私密功能,具有較強的健壯性,在STA和AP之間認證完成且四次握手成功后,各類密鑰就產生了。在ESS網絡中,RSNA定義了兩類密鑰層次結構: 1) Pairwise Key層次結構,用于保護單播流量(Unicast Traffic),支持CCMP或TKIP,通過將發送地址、接收地址與Pairwise Key的綁定,可以在解密(Decapsulation)過程中,有效地檢測出攻擊者偽造的MPDU,即允許接收端的STA檢測MAC欺騙及數據偽造,而GTK則不具備這樣的能力; 2) Group Key層次結構,用于保護多播(Multicast Traffic)和廣播流量(Broadcast Traffic),由單個密鑰組成。 在ESS中,AP的BSSID就是IEEE 802.1X 認證器的AA(MAC 地址),而請求者的MAC地址(SPA)也就是STA的MAC地址,在RSN中,使用CCMP的STA在每個<TA, RA>對中,應該至少支持一個Pariwise Key,同時可以用<TA ,RA>來標識Pariwise Key。 在復雜網絡中(ESS與IBSS混合),當AP同時與使用WEP(用共享WEP密鑰)的STA以及使用CCMP或TKIP(用Pairwise Key)的STA通信時,使用WEP的STA使用Default Key 0~3 作為shared WEP Key,問題在于,若AP設置成使用WEP Default Key 0與使用WEP的STA通信,那些不支持WEP Default 0但支持TKIP或者CCMP的STA將會在RSN Capabilites field里頭指定為No Pairwise subfield,由此,AP也會配置成與WEP-STA及No Pairwise-STA(No Pairwise的使用僅為了在RSNA中支持WEP)通信,也就是說四次握手的時候AP不會安裝Pairwise Temporal Key,而是在所有類型的通信流量中使用WEP Default Key 0。 在復雜網絡中,支持TKIP的STA都應該支持一個Pairwise Key,無論這個Pairwise Key是通過Key mapping Key(由PTK映射)方式獲取,還是通過mapping to Default Key 0(由Default Key 0映射)的方式獲取,這樣,AP就會使用Pairwise Key用于保護AP與STA之間的單播流量,如果支持Key mapping Key的方式,那么<TA ,RA>可以用來標識pariwise Key,如果不支持,則幀中的密鑰索引(Key index)將會置0,也就是說會使用Default Key 0保護通信流量。 同時不支持TKIP和WEP Default Key 0的STA通過設置RSN IE的No Pairwise域來廣播這一信息,在四次握手的message3中,AP將會清除install bit通知STA不要安裝Pairwise Key,相應地,AP會發一個WEP shared Key給STA作為Default Key 0使用,這個Key將會用于STA與AP之間單播幀的傳遞。 在TSN中,支持CCMP的STA將會同時支持Pairwise Keys和WEP Default Key 0,當配置使用CCMP時,STA協商為No Pairwise subfield是無效的。 密鑰層次的描述用到兩個函數: l L(Str, F, L):從Str的左邊開始,抽取從L到L+F-1的F bits; l PRF-n:產生n bits輸出的偽隨機函數。 2 Pairwise Key層次結構 Pairwise Key層次結構如下圖所示: 根據采用的密鑰管理協議(AKMP)的不同,PMK的獲取有兩種情況: l 802.1X+EAP模式下,PMK從MSK中派生而來,取MSK的前256 bits (bits 0–255)用來計算PMK :PMK =L(MSK, 0, 256),也就是說,在這種模式下,MSK的長度至少要是256bits,且PTK的的生命周期應該短于PMK的生命周期(lifetime),其中生命周期由認證服務器(AS)決定:lifetime = Session-Timeout + dot1xAuthTxPeriod 或者取MIB里頭的變量: lifetime = dot11RSNAConfigPMKLifetime。 l WPA-PSK模式下,一個256bits的PSK將會直接配置到STA和AP中,或者將pass-phrase(如用戶輸入的密碼)配置到請求端(Supplicant)與認證器端(Authenticator),關于PSK的配置方法不屬于IEEE802.11i標準的內容,其中常用的方法是系統與用戶交互來完成PSK的配置(且具體實現中,應該為每一對STA之間的通信生成一個PSK),例如,如果配置了pass-phrase,則256bit的PSK將會通過下面方式派生,并當作PMK使用,利用PMK便可以派生出PTK,流程如下圖所示:
l SNonce 是由Supplicant端(即STA端)生成的一個偽隨機數; l ANonce 是由Authenticator端(即AP端)生成的一個偽隨機數。 其中,pdkdf2_SHA1( ),SHA1_PRF( )在前述章節有所介紹。根據密鑰套類型(TKIP/CCMP),我們將PTK的肢解進行進一步細分:
l KCK,用于4-Way Handshake中對數據原始性認證進行保障,也就是MIC Key; l KEK用于4-Way Handshake和Group Key Handshake中的EAPOL-Key幀的加解密; l TEK,也就是TK,用于數據幀的加解密; l TMK則是TKIP中的MIC校驗Key。 最后,作者對Pairwise Key層次結構中不同密鑰資源在不同信息安全體系中的使用進行了一個總結:  3 Group Key層次結構 GMK的獲取在前述章節有所介紹,GTK作為一個臨時密鑰(TK)應該是一個偽隨機數,也就是說AP中的GMK(Group Master Key )應該周期性地改變,Group Key層次結構如下圖所示:
l Group nonce (GNonce) 是一個由IEEE 802.1X認證器生成的偽隨機數; l AA是IEEE 802.1X 認證器MAC 地址; 根據密鑰套選擇的類別,GTK被肢解為不同長度的TK(Temporal Key)用于保護多播與廣播通信(Multicast / Broadcast Communication),也就是說,GTK被用于一個認證器端與多個請求端之間,其中,TKIP的X = 256, CCMP的X = 128 ,WEP的X = 40或104。 類似地,作者也對Group Key層次結構中不同密鑰資源在不同信息安全體系中的使用進行了一個總結: 4 PeerKey Key 層次結構 PeerKey Key層次結構如下圖所示:
由于PeerKey Key用在IBSS網絡中,所以下面只進行簡單介紹: l SMK為256bits; l STKs 用于Initiator STA與Peer STA之間,即用于IBSS中STA與STA之間; l TK 用于保護Initiator STA與Peer STA之間的單播通信(Unicast Communication); l INonce 是一個由Initiator STA產生的偽隨機數; l PNonce 是一個由Peer STA 產生的偽隨機數; l SKCK 用于保護4-Way STK Handshake中的認證數據; l SKEK 用于保障4-Way STK Handshake 中EAPOL-Key幀的保密性。
中國的保密技術,已經被丟棄了: 無線局域網鑒別與保密基礎結構WAPI(WLAN Authentication and Privacy Infrastructure)是中國針對IEEE 802.11協議中的安全問題,提出的擁有自主知識產權的WLAN安全解決方案。WAPI已由ISO/IEC授權的IEEE Registration Authority審查獲得認可,并分配了用于該機制的以太類型號(IEEE EtherType Field)0x88b4,這是我國在這一領域向ISO/IEC提出并獲得批準的唯一的以太類型號。 WAPI由無線局域網鑒別基礎結構WAI(WLAN Authentication Infrastructure)和無線局域網保密基礎結構WPI(WLAN Privacy Infrastructure)組成,其中,WAI采用基于橢圓曲線的公鑰證書體制,無線客戶端STA和接入點AP通過鑒別服務器AS進行雙向身份鑒別;WPI采用國家商用密碼管理委員會辦公室提供的對稱分組算法SMS4進行加解密,實現了保密通信。 WAPI的協議流程總共有十個步驟,如下圖所示:
WAI鑒別基礎結構在BSS中,當STA關聯或重關聯至AP時,必須進行相互身份鑒別。若鑒別成功,則AP允許STA接入,否則解除其鏈路驗證。整個鑒別過程包括證書鑒別、單播密鑰協商與組播密鑰通告。 下圖給出了與WAI相關的STA的狀態轉換圖,同802.11狀態圖相比,該狀態圖將原有的“鑒別”改為了“鏈路驗證”:
若在上圖基礎上再增加專用于處理WAI過程的“鑒別狀態”。這樣,STA總共需要維護三個狀態變量: l 鏈路驗證狀態; l 關聯狀態; l 鑒別狀態。 由此決定了STA將會有四種本地狀態: l 狀態1:鏈路未驗證、未關聯、未鑒別狀態; l 狀態2:鏈路已驗證、未關聯、未鑒別狀態; l 狀態3:鏈路已驗證、已關聯、未鑒別狀態; l 狀態4:鏈路已驗證、已關聯、已鑒別狀態。 其中STA和AP之間的WAI鑒別過程處于狀態3,各個狀態中傳輸的幀類型也分為控制幀、管理幀、數據幀,具體可以參考標準。 WAPI定義了若干新的名詞,考慮到全文描述的規范性,WAPI中各名詞對比介紹如下: l 鑒別請求者系統,類似于802.11的認證請求端(STA); l 鑒別器系統,類似于802.11的認證端(AP); l 鑒別服務系統,類似于802.11的認證服務器(如RADIUS); l 鑒別器實體(AE):駐留在AP中,在接入服務前,提供鑒別操作; l 鑒別請求者實體(ASUE):駐留在STA中,需通過鑒別服務單元ASU進行鑒別; l 鑒別服務實體(ASE):駐留在ASU中,為鑒別器和鑒別請求者提供相互鑒別; l 基密鑰(BK):用于導出單播會話密鑰的密鑰,基密鑰由證書鑒別過程協商得到或由預共享密鑰導出,類似于PMK; l 基密鑰安全關聯(BKSA),證書鑒別過程的結果或預共享密鑰導出的結果,類似于PMKSA; l 消息鑒別密鑰(MAK),提供密鑰管理協議數據源鑒別和完整性校驗的密鑰,類似于KCK; l 組播會話密鑰(MSK),用于保護站點發送的組播MPDU的隨機值,組播會話密鑰由組播主密鑰導出,類似于GTK; l 組播會話密鑰安全關聯(MSKSA),組播密鑰通告過程的結果,類似于GTKSA; l 通告主密鑰(NMK),用于導出組播/站間加密密鑰和組播/站間完整性校驗密鑰的輔助密鑰。在組播密鑰通告過程中,通告主密鑰為組播主密鑰;在站間密鑰通告過程中,通告主密鑰為站間主密鑰,類似于GMK; l 站間密鑰(STAKey),用來保護基礎結構模式下一個基本服務集中站與站之間的直接通信的對稱密鑰,類似于STK; l 站間密鑰安全關聯(STAKeySA),基礎結構模式下基本服務集中的站與站之間單播密鑰協商的結果。一個站間密鑰安全關聯包含一個站間密鑰,類似于STKSA; l 單播會話密鑰(USK),由基密鑰通過偽隨機函數導出的隨機值。它分為4個部分:單播加密密鑰、單播完整性校驗密鑰、消息鑒別密鑰、密鑰加密密鑰,類似于PTK; l 單播會話密鑰安全關聯(USKSA),單播密鑰協商過程的結果,類似于PTKSA。 WAPI中添加ASUE、AE、ASE的概念是為了考慮WAPI應用的靈活性,WAPI主要的用戶使用場景有: l 企業級用戶應用場景:有AP和獨立的AS(鑒別服務器),內部駐留ASU(鑒別服務單元),實現多個AP和STA證書的管理和用戶身份的鑒別; l 小公司和家庭用戶應用場景:有AP,ASU可駐留在AP中; l 公共熱點用戶應用場景:有AP,ASU駐留在接入控制服務器中; l 自組網用戶應用場景:無AP,各STA在應用上是對等的,采用共享密鑰來實現鑒別和保密。
2、WAI原理 類似于802.1X,WAI采用的三元結構和對等鑒別訪問控制方法也是一種基于端口認證方法,如下圖所示:
鑒別器的受控端口處于未鑒別狀態時,鑒別器系統拒絕提供服務,鑒別器實體利用非受控端口和鑒別請求者通信。受控與非受控端口可以是連接到同一物理端口的兩個邏輯端口,所有通過物理端口的數據都可以到達受控端口和非受控端口,并根據鑒別狀態決定數據的實際流向。 l 受控端口:只有當該端口的鑒別狀態為已鑒別時,才允許協議數據通過,只有通過鑒別的STA才能使用的AP提供的數據端口為受控端口,受控端口狀態由系統鑒別控制參數確定; l 非受控端口:協議數據的傳送不受當前鑒別狀態的限制,AP提供STA連接到鑒別服務單元ASU的端口即為非受控端口。 一個重要概念是鑒別服務單元ASU,在整個WAI鑒別過程中,ASU作為第三方起著提供鑒別服務的作用。此外,ASU還為STA和AP提供證書的頒發、認證、吊銷等功能。一個ASU可以管理一個或多個BSS,在同一個ASU的管理范圍內,STA與AP之間需通過ASU實現證書的雙向認證。 STA與AP之間的鑒別數據分組利用以太類型字段為0x88B4的WAPI協議傳送,AP與ASU之間的鑒別數據報文通過端口號為3810的UDP套接字傳輸。在WAI的整個過程中,涉及到數種加/解密和消息摘要等算法,具體可參考標準文檔,限于篇幅,文章不深入詳細介紹WAI的技術細節。
3、WPI原理 WPI-SMS4 的MPDU格式如下:
上圖中各字段的含義可以參考標準文檔。 WPI的封裝過程為: l 利用完整性校驗密鑰與數據分組序號PN,通過工作在CBC-MAC模式的校驗算法對完整性校驗數據進行計算,得到完整性校驗碼MIC; l 利用加密密鑰和數據分組序號PN,通過工作在OFB模式的加密算法對MSDU數據及MIC進行加密,得到MSDU數據以及MIC密文; l 封裝后再組幀發送。 WPI的解封裝過程為: l 判斷數據分組序號PN是否有效,若無效,則丟棄該數據; l 利用解密密鑰與數據分組序號PN,通過工作在OFB模式的解密算法對分組中的MSDU數據及MIC密文進行解密,恢復出MSDU數據以及MIC明文; l 利用完整性校驗密鑰與數據分組序號PN,通過工作在CBC-MAC模式的校驗算法對完整性校驗數據進行本地計算,若計算得到的值與分組中的完整性校驗碼MIC不同,則丟棄該數據; l 解封裝后將MSDU明文進行重組處理并遞交至上層。 其中,加解密算法采用的是SMS4算法(128bits密鑰長度、分組長度),MIC計算采用的是SMS4-CBC-MAC模式,數據加密采用的是SMS4-OFB模式,分別介紹如下: 
|