作者:OrphousV
1.背景
WEP(Wired Equivalent Protocol),即有线等效协议。从名字上就可以看出,WEP旨在实现无线环境与有线环境的一致性,保障无线环境安全。作为一种链路层协议,WEP并非是802.11标准所要求的,它只是一种可选的安全解决方案。然而,由于无线环境的复杂性,WEP并未不负众望地实现最初的宗旨,相反,它的缺陷随着无线技术的发展而逐渐暴露出来。
通信安全分三个主要方面:机密性(confidentiality)、完整性(integrity)、真实性(authentication)。机密性旨在保证数据不被未被授权的第三方拦截,比如通过加密来防止数据被窃听,这点对使用广播方式的无线环境尤为重要;完整性旨在保证数据不被修改,这可以通过一些效验手段来实现;真实性旨在保证数据源的合法性。其中,真实性是任何安全策略的基础,授权(authorization)和访问控制(access control)均建立在真实性之上。为了实现这三个主要方面的目标,IEEE(Institute of Electrical and Electronics Engineers)在WEP的最初设计时做了很多工作。然而,WEP由于其算法的不可靠,在安全架构中留下了很大的隐患。
2.WEP安全架构、缺陷及其攻击方法
2.1 基本加密流程
在最初的802.11标准中规定的密钥种子的长度为64-bit,其中有40位被两个工作站间传输数据时共享的密码占用。由于WEP使用RC4算法进行加密,因此WEP对密钥的长度并没有特别的要求。有些厂家为了提高数据的安全性,在产品中提供对128-bit WEP(有些地方也称之为WEP-104或104-bit keys)种子的支持,128位中有104位是不公开的。然而由于对称算法RC4自身的缺陷,这种增大密钥长度的做法是否能提高安全性还是值得商榷的。除此以外,由于一个用作密码的ASCII字符的最高位为0,一个密钥的取值范围受到了一定的限制,这使得解密难度在一定程度上得到降低。而彩虹表的出现,使得破解密码的难度大为降低。
为了实现完整性这一目标,WEP使用了CRC(Cyclic Redundancy Check)机制,然而CRC在密码学上并不具有安全性,因为它是通过直接的数学运算来实现的,而不是散列函数。这使得攻击者能够修改数据而并不变更数据的CRC的效验值。这给WEP造成了很大的安全隐患。
图1为WEP加密的大致流程。

图1 WEP加密大致过程
首先,1个24位的IV(Initialization Vector,初始化向量)和一个40位或104位的秘钥结合,使每个数据包都有不同的RC4 Key。结合产生的初始密钥被输入到RC4 PRNG(Pseudo Random Number Generator,伪随机数生成器,用于将密钥展开为密钥流)中,产生一个和初始密钥等长的伪随机数密钥流,这个过程可以用公式表示为Keystream=RC4(IV•Secret Key)(如图2),而还原数据时要求双方拥有相同的秘钥并使用相同的算法将密钥展开为伪随机数序列(pseudo random sequence)。接着,产生的密钥流和数据以及数据的CRC效验值的结合体进行异或操作,最终产生加密后的数据,并附加一个24位的IV准备传输。

图2 WEP加密流程图
2.2 IV碰撞(IV Collision)攻击
2.2.1 解密
由于共享密钥(shared key)中的24-bit IV是以明文发送的,因此一个64位的WEP密钥相当于只加密了40位。(如图3)由IV的长度我们可以推算出,所有可能的IV值的个数为:2^24=16777216。可见IV的取值范围不大,这使得IV资源会在几小时内被用尽,导致不同数据包可能重复使用一个IV,这意味着它们使用的密钥流也是一样的。如果我们知道第一个原始数据和基于同一密钥流的第一、二个原始数据加密后的内容,我们就可以演算出第二个原始数据,如图4。

图3 共享密钥大体结构

