在
密码学中,RC4(来自Rivest Cipher 4的缩写)是一种
流加密算法,
密钥长度可变。它加解密使用相同的密钥,因此也属于
对称加密算法。RC4是
有线等效加密(WEP)中采用的加密算法,也曾经是
TLS可采用的算法之一。
RC4已经成为一些常用的协议和标准的一部分,如1997年的
WEP和2003/2004年无线卡的WPA; 和1995年的
SSL,以及后来1999年的
TLS。让它如此广泛分布和使用的主要因素是它不可思议的简单和速度,不管是软件还是硬件,实现起来都十分容易。
RC4算法的原理很简单,包括初始化算法(KSA)和
伪随机子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。先来看看算法的初始化部分(用C代码表示):
其中,参数1是一个256长度的char型
数组,定义为: unsigned char sBox[256];
在初始化的过程中,
密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过
伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将S-box和明文进行xor运算,得到密文,解密过程也完全相同。
参数3是data的长度.
由于
RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。关于如何破解xor加密,请参看Bruce Schneier的Applied Cryptography一书的1.4节Simple XOR,在此我就不细说了。那么,RC4算法生成的子
密钥序列是否会出现重复呢?由于存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。其不足主要体现于,在无线网络中IV(初始化向量)不变性漏洞。
而且,根据分析结果,没有任何的分析对于密钥长度达到128位的RC4有效,所以,RC4是最安全的
加密算法之一,大家可以放心使用!
分布式代码管理网站Github从2015年1月5日将停止对RC4的支持,RC4作为一种老旧的验证和加密算法易于受到黑客攻击。这意味着,用户在使用Windows XP系统上的IE浏览器时将无法进入github.com网站。
2015年,
比利时鲁汶大学的研究人员Mathy Vanhoef及Frank Piessens,公布了针对RC4加密算法的新型攻击程式,可在75小时内取得
cookie的内容。