WEP安全性能研究及其攻击
SI+B-1[1]<I
SI+B-1[1]+SI+B-1 [SI+B-1[1]]=I+B
考虑第I+B次迭代:
iI+B=I+B
jI+B=jI+B-1+S[I+B]+K[(I+B) mod L]
交换SI+B-1[iI+B],SI+B-1 [jI+B]:
SI+B [iI+B]=SI+B-1 [jI+B] ,
SI+B [jI+B]=SI+B-1 [iI+B]
在满足上述条件的情况下,S[1],S[S[1]]和S[S[1]+S[S[1]]]这三个元素以很高的概率(大于5%)均不参与KSA剩余的交换操作,也即首字节输出以很高的概率满足:
Out=SI+B-1[jI+B]=SI+B-1[jI+B-1+K[B]+SI+B-1[I+B]]
这种情况下,通过重建KSA,能够成功地从首字节输出中获取加密密钥中某个特定字节K[I+B]的信息:
K[B]=S[Out]-jI+B-1-SI+B-1[I+B]]
S[Out]表示元素Out在状态表中的位置。
从前面分析可以看出,在满足SI[1]<I+B且SI[1]+SI[SI[1]]=I+B条件的情况下,可以准确重建K[B]的概率大于5%,远远大于1/256。这样通过收集足够数量的满足上述条件的数据包,就可以成功地重建密钥K[B]。同理,在成功重建K[B]的基础上,就可以用类似的方法重建所有密钥。
具体算法如下:
RecoverWepKey(CurrentKeyGuess,KeyByte)
Counts[0...255]=0
For each packet->P
If Resolved﹖(P.IV)
Counts[SimulateResolved(P,CurrentKeyGuess)]+=1
For each SelectMaximalIndexesWithBias(Counts)->ByteGuess
CurrentKeyGuess[KeyByte]=ByteGuess
If Equal﹖(KeyByte,KeyLength)
If CheckChecksums(CurrentKeyGuess)
Return CurrentKeyGuess
Else
Key=RecoverWEPKey(CurrentKeyGuess,KeyByte+1)
If notEqual﹖(Key,Failure)
Return Key
Return Failure
2.3 算法改进
可以看出,以上的攻击方法中,所有关于K[I+B]的预测均是基于其前面所有密钥(K[0],...,K[I+B-1])已知的基础上。换言之,前面的预测错误将直接导致K[I+B]的错误预测。那么能否从K[I+B]中推测出K[0],...,K[I+B-1]的信息?
考虑KSA,如果经过I次迭代后,满足:
I<SI[1]+SI[SI[1]]=I+B≤L
SI[1]≤I
则SI[1]和SI[SI[1]]以很大的概率((254/256)L-I≈1)不参与第I步与第L步之间的迭代。同时,j以很大的概率不指向SI[I],...,SI[I+B]这几个元素。
即:
SI[1]=SI+B-1[1] iL-1=L-1
jI+B-1=jI+SI[I]+...+SI[I+B-1]+K[I]+...+K[I+B-1]
考虑第L步:
iI+B=I+B jI+B=jI+B-1+SI[I+B]+K[I+B]
交换S[i],S[j],则SI+B[I+B]=SI+B-1[jI+B]。
如果SI+B-1[jI+B],SI+B-1[1]和SI+B-1[SI+B-1[1]]不参与剩余的交换操作,那么输出为:
Out=SI+B-1[jI+B]
而由前面的分析可以看出,SI+B-1[jI+B]以很高的概率(约为1)没有参与前面的交换操作,也即SI+B-1[jI+B]=jI+B。由此可知
Out=jI+SI[I]+...+SI[I+B-1]+K[I]+...+K[I+B-1]+SI[I+B]+K[I+B]
利用上述关系可以成功地推出不同K字节之间的关系,从而加速攻击。
另外,由于密钥管理时密钥需要手工输入,所以绝大多数情况下,密钥只是ASIIC字符。这样大大减小了密钥的搜索空间,提高了攻击效率。
3 实验结果与结论
为对上述算法进行验证,进行了实验。实验中所采用的硬件为朗讯的ORiNOCO无线网卡,操作系统为Redhat7.1。实验结果表明,本文所提出的算法平均在收集100万到200万加密数据包的情况下,成功地恢复出了原加密密钥。与FluhrerS.、MantinI.、 Shamir A.所提出的KSA攻击需要400万到600万数据包相比,攻击效率有了很大提高。
基于以上分析,不难看出:现有WEP加密中存在重大的安全漏洞,这种情况并不因加密密钥长度的增加而得到改善,所以在WEP2中同样存在。为此,建议现有的802.11用户:
.假设802.11链路层并不提供安全措施;
.为保障网络通信的安全,使用IPSEC或者SSH等高层加密手段;
.把所有通过802.11接入的用户置于防火墙之外。
.经常更换密钥,同时针对密钥应尽量采用某种HASH算法,避免采用全为ASIIC字符的加密密钥。