無線局域網安全(二)————TKIP加密

Temporal Key Integrity Protocol (TKIP) 臨時祕鑰完整性協議

TKIP是用來解決WEP容易被破解而提出的臨時性加密協議,它並不是802.11推薦的強制加密協議, 簡單來說,TKIP主要是用來加強WEP加密,這個升級主要體現在算法上,這一點很重要,爲什麼這麼說呢?因爲使用TKIP加密,並不需要進行硬件的升級,也就是說只要你的硬件支持WEP加密,那麼同時也能夠支持更安全的TIKP加密,同過軟件升級來達到安全係數提高的目的,這種做法更加的平滑,也更容易被市場接受。

但是CCMP不同,它必須要更新的硬件支持才能使用,所以TKIP成了從WEP過渡到CCMP的中間產物,按照標準來說,如果你的設備可以用TKIP加密,就不要用WEP加密,如果可以支持CCMP加密,就不要用TKIP。所以在瞭解CCMP加密前,我們有必要先了解一下TKIP。


基於WEP,TKIP主要做了以下改動:

(1)發送端會使用加密算法計算一個MIC(message integrity code,消息完整碼),這個MIC是通過計算 SA, DA,priority 和plaintext data而來,TKIP會將MIC追加到MSDU的後面,如果MSDU + MIC 的size過大,需要分片,那麼只要將 MSDU + MIC 看成一個整體 MSDU‘ 進行分片就好了。也就是說,TKIP只要在MSDU進行分片前將MIC追加到MSDU後面,形成一個新的MSDU就好了,分片的事,它不管,那是MPDU的事情。接收端收到MPDU分片以後,會先將它們重組成一個MSDU,然後進行MIC的校驗。

(2)TKIP雖然包含了MIC,但仍然不夠,所以TKIP實現了countermeasures功能,它可以限制可能的僞裝和學習被攻擊的信息

(3)TKIP使用一個per-MPDU TKIP sequence counter (TSC) 來理順MPDUs的發送,如果接收端收到的MPDUs不符合順序(比如序號沒有遞增),那麼將會被丟棄.TKIP會像WEP IV和附加 IV一樣 對TSC進行編碼。

(4)TKIP使用一個密碼混合功能,結合TK,TA和TSC生成一個WEP seed。

下面我們來看一下TKIP加密的流程圖:

TSC0-TSC5: 他們是由TSC派生而來的,在TKIP中有一個TSC計數生成器,它會爲每一個MPDU遞增的生成一個6字節的TSC序列號,TSC0-TSC5則分別代表其中的每個字節TK(temporal key):臨時密鑰,它是從PTK或者GTK派生而來的,而PTK也就是相當於WEP加密中的由SSID和pairewise計算出來的keyplaintext MSDU: 未加密的MSDU,也就是要發送的playload

MIC Key: 它是從TK中取出來的指定位,文檔中規定

A STA shall use bits 128–191 of the temporal key as theMichael key for MSDUs from the Authenticator’s STA to the Supplicant’s STA.
A STA shall use bits 192–255 of the temporal key as the Michael key for MSDUs from the Supplicant’s STA to the Authenticator’s STA.

關於802.11的MAC有4個,分別是DA(destination address),SA(source address),RA(receiver address),TA(transmitter address), 他們在報文中的對應關係是如下:

(BSSID可以看作是AP的MAC地址,在基礎結構型結構中它往往是TA)

TA(Transmit Address):一般是指AP的mac地址

SA(source address):指發送端的mac地址

DA(destination address):指接收端的MAC地址


從流程圖來看,其實TKIP相對於WEP主要是多了左半部分,右半部分的內容其實大同小異;從MPDU的內容來看,主要多了 extender IV和 MIC兩個部分。下面是基本過程:

(1)MIC是用來彌補WEP不能夠抵禦僞裝攻擊、位翻轉攻擊、分片攻擊、重定向攻擊和模仿攻擊。這裏需要先區分一下MIC算法和MIC碼,MIC算法是Michael算法的別名,MIC碼是 message integrity code的縮寫,兩者不要混淆。MIC碼是使用destination address (DA), source address (SA), MSDU priority, and the entire unencrypted MSDU plaintext data這些參數,通過Michael算法計算的出來的結果。當生成MIC後,TKIP算法會將它追加到MSDU payload後面。

MIC的長度是8個字節,分別被標記爲M0-M7, MIC只有20bit能夠起到安全作用導致它很容易受到brute-force攻擊,所以802.11標準定義了TKIP countermeasures 程序:

關於MIC的計算過程和TKIP countermeasures 工作原理,我們後面分析。

(2)MIC追加到MSDU尾部後,我們就可以將它們看成一個新的 MSDU’,如果有開啓分片功能,而且符合分片要求,就會對MSDU’進行分片,比如分成兩片,那麼plaintext MSDU和 MIC就可能分別組裝在兩個 MPDUs中進行發送, 接收端會將這些MPDUs進行重組,生成原來的 MSDU’ (Plaintext MSDU + MIC)。所以從這樣來看,幀的分段對我們MDSU的加密的影響不大的,只要將(Plaintext MSDU + MIC)看出一個整體就好了。

