参考:
https://blog.csdn.net/huangyimo/article/details/82970903
RC4加密算法
RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变的加密算法簇。起初该算法是商业机密,直到1994年,它才公诸于众。RC4属于对称密码算法中的序列密码(stream cipher,流密码),它是可变密钥长度,面向字节操作的序列密码。它是一种基于非线性数据表变换的序列密码,它以一个足够大的数据表为基础,对表进行非线性变换,产生非线性的序列密钥。
RC4算法取n=8,使用2^n=2^8=256个字节构成的S表和两个字节指针(i,j),总共需要258字节的存储空间。
补:序列密码(流密码):
流密码也属于对称密码,但与分组加密算法不同的是,流密码不对明文数据进行分组,而是用密钥生成与明文一样长短的密码流对明文进行加密,加解密使用相同的密钥。也就是说,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。
一、RC4相关变量
介绍RC4算法的几个关键变量:
1)密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是500字节,那么密钥流也是500字节。当然,加密生成的密文也是500字节,因为密文第i字节=明文第i字节^密钥流第i字节;
2)状态向量S:长度为256,S[0],S[1].....S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,只不过值的位置发生了变换;
3)临时向量T:长度也为256,每个单元也是一个字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T;
4)密钥K:长度为1-256字节,注意密钥的长度keylen与明文长度、密钥流的长度没有必然关系,通常密钥的长度16字节(128比特)。
二、RC4:KSA+PRGA
1、密钥调度算法KSA(Key Scheduling Algorithm):
例如:RC4取n=8,使用2^8=256个字节,加上i,j两个字节==258个字节
*KSA作用是实现对原始数据的随机化排序---打乱S表,由输入的随机密钥K(典型长度为64或128比特)生成一个元素0,1.….N-1组成的初始排列S{0,1…,N-1},N一般为256;KSA的算法如图所示。
2、 伪随机密钥序列生成算法PRGA(Pseudo-Random Generation-Algorithm):
*PRGA作用是随机选取数据作为密钥字节---输出密钥流,PRGA借由KSA产生的S生成伪随机密钥序列Z[i]。
注:RC4序列密码算法即密钥产生算法;加密仅仅为明文密钥模2相加。
三、RC4的加密流程
1)初始化S和T
根据秘钥生成S盒;
初始化S盒:直接构造一个S[256],遍历0-255,然后创建临时T[256],用于存储种子秘钥,长度不够循环填充直到T被填满,根据T[i]将S[i]与S中的另外一个字节对换,对S的操作仅仅是交换,唯一改变的是位置,但里面的元素是没变的还是0-255;
for i=0 to 255 do
S[i]=i;
T[i]=K[ I mod keylen ];
2)初始排列S
j=0;
for i=0 to 255 do
j= ( j+S[i]+T[i])mod256;
swap(S[i],S[j]);
3)产生密钥流
由于异或运算的对合性,RC4加密解密使用同一套算法:
i,j=0;
for r=0 to len do //r为明文长度,r字节
i=(i+1) mod 256;
j=(j+S[i])mod 256;
swap(S[i],S[j]);
t=(S[i]+S[j])mod 256;
k[r]=S[t];
四、RC4特点
RC4算法采用的是OFB(输出反馈工作方式),所以可以用一个短的密钥产生一个相对较长的密钥序列。OFB方式的最大的优点是消息如果发生错误(这里指的是消息的某一位发生了改变,而不是消息的某一位丢失),错误不会传递到产生的密钥序列上;缺点是对插入攻击很敏感,并且对同步的要求比较高。
1)RC4算法简单,易于实现。
2)算法运行速度快,加密速度快;RC4的执行速度相当快,它大约是分块密码算法DES的5倍,是3DES的15倍,且比高级加密算法AES也快很多。
3)密钥长度可变,可变范围为1-256字节(8-2048比特),一般用256个字节。
4)安全性:RC4有限状态自动机的每一个状态,产生一个密钥字符,由于S表有256个字节元素,可能的排列有256!,约为2的1600次幂,因此可以抵抗穷举攻击。算法安全性比较高,RC4的安全保证主要在于输入密钥的产生途径,只要在这方面不出现漏洞,采用128bit的密钥是非常安全的。在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以可以预见RC4的密钥范围仍然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。实际上,如今也没有找到对于128bit密钥长度的RC4加密算法的有效攻击方法。
五、RC4应用
Windows、Lotus Notes等软件系统;
SSL、TSL、WEP等协议;
APICloud;
补:RC5!
注:
如有错误、侵权,请联系笔者更改删除!!!