图4 IV重用缺陷利用
因为加密后的数据是由密钥流与原始数据进行异或操作得到的,而异或操作是可逆的,只要获得原始数据和加密后的数据,我们就能算出密钥流。如果我们足够多的以相同密钥流加密的数据包,当相同IV重复使用的次数达到一定程度时,我们就有可能破解出秘钥。即使没能破解出秘钥,我们也能从加密的数据中推出许多有用的信息。
其代数原理如下:
C1=P1 XOR RC4(IV,Keystream)
C2=P2 XOR RC4(IV,Keystream)
C1 XOR C2=(P1 XOR RC4(IV,Keystream))XOR(P2
XOR RC4(IV,Keystream)) =P1 XOR P2
其中,C1(Ciphertext1)是由P1(Plaintext1)和密钥流RC4(IV,Keystream)异或得到的,C2(Ciphertext2)是由P2(Plaintext2)和相同的密钥流RC4(IV,Keystream)异或得到的,因此可以得出C1和 C2的异或结果就是P1和P2的异或结果。
2.2.2信息注入(Message Injection)
如果我们获得了一个密钥流,我们就能进行MessageInjection。我们可以把要发送的数据及其ICV(IntegrityCheck Value)的结合体用获得的密钥流进行加密,再附加上该密钥流所对应的合适的IV就能构造出一个数据包,由于IV可能被重复使用,并且802.11标准要求丢失的数据必须重发,接收端会将我们发送的这个数据包视为合法的数据包。
2.2.3认证欺骗(AuthenticationSpoofing)
当我们获得了一个密钥流时,选择不只一个。除了可以进行Message Injection之外,我们还可以进行Authentication Spoofing。WEP使用Challenge-Response的方式进行身份验证,一个标准的验证过程如下:
第一步
客户端---------验证请求--------------->AP
第二步
客户端AP
第四步
客户端<-----验证结果(成功或失败)---AP
这一过程也可以抽象为图5。

