【密码学原理】流密码和RC4算法

流密码

密钥输入到一个伪随机数发生器,该伪随机数发生器产生一串随机的8位数,输出的密钥流和明文流的每个字节进行对位异或运算,得到一个字节,解密时使用相同的伪随机序列。

设计流密码需要注意:

  • 加密序列的周期要长。伪随机数发生器使用的函数产生确定性的位流,该位流最终会出现重复。重复的周期越长,密码分析的难度越大。
  • 密钥流应该尽可能的接近于真随机数流的特征。密钥流的随机特性越好,密文越随机,密码分析难度越大。
  • 上图中伪随机数发生器的输出受到输入密钥K的调节。为了防止穷举攻击,密钥应该足够长,就目前最少应该128位。

分组密码的优点是可以重复使用密钥,但如果流密码对两个文明用相同密钥加密,那么密文分析就相当容易。

RC4算法

RC4是Ron Rivest为RSA公司在1987年设计的一种流密码,密钥长度可变,面向字节操作。分析显示该密码的周期很可能大于10^{100},每输出一个字节的结果仅需要8到16条机器操作指令,软件实现也很快。应用于网络浏览器和服务器同学制定了SSL/TLS标准。

下面为流密码RC4的密钥生成过程。

初始状态的时候,S为0到255的填充,T为密钥K(长度为keylen)的重复填充。

对已经初始填充的S进行初始化置换,置换过程为交换第i个位与第j个位,算法为

j=0;
for i=0 to 255 do
    j=(j+S[i]+T[i]) mod 256;
swap(S[i],T[i]);

完成S的初始化置换后,输入的密钥就不再使用,取代的是S。

密钥流的生成过程如上图所示,其算法为

加密的时候,将k的值与明文的下一个字节异或,解密时,将k的值与密文的下一个字节异或。

猜你喜欢

转载自blog.csdn.net/m0_50984266/article/details/108905255