無線網路WPA安全機制剖析

 

HungLin Chou

hlchou@mail2000.com.tw
 

 

一,前言

 

        隨著無線網路的日趨普及與大量應用,無線傳輸的安全性,儼然成為個人與企業用戶關注的焦點。由於無線網路技術被大量應用在生活與辦公室環境裡,因此提高了駭客入侵與破解的動機,對於個人隱私與企業機密資料的保密性上,就有其需要探究與加強的部分。

 

        早期無線網路是透過WEP(Wired Equivalent Private)與固定的WEP Key作為加密機制,這樣的加密方式主要是透過RC4配合 64 bits128 bits Key兩種不同長度的WEP Key作為加密保護,由於原本無線網路在WEP Key所採用的IV值都是以24 bits的長度,而且只有IV值是變動的,之後 40 bits 或是 104 bitsKey都是固定不變的。 也就是說對於要入侵網路的駭客而言,基本上只要可以累積相同的IV值封包,就可以進行對IV值之後 40 bits 或是 104 bits加密Key的破解,進而實現入侵無線網路的的企圖。因此,過去企業採用無線網路時,由於WEP Key的內容都是固定的,為了避免惡意的入侵,網管人員必須每隔一段時間通知使用者更換加密的WEP Key,進而降低被入侵的風險。

 

        由於原本無線網路安全性問題逐漸浮現,因此IETF也著手制訂 IEEE 802.1X RADIUS Usage Guidelines " 802.1x Radius之間AAA的認證機制建立一套標準流程,也進一步的提供無線網路使用者端連線動態更換WEP Key的能力,並且Access Point可以為每個無線網路使用者端提供不同的WEP Key值。但由於無線網路的加密機制仍舊是採用原本固定WEP Key的加密方式,也就是說雖然可以透過802.1xEAPOL-Key提供動態設定WEP Key的機制,但在下一次透過EAPOL-Key更換WEP Key之前,無線網路傳輸的兩端都會透過同一把WEP Key進行加密,對於惡意入侵無線網路的人而言,如果設定動態更新WEP Key的時間週期過長,也不足以確保無線網路的安全性。進一步的,由於802.1x透過EAPOL-Key更新WEP Key的機制,並沒有一個Handshaking的流程,所有更換WEP Key的動作都是透過Access Point告知無線網路使用者端,因此如果設定更新WEP Key的週期很短,在更多使用者加入使用並且頻繁更新WEP Key的情形下,也容易發生使用者端無法正確接收EAPOL-Key導致WEP Key更新錯誤連線中斷的問題。

 

        有鑑於此,IEEE 802.11i針對無線網路原本所具備的弱點加以補強,但由於IEEE 802.11i的標準尚未制訂完成,在WIFI的推動下,制訂了 “WIFI Protected Access” 標準,以IEEE 802.11i Draft為藍圖,去建構出一個符合現今需求,具備更進一步安全性的無線網路環境。

 

        目前802.11i主要定義的加密機制可以分為TKIP (Temporal Key Integrity Protocol) AES,其中TKIP就是目前WPA 1.x (WPA/SSN)主要採用的加密機制

 

    TKIP主要的設計是相容於原本802.11的硬體產品,透過韌體與軟體升級來提高加密的安全,一樣是透過RC4加密,但是可以讓每個封包都提供不同的加密Key值。原本的WEP加密使用24-bit的IV值,目前的TKIP使用48-bit IV值。如此大幅減低IV值重複的問題。
 
         因此WPA可以說是基於802.1x與EAP提供更高的使用者認證與安全能力,雖然目前的WPA TKIP已經比起原本單純的WEP加密更為可靠,但這只是目前WPA第一個版本的方案,在未來WPA的版本中,將進一步採用AES做為傳輸加密機制。
 

        WPA TKIP相較於過去WEP加密,主要的不同在於過去是直接把收到的WEP Key作為加密的運算值,可是WPA TKIP並不是如此,而是將所收到的Key值,重新運算出加密的金鑰,在透過計算出來的加密金鑰進行後續加密的動作。將下來筆者將進一步的說明TKIP的加密機制

 

二,TKIP 加密機制與概念

 

目前的 WPA 1.x TKIP 相較於原本的WEP加密機制,多了以下的能力

        (1)48-bitsIV

        (2)TKIP Per-Packet Key加密機制è每個Packet都產生不同加密的Key

        (3)MIC(Message Integrity Code)<Michael>è訊息完整性編碼機制

 

        如下圖()所示,為原本WEP透過RC4加密的示意圖,每一個送出去的封包都會包括24-bits變動的IV值,加解密的兩端透過固定的 40-bits 104-bitsWEP Key24-bitsIV值,形成 64-bits 或是 128-bitsRC4加密Key值,用來加解密無線網路傳輸資料。

