喂 /dev/random 熵池?

信息安全 密码学 密码 随机的
2021-09-06 13:02:03

/dev/random您建议使用哪种方式额外提供熵池来生成随机密码?或者,是否有更好的方法来本地创建完全随机的密码?

4个回答

你应该使用/dev/urandom,而不是/dev/random/dev/random之间的两个区别/dev/urandom是(我在这里谈论的是Linux):

  • /dev/random在信息论安全算法的背景下,理论上可能更好这是一种对今天的技术、明天的技术、外星人使用的技术以及上帝自己的 iPad 都是安全的算法。信息论安全算法对无限计算能力是安全的。不用说,这样的算法非常罕见,如果你使用过,你会知道的。此外,这是一个“可能”:在内部,/dev/random使用传统的散列函数,因此如果受到无限力量的攻击,它无论如何都会有弱点(不过,对于基于地球的攻击者来说,无需担心)。

  • /dev/urandom不会阻塞,而/dev/random可能会这样做。/dev/random在假设它产生的任何位都是丢失的熵位的情况下,维护一个“它仍然有多少熵”的计数器。阻塞会引发非常现实的问题,例如,服务器在自动安装后无法启动,因为它在其 SSH 服务器密钥创建上停滞不前(是的,我已经看到了)。/dev/urandom使用加密强大的伪随机数生成器,因此它永远不会阻塞。

所以你要使用/dev/urandom并停止担心这个熵业务。

现在,如果您正在编写 Linux 安装程序,您可能需要担心熵。诀窍是/dev/urandom永远不会阻塞,即使它应该:/dev/urandom只要它自上次启动以来接收到足够字节的“初始熵”(32 个随机字节就足够了),它就是安全的。正常的 Linux 安装将在安装时创建一个随机种子(来自/dev/random),并将其保存在磁盘上。每次重新启动时,都会读取种子并将其送入/dev/urandom,并立即(从/dev/urandom)生成一个新种子来替换它。因此,这保证了/dev/urandom总是有足够的初始熵来产生加密强的 alea,这对于任何普通的加密工作(包括密码生成)来说都是完全足够的。唯一的关键点是在安装过程中:安装程序必须从/dev/random,这可能会阻塞。Live CD 和其他没有读写永久存储区域的变体也会出现此问题。在这些情况下,您可能希望找到一些熵源,以确保它们/dev/random会吃饱,并且不会阻塞。

操作系统本身,更准确地说是内核,是从硬件事件中收集熵的正确位置,因为它处理硬件。因此,内核尚未使用的熵相对较少。其余来源之一是网络摄像头数据:网络摄像头即使面对一堵空白墙,也会输出带有热噪声的数据,并且由于它输出大量数据,因此它是一个很好的熵收集器。因此,只需从网络摄像头中抓取几帧,使用安全哈希函数 (SHA-256) 对它们进行哈希处理,然后将其写入/dev/urandom. 这仍然是大材小用。

如果存在的话,您可以用声音芯片中的白噪声喂它。见这篇文章:http ://www.linuxfromscratch.org/hints/downloads/files/entropy.txt

我知道haveged daemon使用的音频熵守护程序hasge,请尝试一下。

我在硬件随机设备中看到的最佳值是simtec 熵密钥。
内置了许多保护措施来防止故障和攻击。例如,它对每批 20Kb 运行 FIPS 140-2 随机性测试,如果在统计上显着数量的测试失败,它会自行关闭。当我为 DNSSEC 研究生成大量密钥时,我得到了一个,它极大地加快了我的工作速度。它通过了所有更顽固的测试。(注意,无论供应商告诉你什么,都要定期测试你的随机流;-)