无线局域网安全(二)————TKIP加密

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lee244868149/article/details/52701703
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文档推荐并且在新的设备中必须强制支持的一种加密方式。

猜你喜欢

转载自blog.csdn.net/hbcbgcx/article/details/90774965