硬件随机数生成器

介绍

hw_random 框架是一种软件,它利用 CPU 或主板上的一个特殊硬件功能,即随机数生成器 (RNG)。该软件包含两个部分:一个核心,提供 /dev/hwrng 字符设备及其 sysfs 支持;以及一个特定于硬件的驱动程序,插入到该核心中。

为了最有效地使用这些机制,您还应该下载支持软件。 从以下网址下载最新版本的“rng-tools”软件包:

这些工具使用 /dev/hwrng 来填充内核熵池,该熵池在内部使用,并通过 /dev/urandom 和 /dev/random 特殊文件导出。

工作原理

字符设备。 使用标准的 open() 和 read() 系统调用,您可以从硬件 RNG 设备读取随机数据。 此数据未经任何适应性测试检查,并且可能存在错误(如果硬件出现故障或已被篡改)。 仅当硬件设置了“has-data”标志时才会输出数据,但即便如此,有安全意识的人也会在假设数据是真正随机的之前对数据运行适应性测试。

rng-tools 软件包在“rngd”中使用此类测试,并允许您使用“rngtest”实用程序手动运行它们。

/dev/hwrng 是字符设备,主设备号为 10,次设备号为 183。

类设备。 存在一个 /sys/class/misc/hw_random 节点,它具有两个唯一的属性,“rng_available”和“rng_current”。 “rng_available”属性列出了可用的特定于硬件的驱动程序,而“rng_current”列出了当前连接到 /dev/hwrng 的驱动程序。 如果您的系统有多个 RNG 可用,则可以通过将“rng_available”列表中的名称写入“rng_current”来更改使用的 RNG。


Intel/AMD/VIA 随机数生成器 (RNG) 的硬件驱动程序

关于来自固件集线器数据手册的 Intel RNG 硬件

固件集线器集成了随机数生成器 (RNG),该生成器使用来自硅的固有随机量子力学特性的热噪声生成。 当不生成新的随机位时,RNG 电路将进入低功耗状态。 英特尔将提供二进制软件驱动程序,以使第三方软件能够访问我们的 RNG,以用作安全功能。 目前,RNG 仅用于 OS 存在的状态下的系统。

Intel RNG 驱动程序注释

FIXME:支持 poll(2)

注意

request_mem_region 已被删除,原因有三:

  1. 此驱动程序仅支持一个 RNG;

  2. RNG 使用的位置是 MMIO 可寻址内存中的固定位置;

  3. 具有正常工作的 BIOS e820 处理的用户将始终保留 RNG 所在的区域,因此 request_mem_region 调用对于正确的设置总是会失败。 但是,对于使用 mem=XX 的人,BIOS e820 信息**不**在 /proc/iomem 中,并且 request_mem_region(RNG_ADDR) 可能会成功。

驱动程序详细信息

基于

Intel 82802AB/82802AC 固件集线器 (FWH) 数据表 1999 年 5 月 订单号:290658-002 R

Intel 82802 固件集线器

随机数生成器程序员参考手册 1999 年 12 月 订单号:298029-001 R

Intel 82802 固件 HUB 随机数生成器驱动程序

版权所有 (c) 2000 Matt Sottek <msottek@quiknet.com>

特别感谢 Matt Sottek。 我做了“内脏”,他做了“大脑”和所有的测试。