RC4加密算法是大名鼎鼎的RSA三人組中的頭號人物Ron Rivest在1987年設計的密鑰長度可變的流加密算法簇。之所以稱其為簇,是由于其核心部分的S-box長度可為任意,但一般為256字節(jié)。該算法的速度可以達到DES加密的10倍左右。
RC4算法的原理很簡單,包括初始化算法和偽隨機子密碼生成算法兩大部分。假設S-box長度和密鑰長度均為為n。先來看看算法的初始化部分(用類C偽代碼表示):
for (i=0; i<n; i++)
s=i;
j=0;
for (i=0; i<n; i++)
{
j=(j+s+k)%256;
swap(s, s【j】);
}
在初始化的過程中,密鑰的主要功能是將S-box攪亂,i確保S-box的每個元素都得到處理,j保證S-box的攪亂是隨機的。而不同的S-box在經(jīng)過偽隨機子密碼生成算法的處理后可以得到不同的子密鑰序列,并且,該序列是隨機的:
i=j=0;
while (明文未結(jié)束)
{
++i%=n;
j=(j+s)%n;
swap(s, s【j】);
sub_k=s((s+s【j】)%n);
}
得到的子密碼sub_k用以和明文進行xor運算,得到密文,解密過程也完全相同。
由于RC4算法加密是采用的xor,所以,一旦子密鑰序列出現(xiàn)了重復,密文就有可能被破解。關于如何破解xor加密,請參看Bruce Schneier的Applied Cryptography一書的1.4節(jié)Simple XOR,在此我就不細說了。那么,RC4算法生成的子密鑰序列是否會出現(xiàn)重復呢?由于存在部分弱密鑰,使得子密鑰序列在不到100萬字節(jié)內(nèi)就發(fā)生了完全的重復,如果是部分重復,則可能在不到10萬字節(jié)內(nèi)就能發(fā)生重復,因此,推薦在使用RC4算法時,必須對加密密鑰進行測試,判斷其是否為弱密鑰。
而且,根據(jù)目前的分析結(jié)果,沒有任何的分析對于密鑰長度達到128位的RC4有效,所以,RC4是目前最安全的加密算法之一,大家可以放心使用!