靜態WEP企圖同時解決802.11無線網絡安全的兩個問題。它即打算提供身份驗證以限定擁有特定密鑰方能進行網絡訪問,也想要提供機密性以在數據經過無線鏈路時予以加密。然而,它在這兩方面的表現都不是特別好。
802.1X是一個框架,它是IEEE采用IETF的可擴展身份驗證協議(Extensible Authentication Protocol,簡稱EAP)制定而成,802.1X為鏈路層提供了身份驗證的機制。靜態WEP只是對擁有加密密鑰的機器進行身份驗證,而802.1X則允許網關人員對用戶而非機器進行身份驗證,同時可以確保用戶連接至合法,經過授權而非竊取個人數據的冒牌網絡。
1. 可擴展身份驗證協議(EAP)
EAP是一種簡單的封裝方式,可以運行於任何的鏈路層,EAP的基本架構如下圖所示,在設計上是為了能夠運行於任何的鏈路層以使用各種身份驗證方式。
圖1 EAP的架構
1.1 EAP的封包格式
EAP的封包格式如下圖所示,EAP並不是非得運行在PPP之上,下圖的封包可以通過任何一種幀來承載。
圖2 EAP的封包格式
-
Code
Code(類型代碼)長度為1個字節,代表EAP封包的類型,封包的Data(數據)字段必須通過此字段來解析
-
Identifier
Identifier(標識符)用來匹配請求與響應,重傳時會使用相同的identifier number,新的重傳則使用新的identifer number
-
Length
Length字段記載了整個封包的總字節數,包括Code、Identifier、Length以及Data這4個字段
-
Data
Data字段長度不定,可能不占任何字節,Data字段如何解析完全取決於Code字段的值
1.2 EAP的請求與響應
EAP的交換操作由請求與響應構成,如下圖所示。Code字段的值為1代表請求,2代表響應,Data字段會攜帶一種數據,可細分為type identifier code以及associated data。
圖3 EAP的請求與響應封包的格式
-
Type
Type(類型)字段代表請求或響應類型。每個封包只能使用一種類型,當無法接受某個請求時,對方可以送出一個NAK來提議使用不同的類型。大於等於4的Type字段值代表身份驗證方式
-
Type-Data
Type-Data(類型-數據)字段長度不定,必須根據每種類型的規則加以詮釋
類型代碼字段對應的消息如下表所示:
Type | Message | 含義 |
---|---|---|
1 | Identity | 認證者通常會以身份類型作為最初的請求,簡寫為Request/Identity,表示認證者試圖建立某種用戶名稱以便進行身份驗證,EAP客戶端程序會響應一Response/Identity封包,封包的Type-Data字段包含了用戶名稱 |
2 | Notification | 認證者可以使用Notification類型傳送消息給用戶,用戶的系統隨后可將Request/Notification中的消息顯示給用戶看,例如密碼即將過期或者賬號被鎖定的原因。EAP客戶端會響應一個簡單的確認 |
3 | NAK | null acknowledgment主要用來建議使用新的身份驗證。認證者會在送出的質詢(challenge)消息中指定身份驗證所使用的類型代碼,身份驗證類型的代碼為4及以上的數字,如果用戶的系統不支持質詢所使用的身份驗證類型,可以恢復NAK,NAK的Type-Data字段包含器所建議使用的認證類型 |
表1 EAP的請求與響應數據的Type字段的取值和含義
1.3 EAP身份驗證方式
EAP會把證明用戶身份的操作授權給一個稱為EAP method(一組驗證用戶身份的規則)的附屬協議,下表列出了一些EAP method以及它們的類型代碼。
類型代碼 | 身份驗證協議 | 說明 |
---|---|---|
4 | MD5 Challenge | EAP中類似CHAP的認證方式 |
6 | GTC | 原本打算與RSA SecurID之類的令牌卡(token card)一起使用 |
13 | EAP-TLS | 以數字證書(digital certificate)相互認證 |
21 | TTLS | 隧道式TLS,以TLS加密保護較弱的身份驗證方式 |
25 | PEAP | 防護型EAP,以TLS加密保護較弱的EAP方式 |
18 | EAP-SIM | 以移動電話的用戶識別模塊(Subscriber Identity Module,簡稱SIM)卡進行身份驗證 |
29 | MS-CHAP-V2 | Microsoft的經加密的密碼身份驗證,見冗余Windows域 |
表2 802.1X身份驗證常用的EAP認證方式(EAP method)
在EAP交換結束之后,用戶不是認證成功,就是認證失敗。一旦認證者判斷出整個交換過程已經完成,就會發出一個EAP-Success或EAP-Failure幀,以結束整個EAP交換過程,如下圖所示。
圖4 EAP認證成功與失敗的幀
1.4 EAP交換范例
EAP交換范例如下圖所示,這並不是無線網絡中“實際”可見的交換過程,因為其中用到了一些未曾廣泛部署的協議。舉這個例子只是為了讓讀者對EAP協議的運作方式有基本的概念。EAP交換過程是一系列的步驟,從認證請求開始,以成功或失敗信息結束。
圖5 簡單的EAP交換過程
可擴展性既是EAP最大的優點也是最大的缺點。可擴展性讓協議能夠在有新的需求福顯示開發新的功能。正因為可擴展性,EAP已經從保留PPP協議編號的方式轉變為無線局域網安全防護的基礎。不過要正確部署EAP可能不容易,因為要選擇正確的協議選項之前必須先理清一大堆問題。EAP之所以具有靈活性,關鍵在於它本身只是一個框架,當新的需求浮現時就可以設計出新的認證方式,就算是用於無線局域網也不成問題。
2. 802.1X:網絡連接端口的認證
在鏈路層采用認證機制並不是什么新鮮事,網絡連接端口的認證在撥號訪問服務器上已經使用了多年,IEEE采用了PPP認證協議並開發了基於局域網絡的版本,最后出爐的標准稱為802.1X,“基於端口的網絡訪問控制”(Port-Based Network Access Control)。
2.1 802.1X的架構及相關術語
-
申請者(supplicant)
尋求訪問網絡資源的用戶機器
-
認證者(authenticator)
網絡訪問由認證者(authenticator)控制,它扮演着傳統撥號網絡中訪問服務器的角色,申請者與認證者在規范說明書中稱為端口認證實體(Port Authentication Entity,簡稱PAE)。
-
認證服務器
認證者只負責鏈路層的認證交換過程,並不維護任何用戶信息。任何認證請求均會被轉送至認證服務器進行實際的處理
申請者與認證者之間使用802.1X所定義的EAPover LAN(簡稱EAPOL)協議,在后端則是通過RADIUS封包來傳遞EAP,如下圖所示。
圖6 802.1X的架構
2.2 EAPOL的封裝格式
EAPOL的基本幀格式如下圖所示。
圖7 EAPOL的幀格式
EAPOL幀的組成字段如下:
-
MAC標頭
根據鏈路層協議使用相應的標頭。
-
Ethernet type
Ethernet type(以太網類型)字段包含了長度為2個字節的type code(類型代碼),EAPOL的類型代碼為88-8e。
-
Version
第一版標准化於2001年版的802.1X,第2版規范與802.1X-2004。
-
Pocket Type
為了讓EAP能夠適用於基於連接端口的LAN環境,EAPOL加入了一些消息類型,下表列出了所有的封包類型及其說明。
封包類型 名稱 說明 0000 0000 EAP-Packet 包含了一個經過封裝的EAP幀,大部分的幀均屬於EAP-Packet幀 0000 0001 EAPOL-Start 申請者可以主動送出EAPOL-Start幀,不必等候來自認證者的質詢
信息。認證者會送出一個EAP-Request/Identity幀作為響應0000 0010 EAPOL-Logoff 當某個系統不再需要使用網絡時,便可發出一個EAPOL-Logoff幀,
讓連接端口重新回到未授權狀態0000 0011 EAPOL-Key EAPOL可用來交換加密密鑰信息 0000 0100 EAPOL-Encap-
sulated-ASF-Alert警告標准討論(Alerting Standards Forum,簡稱ASF)
定義了一種方式,可讓警告信息通過此類型的幀傳送給
未經授權的連接端口 -
Packet Body Length
該字段用來計算Pocket Body字段的長度。
-
Packet Body
除EAPOL-Start與EAPOL-Logoff消息外,此字段會出現於所有的EAPOL幀中。EAP-Packet幀所封裝的是一個EAP封包,EAPOL-Key幀所封裝的是一個密鑰,而EAPOL-Encapsulated-ASF-Alert幀所封裝的則是一段警告信息。
3. 802.1X與無線局域網
802.1X為任何局域網,包括無線局域網,提供了一個用戶認證的框架。802.11網絡中的802.1X交換范例如下圖所示。
圖8 802.11網絡上典型的802.1X交換
上圖802.11網絡上的802.1X交換步驟如下:
- 申請者通過Association Request/Association Response關聯至802.11網絡;
- 申請者發出一個EAPOL-Start消息,開始進行802.1X交換過程。這個步驟並非必要;
- “正常的”EAP交換過程開始。認證者發出一個EAP-Request/Identity幀,申請者以EAP-Response/Identity幀進行回復,此幀隨后被轉換為Radius-Access-Request封包送給RADIUS服務器;
- RADIUS服務器判斷需要使用哪個類型的認證,並在送出的EAP-Request信息中指定認證方式的類型。EAP-Request被封裝於Radius-Access-Challenge封包中送給接入點。接入點收到封包后即將EAP-Request傳遞給申請者。EAP-Request信息通常會被表示成EAP-Request/Method,其中Method代表所使用的EAP認證方式;
- 申請者從用戶方面取得響應,然后返回EAP-Response。認證者會將此響應轉換為送給RADIUS的Radius-Access-Request封包,針對質詢信息所做的響應則存放於數據字段中;
- 既然RADIUS服務器送出一個Radius-Access-Accept封包允許對方訪問網絡,因此認證者會發出一個EAP-Success幀並且授權申請者使用連接端口;
- 收到EAP-Success封包的確認(ACK)后,接入點會立即使用EAPOL-Key消息將密鑰分配給申請者;
- 一旦申請者安裝好密鑰,就可以開始傳送數據幀來訪問網絡;
- 當申請者不再需要訪問網絡,就會送出一個EAPOL-Logoff消息,使連接端口恢復成未授權狀態。
EAPOL-Key幀讓接入點能夠傳送密鑰給客戶端,密鑰交互幀只有在認證成功之后才會傳送,這樣可以避免密鑰信息外泄。EAPOL-Key幀也可以用來定期動態更新密鑰。