如何强制 /dev/random 阻止?

如何强制 /dev/random 阻止?

对于密码学课程,我试图耗尽 Linux 中的熵池(例如,使/proc/sys/kernel/random/entropy_avail转到 0 并阻止从 读取命令/dev/random),但我无法实现它。我应该从/dev/random块中读取数据。如果我执行这两个命令:

watch -n 0.5 cat /proc/sys/kernel/random/entropy_avail

观察熵,然后:

od -d /dev/random

为了转储随机池,命令中的值watch徘徊在 3700 和 3900 之间,并且在我运行此命令时只有一点点增益和损失。我让这两个命令运行大约三分钟, 的大小没有明显的变化entropy_avail。那段时间我并没有在电脑上做太多事情。通过谷歌搜索,我发现也许硬件随机数生成器可能非常好,以至于熵不会下降,但如果我这样做:

cat /sys/devices/virtual/misc/hw_random/rng_available

我什么也没看到,只看到一个空行。所以我有几个问题:

  1. 是什么给我的熵补充得这么好,我怎样才能找到随机性的具体来源?
  2. 有什么方法可以暂时禁用随机源,以便我可以强制发生这种阻塞?

答案1

Linux 随机设备的开发量令人惊讶。缓慢、阻塞的情况消失了,取而代之的是永不耗尽数据的/dev/random快速。/dev/random

你必须回到过去,比如 linux 4.8 之前(引入了更快的 crng 算法)或者可能是linux 5.6(引入了抖动熵生成)。

无法在当前内核中恢复原始行为。


如果您在旧版本的 Linux 中看到此问题,除了 hwrng 之外,您可能正在使用havegedrng-toolsrngd或类似的用户空间熵提供程序。

一些发行版默认安装这些以避免在等待一些随机位时挂起,在这种情况下,您可以卸载或禁用它们,或者在没有其他进程运行的 initrd / busybox shell 中尝试它。

如果问题仍然存在,您可能只是有一个非常嘈杂的硬件,内核从中不断自然地收集熵。

答案2

是什么给我的熵补充得这么好,我怎样才能找到随机性的具体来源?

从内核 5.6 开始,/dev/random从内核的 CRNG 中获取随机性,该 CRNG 在引导期间初始化并且不会阻塞。

“删除 Linux /dev/random 阻塞池”

有什么方法可以暂时禁用随机源,以便我可以强制发生这种阻塞?

我认为你必须使用 5.6 之前的内核。

答案3

这可能取决于您的硬件,如果它使用 CPU 功能,那么它可能是无止境的。其他硬件则不然。

不过,您可以尝试内核选项 random.trust_cpu=off开机时。

相关内容