(), WEP RC4 加密

 

        如下圖()所示,在TKIP加密的機制下,會透過兩個階段產生之後要透過RC4加密的Key,也就是說基本上TKIP的加密機制與128-bits WEP Key 是一樣的,只是在於產生Key的方式不同,主要的差別就是WEP Key是把使用者輸入的WEP Key IV 值直接作為加密的RC4 Key值,可是對於TKIP而言使用者所輸入的TKIP Key與封包的IV值都只是產生最後加密所用128 bits的參數,而不是直接把輸入或是夾帶的IV值拿來加密,相對的也就提高他的安全性。更可為每一個封包不同加密的128 bits Key值,提供最完整的安全性。   

 

        而原本用來加密的48 bits IV值,被分為兩個部分(32 bits16 bits),分別在Phase 1 Phase 2的程序中參與加密Key的產生。

 

()TKIP Per-Packet加密示意圖

 

        除了產生Key的方式更為安全以外,還多了對於傳送封包完整性的確認,如下圖()所示,在目前的WPA中還加入了 MIC(Message Integrity Code) 用來確認訊息完整性的編碼機制,透過在每一個封包的後面加入一個MIC值,來確認彼此封包的完整性,比起過去只單純的透過CRC值來確認封包的正確性,又提高了可靠度。

 

 

() 802.11 WPA下的封包格式

 

        基本上MIC的運作機制是,送端在送出封包前,把未加密過的資料內容透過Michael演算法,求得一個64 bitsMIC值,對收端來說,把收到的封包解密後,依樣針對資料內容透過Michael演算法計算一次MIC值,如果一致就表示封包正確無誤,如果不一致,就表示封包在傳輸過程中發生錯誤。

 

 

 

        如下圖()所示,為透過TKIP加密把封包送出的流程,

 

()TKIP封包加密

 

 

如下圖()所示,為收到TKIP封包後,解密的流程

 

()TKIP封包解密

 

        透過以上的說明,各位應該已能體會WPA機制與過去無線網路加密的不同,尤其針對每個封包運算不同RC4加密Key值的改變,讓有意入侵無線網路的駭客,更難以透過監聽無線網路傳輸的方式入侵使用者與企業網路。

 

三,WPA運作與安全問題

 

        目前WPA所定義的Access Point必須要能夠支援

(1)   WEP加密(64 and 128 bits)

(2)   TKIP 加密

(3)   802.1x + EAP Authentication Capability

 

也就是說,具備WPA能力的 Access Point將會需要同時支援WEP TKIP 加密的能力,為了讓使用者端與Access Point端都可以瞭解彼此所能支援的加密機制與功能,所以一個支援WPA標準的Access Point在發出Beacon Frame與回應Probe Response時,就必須要在所傳回的Frame中填入Information Element,也就是說透過Information Element所定義的OUI欄位,使用者端可以知道目前所屬網域Access Point所具備的加密機制,再根據使用者端本身的設定選擇對應的方式加入Access Point

 

而對於Access Point端而言,每一個使用者端的網卡要連上該網域時亦會發出 Association Request Access Point端就可以透過 Association Request Frame中的Information Element中所具備的OUI欄位, 知道目前連上Access Point的使用者端所具備的加密機制與能力, 再根據本身是否支援來決定是否允許使用者連線上來。

 

如下圖()所示,Access Point會透過Beacon Probe Response Frame傳遞Information Element,而每個Supplicant根據Access Point所具備的能力,再透過Access Request送出自己的Information Element,如果Access Point決定要接受該Supplicant的連線要求,就會送出成功訊息。

 

 

() Information Element Frame

 

目前WPA Information Element包括以下OUI 設定參數

 

Encryption Type

OUI Setting

NONE

0x000x500xf20x00

WEP 64bits

0x000x500xf20x01

TKIP

0x000x500xf20x02

AESCCMP

0x000x500xf20x03

AESWRAP

0x000x500xf20x04

WEP 128bits

0x000x500xf20x05

 

 

WPA 認證程序(Coordination of Authentication Process)Key的交換

 

在過去的802.1xKey的程序中,使用者端並沒有回應的機制,也就是說在過去的Access Point透過802.xEAPOL-Key送出換WEP Key的命令時,由於使用者端並沒有回應的機制,如果說這一個EAPOL-Key的封包遺失了,那將會造成使用者端與Access Point端無法進行同步的換WEP Key的動作,如下圖()所示

 

 

()EAPOL-Key Procedure

 

首先在完成完整的EAP認證後,最後Access Point會送出EAPOL-EAP Success的訊息,之後就是連續兩次分別設定使用者端Session Key(每個使用者端專屬的WEP Key)Group Key(全部使用者端共用的WEP Key)EAPOL封包。

 

對於Access Point而言,與每個各別的使用者端通訊使用的是Session Key,由於每個使用者端的Session Key都不同,所以可以確保每個不同使用者端一定程度的安全機制,而對於要廣播給在這區域內所有使用者的資訊,就可以透過Group Key傳遞。

 