但是值得注意的是,如果一個MSDU因爲過大需要在3個MPDU中進行發送,使用TKIP加密時,他們都會使用一個相同的extended IV,但是每一個MPDU會分別使用一個單調遞增的TSC。

(3)MSDU經過封裝,生成沒有加密的 plaintext MPDU,同WEP一樣經過計算生成 ICV,並將它追加到 plaintext MPDU的尾部。
(4)TKIP通過phase1和phase2兩個key mixing階段生成WEP seed。

(5)TKIP將上面得到的WEP IV和ARC4 key作爲WEP seed通過ARC4算法生成keystream(請對照WEP加密)

(6)最後將keystream,plainte MPDU,ICV,IV(TSC0,TSC1 Key ID),extended IV, MIC進行異或計算生成最後用於發送的Encrypted MPDU

下面是經過TKIP加密以後生成的加密MPDU:

從圖中可以看到,該幀主要由802.11 MAC Header(前32個字節)、Frame Body 和CRC三個部分構成,Frame Body部分主要由以下5部分組成:

(a)IV/Key ID
(b)Extended IV
(c)MSDU payload
(d)MIC
(e)ICV


(1)第一部分是802.11 MAC Header(前32個字節),可以看出頭部並沒有作任何改動

(2)IV/Key ID : 它的長度是4個字節,和WEP加密中的IV長度一樣,但是其中的內容並不一樣,它的前三個字節分別是TSC1,WEP Seed和 TSC0 (TSCn後面分析);最後一個字節分別由Reserved(5bit),EXT IV 1bit,Key ID 2bit; EXT IV是用來指定是否傳送後面的Extended IV,對於WEP來說不需要這部分,所以設爲0,對於TKIP加密來說,Extended IV是必須的,所必須設爲1;Key ID需要根據幀封裝的加密算法來設,它一般都是由MLMESETKEYS.request 原語完成,它是key index縮寫,是從WEP繼承而來的,在WEP中可以用於指定使用第幾個key,但是在TKIP中一般設爲0,在沒有key mapping key時候,不能夠使用<RA,TA> pair 來鑑別要用哪個key,這時會用到這個默認的key 0。

TSC5是最高有效位,而TSC0是最低有效位,因爲TSC0-TSC5是從6個字節長的TSC派生而來的(MSB是Most Significant Bit的縮寫,最高有效位。在二進制數中,MSB是最高加權位。與十進制數字中最左邊的一位類似。通常,MSB位於二進制數的最左側,LSB位於二進制數的最右側)。

WEP Seed是(TSC1 | 0x20) & 0x7f的結果
(3)Extended IV: 它的長度4個字節,它是從48-bit TKIP sequence counter (TSC2 through TSC5)派生而來的;從圖中可以看出IV/Key ID和Extended IV字段都是沒有加密的,我們也可將這兩個字段一共8個字節看成TKIP的頭部

(4)接下來是加密的payload MSDU

(5)MSDU後面是MIC,8個字節,當它追加到MSDU後面時,就成了MSDU的一部分,用於後面的MPDU分片

(6)Frame Body的最後是Integrity Check Value (ICV),4個字節,它是通過計算整個MPDU而來的。MSDU upper-layer payload和 MIC及ICV一樣,都有進行加密

(7)幀的最後一部分是CRC,它是4個字節的FCS,它是通過計算全部的幀頭和幀體部分得來的(calculated over all the fields of the header and frame body )

由於額外的IV(4字節),Extended IV(4字節),MIC(8字節)和ICV(4字節),一共20個字節。也就是說TKIP加密額外的給數據幀體添加了20個字節,那麼TKIP加密的數據幀中MSDU‘ 的最大值將會達到2324字節(802.11規定一個幀中MSDU的最大size是2304字節)。


下面是使用TKIP加密時,omnipeer抓包工具抓的兩個加密包,該工具使用的是小端decode,我們來分析一下:
IV=0x002016,  其中TSC0=0x16, WEP seed=0x20, TSC1=0x00

Reserved=0b00000,has Ext IV=0b1, Key ID=0x00

Ext IV=0x0000 0000

Encrypted Data一共60個字節,其中MIC佔8個字節,ICV佔4個字節

從抓包來看,兩個數據幀的主要區別是TSC0一個是0x16,一個是0x17,符合TSC遞增的規律

下面我們來了解一下MIC

MIC的設計主要是彌補WEP加密存在的一下攻擊:

— Bit-flipping attacks
— Data (payload) truncation, concatenation, and splicing
— Fragmentation attacks
— Iterative guessing attacks against the key
— Redirection by modifying the MPDU DA or RA field
— Impersonation attacks by modifying the MPDU SA or TA field

因爲MIC追加到MSDU後面,我們一般會將它和MSDU看作一個整體,叫做MSDU-with-MIC,然後將這個整體用於後面的MPDU分片,如下圖:

