硬件随机数生成器

简介

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 硬件,摘自固件中心 (Firmware Hub) 数据手册

固件中心 (Firmware Hub) 集成了一个随机数生成器 (RNG),利用由硅固有的随机量子力学特性产生的热噪声。当不生成新的随机位时,RNG 电路将进入低功耗状态。Intel 将提供二进制软件驱动程序,以允许第三方软件访问我们的 RNG,用作安全功能。目前,RNG 仅在系统处于操作系统已加载状态时使用。

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 固件中心随机数生成器驱动程序

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

特别感谢 Matt Sottek。我完成了“核心”部分,他完成了“逻辑”部分和所有测试。