我正在尝试在 Ubuntu 16.10 上生成 GPG 密钥,但 GPG 需要很长时间。
我用谷歌搜索了一下,发现了一些网站,包括 StackExchange 上的一些问题,建议运行熵生成器,以rngd
帮助系统更快地生成随机数。
其中一些网站还鼓励检查/proc/sys/kernel/random/entropy_avail
,指出在他们的系统上,它在运行 GPG 之前报告了四位数的数字,在运行时报告了两位数到一位数的数字。
我目前在我的计算机上运行 GPG;它已经运行了至少半个小时,我得到了这个
$ cat /proc/sys/kernel/random/entropy_avail
3644
这个数字随着时间的推移而增加,很少会小幅减少(写下这句话后,它是 3801)。我没有运行任何随机数生成器。实际上,如果我尝试运行一个(例如sudo rngd -fr /dev/random
,它会下降到 50 左右;如果我使用/dev/urandom
它,它会保持在 3000 左右)。
有人能帮我弄清楚我的系统到底出了什么问题吗?
我使用的是 Linux 4.8.0-37-generic、gpg (GnuPG) 2.1.15、libgcrypt 1.7.2-beta。
答案1
最近升级到 Debian 9 后我遇到了类似的问题。一些依赖随机数的程序在最近的 Linux 版本中更改了源代码/随机生成器例程,这使得它们更加依赖于系统的熵。
安装守护进程haveged
似乎提供了一致的随机数池。所以这样做:
sudo apt-get install haveged
现在,需要熵的不同程序都需要该haveged
守护进程,特别是在熵通常较低的虚拟机和物联网(例如树莓派等)中。
从man haveged
:
NAME
haveged
- 生成随机数并提供给 Linux 的随机设备。描述
haveged
使用 HAVEGE(硬件易失性熵收集和扩展)算法生成不可预测的随机数流,该随机数流是从硬件事件对隐藏处理器状态(缓存、分支预测器、内存转换表等)的间接影响中获取的。该算法在用户空间中运行,文件系统访问输出流不需要特殊权限。Linux 汇集随机性以通过
/dev/random
和/dev/urandom
设备接口进行分配。填充池的标准机制/dev/random
可能不足以满足对高需求或有限用户交互的系统的需求。在这些情况下,每当随机位的供应低于设备的低水位线时,haveged
可以作为特权守护进程运行以填充池。/dev/random
/dev/random