WIFI基础入门--802.11--TKIP/CCMP/RSN--8
1.临时密钥完整性协议(TKIP)
第一种广为使用的新式链路层加密协议是临时密钥完整性协议(Temporal Key Integrity Protocol,简称TKIP)。开发TKIP的主要动机是为了升级旧式基于WEP硬件的安全性。通常,具备WEP功能的芯片组都支持RC4加密机制。既然加密的重责任由硬件负责,那么只要通过软件或固件,就可以达到升级的目的。TKIP保留了WEP的基本结构与操作方式,因为它原本就是一个设计来升级基于WEP的解放方案的软件。
1.1 TKIP与WEP的差异
为了克服WEP易遭受攻击的弱点,TCIP整合了许多新协议的功能。尽管保留了WEP的基于架构与操作方式,不过TKIP为WEP最易遭受功能的弱点另外绑定了"安全带"。
1.2 密钥层次结构与自动密钥管理
不同于WEP直接使用单一主密钥的做法,TKIP使用到了多个主密钥。最后用来加密帧的密钥是从这些主密钥派生而来。另外,TKIP也提供密钥管理操作,使得主密钥的更新可以在安全的情况下进行。
1.3 每帧生成密钥
虽然TKIP保留WEP所使用的RC4帧加密机制,不过为了防范针对弱WEP密钥的攻击,它会为每个帧(从主密钥)派生出特有的RC4密钥。为每个帧准备独特密钥的过程称为密钥混合。
1.4 序列号计数器
为每个帧编序列号即可识别出次序错乱的帧,如此便能防范所谓的重放攻击,亦即攻击者先拦截有效封包,等候一段时间再予以重传的攻击。
1.5 新的消息完整性校验
TKIP以一种比较牢靠的称为Michael的完整性校验散列算法,取代WEP所使用的线性散列算法。Michael较为牢靠,探测伪造帧也更加容易。此外,源地址受到完整性校验的保护,就可以探测出称来自特定来源的伪造帧。
1.6 消息完整性校验失败的对策
设计时,TKIP是为了实现到现有的硬件,因此不免有所限制。Michael可能遭受主动式攻击而被攻陷,因此TKIP包含了一些对策以控制主动式攻击可能造成的损害。
1.7 初始向量的使用与密钥混合
WEP的主要破绽在于WEP的随机种子是由初始向量(initialization vector,简称IV)以及WEP密钥所构成。既然随机数种子是由IV与密钥串联而成,IV本身就泄漏了大部分的密钥结构。如此一来,攻击者就可以观察IV的重复使用情况,进一步挖掘出用以加密帧的相同密钥流。以24-bit的IV而言,大约可以容纳1600万个帧。在比较繁忙的网络上,这个数目并不算多。更糟的是,此IV空间受限于当时所使用的密钥。如果使用静态WEP,则IV空间是由网络上所有工作站所共享。为了防范针对初始向量的攻击,TKIP将IV的长度从24位倍增为48位。如此一来,初始向量空间即由1600万增加为281万亿,可以有效防止IV空间在密钥的使用期限内耗尽。TKIP同时以密钥混合的方式来防范针对WEP的攻击。通过密钥混合,用来加密个别帧的RC4密钥就会各自不同。在TKIP中,各个帧均会被特有的RC4密钥加密。换句话说,密钥混合进一步扩展了初始向量空间。
1.8 序列号计数器与重放攻击保护
除了空间变大之外,TKIP初始向量本身也扮演着序列号计数器的角色。每次安装新的主密钥,初始向量/序列号计数器就会被重设为1。每传一个帧,序列号计数器就会随之累加1。
为了防范重放攻击,TKIP会保留来自各工作组的最近序列号。一旦成功接收到某个帧,就会以它与最近接收到的帧序列号进行对比,如果大于前值就予以接受,否则就予以拒绝。
服务质量扩展功能由任务组E负责开发。目前802.11e草案中有一项块确认协议功能,它以单一帧确认多次传送。2005年1月所出版的802.11e草案中规定,检测重放攻击之前,必须先完成因块确认所导致的重新排序操作。
802.11单播帧必须被确认。如果原始帧或其确认已经遗失,则该帧必须重传。在接收端可能重复接收到相同的序列号。序列号重复有可能只是因为连接出错,不一定就是有人正在进行主动式攻击。
2.TKIP的数据处理与操作
和WEP一样,TKIP也支持加密与完整性保护过程,可以说是围绕着WEP而设计的一套安全功能。
TKIP帧会以下列项目作为输入项:
a.帧
b.用来加密帧的临时密钥
c.Michael用来保护帧内容的MIC密钥。TKIP会派生出一对密钥,使得工作站至接入点的MIC密钥不同于接入点至工作站的MIC密钥。TKIP与WEP的不同之处在于MIC使用了密钥。
d.发送端地址也会被当成TKIP的输入项,因为必须用它来进行来源身份验证。发送端地址可以由帧提供,不必来自上层软件。
e.由驱动程序或固件所维护的序列号计数器。
2.1 TKIP的密钥混合过程与密钥的构造
TKIP会为所传送的每个帧构造一把独特的密钥。此密钥派生自初始向量/序列号计数器、帧的发送端地址(未必是帧来源)以及临时密钥。密钥混合可以确保各个帧所使用的密钥彼此间存在显著的差异,以及防范任何假设WEP密钥的秘钥成分维持不变的攻击。将发送端地址纳入密钥混合的计算,这样不同的工作站就算使用相同的初始向量,也会派生出不同的RC4密钥。密钥混合功能的设计受限于802.11控制器的处理能力,TKIP将混合密钥的计算过程分为两阶段。
第一阶段以发送端地址、序列号的前32位以及128位的临时密钥作为输入项,输出项则是一个长度为80位的值。虽然有点复杂,不过所有计算都是由一些简单的运算(如add,shift与xor)所组成,以便减轻计算的负担。只要序列号的前32位为常数,第一阶段所计算出的值必然为常数,因此只要每65535个帧计算一次即可。
密钥混合的第二阶段必须对每个帧进行计算。第二阶段以第一阶段所计算的结果、临时密钥与序列号的最后16位为输入项。在这些输入项中,有所变动的只有序列号。它的变动方式经过明确定义,因此在实现时可以根据下一组序列号的值预先计算待传帧所需的数值。
密钥混合过程第二阶段的输出值是128位的RC4密钥,可以作为WEP的随机数种子。最后16位则是用来产生一个WEP IV的高字节和低字节。WEP IV中间的字节是一个值固定的虚设字节,用来避免产生RC4弱密钥。有些802.11接口可通过硬件的协助将RC4密钥作为输入项以产生密钥流,然后运用得到的密钥流来加密帧。密钥混合过程的第二阶段的输出项可以直接传给那些配备此类支持硬件的802.11接口。
2.2 TKIP的数据传送
帧产生后,接着发送给TKIP以传送,过程如下:
a.将802.11帧放在队列中等待传送。其中包含帧头以及有效载荷。和WEP一样,TKIP只保护802.11 MAC的有效载荷,至于802.11帧头以及下层协议的标头则原封不动。
b.计算消息完整性校验值(Message Integrity Check简称MIC)。和WEP不同的是,TKIP的MIC属于较完善的加密散列。它以秘钥作为验证过程的一部分,而且不只是保护802.11帧有效载荷。除了帧数据,MIC还纳入了来源与目的地地址,以及未来802.11e标准将会用到的优先级位。
c.赋予每个帧片段一个序列号。与WEP初始向量不同,TKIP的序列号计数器会随每个帧片段累加。如果帧无需分段,那么只需要编一个序列号即可,如果帧被分割为数个片段,计数器则会依片段数量累加。
d.每个帧均会以其独有的WEP密钥进行加密。通过密钥混合过程,TKIP为每个帧产生WEP密钥。每个帧所拥有的密钥将会传给WEP以作为IV与秘钥之用。对每个帧而言,这两者均会随之变动。
e.帧本身加上步骤b所得到的Michael消息完整性校验值以及步骤d所得到的的RC4密钥一并传给WEP,由WEP进行帧封装操作,这意味着,收到TKIP保护的帧将会同时包含WEP的成分。
TKIP帧由类似于WEP的封装过程。受到TKIP保护的帧封装格式,IV/KeyID(初始向量/密钥标识符)保留自WEP,但有不同的含义。最前面的3个字节记载了部分的TKIP序列号以及目前使用密钥编号。虽然TKIP支持多组密钥,但实际上只有KeyID 0会被分配使用。至于Extended IV(扩展初始向量简称EIV)字段,则是用来记载其余的序列号。接下来TKIP会将MIC码附加于有效载荷数据之后。而WEP会加入其自身的ICV,以尽量维持WEP格式不变。
2.3 TKIP的数据接收
一旦接收到帧,TKIP就会逆转整个加密与传送过程。作为WEP的扩充版本,TKIP的设计在加密过程中新增了许多检查点:
a.一旦无线接口接收到帧,如果通过帧检查序列确认它不曾损毁,就会将其交付给TKIP做进一步的验证。
b.TKIP采取的第一个步骤是检查序列号以防范重放攻击。TKIP的重放攻击保护机制要求帧的接收必须依循相当严格的次序。如果帧序列号小于或等于最近已接收到的有效帧,就会因为可能遭受到重放攻击而被摈弃。不像其他技术允许最近到达的帧可以不必完全依照顺序,TKIP的限制比较严格。不过对这样一种链路层技术而言,坚持依次接收并非毫无规则,因为这种情况下,未能依序传送的几率应该是微乎其微。
c.还原用来加密封包的WEP随机数种子。借此发送端地址、临时密钥以及序列号,接收端即可解锁以恢复WEP随机数种子。
d.WEP随机数种子到手后,就可以除去帧外围所包裹的WEP层,然后还原内容。在还原内容的过程中,WEP ICV必须接受校验。虽然WEP的完整性校验并不牢靠,但还是可以用来防范一些无谓的攻击。
e.如果涉及到帧分段,那么在重组完整有效载荷之前,必须等到所有片段接收完成。不过帧分段在802.11中并不常见。
f.帧重组之后,将会依帧内容计算其Michael值。如果所计算出来的值与封包所记载的MIC值相符,则会将帧传递给较上层协议并且将序列号设成帧当中所记载的序列号。如果无法通过MIC校验,则会触发对策。
3.Michael完整性校验与对策
WEP的完整性校验属于线性散列值,完全不适合加密应用。TKIP在设计上所面临的主要挑战之一,就是强化完整性校验的同时还必须维持合理的性能。设计TKIP时,大多数802.11芯片组所使用的处理器性能都不够强,数学运算不够快,无法及时进行完整性校验。实现时,Michael完全是采用swap,shift之类的接位运算方式,甚至通过丢弃特定位的方式。
TKIP整合了一些对策,以关闭网络与更新密钥来侦测及应对主动攻击。
3.1 Michael完整性校验
WEP的最大弱点之一在于完整性校验,而完整性校验原本是用来确保帧在经过无线媒介时不被改变。WEP采用循环冗余校验,但经过证明,CRC并不适合作为完整性校验之用。TKIP的主要目标之一,即是比较稳固的密码学技术出一种适用的消息完整性校验(MIC)。最后出炉的算法Michael,可说是多方妥协后的结果。相对较于简单的线性散列,Michael当然比较坚固,由于标准委员会希望尽量减轻实现时的负担,因此使得Michael在设计上受到严重的限制。
从架构的观点来看,Michael被插入在MAC服务层中。换言之,Michael必须处理由上层协议所传递下来的帧。Michael并不保护个别的802.11帧,而是保护经过重组并交给802.11传送的数据单元。将Michael实现于MAC层之上,而不是将它整合进MAC层的部分理由是,如此一来产品可以非常有灵活性,厂商可以选择以特殊的硬件或是设备上所允许的驱动程序来实现Michael。
3.2 Michael的数据处理
Michael会对上层传给MAC的帧进行加工处理。当上层帧置于队列待传时,首要步骤即是计算消息完整性校验值。除了目的地地址与源地址,Michael会在加密数据之前加入4个内容为零的字节。其中,后面3个字节保留未用,第一字节则是保留给未来标准所使用的Priority字段。
3.3 Michael对策
Michael防范攻击的能力虽然不强,无法抵挡顽强的主动攻击,因此它纳入了一些对策用来防御。对策的动作是在MIC校验时进行的。为了执行对策,帧必然已经通过重放攻击防护以及WEP完整性校验值过的重放验证。要能伪造可以通过重放攻击防护与WEP完整性校验的帧并不容易,尤其是后者依赖于混合的每个帧的密钥值。攻击者若能通过重放攻击防护与WEP完整性校验,就可以针对Michael完整性校验发动暴力攻击。为了防止Michael被暴力攻陷,Michael的对策就会停止通信,从而限制对特定密钥的主动攻击的次数。如果攻击持续进行,对策就会更新密钥,同时停止通信。
4.WPA
Wi-Fi保护访问(Wi-Fi Protected Access,简称WPA)是由Wi-Fi联盟所推行的营销标准。802.11i规范了两种新的安全协议:TKIP与CCMP。TKIP在设计上主要是为了能够和现有的硬件兼容,而CCMP本质上则是崭新的设计。因此,在CCMP就绪之前,TKIP就已经完成了。
为了消除对于安全性的疑虑,Wi-Fi联盟加快脚步致力于TKIP的部署,提名为WPA的过渡性营销标准。WPA包含了802.1X身份验证与加密,分为两种:WPA Personal(相当于802.11i的pre-shared key身份验证)以及WPA Enterprise(使用认证密钥模式,从TLS entropy派生密钥)。
5.链消息认证码协议(CCMP)
TKIP比WEP优秀,不过能够确定的也只有如此。既然WEP以流密码为基础,后续采用类似机制的做法就无法摆脱众人对其安全性的怀疑。为了消除802.11用户的疑虑,IEEE工作组着手开发一种以高级加密标准(Advanced Encryption Stardard,简称AES)的块密码为基础的安全协议。AES这种密码相对灵活,可用于各种长度的密钥与数据块。为了避免困扰用户,802.11i规定AES使用128位的密钥以及128位的数据块。这个以AES为基础的链路层安全协议称为Counter Mode with CBC-MAC Protocol(计数器模式及密码块链消息认证码协议简称CCMP)。
5.1 CCMP的数据处理
和其他链路层加密法一样,CCMP以同样的过程支持加密与完整性保护。
CCMP以下列项目作为输入项:
a.帧
b.临时密钥,用来加密与确认帧的真实性。这个密钥可同时用来为帧加密并确认帧的真实性。
c.密钥标识符,虽然支持多组密钥,不过每个帧只会使用一个密钥。
d.封包编号,用来识别所传送的帧。每传一个帧,封包编号就会累加,不过对于重传帧则维持不变。即重传不会导致封包编号累加。
5.2 CCMP的数据发送
当帧生成并且交给CCMP待传,就会进行下列过程:
a.将802.11帧置于队列中待传。其中包含帧头(frame header)以及有效载荷(payload)。和WEP一样,CCMP只保护802.11 MAC的有效载荷,至于802.11帧头以及下层协议的标头则原封不动。
b.赋予一个48位的封包号码(Packet Number简称PN)。和TKIP序列号一样,同一个临时密钥不会重复使用PN。每次传送后PN就会累加,它同时也用来侦测重放攻击。
c.构造附件认证数据字段。其中包含帧头中的一些字段,这些字段必须通过真实性的校验,但又不能经过加密,否则802.11协议便无法进行操作。接收端同样会使用AAD字段,以确认这些字段在传送过程中未被改动。AAD字段会保护802.11协议版本、帧类型、分布式系统位以及片段与次序位。
d.构建CCMP nonce。所谓nonce,是指少数的数据位,用以确保加密操作确实作用于某些独特的数据。nonce不应该在相同密钥中重复使用。在CCMP中,nonce是由封包编号以及发送端地址组合而成,如此一来,不同的工作站也可以使用相同的封包编号。nonce同时包含Qos会用到的优先级数据。
e.构建CCMP标头。它会将构成PN的6个字节拆开,然后将Key ID置于其中。和WEP一样,CCMP中也包含4个密钥槽。Extended IV(扩展初始向量)位于CCMP中永远被设为1,因为要能容纳PN这么大的字段必定需要用到8个字节的标头。
f.CCMP加密引擎所需要的输入项均已备齐。它以128位的临时密钥、步骤d所产生的nonce、步骤c所产生的附件认证数据(AAD)以及帧主体作为输入项。所有这些数据是以长度为8个字节的MIC来确保其真实性,帧主体与MIC也经过加密。
g.以原始的MAC标头、CCMP标头与步骤f所产生的加密数据来组成待传的加密帧。帧产生之后就会交付无线接口传送。在标头之后,CCMP标头记录了PN与Key ID。上层协议的帧及其MIC加密后置于FCS之前。
5.3 CCMP的接收
当CCMP接收到一个帧,就会逆转整个加密与传送过程。由于没有兼容性的包袱,不必用到WEP引擎。
a.一旦无线接口接收到帧,如果通过帧校验序列确定它未曾受损,就会将其交付给CCMP进行验证。
b.从所接收到的帧还原AAD。其中只包含帧头并且未经过加密。
c.从帧还原出CCMP nonce。其中包含封号编号、发送端地址以及Qos字段的内容,这三者均可来自未加密的帧头中取得。
d.接收端解读密文。此时需要临时密钥、步骤c所还原的nonce、步骤b所得到的认证数据,当然还有加密过的帧主体。此过程完成后,接收端就会得到一份经解密后的帧的副本以及经解密后的完整性校验码。
e.完整性校验时针对明文数据与附加认证数据进行计算。如果计算出的完整性校验值与步骤d所得到的完整性校验值相符,就继续进行;否则终止过程。
f.由MAC标头与步骤d所还原的数据组成明文帧。为了能通过重放攻击探测校验,其封包编号必须大于或等于最近接收到的通过完整性校验程序的封包编号。
6.强健安全网络(RSN)的运作方式
除了TKIP与CCMP,802.11i还定义了一组过程,它构建了称为强健安全网络的标准,这些操作主要定义密钥的产生与分配方式。
6.1 802.1i密钥层次结构
链路层加密协议使用了两种密钥。成对密钥用来保护工作站与AP之间往来的数据。组密钥用来保护AP至所关联工作站之间的广播或组播数据。成对密钥产生自前一章所讨论的身份验证信息;组密钥则是由接入点动态产生然后分配给各个工作站的。
6.2 成对密钥层次结构
TKIP与CCMP均使用单一主密钥来产生帧保护操作所需要的其他密钥。利用派生密钥,工作站可以更新加密密钥,而无需重新执行整个认证过程。主密钥本身扮演着秘钥根源的角色,必须小心保护,因为所有密钥材料都衍生与此。密钥分级的目的部分时为了派生用来保护临时密钥的传送的密钥。
密钥生成从主密钥开始。在成对密钥体系中,主密钥称为成对主密钥(Pairwise Master Key,简称PMK),长度为256位,PMK必然有其来源,在WPA-PSK中,便是使用成对主密钥。在使用认证服务器的情况下,主密钥由RADIUS服务器计算而得。
临时密钥必须使用预先定义好的伪随机函数来展开PMK。为了使数据更为随机,此展开过程是根据预主密钥、申请者与认证者的MAC地址以及两个作为四次密钥交换握手的随机nonce值。
6.3 组密钥的层次结构
链路层安全协议为广播与组播使用了另一组不同的密钥。已关联的每个工作站均拥有不同的预主密钥,因此无法从认证过程中推演出组播所需要的密钥。事实上,认证者拥有组主密钥以作为临时密钥的基础。通过伪随机函数,组主密钥会被展开成组密钥层次结构,在此并未产生密钥加密或密钥确认密钥,因为密钥交换是以成对EAPOL密钥来分配密钥的。
7.密钥的来源与分配(802.11i)
802.11i规范了一种派生密钥的机制,而不仅是采用主密钥并以它作为加密协议的输入项。为了防范重放攻击,密钥的交换使用了随机数并且需要经过握手。成对密钥与组密钥分别通过各自的握手加以更新。
7.1 更新成对密钥:四次握手
成对或单播密钥是通过所谓的四次握手加以分配,申请者与认证者均持有一个共享的成对主密钥。四次握手交换用以产生临时密钥的参数以及确认双方均已准备就绪,可以开始进行加密传送。依序传送的消息由下一个消息来代表确认。
a.认证者将nonce传给申请者。nonce是防范重放攻击的随机值。消息本身并未经过确认,但并没有被篡改的危险。如果消息被人更改,握手就是失败并重新执行。至此,申请者就可以将成对主密钥展开成完整的成对密钥层次结构。展开的过程中,需要用到申请者与认证者的MAC地址、成对主密钥以及两个nonce。
b.申请者所送出的消息中包含申请者的nonce以及初次与网络关联时所取得的安全参数副本。整个消息是经过以EAPOL密钥确认密钥计算而来的完整性校验值验证的。认证者接收到消息,取出申请者的nonce,依次衍生出完整的密钥层次结构。此密钥层次结构中包含用来签署消息的密钥。如果认证者无法验证此消息,整个握手即告失败。
c.此时握手双方的密钥均已就绪,但仍需要确认。认证者会将一个消息传给申请者,此消息代表将被加入的成对密钥的序列号。它同时包含了目前的组临时密钥(GTK),以便后续能够更新组密钥。GTK以EAPOL密钥加密密钥来加密,整个消息以密钥确认密钥来认证。
d.申请者最后会送出确认消息给认证者,告诉认证者以及接收到密钥生成消息,可以开始使用这些密钥。此消息经过密钥确认密钥的认证。
7.2 更新组密钥:组密钥握手
组密钥握手显然比四次握手简单,部分时由于它利用了四次握手得出的部分结果。由于组临时密钥经过成对密钥层次结构中的密钥加密密钥的加密,因此进行组密钥握手之前,四次握手必须已经成功完成。它包含了两个步骤:
a.认证者送出组临时密钥(GTK)并以成对密钥层次结构中的密钥加密密钥进行加密。此消息也经过密钥确认密钥计算出来的校验值的认证。
b.申请者送出确认消息,告诉认证者开始使用新的组密钥。此消息也是使用密钥确认密钥进行认证的。
虽然组密钥握手更新的是许多工作站所共享的密钥,但是使用密钥加密密钥来保护数据,意味着此握手过程其实是成对的。当组密钥更新后,每个工作站都必须在进行一次组密钥交换。
7.3 混合加密类型
为了支持不同加密协议的替换以及适应只支持WEP加密功能的老设备,802.11i定义了一种可信赖的加密协议体系。使用40位密钥的WEP是最弱的加密协议,之后分别是使用104位密钥的WEP,TKIP与CCMP。
作为网络的初始关联的一部分,各个工作站可以协商使用何种加密协议进行单播与组播传送。唯一的限制是组密钥必须使用相同强度或较弱的加密协议。接入点在组密钥上采用了"最小公分母"的做法。在网络上,如果能力最低的工作站只具备动态WEP的能力,那就以动态WEP作为组密钥。不过,其他工作站可以使用较强的单播保护机制。这些接入点支持关联策略控制,用来设定可接受的最低加密强度,以及防止工作站以强度低于网管人员所要求的协议与网络进行关联。
802.11i标准允许混用几乎所有的加密方式,但使用CCMP传送组帧的工作站只能以CCMP进行单播帧的传送,这些唯一的例外。不过,有些驱动程序并不支持所有可行模式。
7.4 密钥缓存
成对主密钥(PMK)算是802.11i的安全防护基础。如果成对主密钥是通过802.1X交换过程生成的,那么代价其实不小。大部分的EAP方式都需要用到好几个消息,每个步骤也都需要大量的计算。802.1X认证过程需要花费几秒时间,此时用户并无法收发数据。位于两个接入点边界的工作站特别容易受到影响,如果它的无线接口因为两个接入点的信号强度相当而在两边来回切换的话。
PMK缓存的动机在于减轻认证负担,与接入点进行关联时,工作站会先引用现有关联的成对主密钥安全关联标识符(PMKSA),而非每次都进行完整的802.1X交换过程。如果接入点中存在关联,它就会接受关联且立即进行四次握手。在四次握手过程中,申请者与认证者将会证明各自所缓存的PMK。没有缓存主密钥的工作站必须进行完整的802.1X认证,这样才能产生主密钥。事先认证的动机之一,即是在切换发送之前,在接入点中产生主密钥备用。
温馨提示:
以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!