硬件随机数生成器¶
介绍¶
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。
- 英特尔/AMD/VIA 随机数生成器 (RNG) 的硬件驱动程序
版权所有 2000,2001 Jeff Garzik <jgarzik@pobox.com>
版权所有 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
关于英特尔 RNG 硬件,来自固件集线器数据手册¶
固件集线器集成了随机数生成器 (RNG),它使用来自硅的固有的随机量子力学特性的热噪声生成。当不生成新的随机位时,RNG 电路将进入低功耗状态。英特尔将提供一个二进制软件驱动程序,使第三方软件能够访问我们的 RNG,将其用作安全功能。目前,RNG 只能与处于操作系统存在状态的系统一起使用。
英特尔 RNG 驱动程序说明¶
FIXME:支持 poll(2)
注意
request_mem_region 被删除,原因有三个:
此驱动程序仅支持一个 RNG;
RNG 使用的位置是 MMIO 可寻址内存中的固定位置;
具有正常工作的 BIOS e820 处理的用户将始终保留 RNG 所在的区域,因此 request_mem_region 调用对于正确的设置总是失败。但是,对于使用 mem=XX 的用户,BIOS e820 信息不位于 /proc/iomem 中,并且 request_mem_region(RNG_ADDR) 可以成功。
驱动程序详细信息¶
- 基于
英特尔 82802AB/82802AC 固件集线器 (FWH) 数据手册 1999 年 5 月 订单号:290658-002 R
- 英特尔 82802 固件集线器
随机数生成器程序员参考手册 1999 年 12 月 订单号:298029-001 R
- 英特尔 82802 固件集线器随机数生成器驱动程序
版权所有 (c) 2000 Matt Sottek <msottek@quiknet.com>
特别感谢 Matt Sottek。我做了“内脏”,他做了“大脑”和所有的测试。