首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

WEP安全性能研究及其攻击(2)

WEP安全性能研究及其攻击(2)

48个元素满足上式的概率:Probability ?%?
0~7 37.0 36.8 36.2 35.8 34.9 34.0 33.0 32.2
8~15 30.9 29.8 28.5 27.5 26.0 24.5 22.9 21.6
16~23 20.3 18.9 17.3 16.1 14.7 13.5 12.4 11.2
24~31 10.1 9.0 8.2 7.4 6.4 5.7 5.1 4.4
32~39 3.9 3.5 3.0 2.6 2.3 2.0 1.7 1.4
40~47 1.3 1.2 1.0 0.9 0.8 0.7 0.6 0.6
结果表明,经过KSA后,状态表中前面的一些元素实际值与用B所预测出的值强相关。
2.2 弱密钥
首先定义it,jt分别为KSA算法经过t步后相应的两个计数器的值,St为KSA经t步后状态盒的状态。从其流程可以看出,PRNG首字节输出仅仅依赖于状态盒S中的三个值:S[1]、S[S[1]]和S[S[1]+S[S[1]]]。如果此三个值为已知,那么就可以完全确定PRNG的首字节输出。
KSA经过i步操作后(i>1),设Si[1]=X,S[X]=Y,假设j为均匀分布的随机数,那么S[1],S[X],S[X+Y]均不参与剩余交换的概率约为e-3≈0.05,此时RC4的首字节输出为S[X+Y]。
假设IV的长度为I个字节,IV附加在密钥Key前面组成加密密钥K,即K=IV|Key,且我们已知K中前B个字节的值(初始化时B=0)。如果KSA经过I+B-1次迭代后满足:
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万加密数据包的情况下,成功地恢复出了原加密密钥。与Fluhrer?S.、Mantin?I.、 Shamir? A.所提出的KSA攻击需要400万到600万数据包相比,攻击效率有了很大提高。
基于以上分析,不难看出:现有WEP加密中存在重大的安全漏洞,这种情况并不因加密密钥长度的增加而得到改善,所以在WEP2中同样存在。为此,建议现有的802.11用户:
.假设802.11链路层并不提供安全措施;
.为保障网络通信的安全,使用IPSEC或者SSH等高层加密手段;
.把所有通过802.11接入的用户置于防火墙之外。
.经常更换密钥,同时针对密钥应尽量采用某种HASH算法,避免采用全为ASIIC字符的加密密钥。
继承事业,薪火相传
返回列表