Linux 上 rngd 的手册页显示-o
(/dev/random) 用于随机数输出while -r
(/dev/hwrng) 获取随机数输入。这是什么意思?这些设备文件有何不同?为什么它们的用法不同?我的理解是内核根据硬件事件生成自己的随机序列,并将它们粘贴到 /dev/random 中。那么 rngd 为什么需要“输入”设备?
答案1
/dev/hwrng
是专门用于随机数硬件源的设备。手册页提供了 rngd 可以根据需要读取的其他源。
使用默认值,rngd 从该源读取并写入/dev/random
。
写入的效果/dev/random
是将数据添加到内核的熵池中。
/dev/random
内核自身能够收集熵数据的来源数量有限。使用可以从其他来源收集熵并将其提供给内核的用户空间进程意味着,如果使用频繁,则不太可能耗尽熵。
答案2
我的理解是内核根据硬件事件生成自己的随机序列并将它们粘贴到 /dev/random 中。
从开放硬件驱动程序可以,从硬件随机模块 (/dev/hwrng) 则不行。Linux 开发人员认为不透明随机硬件的信任级别非常重要,默认情况下不启用,因此将决定权交给了用户空间。
rngd 是一个用户程序,因此很容易混合非内核源,例如NIST 随机性信标(虽然让国家实验室掷虚拟骰子可能很有趣,但这个比特流是公开的,绝不用它来保存加密秘密。