赞
踩
802.1X所提供的认证与密钥管理框架解决了WEP设计上的两个弊端,其他尚待解决的是WEP的密钥缺乏机密性。802.11i采用双轨并行的做法以解决链路层加密协议的弱点问题。802.1li组成自两种新的链路层加密协议。第一种称为Temporal Key Integrity Protocol(临时密钥完整性协议,简称TKIP),被设计来尽可能强化pre-802.11i硬件的安全性。另外一种则是重新打造的加密协议,称为Counter Mode with CBC-MAC Protocol(计数器模式及密码块链消息认证码协议,简称CCMP),被设计来提供最高等级的安全性。
加密的重要责任主要都交给了硬件,只要通过软件或者固件就可以达到升级的目的,TKIP保留了WEP的基本结构与操作方式,因为它就是被设计用来升级基于WEP的解决方案的软件。
TKIP整合了许多新协议的功能来防止WEP易遭受攻击的不稳定性,同时也如上文所说保存了WEP的基本结构和操作方式,但是提供了一些保护机制:
TKIP初始向量的使用与密钥混合
WEP的主要破绽在于WEP的随机数种子(WEP seed)是由初始向量(initialization vector,简称IV)以及WEP密钥所构成,可参考下图。既然随机数种子是由IV和密钥串联而成,IV本身就泄露了大部分的密钥结构。如此一来,攻击者就可以观察IV的重复使用情况,进一步挖掘出用以加密帧的相同密钥流。
TKIP主要通过两种方式来防范初始向量的攻击:第一,将IV的长度从24位倍增到48位,可以有效防止IV空间在使用期限内耗尽;第二,就是在第一点的同时再采用密钥混合方式,加密个别帧的RC4密钥就会各不相同,只要加密每个帧的密钥都各不相同,那么攻击者也将无从下手。
TKIP序列号计数器与重放攻击保护
在每次安装新的主密钥的时候,IV/序列号计数器就会被重置为1,在这之后序列号每传一个帧计数器都加1,接收端在接收到帧的时候,编号是从小到大的顺序,上文讲过重放攻击的大致方式后,那么TKIP在面对重放攻击的时候,只需要在接收到某个帧之后立即与最近的一次帧的编号进行比较,如果后者大于前者,则表示顺序正确,予以接收;若后者小于前者,则表示在传送途中可能发生了重放攻击,因此会拒收。
802.11单播帧(unicast frame)必须被确认。如果原始帧或其确认已经遗失,则该帧必须重传。在接收端可能重复接收到相同的序列号。序列号重复有可能只是因为连接出错,不一定就是有人正在进行主动式攻击。
Michael完整性校验与对策
WEP的完整性校验(integrity check)属于线性散列值,完全不适合加密应用。TKIP在设计上所面临的主要挑战之一,就是在强化完整性校验的同时还必须维持合理的性能。
TKIP的数据处理与操作
TKIP支持加密与完整性的保护
TKIP会以下列项目作为输入项:
帧。
用来加密帧的临时密钥( teimporal key)。
Michael用来保护帧内容的MIC密钥。TKIP会派生出一对密钥,使得工作站至接入点MIC
密钥不同于接入点至工作站的MIC密钥。TKIP与WEP的不同之处在于MIC使用了密钥。
发送端地址也会被当成TKIP的输入项,因为必须用它来进行来源身份验证。发送端地址可以由帧提供,不必来自上层软件。
由驱动程序或固件所维护的序列号计数器(sequence counter )。
TKIP的密钥混合过程与密钥的构造
TKIP将混合密钥的计算过程分为两阶段。
第一阶段以发送端地址、序列号的前32位及128位的临时密钥作为输入项,输出项则是一个长度为80位的值。虽然有点复杂,不过所有计算都是由一些“简单”的运算(如addition、shift 与XOR)所组成,只要序列号的前32位为常数,第一阶段所计算出来的值也必然为常数,因此只要每65535个帧计算一次即可。
密钥混合的第二阶段必须对每个帧进行计算。第二阶段以第一阶段所计算的结果、临时密钥与序列号的最后16位为输入项。在这些输入项中,有所变动的只有序列号。它的变动方式经过明确定义,因此在实现时可以根据下一组序列号的值预先计算待传帧所需的数值。第二过程的输出值是128位的RC4密钥,可以作为WEP的随机数种子(WEP seed),最后16位是用来产生WEP IV的高字节和低字节。该阶段的输出可以直接传给配备此类硬件的802.11接口。具体如图:
帧形成了之后,接下来就是发给TKIP来传送:
1、将802.11帧放在队列中等待传送(queued for transmission)。其中包含帧头以及有效载荷(payload)。和WEP一样,TKIP只保护802.11 MAC的有效载荷,至于802.11帧头以及下层协议的标头则原封不动。
2、计算消息完整性校验值(Message Integrity Check,简称MIC)。和WEP不同的是,TKIP的MIC属于较完善的加密散列。它以秘钥(secret key)作为验证过程的一部分,而且不只是保护802.11帧有效载荷。除了帧数据,MIC还纳入了来源与目的地地址,以及未来802.11e标准将会用到的优先级位(priority bit)。
3、赋予每个帧片段一个序列号。与WEP初始向量不同,TKIP的序列号计数器会随每个帧片段累加。如果帧无需分段,那么只要编一个序列号即可,如果帧被分割为数个片段,计数器则会依片段数量累加。
4、每个帧均会以其独有的WEP密钥进行加密。通过密钥混合过程,TKIP为每个帧产生WEP密钥。每个帧所拥有的密钥(per-frame key)将会传给WEP以作为IV与秘钥之用。对每个帧而言,这两者均会随之变动。
5、帧本身加上步骤2所得到的Michael消息完整性校验值以及步骤4所得到的RC4密钥一并传给WEP,由WEP进行帧封装操作,如第五章所述。值得注意的是,这意味着.受到TKIP保护的帧将会同时包含WEP的成分。
传送过后即是TKIP的接收过程:
1.一旦无线接口接收到帧,如果通过帧检查序列确认它不曾损毁,就会将其交付给TKIP做进一步的验证。
2. TKIP采取的第一个步骤是检查序列号以防范重放攻击。TKIP的重放攻击保护机制要求帧的接收必须依循相当严格的次序。
3.还原用来加密封包的WEP随机数种子。借由发送端地址、临时密钥以及序列号,接收端即可解锁(unmix the key)以恢复WEP随机数种子。
4.WEP随机数种子到手后,就可以除去帧外围所包裹的WEP层,然后还原内容。在还原内容的过程中,WEP ICV必须接受校验。虽然WEP的完整性校验并不牢靠,但还是可以用来防范--些无谓的攻击。
5.如果涉及到帧分段,那么在重组完整有效载荷之前,必须等到所有片段接收完成。不过帧分段在802.11中并不常用。
6.帧重组之后,将会依帧内容计算其Michael值。如果所计算出来的值与封包所记载的MIC值相符,则会将帧传递给较上层协议并且将序列号设成帧当中所记载的序列号。如果无法通过MIC校验,则会触发对策。
二、CCMP(计数器模式及密码块链消息认证码协议)
WEP以流密码为基础,后续的发展还继续采用该机制难免会导致使用者对于安全性的怀疑,因此IEEE后续开发了高级加密标准(Advanced Encryption Standard,AES)的块密码(Block Cipher)为基础的安全协议。AES的这种相当灵活,可用于各种长度的密钥和数据块。后来这个以AES为基础的安全协议被称为Counter Mode with CBC-MAC Protocol(计数器模式及密码块链消息认证码协议),该名称源自于协议底层所使用的块密码,属于RFC3610所规范的为Counter Mode with CBC-MAC(简称CCM)。CCMP同样支持数据的加密和完整性的保护,加密的过程如下图:
CCMP以下列项目作为输入项:
帧。
临时密钥(temporal key),用来加密与确认帧的真实性。这个密钥可同时用来为帧加密并确认帧的真实性。
密钥标识符(key identifier)。虽然支持多组密钥,不过每个帧只会使用一个密钥。
封包编号(packet number),用来识别所传送的帧。每传一个帧,封包编号就会累加,不过对于重传帧则维持不变。即重传不会导致封包编号累加。
CCMP的数据传输
当帧生成并交给TKIP待传,就会进行下列过程:
1、将802.11帧置于队列中待传(queued for transmission)。其中包含帧头(frame header)以及有效载荷(payload)。和WEP一样,TKIP只保护802.11 MAC的有效载荷,至于802.11帧头以及下层协议的标头则原封不动。
2、赋予一个48位的封包号码(Packet Number,简称PN)。和TKIP序列号一样,同一个临时密钥不会重复使用PN。每次传送后PN就会累加,它同时也用来侦测重放攻击。
3、构造附加认证数据(Additional Authentication Data,简称AAD)字段。其中包含帧头中的一些字段,这些字段必须通过真实性的校验,但又不能经过加密,否则802.11协议便无法进行操作。接收端同样会便用AAD字段,以确认这些字段在传送过程中未被改动。AAD字段会保护802.11协议版本、帧类型、分布式系统位以及片段与次序位。它也会保护来自MAC标头的地址子段,可时会将序列号设为0以保护顺序控制字段。
4、下一步,构建CCMP nonce。所谓nonce,是指少数的数据位,用以确保加密操作确实作用于某些独特的数据。nonce不应该在相同密钥中重复使用。
5、接着,构建CCMP标头。它会将构成PN(封包编号)的6个字节拆开,然后将Key ID(密钥标识符)置于其中。和WEP一样,CCMP中也比西 DNM月的字段,IV(扩展初始向量)位在CCMP中永远被设为1,因为要能容纳PN这么大的字段,必定需要用到8个字节的标头。标头结构如图:
6、至此,CCM加密引擎所需要的输入项均已备齐。它以128位的临时密钥、步骤4所产生的nonce、步骤3所产生的附加认证数据(AAD)以及帧主体作为输入项。所有这些数据是以长度为8个字节的MIC(消息完整性检查码)来确保其真实性,帧主体与MIC也经过加密。整个加密过程如下图所示:
7、以原始的MAC标头、CCMP标头与步骤6所产生的加密数据来组成待传的加密帧。帧产生之后就会交付无线接口传送,如上图所示。
CCMP的接收
当CCMP接收到一个帧的时候就会逆转整个加密与传送的过程,但是不需要用到WEP,过程如下:
1、一旦无线接口接收到帧,如果通过帧校验序列(frame check sequence)确定它未曾受损,就会将其交付给CCMP进行验证。
2、从所接收到的帧还原出AAD(附加认证数据)。其中只包含帧头而且未经过加密。
3、从帧还原出CCMP nonce。其中包含封包编号、发送端地址以及QoS字段的内容,这三者均可自未加密的帧头中取得。
4、接收端解读密文。此时需要临时密钥、步骤3所还原的nonce、步骤2所得到的认证数据,当然还有加密过的帧主体。此过程完成后,接收端就会得到一份经解密后的帧的副本以及经解密后的完整性校验码。
5、完整性校验是针对明文数据与附加认证数据进行计算的。如果计算出的完整性校验值与步骤4所得到的完整性校验值相符,就继续进行、否则就终止过程。
6、由MAC标头与步骤4所还原的数据组成明文帧。为了能通过重放攻击探测校验,其封包编号必须大于或等干最近接收到的通过完整性校验程序的封包编号
除了TKIP与CCMP,802.11i还定义了一组过程,它构建了称为强健安全网络(RobustSecurity Network,简称RSN)的标准。这些操作主要定义密钥的产生与分配方式。
链路层加密协议主要使用了两种密钥。一种是成对密钥(pairwise key),用来保护工作站与AP之间往来的数据;另一种是组密钥(group key),用来保护AP至所关联工作站之间的广播或组播数据。成对密钥产生自身份验证信息领域;组密钥则是由AP动态产生然后分配给各个sta的。
成对密钥结构
主密钥本身扮演着秘密根源(root secret)的角色,必须小心保护,因为所有密钥材料(keying material)都衍生于此。密钥分级(key hierarchy)的目的部分是为了派生用来保护临时密钥的传送的密钥。在成对密钥的体系中,主密钥称为成对主密钥(pairwise master key,简称PMK),在WPA-PSK中便有使用到这种成对主密钥,在使用认证服务器的情况下,主密钥由RADIUS服务器计算出然后发送给AP。
为了得到临时密钥,必须使用预先定义好的伪随机函数(pseudorandom function)来展开PMK。为了使数据更为随机,此展开过程是根据预主密钥(pre-master key)、申请者与认证者(supplicant and authenticator)的MAC地址以及两个作为四次密钥交换握手(four-way key exchange handshake)的随机nonce(随机数)值。
TKIP与CCMP均会使用伪随机函数将256位的PMK展开为成对临时密钥(pairwise transient key,简称PTK)。在TKIP 与CCMP体系中,临时密钥的两组128位块在分配过程中被用来保护临时密钥。这两种密钥体系均始于两个EAPOL密钥,通过EAPOL-Key消息来保护密钥材料的传送安全。其中使用了两个128位的密钥。第一个是EAPOL密钥确认密钥(Key Confirmation Key,简称KCK),用来计算密钥生成消息的完整性校验值;第二个是EAPOL密钥加密密钥(Key Encryption Key,简称KEK),用来加密密钥生成消息。
组密钥结构
链路层安全协议为广播与组播使用了另一组不同的密钥。已关联的每个工作站均拥有不同的预主密钥(pre-master key),因此无法从认证过程中推衍出组播所需要的密钥。事实上,认证者拥有组主密钥(group master key,简称GMK)以作为临时密钥的基础,通过伪随机函数,GMK会被展开成组密钥层次结构。在此并未产生密钥加密(key encryption)或密钥确认(key confirmation)密钥,因为密钥交换(keyexchange)是以成对EAPOL密钥来分配密钥的。
四次握手
成对(单播)密钥是通过四次握手来进行更新或分配密钥的。申请者与认证者都持有一个共享的成对主密钥,四次握手交换用来产生临时密钥的参数,并确认好双方都已经准备就绪可以开始加密传送,具体如图:
1、认证者将nonce传给申请者。nonce是防范重放攻击的随机值。消息本身并未经过确认,但并没有被篡改的危险。如果消息被人更改,握手就会失败并重新执行。至此,申请者就可以将成对主密钥展开成完整的成对密钥层次结构。展开的过程中,需要用到申请者与认证者的MAC地址、成对主密钥以及两个nonce。
2、申请者所送出的消息中包含申请者的nonce以及初次与网络关联时所取得的安全参数副本。整个消息是经过以EAPOL密钥确认密钥计算而来的完整性校验值验证的。认证者接收到消息,取出申请者的nonce,依次衍生出完整的成对密钥层次结构。此密钥层次结构中包含用来“签署”(sign)消息的密钥。如果认证者无法验证此消息.整个握手即告失败。
3、此时握手双方的密钥均已就绪,但仍需要确认。认证者会将一个消息传给申请者,此消息代表将被加入的成对密钥的序列号。它同时包含了目前的组临时密钥(group transient key,简称GTK),以便后续能够更新组密钥。GTK以EAPOL密钥加密密钥(KEK)来加密,整个消息以密钥确认密钥(KCK)来认证。
4、申请者最后会送出确认消息给认证者,告诉认证者已经接收到密钥生成消息,可以开始使用这些密钥。此消息经过密钥确认密钥的认证。
组密钥握手
更新组密钥比成对密钥的四次握手要简单很多:
1、认证者送出组临时密钥(GTK)并以成对密钥层次结构中的密钥加密密钥(KEK)进行加密。此消息也经过密钥确认密钥(KCK)计算出来的校验值的认证。
2、申请者送出确认消息﹐告诉认证者开始使用新的组密钥。此消息也是使用密钥确认密钥进行认证的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。