注意,本文中兩個元素操作均為模256操作。
基于以上分析,可以計算出狀態(tài)表中各個元素滿足B的概率。為統(tǒng)計狀態(tài)表中元素滿足上式的概率,采用8比特RC4算法進(jìn)行實驗。下面為100000次實驗中S[E]中前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
結(jié)果表明,經(jīng)過KSA后,狀態(tài)表中前面的一些元素實際值與用B所預(yù)測出的值強相關(guān)。
2.2 弱密鑰
首先定義it,jt分別為KSA算法經(jīng)過t步后相應(yīng)的兩個計數(shù)器的值,St為KSA經(jīng)t步后狀態(tài)盒的狀態(tài)。從其流程可以看出,PRNG首字節(jié)輸出僅僅依賴于狀態(tài)盒S中的三個值:S[1]、S[S[1]]和S[S[1]+S[S[1]]]。如果此三個值為已知,那么就可以完全確定PRNG的首字節(jié)輸出。
KSA經(jīng)過i步操作后(i>1),設(shè)Si[1]=X,S[X]=Y,假設(shè)j為均勻分布的隨機數(shù),那么S[1],S[X],S[X+Y]均不參與剩余交換的概率約為e-3≈0.05,此時RC4的首字節(jié)輸出為S[X+Y]。
假設(shè)IV的長度為I個字節(jié),IV附加在密鑰Key前面組成加密密鑰K,即K=IV|Key,且我們已知K中前B個字節(jié)的值(初始化時B=0)。如果KSA經(jīng)過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剩余的交換操作,也即首字節(jié)輸出以很高的概率滿足:
Out=SI+B-1[jI+B]=SI+B-1[jI+B-1+K[B]+SI+B-1[I+B]]
這種情況下,通過重建KSA,能夠成功地從首字節(jié)輸出中獲取加密密鑰中某個特定字節(jié)K[I+B]的信息:
K[B]=S[Out]-jI+B-1-SI+B-1[I+B]]
S[Out]表示元素Out在狀態(tài)表中的位置。
從前面分析可以看出,在滿足SI[1]<I+B且SI[1]+SI[SI[1]]=I+B條件的情況下,可以準(zhǔn)確重建K[B]的概率大于5%,遠(yuǎn)遠(yuǎn)大于1/256。這樣通過收集足夠數(shù)量的滿足上述條件的數(shù)據(jù)包,就可以成功地重建密鑰K[B]。同理,在成功重建K[B]的基礎(chǔ)上,就可以用類似的方法重建所有密鑰。
具體算法如下:
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 算法改進(jìn)
可以看出,以上的攻擊方法中,所有關(guān)于K[I+B]的預(yù)測均是基于其前面所有密鑰(K[0],...,K[I+B-1])已知的基礎(chǔ)上。換言之,前面的預(yù)測錯誤將直接導(dǎo)致K[I+B]的錯誤預(yù)測。那么能否從K[I+B]中推測出K[0],...,K[I+B-1]的信息?
考慮KSA,如果經(jīng)過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]
利用上述關(guān)系可以成功地推出不同K字節(jié)之間的關(guān)系,從而加速攻擊。
另外,由于密鑰管理時密鑰需要手工輸入,所以絕大多數(shù)情況下,密鑰只是ASIIC字符。這樣大大減小了密鑰的搜索空間,提高了攻擊效率。
3 實驗結(jié)果與結(jié)論
為對上述算法進(jìn)行驗證,進(jìn)行了實驗。實驗中所采用的硬件為朗訊的ORiNOCO無線網(wǎng)卡,操作系統(tǒng)為Redhat7.1。實驗結(jié)果表明,本文所提出的算法平均在收集100萬到200萬加密數(shù)據(jù)包的情況下,成功地恢復(fù)出了原加密密鑰。與FluhrerS.、MantinI.、 Shamir A.所提出的KSA攻擊需要400萬到600萬數(shù)據(jù)包相比,攻擊效率有了很大提高。
基于以上分析,不難看出:現(xiàn)有WEP加密中存在重大的安全漏洞,這種情況并不因加密密鑰長度的增加而得到改善,所以在WEP2中同樣存在。為此,建議現(xiàn)有的802.11用戶:
.假設(shè)802.11鏈路層并不提供安全措施;
.為保障網(wǎng)絡(luò)通信的安全,使用IPSEC或者SSH等高層加密手段;
.把所有通過802.11接入的用戶置于防火墻之外。
.經(jīng)常更換密鑰,同時針對密鑰應(yīng)盡量采用某種HASH算法,避免采用全為ASIIC字符的加密密鑰。