图5 基本验证流程
我们只要获得了密钥流,就能成功通过验证。另外,我们可以看到,这种验证方式局限于对用户合法性的验证,而不能实现对多用户的身份验证。
2.2.4人为因素
IVCollision的存在主要是IV长度过小造成的,除此以外,还有其它原因。由于人的惰性,用户往往并不愿意经常更改密钥。(几个小时一次,也就是当IV资源耗尽后及时更改秘钥。)这是人为因素。当然,一些厂商也逃脱不了责任,比如某款无线NIC在每次初始化的时候IV都会重置为0,发送的每个数据包的IV依次递增,这是十分糟糕的,因为它使得IV重复使用的频率更高,使攻击者有更大的可能猜中IV。
2.2.5 WEP加密算法RC4
2.2.5.1 RC4的失误
首先要明确的是,RC4密码属于流密码(stream cipher),其加密和解密的过程如下:
加密:Plaintext XOR Keystream=Ciphertext。
解密:Ciphertext XOR Keystream=Plaintext。
RC4密码作为一种流密码,其安全程度取决于密钥流的随即程度。流密码的密钥流的随机程度并不高,因此在安全上存在一定的风险。而完全随机的密钥流,即一次性密码本(one-time pad),虽然十分安全,但是使用起来要求十分苛刻:1、密钥流必须完全随机;2、密钥流必须与待加密的数据等长;3、不能重复使用。因此使用一次性密码本会给带宽造成很大的压力。一次性密码本也因为这些原因只在极少数的场合使用。而WEP呢,虽然安全性较低,在一些要求不高的地方也就将就用了,尽管当初 802.11研发小组在选择RC4作为WEP的加密引擎时以为RC4十分安全,而事实证明他们错了。
2.2.5.2FMS攻击
谈到WEP中的RC4,就不能不说FMS攻击。这种攻击方式最初由Scott Fluhrer、Itsik Mantin和Adi Shamir在他们的论文《Weaknesses in the Key Scheduling Algorithm of RC4》中提出,因此这种攻击方式名为FMS攻击,即Fluhrer-Mantin-Shamir攻击。802.11 Frame以SNAP标头为首,而SNAP的第1个字节为0xAA,于是我们只要将0xAA与加密后产生的第1个字节进行异或就能够得到密钥的第1个字节。继续深入,由于WEP采用RC4作为加密引擎,密钥中的各个字符对加密后的输出的影响大小不同,这种现象直接导致了弱IV(weak IV)的存在。弱IV与密钥的特定字节有着潜在的联系,每个弱IV都会泄露密钥特定字节的信息。弱IV的基本格式为N+3:255:X。约定密钥的首字节位置为0。其中,N为与弱IV泄露的密钥信息相对应的字节;255是固定的,它是由KSA(Key Scheduling Algorithm)数组的长度减去1得到的;X代表[0,255]内的任意整数,它是不确定的。举个例子,如果弱IV中的N为0,那么该弱IV就会泄露密钥中第1个字节的信息,这对破解的帮助很大。并且,即使密钥很长,也没多大影响,因为运用FMS攻击使得破解密钥中的每个字节的速度呈线性上升趋势。这是十分可怕的。根据上面所讲的,我们还可以得知在64-bit Key条件下,基本的弱IV的个数为:5*1*256=1280。(该环境下弱IV的首字节的取值范围为[3,7]内的整数。)而至今为止,发现的弱IV 大概有9000多个了。目前,AirSnort就可以利用这一弱点。
3.改进
为了克服WEP的这些缺陷,人们在WEP的基础上做了些改进,比如推出了WEP2,针对IV弱点编制了动态分配密钥的动态WEP等。然而,由于是在原先 WEP基础上做的改进,它们仍然无法克服WEP在根本上的一些问题。但这并非是说WEP应该被抛弃,因为WEP对设备的要求比较低,并且对一些基本的应用还是能够满足的,WEP在当今的条件下仍然起着不可或缺的作用。 -----验证结果(成功或失败)---apbr>
1.背景
WEP(Wired Equivalent Protocol),即有线等效协议。从名字上就可以看出,WEP旨在实现无线环境与有线环境的一致性,保障无线环境安全。作为一种链路层协议,WEP并非是802.11标准所要求的,它只是一种可选的安全解决方案。然而,由于无线环境的复杂性,WEP并未不负众望地实现最初的宗旨,相反,它的缺陷随着无线技术的发展而逐渐暴露出来。
通信安全分三个主要方面:机密性(confidentiality)、完整性(integrity)、真实性(authentication)。机密性旨在保证数据不被未被授权的第三方拦截,比如通过加密来防止数据被窃听,这点对使用广播方式的无线环境尤为重要;完整性旨在保证数据不被修改,这可以通过一些效验手段来实现;真实性旨在保证数据源的合法性。其中,真实性是任何安全策略的基础,授权(authorization)和访问控制(access control)均建立在真实性之上。为了实现这三个主要方面的目标,IEEE(Institute of Electrical and Electronics Engineers)在WEP的最初设计时做了很多工作。然而,WEP由于其算法的不可靠,在安全架构中留下了很大的隐患。
2.WEP安全架构、缺陷及其攻击方法
2.1 基本加密流程
在最初的802.11标准中规定的密钥种子的长度为64-bit,其中有40位被两个工作站间传输数据时共享的密码占用。由于WEP使用RC4算法进行加密,因此WEP对密钥的长度并没有特别的要求。有些厂家为了提高数据的安全性,在产品中提供对128-bit WEP(有些地方也称之为WEP-104或104-bit keys)种子的支持,128位中有104位是不公开的。然而由于对称算法RC4自身的缺陷,这种增大密钥长度的做法是否能提高安全性还是值得商榷的。除此以外,由于一个用作密码的ASCII字符的最高位为0,一个密钥的取值范围受到了一定的限制,这使得解密难度在一定程度上得到降低。而彩虹表的出现,使得破解密码的难度大为降低。
为了实现完整性这一目标,WEP使用了CRC(Cyclic Redundancy Check)机制,然而CRC在密码学上并不具有安全性,因为它是通过直接的数学运算来实现的,而不是散列函数。这使得攻击者能够修改数据而并不变更数据的CRC的效验值。这给WEP造成了很大的安全隐患。
图1为WEP加密的大致流程。

