在使用由 OpenSSL
或者 libsoduim
提供的加密解密工具时,比如生成密钥,或者是对数据进行加密校验等操作时,系统会从虚拟设备(/dev/random
)中取用随机数以供使用。
更新历史
- 20220624 更新 Debian 11 配置文件路径
关于熵池
名次解释
Entropy(熵,[shāng])在信息论中表示数据的混乱程度或者不确定性,可理解为随机数据。
在 GNU/Linux 中有两个虚拟设备专门用于生成随机数以供系统使用。分别为 /dev/random
/dev/urandom
,又称 PRNG
(Pseudorandom Number Generator
,伪随机数发生器),其中 /dev/random
数据来源为硬件设备的活动(键盘输入、磁盘读写、内存错误等)和其他操作系统资源,默认熵池随机数资源大小为 4kB
,由内核参数/proc/sys/kernel/random/poolsize
控制。
查询熵池
可通过以下命令查看系统可用随机数资源量
cat /proc/sys/kernel/random/entropy_avail
注意:一般情况下此数值会小于 1000
。
低熵影响
但通常情况下系统的熵池源由输入设备或其他设备的噪音来进行提供。在虚拟机或微型设备中,因来源不足,随机数生产缓慢,会导致加密解密的过程受阻,比如 shadowsocks
断流。
解决方法
可以通过部署服务来人为生产随机数填充系统熵池,在不同发行版下,包名和默认配置路径可能不同。
检查系统环境
- CentOS 7 下
检查系统版本
# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# uname -r
3.10.0-862.11.6.el7.x86_64
- Debian 9 下
检查系统版本
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
注意:CentOS
中haveged
包在EPEL
源中,需要手动安装或启用 EPEL 源。
配置服务
默认配置文件路径:
tool | path |
---|---|
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
执行以上命令进行测试。
附录
参考链接
- How to speed up OpenSSL/GnuPG Entropy For Random Number Generation On Linux
- Use Haveged & rng-tools To Speed Up Entropy For Random Number Generation On GNU/Linux
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2017-10-01 14:40 PM
高手阿,手动点赞
开启服务后不足的时候会自动补充么?
systemctl enable rngd
而不是systemctl enable rng-tools
不同发行版的服务名不同,本文是以 Debian 9 为例写的,自行匹配即可。