Rivest Cipher 4

性质

串流加密,密钥长度可变,对称加密,加密解密使用同一套算法

  • 串流加密:即密钥是通过一个随机种子通过算法得到的伪随机密钥流,用这一串密钥加密或解密。使加密过程有完善保密性(密钥长度不短于明文长度)
  • 对称加密:加密解密双方使用同一个密钥加密解密或双方使用的是两个可以简单地相互推算的密钥
  • 加密解密使用同一套算法:RC4一般使用异或加密,由于异或的对合性($f(f(x))=x$,对任意x均成立),可以使用相同算法加密

过程

初始化(KSA)

  1. 初始化S盒

    1
    2
    for i in range(256):
    S.append(i)
  2. 打乱S盒(这个算法可以保证每一项都被换过)

    1
    2
    3
    4
    key = ...
    for i in range(256):
    j = (j + S[i] + key[i % len(key)]) % 256
    swap(S[i],S[j])

伪随机子密码生成(PRGA)

1
2
3
4
for i in range(len(m)):
i,j = (i+1)%256,(j+1)%256
swap(S[i],S[j])
c = m[i] ^ S[(S[i] + S[j]) % 256]

注:最后的算法不一定是标准的,但是只要是原文和一个在过程中产生的值异或,就可以算作RC4。


破解方法

缺陷

[等待施工][QAQ]