对于密码学课程,我正在尝试耗尽 Linux 中的熵池(例如 make /proc/sys/kernel/random/entropy_avail
go to 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
我什么也没看到,我只是得到一个空白行。所以我有几个问题:
- 是什么很好地补充了我的熵,我怎样才能找到随机性的具体来源?
- 有什么方法可以暂时禁用随机源,以便我可以强制这种阻塞发生?
围绕 Linux 随机设备的开发数量惊人。缓慢的阻塞
/dev/random
消失了,取而代之的/dev/random
是永远不会耗尽数据的快速。您将不得不回到过去,例如在 linux 4.8(引入了更快的 crng 算法)或可能的 linux 5.6(引入了抖动熵生成)之前。
无法在当前内核中恢复原始行为。
如果您在旧版本的 Linux 中看到此问题,除了 hwrng,您可能正在使用
haveged
或 rng-toolsrngd
或类似的用户空间熵提供程序。一些发行版默认安装这些以避免在等待一些随机位时挂起,在这种情况下,您可以卸载或禁用它们,或者从没有其他进程运行的 initrd / busybox shell 中尝试它。
如果问题仍然存在,您可能只是有一个非常嘈杂的硬件,内核不断地从该硬件中自然地收集熵。
从内核 5.6 开始,
/dev/random
从内核的 CRNG 中获取随机性,该 CRNG 在引导期间初始化并且不会阻塞。请参阅“删除 Linux /dev/random 阻塞池”。
我认为您必须使用 5.6 之前的内核。
这可能取决于您的硬件,如果它使用 CPU 功能,那么它可能是无穷无尽的。其他硬件则不然。
但是,您可以在引导时尝试内核选项。
random.trust_cpu=off