0x01 RC4概述
RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。
RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。
在存储大量的信息时,RC4展现出它的实用性,面对大量的数据,运行简单,速度快。
RC4的类型
- SPRITZ: Spritz 可用于构建加密散列函数、确定性随机位生成器 (DRBG)、n 支持经过身份验证的关联数据加密 (AEAD) 的加密算法。
- RC4A: Souraduyti Paul 和 Bart Preneel 提出了一种 RC4 变体,他们称之为 RC4A,比平均 RC4 密码更快、更强, RC4A 在其密码中没有使用真正的随机数。
- VMPC: VMPC 是 RC4 的另一个变体,代表可变修改的排列组合。
- RC4A+: RC4A+ 是 RC4 的修改版本,具有更复杂的三阶段密钥调度,所需时间大约是 RC4 的三倍,以及更复杂的输出函数,它为每个字节输出在 S 数组中执行四次额外查找,大约需要 1.7只要基本 RC4 倍。
RC4的应用
RC4 使用在各种应用。
- 1997 年的 WEP 和 2003 年的 WPA
- 从 1995 年开始在 SSL 中的应用,它是 1999 年 TLS 的继承者
- RC4 因其简单、速度和简化了软件和硬件的实现
0x02 RC4历史
Ron Rivest在1987年提出了RC4加密方法,开始他并不打算公开此密码的加密规则,RC4 是商业机密,不公开密码的加密规则会提高安全性,不过在1994年,一位匿名人士在公共场所张贴了对密码规则的描述。之后RC4被使用,直到 2003 年和 2013 年在 RC4 中发现严重漏洞。
RC4 依赖于:
- 输入信息:该工具生成一个无法猜测的八位数字密码
- 密钥流:密码对纯文本进行加扰
- 产品:X-OR 操作将密钥流与密码组合在一起
0x03 RC4工作规则
RC4依赖于随机数生成器,但不需要线性反馈移位寄存器。虽然互联网很多领域已经明确禁止使用 RC4,但是RC4的加密规则还是很值得学习的。
- 输入密钥+需要加密的信息
- 通过密钥逐字节的对信息进行加密
- 接收方通过密钥解密数据
RC4 的加密工具非常复杂。它们通常包含 256 个字节,并且文本在被认为完整之前多次通过数学规则。
0x04 RC4优缺点
优点:
- 与其他密码相比,RC4 的运算速度更快
- RC4 流密码易于使用
- 密钥大小可变
- 不需要更多内存
- 面向字节操作
- RC4 流密码编码能力强,易于实现
缺点:
- 容易受到攻击
- RC4 流密码不能在小数据流上实现
- 使用相同密钥安全性更低
- RC4 流密码不提供身份验证
0x05 RC4加解密过程
在加密和解密期间,不断生成密钥流字节,它们被添加到消息字节中。密钥流字节是根据T表生成的。
执行以下步骤:
- 创建了两个辅助变量p1和p2并将其设置为0
- 变量p1增加1并且结果是模除以256
- 变量p2在由临时变量p1 (T[p1])确定的位置处增加了数组T中的值。然后,结果被模除以256。
- 数组中位置p1的值与数组中位置p2的值交换。
- 数组中位置p1的值与数组中位置p2的值相加。然后,将结果模除以256并分配给新的辅助变量p3。
- 数组中位置p 3处的值是一个新的密钥流字节。
密钥流初始化
for i from 0 to 255
T[i] := i
endfor
x_temp := 0
for i from 0 to 255
x_temp := (x_temp + T[i] + K[i mod k_len]) mod 256
swap(T[i], T[x_temp])
endfor
密钥流生成
p1 := 0
p2 := 0
while GeneratingOutput
p1 := (p1 + 1) mod 256
p2 := (p2 + T[p1]) mod 256
swap(T[p1], T[p2])
send(T[(T[p1] + T[p2]) mod 256])
endwhile