概述

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

架构

HW-RNG 驱动程序遵循 Linux RNG 框架,可以向内核熵池生成全熵的 32 位随机数据,应用程序也可以从内核获取随机数据。HW-RNG 的架构如下图所示。

../../rst_secure/3_trng_linux/figures/trng_software_arch.svg

实现

HW-RNG 驱动程序位于以下文件:

驱动程序位置

简介

<linux>/drivers/rtkdrivers/hw_random/Kconfig

驱动程序配置文件

<linux>/drivers/rtkdrivers/hw_random/Makefile

驱动程序编译文件

<linux>/drivers/rtkdrivers/hw_random/rtk-rng.c

驱动程序源文件

配置

编译配置

选择 Device Drivers > Drivers for Realtek > HW Random driver.

../../rst_secure/3_trng_linux/figures/trng_driver.png

APIs

用户空间接口(APIs)

Linux RNG 框架为用户空间提供 /dev/hwrng 从内核获取随机数.

测试

下载安装 rng-tools , 这个工具使用 /dev/hwrng 来填充内核熵池,该熵池在内部使用并由 /dev/urandom/dev/random 特殊文件导出.

rngd 作为守护进程,从 /dev/hwrng 中读取随机数,喂到内核熵池中.

rngd --rng-device=/dev/hwrng

使用 rngtest 可以去检查从 /dev/hwrng 获取的数据进行检查:

cat /dev/hwrng | rngtest -c 1000