在發送時,MSDU經過TKIP加密生成MSDU+MIC,然後將MSDU+MIC用於MPDUs分片;在接收時,將MPDUs進行重組,得到MSDU+MIC,對MSDU+MIC解密後得到需要的MSDU。

TKIP加密中,MIC的計算主要包括以下元素:

— The MSDU DA
— The MSDU SA
— The MSDU Priority (對於支持Qos功能的數據幀纔有這個字段)
— The entire unencrypted MSDU data (payload)

關於MIC的具體計算方法可以參考《802.11-2010》中的“11.4.2.3.3 Definition of the TKIP MIC"章節

下面介紹一下TKIP countermeasures程序

其實MIC只是基於WEP提供了一種較弱的攻擊保護,它缺少一個檢測和預防的機制,不能阻止字典式的暴力破解,而TKIP countermeasures 就是用來解決這樣的問題。下面是TKIP countermeasures的基本原則:

Logging:MIC的校驗失敗意味着一次主動的攻擊,應該記錄到log裏面,那麼管理員就可以跟蹤這個現象

60 Second Shutdown: 如果在60s內有兩次MIC校驗失敗,那麼STA和AP都要等待60s後再接收TKIP幀

New Temporal Keys:如果有發現攻擊現象,應該更新PTK和GTK

在驗證MIC前,接收端首先需要校驗MPDUs的FCS,ICV和TSC,如果其中有任何一個FCS,ICV或者TSC值小於或等於回覆計數器中的值,都會被丟棄。這樣就減少了不必要的MIC校驗失敗事件發生。

下面是countermeasures的工作流程,因爲比較簡單,就不詳述了(請參考802.11-2010文檔 “11.4.2.4 TKIP countermeasures procedures” 節)。

從上面可以看出,通過MIC和countermeasures的結合,可以抵禦大多數WEP加密中不能處理的攻擊。一是MIC通過加入DA和SA參數,可以確保STA和AP的唯一性,也就是說每一個STA和AP交互的過程中MIC都是惟一的,不像WEP加密那樣開放。二是通過countermeasures保證在對這個唯一性進行攻擊時進行檢測,並進行採取預防措施。

802.11-2010中還定義了Phase1 和Phase2的計算算法,如果想了解它的具體實現或者編程方法,可以查閱"11.4.2.5 TKIP mixing function"節,下面簡單瞭解一下TSC的內容:

(1) 每一個MPDU都應該有一個惟一的TSC

(2) 每一個發送端都應該維護多個48比特的TSC計數器,比如一個用於PTKSA,一個用於GTKSA,一個用於STKSA,具體個數根據實際情況支持的加密而定

(3) TSC是一個自動累加的48bit計數器,初始值是1,每次TK初始化或者刷新都會重置這個值

(4) 在WEP IV字段中有攜帶48-bit TSC中的16 LSBs (TSC0和TSC1),它用於TKIP混合加密中的(Phase 2, STEP3) ,剩下的TSC部分(TSC2-TSC5)在Extended IV field進行攜帶
(5) 每一個接收端也要爲PTKSA,GTKSA和STKSA分別維護一個TKIP TSC回覆計數器

(6) 在MIC校驗成功和ACK處理被記錄以後,TKIP回覆檢測纔會觸發,因此只有MIC檢測通過以後TKIP TSC計數器纔會加一。

(7) 對於每一個PTKSA,GTKSA和STKSA,接收端都應該分別爲每個幀的優先級維護一個TSC計數器,而且接收端的TSC計數器會根據接收到的MPDU中的TSC來決定下一個發送幀中的TSC值。關於TSC和優先級的關係,可以看文檔

(8) 如果接收端收到一個MPDU,它的TSC值不符合順序,那麼應該給這個密鑰增加dot11RSNAStatsTKIPReplay值

(9) 對於MSDUs,如果發送時有使用Block Ack特性,會優先根據Block Ack receiver operation (described in 9.21.4) 重新排列MSDUs


關於TKIP的解密過程這裏就不分析了,如果有理解加密過程,解密過程應該也不難,它的主要輸入是TA,TK,TSC和已加密的MPDU

這篇文章主要對TKIP加密進行了分析,主要參考的是《802.11-2012》和《CWSP Certified Wireless Security Professional Official Study Guide - Exam PW0-204》文檔,對其中的詳細過程,如果只是站在開發的角度,其實可以不用瞭解太詳細,不管是加密過程還是解密過程,我們調用函數時,知道要傳入什麼參數,然後它會得出什麼返回就夠了,畢竟函數內部的實現都是開源的。

後面將繼續分析我們比較關注的CCMP加密,它也是802.11文檔推薦並且在新的設備中必須強制支持的一種加密方式。

————————————————
版權聲明:本文爲CSDN博主「奔跑的路」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lee244868149/article/details/52701703

發佈了235 篇原創文章 · 獲贊 112 · 訪問量 57萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章