802.11有线等效保密(Wird Equivalent Privacy,WEP)是一种无限局域网安全机制,用于实现接入控制、数据加密和数据完整性检验。
但WEP一是只能实现AP对终端的单向身份鉴别。
二是用CRC-32作为完整性检验值(后面会讲到怎么破解这个CRC完整性检验)会导致接收端无法检验出已经发生的篡改,因此,WEP是一种存在安全缺陷的无线局域网安全机制。
1.WEP加密和完整性检验过程
WEP加密数据的过程如图一所示。40位秘钥(也可以是104位秘钥)和24位初始向量(IV)串拼接在一起,构成64位或者128位随机种子秘钥,伪随机数生成器(PRNG,这就好比我们在编程时候使用的随机函数一样,在使用的时候往往我们都应该添加一个随机数种子)根据随机数种子产生一次性秘钥,一次性秘钥的长度等于数据长度+4(单位为字节)。4字节的完整性检验值是数据的32位循环冗余码(Cyclic Redundancy Check,CRC),可以用CRC-32表示,它的作用是实现数据的完整性检验。如果不知道CRC检验原理的同学可以去适当百度一下。一次性秘钥和随机数种子是一对一的关系,为什么是这样的就和伪随机数生成器的原理是有关的,这里不懂请百度伪"伪随机数生成器"
,只要随机数种子改变,一次性秘钥跟着改变。这里的原理是因为IV在每次进行传输的时候每次都是取的一个随机值。构成随机数种子的64位或者128位二进制数中,40位或者104位秘钥是固定不变的,改变的只能是24位的初始向量,那么进而说明:随机数种子就有 2^24 种不同的组合,一次性秘钥也就有 2^24 种不同组合。
为了使接收端能够产生相同的一次性秘钥,必须让接收端和发送端同步随机数种子。WEP要求发送端和接收端具有相同的40位或者104位秘钥,因此,只要同步初始向量,就能同步随机数种子。为此,发送端将24位初始向量以明文的方式发送给接收端。为了保证数据传输的安全,必须每一次更换一次性秘钥,因此,每一次加密数据都需要使用不同的初始向量,也就是说每次使用不一样的一次性秘钥。
WEP解密数据和完整性检验的过程如图二所示,接收端将配置的40位或104位和MAC帧携带的24位初始向量串接成64位或者128位随机数种子,位随机数生成器根据这随机数种子产生一次性秘钥,其长度等于密文长度,密文和一次性秘钥异或运算的结果是数据明文和4字节的完整性检验值。同样,根据数据和生成器函数G(x)计算出数据的32位循环冗余检验码,并计算结果和MAC帧携带的完整性检验值比较,如果相等,表示数据传输过程中没有被篡改或损坏。
2.WEP帧结构
经过WEP加密运算后的无线局域网帧结构如图三所示,一旦控制字段中WEP位置1,原来由数据组成的净荷字段扩展成如图三所示的格式,它由明文方式的24位IV,6位填充位,两位秘钥标识符,若干字节由数据加密后生成的密文,以及4字节由完整性检验值(ICV)加密后生成的密文组成。填充位固定为0,两位秘钥标识符允许发送端和接收端在四个秘钥中选择一个用于当前MAC帧加密运算的秘钥,ICV的计算方式与MAC帧的帧检验序列(Frame Check Sequence, FCS)字段相同。都是CRC循环冗余检验码。
后面会讨论,由于ICV是根据数据明文计算出的CRC-32,篡改这能够通过精心篡改数据密文和加密后的ICV,使得接收端无法检测出数据密文进行的篡改。因此,用CRC-32作为ICV,是无法保证进过无线局域网传输的数据的完整性。
3.WEP鉴别机制
WEP定义了两种鉴别机制:
- 开放系统鉴别机制。
- 共享秘钥鉴别机制。
开放系统鉴别机制实际上并不对终端进制鉴别,只要终端向AP发送鉴别请求帧,AP一定向终端回送表示鉴别成功的鉴别响应帧。
共享鉴别过程如图四所示,终端向AP发送鉴别请求帧,AP向终端回送鉴别响应帧,鉴别响应帧中包含由AP伪随机数生成器产生的长度为128字节的随机数challenge。终端接收到AP以明文方式表示的随机数challenge后,将随机数challenge作为数据明文,按照图一所示的WEP加密数据过程对随机数challenge进行加密,以密文和初始向量为净荷构建鉴别请求帧,并把鉴别请求帧发送给AP。AP根据如图二所示的WEP解密过程还原随机数challenge' ,并把还原出来的随机数challenge'和自己保存的challenge进行比较,如果相同表示鉴别成功,然后向终端发送表示成功的的鉴别响应帧,否则表示鉴别失败,向终端发送表示鉴别失败的鉴别响应帧。
如图四中发生的鉴别请求和响应帧都携带鉴别事物序号,从终端发送的第一鉴别请求帧开始,鉴别事物序号一次为1~4,因此,终端发送给AP的两个鉴别请求帧由于鉴别事物序号分别为1和3,AP对其进行的操作是不同的。共享秘钥鉴别机制确定某个终端是否是授权终端的依据是该终端是否具有和AP相同的秘钥。
还有另外一种鉴别机制:
MAC地址鉴别机制并不是WEP要求的鉴别机制,但目前许多厂家生产的AP都支持这一鉴别机制。
但是在早期无线局域网卡和以太网卡上网都是固定的MAC地址,该MAC地址不但是全球唯一的,并且是无法改变的,因此,用MAC地址标识终端是有效的。由于目前的驱动程序并不一定用网卡上的固化MAC地址作为终端发送的MAC帧的源MAC地址,而是可以用某个逻辑MAC地址替换网卡上固化的物理MAC地址,因此,用MAC地址标识终端的方式已不再可靠,越来越多的攻击采用源MAC地址欺骗方式。
5.关联的接入和控制过程
终端和AP进行数据交换前,必须和AP建立关联(Association),因此,和AP建立关联的过程类似于总线型以太网中将终端连接到总线上的过程。AP和终端成功建立关联的先决条件如下:
- AP与该终端之间完成信道同步过程;
- AP与该终端支持的物理层协议标准和传输速率纯在交集;
- AP完成对终端的鉴别过程;
- AP与该终端的SSID进行匹配;
- AP具有的资源允许该终端接入BSS;
终端从进入基本服务区(Basic Service Area,BSA),到成功建立和AP之间的关联,允许和AP之间交换数据的过程如图五所示,这个过程等同于以太网建立物理连接的过程。无线局域网通过如图五所示的过程,完成对终端的接入控制。
首先,终端和AP之间通过交换探测请求和探测响应帧,完成信道和物理层标准同步过程,双方就通信使用的信道、物理层标准及数据传输速率达成一致。然后,由AP完成对终端的身份鉴别过程,图五中采用基于MAC地址的鉴别机制,只有MAC地址包含AP访问控制列表中的终端,才能和AP建立关联。终端通过身份鉴别后,向AP发送关联请求帧(Association Request),关联请求帧中除了需要给出终端的一些功能特性(如是否支持查询,是否进人AP的查询列表等)和终端支持的传输速率外,还需给出终端的服务集标识符(Service Set lentifer,SSID) 。SSID用于标识某个服务集,某个终端只有拥有该BSS的SSID,才拥有接人该BSS的权利。AP通过分析关联请求帧中的信息,确定是否拥有和该终端建立关联。如果AP确定和该终端建立关联,向该终端回送一个表示成功建立关联的关联响应帧(Association Response),关联响应帧中给出关联标识符。否则,向终端发送分离帧(Disassociation)。AP建立与该终端的关联后,在关联表中添加一项内容包含终端的 MAC 地址、身份鉴别方式、是否支持查询、支持的物理层标、数据传输速率和关联寿命等。关联寿命给出终端不活跃时间限制,只要终端持续不活跃时间超过关联寿命,终端和AP的关联自动分离。就像总线型以太网中只有连接到总上的终端才能进行数据传输样,BSS中只有 MAC地址包含在关联表中的终端才能和AP进行数据交换。
6.WEP的安全缺陷
- 11最初的应用是解决类似手持式条形码扫描仪这样的移动设备和后台服务器之间的通信问题,而手持式条形码扫描仪这样的移动设备的处理能力非常有限,无法进行复杂的加密解密计算,因此,只能采用WEP这样简单而有效的安全机制,这种安全机制在802.11最初的应用环境中也基本能够满足安全通信要求。但对于笔记本计算机通过无线局域网访问内部网络这样的应用环境,应用WEP这样简单的安全机制会产生严重的安全隐患,WEP的安全缺陷开始显现。
6.1 共享秘钥鉴别机制的安全缺陷
如图七所示,如果非授权终端(人侵终端)想通过AP的共享密钥鉴别过程,它可以一直侦听其他授权终端进行的共享密钥鉴别过程。因为无线通信的开放性,人侵终端可以侦听到授权终端和AP之间完成共享密钥鉴别过程中相互交换的所有鉴别请求、响应帧。由于密文是通过一次性密钥和明文异或操作后得到的结果,即Y=K⊕P(Y为密文,K为一次性密钥,P为明文),因此,用明文和密文异或操作后得到的结果即为一次性密钥K,即Y⊕P= K⊕P⊕P=K。由于人侵终端侦听到了AP以明文方式发送给授权终端的随机数P,以及授权终端发送给AP的对随机数P加密后的密文Y,人侵终端完全可以得出授权终端用于此次加密的一次性密钥K和对应的初始向量IV。当人侵终端希望通过AP的共享密钥鉴别过程时,它也发起监别过程,并用侦听到的一次性密钥K加密AP给出的随机数P',并将密文Y'(Y' = K⊕P')和对应的初始向量IV封装成如图六所示的加密后的MAC帧格式发送给AP。由于人侵终端使用的一次性密钥K和初始向量IV都是有效的,AP通过对人侵终端的身份鉴别。
6.2 完整性检测缺陷
假定数据1= M1(X),数据2=M2(X),生成函数=G(X)。如果M1(X)和M2(X)的阶数相同,生成函数G(X)的阶数为K,且R1(X)是[X^k × M1(X)]/G(X)的余数,R1(X)是[X^K × M1(X)]/G(X)的余数,如果M3(X) = M1(X)⊕M2(X),则R3(X) = R1(X)⊕R2(X)就是[X^K × M3(X)]/G(X)的余数。由于ICV是数据除以生成函数后得到的余数,当数据=M1(X)时,ICV= R1(X),即R1(X)是X^k × M1(X)除以生成函数后得到的余数。WEP加密后生成的密文分别是Y1=M1(X)⊕K1,Y2= R1(X)⊕K2。如果密文Y1被篡改为Y'1 = Y1⊕M2(X),则只要将密文Y'2修改为Y'2=Y2⊕R2(X),其中,R2(X)是X^k × M2(X)除以生成函数后得到的余数。接收端仍然能够通过数据的完整性检测,即如果接收到的数据明文M3(X) = M1(X)⊕M2(X),则R3(X)=R1 (X)⊕R2(X)就是[X^K x M3(X)]/G(X)的余数,整个过程如图七所示。
如图七所示,假定发送端需要发送的数据M1(X)= 10101,G(X) = X^3 + X + 1(1011),根据数据M1(X)和生成函数G(X)计算ICV,ICV = R1(X)=(10101000)/(1011)的余数101。用一次性密钥11011101加密数据明文和ICV
后得到的密文为01110000。
攻击者截获发送者发送的密文,如果他希望篡改密文,并且使接收端检测不出他对密文进行的篡改,攻击者构建数据M2(X)=11010,根据数据M2(X)和G(X)计算R2(X),R2(X)= (11010000)/(1011)的余数010。攻击者用和密文同样长度的数据序列11010 010和密文进行异或操作,得到篡改后的密文10100 010。
接收端接收到密文后,用和发送端相同的一次性密钥11011 101对具进行并或操作,得到明文01111 111,其中,01111=数据M3(X)=数据M1(X)⊕数据M2(X),111=R3(X)=R1(X)⊕R2(X)。接收端根据数据M3(X)和G(X)计算ICV,求得ICV=
(01111000)/(1011)的余数111=R3(X)。由于接收端根据数据计算所得的ICV和MAC帧携带的ICV相同,认为密文在传输过程中未被篡改,将数据作为正确数据予以接收,ICV的完整性检测功能失去作用。这就是用根据数据和生成函数G(X)计算所得的循环冗余检验码作为数据完整性检验值的缺陷,攻击者很容易篡改密文,且不被完整性检验值检测出。