RC4

1. 简介

RC4 属于同步流密码,同步流密码的加密器分成密钥流产生器和加密变换器两个部分。

2. 特性

  • 密钥长度可变,面向字节操作;
  • 用置换加密(异或)输入消息,每次一个字节;
  • 至少采用 128128 比特的密钥

3. 加密过程

3.1 密钥调度算法(Key-Scheduling Algorithm, 简称 KSA)

  • 由密钥流决定一个 02550 \sim 255 的置换
  • 初始化时,状态矢量S被设置为 00255255, 即 S[0]=0,S[1]=1,,S[255]=255S[0]=0, S[1]=1, \cdots, S[255]=255
  • 种子密钥 KKLL 个字节,循环填充到矢量 TT256256 个字节中
  • T[i]T[i] 确定将 S[i]S[i] 置换为 SS 中的另一个字节
  • j=(j+S[i]+T[i])mod256j = (j + S[i] + T[i]) \mod 256
  • 由于对S的操作只是置换,因此,SS 仍然为一个 {0,1,,255}\{0,1,\cdots,255\} 的置换
1
2
3
4
5
6
7
8
9
//初始化S和T
for i = 0 to 255 do
S[i] = i;
T[i] = K[i mod L];
//S的初始置换
j = 0;
for i = 0 to 255 do
j = (j + S[i] + T[i])(mod 256)
swap(S[i],S[j]);

3.2 伪随机子密钥生成算法(Pseudo Random-Generation Algorithm, 简称 PRGA)

  • 种子密钥不再使用,重复使用向量S生成密钥流
  • j=(j+S[i])mod256j = (j + S[i]) \mod 256
  • S[i]S[i]S[j]S[j] 进行交换,t=(S[i]+S[j])mod256t = (S[i]+S[j]) \mod 256
  • Ki=S[t]K_i=S[t]
  • S[255]S[255] 完成置换后,操作再从 S[0]S[0] 开始重复
1
2
3
4
5
6
7
8
i = j = 0;
for each message byte Mi
i = (i + 1)(mod 256);
j = (j + S[i])(mod 256);
swap(S[i],S[j]);
t = (S[i] + S[j])(mod 256);
Ki = S[t];
Ci = Mi XOR Ki

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!