图1 WEP加密大致过程
首先,1个24位的IV(Initialization Vector,初始化向量)和一个40位或104位的秘钥结合,使每个数据包都有不同的RC4 Key。结合产生的初始密钥被输入到RC4 PRNG(Pseudo Random Number Generator,伪随机数生成器,用于将密钥展开为密钥流)中,产生一个和初始密钥等长的伪随机数密钥流,这个过程可以用公式表示为Keystream=RC4(IV•Secret Key)(如图2),而还原数据时要求双方拥有相同的秘钥并使用相同的算法将密钥展开为伪随机数序列(pseudo random sequence)。接着,产生的密钥流和数据以及数据的CRC效验值的结合体进行异或操作,最终产生加密后的数据,并附加一个24位的IV准备传输。

图2 WEP加密流程图
2.2 IV碰撞(IV Collision)攻击
2.2.1 解密
由于共享密钥(shared key)中的24-bit IV是以明文发送的,因此一个64位的WEP密钥相当于只加密了40位。(如图3)由IV的长度我们可以推算出,所有可能的IV值的个数为:2^24=16777216。可见IV的取值范围不大,这使得IV资源会在几小时内被用尽,导致不同数据包可能重复使用一个IV,这意味着它们使用的密钥流也是一样的。如果我们知道第一个原始数据和基于同一密钥流的第一、二个原始数据加密后的内容,我们就可以演算出第二个原始数据,如图4。

图3 共享密钥大体结构

图4 IV重用缺陷利用
因为加密后的数据是由密钥流与原始数据进行异或操作得到的,而异或操作是可逆的,只要获得原始数据和加密后的数据,我们就能算出密钥流。如果我们足够多的以相同密钥流加密的数据包,当相同IV重复使用的次数达到一定程度时,我们就有可能破解出秘钥。即使没能破解出秘钥,我们也能从加密的数据中推出许多有用的信息。
其代数原理如下:
C1=P1 XOR RC4(IV,Keystream)
C2=P2 XOR RC4(IV,Keystream)
C1 XOR C2=(P1 XOR RC4(IV,Keystream))XOR(P2
XOR RC4(IV,Keystream)) =P1 XOR P2
其中,C1(Ciphertext1)是由P1(Plaintext1)和密钥流RC4(IV,Keystream)异或得到的,C2(Ciphertext2)是由P2(Plaintext2)和相同的密钥流RC4(IV,Keystream)异或得到的,因此可以得出C1和 C2的异或结果就是P1和P2的异或结果。
2.2.2信息注入(Message Injection)
如果我们获得了一个密钥流,我们就能进行MessageInjection。我们可以把要发送的数据及其ICV(IntegrityCheck Value)的结合体用获得的密钥流进行加密,再附加上该密钥流所对应的合适的IV就能构造出一个数据包,由于IV可能被重复使用,并且802.11标准要求丢失的数据必须重发,接收端会将我们发送的这个数据包视为合法的数据包。
2.2.3认证欺骗(AuthenticationSpoofing)
当我们获得了一个密钥流时,选择不只一个。除了可以进行Message Injection之外,我们还可以进行Authentication Spoofing。WEP使用Challenge-Response的方式进行身份验证,一个标准的验证过程如下:
第一步
客户端---------验证请求--------------->AP
第二步
客户端AP
第四步
客户端<-----验证结果(成功或失败)---AP
这一过程也可以抽象为图5。

