/ dev / urandom多久从/ dev / random中采样一次种子?


15

除非我完全感到困惑,否则它不会那样做。

我想知道如果我使用硬件RNG并将其熵插入/ dev / random中,/ dev / urandom是否会获得更大的熵。

因此,如果我将/ dev / random的熵提高X位/秒(也就是说,注入后的/ dev / random让您采样X位/秒),那将增加的熵转移到urandom吗?



如果您拥有真正的硬件RNG,则可以直接使用它。
迈克尔·汉普顿

Answers:


25

/dev/urandom来自的样本并不太准确/dev/random。相反,两个池由相同的熵源支持。当池的熵计数达到零时,它们将从共享输入池重新设置种子。因此,如果您以某种方式给内核输入熵,它可以将其用于/dev/random/dev/urandom,这取决于要读取的内容。

但是,/dev/urandom 它也可以要求多久播种一次。默认情况下,它只能每60秒重新设置一次种子。

在实践中,这实际上并不重要,因为只要池最初以至少128位左右的熵作为种子,预测任何输出将不仅需要看到先前的输出,而且还需要破坏所使用的算法,至少包括原像电阻SHA-1(保持不间断)。


7

这取决于实现方式。但通常情况下,/dev/random/dev/urandom拉熵同一池中,因此它将。

来自https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/的图表


4

在Linux中,任何写入/ dev / random或/ dev / urandom的数据都将复制到阻塞池(/ dev / random的随机源)和非阻塞池(/ dev / urandom的随机源)。

只要看看random_write函数。

但是内部熵估计器不会计算写入/ dev / random的数据(毕竟,某些本地对手可能会尝试将/ dev / zero或其他一些高度非随机的源重定向到/ dev / random),所以如果遇到问题阻止/ dev / random,仅写入/ dev / random并没有帮助。

在Linux中,写入/ dev / random(或/ dev / urandom,没有区别),但始终从/ dev / urandom读取(一旦被播种,实际上最好的方法是使用新的系统调用getrandom)。

我不知道它在其他Unices中如何工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.