RC4加密算法簡(jiǎn)析
RC4加密算法是大名鼎鼎的RSA三人組中的頭號(hào)人物Ron Rivest在1987年設(shè)計(jì)的密鑰長(zhǎng)度可變的流加密算法簇, RC4是目前應(yīng)用最廣泛的流加密算法,應(yīng)用在安全套接字層(SSL)(用來(lái)保護(hù)網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù))和WEP(無(wú)線網(wǎng)絡(luò)數(shù)據(jù)保護(hù))上。
RC4算法的原理很簡(jiǎn)單,包括初始化算法和偽隨機(jī)子密碼生成算法兩大部分。假設(shè)S-box長(zhǎng)度和密鑰長(zhǎng)度均為為n。先來(lái)看看算法的初始化部分(用類C偽代碼表示):
for (i=0; i s[i]=i;
j=0;
for (i=0; i {
j=(j+s[i]+k[i])%256;
swap(s[i], s[j]);
}
在初始化的過(guò)程中,密鑰的主要功能是將S-box攪亂,i確保S-box的每個(gè)元素都得到處理,j保證S-box的攪亂是隨機(jī)的。而不同的S-box在經(jīng)過(guò)偽隨機(jī)子密碼生成算法的處理后可以得到不同的子密鑰序列,并且,該序列是隨機(jī)的:
i=j=0;
while (明文未結(jié)束)
{
++i%=n;
j=(j+s[i])%n;
swap(s[i], s[j]);
sub_k=s((s[i]+s[j])%n);
}
得到的子密碼sub_k用以和明文進(jìn)行xor運(yùn)算,得到密文,解密過(guò)程也完全相同。
由于RC4算法加密是采用的xor,所以,一旦子密鑰序列出現(xiàn)了重復(fù),密文就有可能被破解。關(guān)于如何破解xor加密,請(qǐng)參看Bruce Schneier的Applied Cryptography一書(shū)的1.4節(jié)Simple XOR,在此我就不細(xì)說(shuō)了。
那么,RC4算法生成的子密鑰序列是否會(huì)出現(xiàn)重復(fù)呢?經(jīng)過(guò)測(cè)試,存在部分弱密鑰,使得子密鑰序列在不到100萬(wàn)字節(jié)內(nèi)就發(fā)生了完全的重復(fù),如果是部分重復(fù),則可能在不到10萬(wàn)字節(jié)內(nèi)就能發(fā)生重復(fù),因此,推薦在使用RC4算法時(shí),必須對(duì)加密密鑰進(jìn)行測(cè)試,判斷其是否為弱密鑰。
而且,根據(jù)目前的分析結(jié)果,沒(méi)有任何的分析對(duì)于密鑰長(zhǎng)度達(dá)到128位的RC4有效,所以,RC4是目前最安全的加密算法之一!呵呵。雖然這么說(shuō),但是,網(wǎng)絡(luò)上永遠(yuǎn)沒(méi)有絕對(duì)的安全。










