/dev/urandom 多久从 /dev/random 中抽取一次种子?

/dev/urandom 多久从 /dev/random 中抽取一次种子?

除非我完全糊涂了,它就不会这么做。

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

换句话说,如果我将 /dev/random 的熵增加 X 位/秒(即,注入后 /dev/random 让您以 X 位/秒的速度采样),增加的熵会转移到 urandom 吗?

答案1

/dev/urandom说从 采样并不准确/dev/random。相反,这两个池由相同的熵源支持。当池的熵计数达到零时,它们会从共享输入池重新播种。因此,如果您以某种方式提供内核输入熵,它可以将其用于 或/dev/random/dev/urandom具体取决于读取哪个。

然而,/dev/urandom 也有速率限制请求重新播种的频率。默认情况下,它只能每 60 秒重新播种一次。

在实践中,这些都不重要,因为只要池子最初至少有 128 位左右的熵,预测任何输出不仅需要看到之前的输出,还需要破解所使用的算法,至少包括 SHA-1 的原像抗性(依然完好无损)。

答案2

这取决于实现。但通常情况下,/dev/random/dev/urandom会从同一个池中提取熵。

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

答案3

在 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 读取(一旦播种 - 实际上最好的方法是使用新的系统调用获取随机数)。

我不知道它在其他 Unices 上是如何工作的。

相关内容