GPG 密钥生成器*不*使用熵

GPG 密钥生成器*不*使用熵

我正在尝试在 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

相关内容