7.2 RC4加密算法详解 – lmn-【密码学】小世界-安全文库-NGC660安全实验室

7.2 RC4加密算法详解 – lmn

RC4加密算法详解 – lmn

m_f774d76f839a7ccb9a4ecd9034b89e66_r

0x01 RC4概述

RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。

RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。
m_a79b014986a5cd347f664bf35c99b487_r

在存储大量的信息时,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 因其简单、速度和简化了软件和硬件的实现
    m_ba5b55dab34618ad2ae5f0c37e183e79_r

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表生成的。
m_6ceb089ffded4d3852e0d71d38684b66_r

执行以下步骤:

  • 创建了两个辅助变量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
请登录后发表评论

    请登录后查看回复内容