当前位置: 首页 > 原创新闻 > RC4加密实验

RC4加密实验

发表于:2021-05-27 15:56 作者: mtr 阅读数(3696人)

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法。

RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box长度和密钥长度均为n。先来看看算法的初始化部分(用类C伪代码表示):

for (i=0; i<n; i++) {

s[i]=i;

}

j=0;

for (i=0; i<n; i++)

{

j=(j+s[i]+k[i])%n;

swap(s[i], s[j]);

}

在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的:

i=j=0;

while (明文未结束)

{

++i%=n;

j=(j+s)%n;

swap(s, s[j]);

sub_k=s((s+s[j])%n);

}

得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。

由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。关于如何破解xor加密,请参看Bruce Schneier的Applied Cryptography一书的1.4节Simple XOR,在此我就不细说了。那么,RC4算法生成的子密钥序列是否会出现重复呢?经过我的测试,存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。

但在2001年就有以色列科学家指出RC4加密算法存在着漏洞,这可能对无线通信网络的安全构成威胁。

以色列魏茨曼研究所和美国思科公司的研究者发现,在使用“有线等效保密规则”(WEP)的无线网络中,在特定情况下,人们可以逆转RC4算法的加密过程,获取密钥,从而将己加密的信息解密。实现这一过程并不复杂,只需要使用一台个人电脑对加密的数据进行分析,经过几个小时的时间就可以破译出信息的全部内容。


实验内容和步骤

解压缩软件包rc4demo.rar,解压后文件目录中的rc4demo.exe即为RC4加解密主程序。

任务一:对自定义字符串做RC4加密

运行主程序rc4demo.exe,程序主界面如下图所示:

1.png

在加密之前,首先要设定密钥,这里我们设定密钥为字符串“abc123456”。密钥设置完后,在明文数据输入框中输入待加密的数据,如“Hello World!”,如下图所示:

2.png

点击RC4加密按钮,就可以在密文数据一栏,看到加密后的数据信息:

3.png

任务二:对RC4加密内容做解密

在任务一加密的基础上,在程序主面板点击RC4解密按钮,即可在解密结果一栏中查看到原始字符串数据,即“Hello World!”,如下图所示:

4.png