man 4 random
对 Linux 内核熵源的描述非常模糊:
随机数生成器将来自设备驱动程序和其他来源的环境噪声收集到熵池中。
论文Linux 随机数生成器中的熵传输也没有更具体。它列出了:
add_disk_randomness()
,add_input_randomness()
, 和add_interrupt_randomness()
。
这些功能来自random.c
,其中包括以下评论:
来自环境的随机性来源包括键盘间时序、某些中断的中断间时序以及其他事件(a)非确定性和(b)外部观察者难以测量。
再往下,有一个函数add_hwgenerator_randomness(...)
表示支持硬件随机数生成器。
所有这些信息都相当模糊(或者,就源代码而言,需要深入了解 Linux 内核才能理解)。实际使用的熵源是什么?Linux 内核是否支持任何开箱即用的硬件随机数生成器?
答案1
如今,大多数商用 PC 硬件都有随机数生成器。威盛半导体多年来一直将它们放入其处理器中; Linux 内核为此提供了 via-rng 驱动程序。我数了数 34 个源模块drivers/char/hw_random/
最新源代码树中的目录,包括 Intel 和 AMD 硬件以及具有 TPM 设备的系统的驱动程序。您可以运行 rng 守护进程 (rngd) 将随机数据推送到内核熵池。
答案2
是的,它确实支持开箱即用的硬件熵生成器。这对于每秒发起大量并发连接的高负载 SSL 服务器(Gmail、Facebook、Microsoft 等)来说是必要的。对于家庭服务器或小型组织服务器来说确实没有必要。请记住,硬件熵生成器通常使用 PCI 接口,没有什么花哨的,因此可以轻松支持。不确定是否存在需要闭源驱动程序的专有硬件熵生成器,可能不会,因为它不是很困难,也不是一个非常有利可图的行业(与显卡不同)。
http://en.wikipedia.org/wiki/Hardware_random_number_generator