对随机数生成器有什么实际攻击吗?

信息安全 Web应用程序 密码学 攻击 随机的
2021-09-01 19:30:51

我正在为开发人员创建一个内部安全课程。为了让它更有趣,我试图用一些真实世界的攻击来强化每一章,但偶然发现了不安全的随机使用部分。

因此,让我们假设开箱即用的 RNG(任何流行的后端语言都可以)以不安全的方式使用(例如,用于生成密码功能)。是否有可以计算 RNG 状态和先前/未来值的分步算法或自动工具?

4个回答

不安全的使用 PRNG:一个非常天真的演示(如果你想做一个实验)是使用从当前时间派生的种子为开源密码管理器生成一个伪随机密码(你可以添加一些其他的如果您想让它看起来更随机,则可以使用已知信息)。如果学生在源代码中注意到这一事实,他们可以预测密码。当然,实际上并不需要来源来确定这些信息(它只会加快实验室的速度)

对于众所周知的真实世界示例,请查看https://en.wikipedia.org/wiki/Random_number_generator_attack

就在这里。请参阅Factorable了解一个著名的示例,其中 RSA 和 DSA 密钥是由嵌入式设备在收集到的随机性不足时在启动时立即生成的:

我们对 Internet 上使用的 RSA 和 DSA 加密密钥进行了大规模研究,发现由于随机性不足,大量密钥是不安全的。这些密钥用于保护数十万主机的 TLS (HTTPS) 和 SSH 连接。

几乎所有易受攻击的主机都是无头和嵌入式网络设备,例如路由器、防火墙和服务器管理卡。这些类型的设备通常会在首次启动时自动生成密钥,并且缺乏传统 PC 用来生成随机数的许多物理随机源。我们确定了来自 54 家制造商的明显易受攻击的设备和软件,并向这些公司通报了这些问题。

阅读他们的研究论文,了解他们是如何做到这一点的。

在看到足够多的样本后,编程语言中的一些 PRNG 算法标准可能会被破坏。有关说明和指向示例脚本的链接,请参阅https://security.stackexchange.com/a/31645/192426 。

我要描述的攻击与其他答案中提到的攻击有点不同,因为它是基于硬件的攻击,并且需要多年的计划和重大的财务影响力。它还代表了一种非算法类型的 PRNG 失败,这可能是它最适用于您的班级的地方:如果熵可能被毒化,那么将所有熵仅基于一个源可能会适得其反。

从理论上讲,您可以创建一个硬件,根据您知道的算法生成数字,然后出售该硬件,同时声称它是真正的 RNG。任何使用该硬件生成其所有熵的代码都将很容易被该硬件的制造商攻击。

(虽然这可能看起来很荒谬,但有理由担心这种情况可能会在现实生活中发生,例如英特尔的 RdRand 指令。)