使用 haveged 和 rng-tools 提高系统熵池的补充速率
后知后觉 现有 4 评论

在使用由 OpenSSL 或者 libsoduim 提供的加密解密工具时,比如生成密钥,或者是对数据进行加密校验等操作时,系统会从虚拟设备(/dev/random)中取用随机数以供使用。

更新历史

关于熵池

名次解释

Entropy(,[shāng])在信息论中表示数据的混乱程度或者不确定性,可理解为随机数据

在 GNU/Linux 中有两个虚拟设备专门用于生成随机数以供系统使用。分别为 /dev/random /dev/urandom,又称 PRNGPseudorandom Number Generator,伪随机数发生器),其中 /dev/random 数据来源为硬件设备的活动(键盘输入、磁盘读写、内存错误等)和其他操作系统资源,默认熵池随机数资源大小为 4kB ,由内核参数/proc/sys/kernel/random/poolsize控制。

查询熵池

可通过以下命令查看系统可用随机数资源量

cat /proc/sys/kernel/random/entropy_avail
注意:一般情况下此数值会小于 1000

低熵影响

但通常情况下系统的熵池源由输入设备或其他设备的噪音来进行提供。在虚拟机或微型设备中,因来源不足,随机数生产缓慢,会导致加密解密的过程受阻,比如 shadowsocks 断流。


解决方法

可以通过部署服务来人为生产随机数填充系统熵池,在不同发行版下,包名和默认配置路径可能不同。

检查系统环境

检查系统版本

# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) 
# uname -r
3.10.0-862.11.6.el7.x86_64

检查系统版本

sed -n -r '1s@.*"(.*)"$@\1@p' /etc/os-release
uname -r

示例输出 Debian GNU/Linux 9 (stretch)4.9.0-8-amd64

安装增熵服务

# CentOS 7
sudo yum install rng-tools haveged -y
# Debian 9
sudo apt install rng-tools haveged -y
注意:CentOShaveged 包在 EPEL源中,需要手动安装或启用 EPEL 源。

配置服务

默认配置文件路径:

toolpath
haveged/etc/default/haveged
rng-tools/etc/default/rng-tools

启动服务并自启

# haveged
sudo systemctl enable haveged
sudo systemctl status haveged
# rng-tools
sudo systemctl enable rng-tools
sudo systemctl status rng-tools

配置服务

在部分系统中,rng-tools 会无法启用,可能会提示以下错误:

Starting Hardware RNG entropy gatherer daemon: (Hardware RNG device inode not found) /etc/init.d/rng-tools: Cannot find a hardware RNG device to use.

这是因为默认的熵源配置错误。

执行以下命令

sudo sed -i -r '/^HRNGDEVICE/d;/#HRNGDEVICE=\/dev\/null/a HRNGDEVICE=/dev/urandom' /etc/default/rng-tools

如果是 Debian 11 系统,配置文件位置稍有修改,位置 /etc/default/rng-tools-debian

需要重启服务生效

cat /proc/sys/kernel/random/entropy_avail
cat /dev/random | rngtest -c 1000
sudo haveged -n 4g -f - | dd of=/dev/null

执行以上命令进行测试。


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。
  1. avatarImg pqiao

    高手阿,手动点赞

    Chrome 87.0 Linux
    IP 属地 未知
  2. avatarImg 楼兰

    开启服务后不足的时候会自动补充么?

    Chrome 72.0 Android Pie
    IP 属地 未知
  3. avatarImg 写什么呢

    systemctl enable rngd
    而不是systemctl enable rng-tools

    Chrome 78.0 Windows 10
    IP 属地 未知
    1. avatarImg
      @写什么呢

      不同发行版的服务名不同,本文是以 Debian 9 为例写的,自行匹配即可。

      Chrome 78.0 macOS Catalina
      IP 属地 未知