内核熵池如何工作?

时间:2013-11-14 15:08:41

标签: linux random entropy

我正在使用/dev/urandom为我的程序生成随机数据。我了解到/dev/random可以为空,因为与/dev/urandom不同,当生成的字节数不足时,它不会使用SHA。 /dev/random使用“内核熵池”。显然它依赖于键盘计时,鼠标移动和IDE计时。

但这是如何运作的呢?
并且不可能“提供”熵池使/ dev / random输出可预测吗?

3 个答案:

答案 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以获得更好安全性时挂起的应用程序的权衡。