简介
在使用由 OpenSSL 或者 libsoduim 提供的加密解密工具时,比如生成密钥,或者是对数据进行加密校验等操作时,系统会从虚拟设备(/dev/random)中取用随机数以供使用。
关于熵池
ntropy(熵,[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
低熵影响
但通常情况下系统的熵池源由输入设备或其他设备的噪音来进行提供。在虚拟机或微型设备中,因来源不足,随机数生产缓慢,会导致加密解密的过程受阻,比如 55流。
解决办法
可以通过部署服务来人为生产随机数填充系统熵池,在不同发行版下,包名和默认配置路径可能不同。
通过一下命令进行安装
# CentOS 7 [[email protected] ~]# yum install rng-tools haveged -y # Debian 9 [email protected]:~# apt install rng-tools haveged -y
默认配置文件路径:
tool | path |
---|---|
haveged | /etc/default/haveged |
rng-tools | /etc/default/rng-tools |
启动服务并自启
# haveged [[email protected] ~]# systemctl enable haveged [[email protected] ~]# systemctl status haveged # rng-tools [[email protected] ~]# systemctl enable rngd [[email protected] ~]# systemctl status rngd
常见报错
在部分系统中,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
需要重启服务生效
cat /proc/sys/kernel/random/entropy_avail cat /dev/random | rngtest -c 1000 haveged -n 4g -f - | dd of=/dev/null 如果没有增加请使用
vim /etc/sysconfig/rngd
添加内容:EXTRAOPTIONS=”–rng-device /dev/urandom”
然后重启rngd