RC4是Ron Rivest在1987年为RSA Security发明的Rivest Cipher 4。它是流密码。流密码器逐字节地对数据流进行操作。 RC4流密码由于其简单性和操作速度而成为最广泛使用的流密码之一。它是具有面向字节操作的可变密钥大小的流密码。它使用64位或128位密钥大小。它通常用于安全套接字层(SSL),传输层安全性(TSL)等应用程序中,并且还用于IEEE 802.11无线LAN std。
为什么加密很重要?
通过加密可以防止未经授权的数据访问。如果我们执行加密,则第三方将无法访问我们共享或接收的数据。加密是通过使用秘密密钥来完成的,或者可以说是通过使用公共密钥和私有密钥来进行的。发送者和接收者都具有其公共密钥和私有密钥,通过它们执行明文的加密和密文的解密。
RC4加密的历史
RC4由Ron Rivest于1987年设计。他在RSA Security下工作。 Rivest Cipher 4是官方名称,也称为Ron’s Code。最初,RC4是商业机密,但一旦代码在公共领域传播,它就不再是商业机密。尽管Ron直到2014年在英语维基百科上描述RC4的历史时才公开RC4算法。
RC4的应用
RC4用于各种应用程序,例如1997年的WEP和2003年的WPA。我们还发现RC4在1995年以来在SSL中得到了应用,它是1999年TLS的后继产品。RC4由于其简单性,速度和灵活性而在各种应用程序中使用。简化了软件和硬件的实现。
RC4的类型
有各种类型的RC4,例如Spritz,RC4A,VMPC和RC4A。
- SPRITZ: Spritz可用于构建加密哈希函数,确定性随机位生成器(DRBG),这是一种加密算法,支持对关联数据进行身份验证的加密(AEAD)。
- RC4A: Souraduyti Paul和Bart Preneel提出了RC4变体,他们称之为RC4A,它比RC4更强。
- VMPC: VMPC是RC4的另一种变体,代表可变修改排列组合。
- RC4A +: RC4A +是RC4的修改版,具有更复杂的三相密钥调度,它的耗时是RC4的三倍,并且其输出功能更复杂,该函数在S数组中为每个字节输出执行四个额外的查找,大约需要1.7倍于基本RC4。
算法
该算法对用户选择的1到256字节(8到2048位)的可变长度密钥(K)进行操作,通常在5到16字节之间。为了生成一个256字节的状态向量S,使用了主密钥。
第一步是数组初始化。它是大小为256的字符数组,即S [256]。之后,对于数组的每个元素,我们将S [i]初始化为i。
Code for array initialization:
Char S[256];
int i;
for(i=0;i<256;i++)
S[i] = i
The array will look like -
S[] = {0, 1, 2, 3, ------, 254, 255}
之后,我们将运行KSA算法-
KSA将使用秘密密钥对该阵列进行加扰。 KSA是一个简单的循环,其中有两个变量i和j。我们正在使用这些变量重新排列数组。重新排列阵列是通过使用密钥完成的。
Code for KSA (Key Scheduling Algorithm ) :
int i, j=0;
for(i=0;i<256;i++)
{
j=( j + S[i] + T[i]) mod 256;
Swap(S[i], S[j]);
}
KSA已被加密,S [256]数组用于生成PRGA(伪随机生成算法)。这是实际的密钥流。
Code for PRGA ( Pseudo Random Generation Algorithm ):
i=j=0;
while(true)
{
i = ( i + 1 ) mod 256;
j = ( j + S[i] ) mod 256;
Swap( S[i], S[j] );
t = ( S[i] + S[j] ) mod 256 ;
k = S[t];
}
这是加扰的下一步。
RC4框图
RC4的工作
加密程序
- 用户输入纯文本文件和密钥。
- 然后,加密引擎使用KSA和PRGA算法生成密钥流。
- 现在,此密钥流将与纯文本进行异或,此异或将逐字节完成以生成加密的文本。
- 然后将加密的文本发送到预期的接收者,然后预期的接收者将对文本进行解密,解密后,接收者将获得原始的纯文本。
解密程序
解密是通过对密文执行相同的按字节X-OR操作来实现的。
示例:假设A为纯文本,B为密钥流(A xor B)xor B = A
好处
- RC4流密码易于使用。
- 与其他密码相比,RC4中的运算速度更快。
- RC4流密码编码能力强,易于实现。
- RC4流密码不需要更多的内存。
- RC4流密码在大型数据流上实现。
缺点
- 如果不将RC4与强大的MAC一起使用,则加密容易受到位翻转攻击的攻击。
- RC4流密码不提供身份验证。
- RC4算法在包含新系统之前需要进行其他分析。
- RC4流密码无法在小型数据流上实现。
- RC4无法丢弃输出密钥流的开头,或者无法对算法使用非随机或相关密钥。