图5 基本验证流程
我们只要获得了密钥流,就能成功通过验证。另外,我们可以看到,这种验证方式局限于对用户合法性的验证,而不能实现对多用户的身份验证。
2.2.4人为因素
IVCollision的存在主要是IV长度过小造成的,除此以外,还有其它原因。由于人的惰性,用户往往并不愿意经常更改密钥。(几个小时一次,也就是当IV资源耗尽后及时更改秘钥。)这是人为因素。当然,一些厂商也逃脱不了责任,比如某款无线NIC在每次初始化的时候IV都会重置为0,发送的每个数据包的IV依次递增,这是十分糟糕的,因为它使得IV重复使用的频率更高,使攻击者有更大的可能猜中IV。
2.2.5 WEP加密算法RC4
2.2.5.1 RC4的失误
首先要明确的是,RC4密码属于流密码(stream cipher),其加密和解密的过程如下:
加密:Plaintext XOR Keystream=Ciphertext。
解密:Ciphertext XOR Keystream=Plaintext。
RC4密码作为一种流密码,其安全程度取决于密钥流的随即程度。流密码的密钥流的随机程度并不高,因此在安全上存在一定的风险。而完全随机的密钥流,即一次性密码本(one-time pad),虽然十分安全,但是使用起来要求十分苛刻:1、密钥流必须完全随机;2、密钥流必须与待加密的数据等长;3、不能重复使用。因此使用一次性密码本会给带宽造成很大的压力。一次性密码本也因为这些原因只在极少数的场合使用。而WEP呢,虽然安全性较低,在一些要求不高的地方也就将就用了,尽管当初 802.11研发小组在选择RC4作为WEP的加密引擎时以为RC4十分安全,而事实证明他们错了。
2.2.5.2FMS攻击
谈到WEP中的RC4,就不能不说FMS攻击。这种攻击方式最初由Scott Fluhrer、Itsik Mantin和Adi Shamir在他们的论文《Weaknesses in the Key Scheduling Algorithm of RC4》中提出,因此这种攻击方式名为FMS攻击,即Fluhrer-Mantin-Shamir攻击。802.11 Frame以SNAP标头为首,而SNAP的第1个字节为0xAA,于是我们只要将0xAA与加密后产生的第1个字节进行异或就能够得到密钥的第1个字节。继续深入,由于WEP采用RC4作为加密引擎,密钥中的各个字符对加密后的输出的影响大小不同,这种现象直接导致了弱IV(weak IV)的存在。弱IV与密钥的特定字节有着潜在的联系,每个弱IV都会泄露密钥特定字节的信息。弱IV的基本格式为N+3:255:X。约定密钥的首字节位置为0。其中,N为与弱IV泄露的密钥信息相对应的字节;255是固定的,它是由KSA(Key Scheduling Algorithm)数组的长度减去1得到的;X代表[0,255]内的任意整数,它是不确定的。举个例子,如果弱IV中的N为0,那么该弱IV就会泄露密钥中第1个字节的信息,这对破解的帮助很大。并且,即使密钥很长,也没多大影响,因为运用FMS攻击使得破解密钥中的每个字节的速度呈线性上升趋势。这是十分可怕的。根据上面所讲的,我们还可以得知在64-bit Key条件下,基本的弱IV的个数为:5*1*256=1280。(该环境下弱IV的首字节的取值范围为[3,7]内的整数。)而至今为止,发现的弱IV 大概有9000多个了。目前,AirSnort就可以利用这一弱点。
3.改进
为了克服WEP的这些缺陷,人们在WEP的基础上做了些改进,比如推出了WEP2,针对IV弱点编制了动态分配密钥的动态WEP等。然而,由于是在原先 WEP基础上做的改进,它们仍然无法克服WEP在根本上的一些问题。但这并非是说WEP应该被抛弃,因为WEP对设备的要求比较低,并且对一些基本的应用还是能够满足的,WEP在当今的条件下仍然起着不可或缺的作用。 -----验证结果(成功或失败)---apbr>


