1
0
Files
cryptopal_rs/cryptopal_book/src/challenge_56.md
2025-09-02 16:43:02 +08:00

2.3 KiB
Raw Blame History

Challenge 56: RC4 单字节偏差

RC4 是一个流行的流密码,以在 TLS、WPA、RDP 等协议中的使用而著称。

它也易受到显著的单字节偏差影响,特别是在密钥流的早期。这意味着什么?

简单地说:对于密钥流中的给定位置,某些字节比其他字节更(或更不)可能出现。给定足够多的给定明文的加密,攻击者可以使用这些偏差来恢复整个明文。

现在,在线搜索 "On the Security of RC4 in TLS and WPA"。这个网站是您获取 RC4 信息的一站式商店。

点击右侧的 "RC4 biases"。

这些是每个单字节偏差的图表(每页一个)。特别注意 z16、z32、z48 等上的巨大峰值。(注意:这些是一索引的,所以 z16 = keystream[15]。)

这些偏差有多有用?

点击进入研究论文并向下滚动到仿真结果。(顺便说一下,如果您有一些空闲时间,整篇论文都很值得一读。)我们从 2^26 次迭代的清晰峰值开始,但我们恢复前 256 字节中每一个的机会在我们接近 2^32 时接近 1。

有两种方法可以利用这些偏差。第一种方法非常简单:

  1. 全面了解密钥流偏差。
  2. 在不同密钥下加密未知明文 2^30+ 次。
  3. 将密文偏差与密钥流偏差进行比较。

这样做需要对密钥流的每个字节的偏差有深入了解。但事实证明,如果我们对明文有一些控制权,我们只需要几个有用的偏差就可以做得很好。

如何?通过使用对单个偏差的了解作为明文的窥视孔。

解码这个秘密:

QkUgU1VSRSBUTyBEUklOSyBZT1VSIE9WQUxUSU5F

并将其称为 cookie。不要偷看

现在使用它来构建这个加密预言机:

RC4(your-request || cookie, random-key)

在每次调用时使用新的 128 位密钥。

想象这种场景:您想窃取用户的安全 cookie。您可以生成任意请求来自恶意插件或类似的东西并监控网络流量。好吧这是不现实的 - cookie 不会像那样就在请求的开头 - 这只是一个例子!)

您可以通过请求 "/"、"/A"、"/AA" 等来控制 cookie 的位置。

为几个选定的索引z16 和 z32 是好的)构建偏差映射并解密 cookie。