WEP安全性能研究及其攻击
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步:
《WEP安全性能研究及其攻击(第4页)》