假设我想要来自 /dev/random 的大约 GB 的随机数据,适合一次性填充(因此 /dev/urandom 已经过时了。)如何为我的 /dev/random 播种足够的熵来做到这一点?我正在为此寻找特定的命令和程序。我不想买任何东西。我正在使用 Arch Linux,如果这有什么区别的话。
答案1
不幸的是 /dev/random 也不适合在一次性一垫中使用,至少不是大多数人在考虑或实现一次性一垫时所想象的那种一次性一垫(具有可证明的安全保证)。下面的大部分信息是从(很长的)文章中总结出来的http://www.2uo.de/myths-about-urandom/
问题是 /dev/random 并不是真正随机的;它使用 CSPRNG 来生成输出。事实上,/dev/random 使用与 /dev/urandom 完全相同的 CSPRNG。唯一的区别是,如果 /dev/random 的内部熵估计不足,则会阻塞。
上一句中的“估计”一词是关键。大多数人认为这个估计总是准确且完美的,但实际上它根本不准确。一旦估计错误,您就会失去一次性密码本的所有可证明的安全保证,而您剩下的只是计算安全性 - 并不比使用 /dev/urandom 更好!
熵估计哪怕有一点点错误,并不会让你的一次性密码本变得不安全。一次性密码本的可证明安全保证要么全有,要么全无。
这个问题的前提是 /dev/random 的问题可以通过添加更多的熵来“修复”。不幸的是,这个前提是错误的。恶意熵源比根本没有熵要糟糕得多,因为熵源通常可以访问内部数据,并且可以使用 RNG 输出秘密导出此数据 - 请参阅http://blog.cr.yp.to/20140205-entropy.html进行完整的讨论(太长,无法在此总结)。特别是,从安全角度来看,硬件熵源(如其他几个答案所推荐的)是一个非常糟糕的选择,因为该硬件处于执行恶意操作的主要位置,并且本质上是无法审计的。
答案2
看起来硬件组件是最好的主意。市面上有一些硬件生成器 IC,但您必须相信它们的出现。
两个可能好的解决方案是诱导元件产生噪声;两个主要的解决方案似乎是温度偏差和二极管产生的雪崩噪声(参见http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html)
随着陀螺仪和加速度计等组件变得更加敏感,使它们以最高灵敏度工作并使用它们的 LSB 值也是一个不错的解决方案,但据我所知没有人对其进行审计。
很有趣,因为有很多关于不做 RNG 的论文,但没有开放和验证的硬件实现
答案3
答案4
当您未插入麦克风时,从模拟麦克风通道获得的信息通常只是静态的。例如,通过 bzip2 进行管道传输,为了美白,将其与另一个随机源(urandom 或另一个麦克风插孔)混合,也许通过 openssl 管道传输结果,以进行良好的测量和得到的结果应该非常随机。
然而,很难证明有关结果随机性的任何硬性且快速的安全属性。