如下圖()所示,由於EAPOL的封包,是屬於MAC Layer的封包,並不像上層的TCP封包一樣,有既定的封包重送機制,如果送給使用者端的EAPOL封包內容是錯誤的,或是封包遺失,都很可能會造成兩端換WEP Key的動作無法順利的接續下去,而造成使用者端的網路連線中斷。

 

()EAPOLEAP封包

 

 

不過在,WIFI Protected Access針對無線網路安全的標準定義之後,在換Key的動作部分定義了不同的協議過程,讓換Key的流程可以有一個完整與安全的協議過程,基本上WPA定義的換Key可以分為兩個部分,

 

(1)   Unicast Key è屬於每個使用者端專屬的Key

(2)   Group Key è屬於同一個Access Point涵蓋區域內,所以使用者共用的Key

 

Unicast Key 4-way Handshake

 

        IEEE 802.11i的標準中,要交換一個Unicast Key需要經過四次的Handshake動作,而這也是目前WPA所遵循的標準,如下圖()所示

()4-way Unicast key handshake

 

        對於使用者端與Access Point而言,並不會把最後用來加密的Key透過封包傳送,而是由Access Point端先傳送一個任意產生的32 bytes ANonce給使用者端,使用者端同樣任意產生32 bytes SNonce,在根據Access Point端傳送的ANonce32-bytes PMK(Unicast Master Key)加以計算,就可以得到最後要加密用的Key,其中也包含之後EAPOL-Key用來計算MIC值的Key

 

        接下來使用者端傳送EAPOL-Key回給Access Point,其中包含SNonce與計算封包的MIC值,Access Point就會透過計算MIC值與來確認這個封包的正確性。

 

對於WPA-RadiusUnicast Key而言,PMK就是透過EAP認證成功後,由Access Point 根據 Radius Server 認證的結果,所計算出的MS-MPPE-Recv-Key(32 bytes)。而對於WEP-Pre-Shared Key的方式而言,PMK 就是使用者預先輸入Key值,所轉換的32 bytes Pre-Shared Key

 

        在這階段交換訊息的流程中,會透過ANonceSNonce產生一個512 bitsKey值,其中這把512 bits Key值又可以分為以下幾個部分

 

TKIP Key Hierarchy Pair-wise keys

0-127

EAPOL-Key MIC Key

128-255

EAPOL-Key Encrypt Key

256-383

TKIP 128 bits based Key

384-511

64 bits

TX MIC Key

64 bits

RX MIC Key

 

        如下圖()所示,我們可以看到經過Unicast 4-way Handshake後,所產生的幾種Key值,與他們在 Key 計算後的長度與位置

 

 

()PTK Key

 

在介紹Unicast Key的交換後,接下來我們進一步的說明交換Group Key的流程

 

Group Key 2-way Handshake

 

        Group Key主要是透過2次的Handshake來完成交換,如下圖(十一)所示

 

(十一)2-way Group key handshake

 

       

如下圖(十二)所示,我們可以看到經過Group 2-way Handshake後,所得到長度為256 bits Group Key。在Handshaking的過程中,Group Key 存在於 EAPOL-KeyKey欄位,必須要透過計算Unicast Key時所產生的 128-bits Encrypt Key 來解回(128-255 bits)

 

(十二)GTK Key

 

如下圖(十三)所示,是原本802.1x Standard所制定的EAPOL-Key 封包,我們可以發現從原本EAPOL-Key封包的欄位來看,並沒有包括進行Handshaking所需的機制(例如:ACK Field),也因此原本802.1x 所制訂的EAPOL-Key,並不能完全滿足無線網路在普及之後的大量使用情況。

(十三)802.1x所定義的EAPOL-Key Frame

 

 

如下圖(十四)所示,則是根據IEEE 802.11i Draft 所制定的EAPOL-Key 封包,相對於802.1x所定義的EAPOL-Key而言,具備了更多足以滿足大量應用下,安全與可靠性機制

 

(十四)802.11i所定義的EAPOL-Key Frame

 

 

        在處理 WPA EAPOL-Key封包時,我們必須依據每一個封包的Key Information欄位(16-bits)來判斷每個EAPOL-Key封包所代表的意義,例如:設定Unicast or Group Key、封包是否包含MIC確認欄位、EAPOL-Key是否需要回應與這次運算的WPA加密Key是否載入,如下圖(十五)所示

 

(十五)Key Information 說明

 

        如下表()所示,針對每一個Key Information欄位的說明

 

()Key Information 說明

Bit Range

Description

0-2

Key descriptor version type

3

Key type

(1= Unicast key 0 = Group key)

4-5

Key Index

(0 for Unicast key1-3 for Group Key)

6

Install

Unicast Key