我正在使用/dev/urandom
为我的程序生成随机数据。我了解到/dev/random
可以为空,因为与/dev/urandom
不同,当生成的字节数不足时,它不会使用SHA。 /dev/random
使用“内核熵池”。显然它依赖于键盘计时,鼠标移动和IDE计时。
但这是如何运作的呢?
并且不可能“提供”熵池使/ dev / random输出可预测吗?
答案 0 :(得分:23)
你所说的是现实,是的,理论上可以将熵提供给/dev/random
,但你需要控制很多内核“噪音”来源,因为它很重要。您可以查看random.c的来源,了解/dev/random
从哪里获取噪音。基本上,如果您控制了大量噪声源,那么您可以猜测其他噪声源对熵池的贡献。
由于/dev/urandom
是从/dev/random
播种的Hash chain,如果您知道种子,则可以实际预测下一个数字。如果您对熵池有足够的控制权,那么从/dev/urandom
的输出中您可以猜出这个种子,这样您就可以预测/dev/urandom
中的所有下一个数字,但仅限于此让/dev/random
用尽,否则/dev/urandom
将被重新播种。
话虽这么说,我还没有看到任何人真正这样做,即使在受控制的环境中也是如此。当然这不是保证,但我不担心。
所以我宁愿使用/dev/urandom
并保证我的程序在等待熵时不会阻塞,而是使用/dev/random
并要求用户做愚蠢的事情,比如移动鼠标或敲响了键盘。
我认为你应该从LWN阅读On entropy and randomness,希望它可以平息你的担忧:-)。
如果你仍然担心,那就给自己一个HRNG。
修改强> 这是关于熵的小记:
我认为熵的概念通常很难掌握。有一篇文章提供了有关Wikipedia的更多信息。但基本上,在这种情况下,您可以将熵视为随机性。
所以我怎么看,就是你有一大袋彩球,这个袋子里的熵越高,就越难以预测袋子里的下一个颜色。
在此上下文中,您的熵池只是一堆随机字节,其中一个不能从前一个或任何其他字节派生。这意味着你有很高的熵。
答案 1 :(得分:3)
我很欣赏jbr的答案。
为当前正在盯着ipsec pki命令或类似阻塞空熵池的人添加实用更新:
我刚刚在另一个窗口安装了rng-tools并完成了我的pki命令。
apt-get install rng-tools
答案 2 :(得分:1)
我正在阅读一篇论文 factorable 并记下它所说的部分:
“对于图书馆开发者: 默认为最安全的配置。
$http.get("objetos/autoelevador/leer_numero.php").then(
并且OpenSSL
默认使用Dropbear
代替/dev/urandom
,/dev/random
默认使用不太安全 DSA签名随机技术即使如此 一种更安全的技术可供选择。“
与Dropbear
的快速但不太安全的结果相比,作者解决了在等待熵构建/dev/random
以获得更好安全性时挂起的应用程序的权衡。