Wave Spread...

使用 haveged 和 rng-tools 提高系统熵池的补充速率

分类:Linux 评论: 0

在使用由 OpenSSL 或者 libsoduim 提供的加密解密工具时,比如生成密钥,或者是对数据进行加密校验等操作时,系统会从虚拟设备(/dev/random)中取用随机数以供使用,但通常情况下系统的熵池源由输入设备或其他设备的噪音来进行提供。在虚拟机或微型设备中,因来源不足,随机数生产缓慢,会导致加密解密的过程受阻,比如 shadowsocks 断流。

一、关于熵池

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

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

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

[root@domain ~]# cat /proc/sys/kernel/random/entropy_avail

注意:一般情况下此数值会小于 1000


二、服务部署

在不同发行版下,包名和默认配置路径可能不同。

检查系统环境

检查系统版本

[root@domain ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) 
[root@domain ~]# uname -r
3.10.0-862.11.6.el7.x86_64

检查系统版本

root@domain:~# sed -n -r '1s@.*"(.*)"$@\1@p' /etc/os-release
Debian GNU/Linux 9 (stretch)
root@domain:~# uname -r
4.9.0-8-amd64

安装软件

# CentOS 7
[root@domain ~]# yum install rng-tools haveged -y
# Debian 9
root@domain:~# apt install rng-tools haveged -y

注意:CentOShaveged 包在 EPEL源中。

配置服务

默认配置文件路径:

tool path
haveged /etc/default/haveged
rng-tools /etc/default/rng-tools

启用服务自启

# haveged
[root@domain ~]# systemctl enable haveged
[root@domain ~]# systemctl status haveged
# rng-tools
[root@domain ~]# systemctl enable rng-tools
[root@domain ~]# 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.

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

执行以下命令

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

修改完成后,需要重启系统生效。

[root@domain ~]# cat /proc/sys/kernel/random/entropy_avail
[root@domain ~]# cat /dev/random | rngtest -c 1000
[root@domain ~]# haveged -n 4g -f - | dd of=/dev/null

执行以上命令进行测试。


参考链接

回复