GPG 依赖于熵生成

GPG hangs on entropy generation

尝试生成 GPG 密钥(使用 gpg --gen-key)时,它可能会在发出消息后挂起:

没有足够的可用随机字节。请做一些其他的工作来给予 OS 有机会收集更多的熵! (还需要 278 个字节)

gpg (GnuPG) 1.4.16

Ubuntu 14.04.2 LTS

编辑: 通常不应遵循此建议,因为它不会生成安全密钥。请参阅 juacala 的回答,或 whosebug.com/questions/11708334 了解详情。

原来这是一个已知问题: https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011

我通过安装 rng-tools 解决了它。

sudo apt-get install rng-tools

然后 gpg --gen-key 按预期工作。

虽然 rng-tools 可行,但不建议这样做,因为它不提供真正的熵。请参阅此处的讨论:https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011

对于对此感到沮丧的用户,这里有一些我发现在没有 mouse/desktop.

的服务器上有用的东西

1) 完成创建 GPG 密钥的过程。如果它挂起等待更多的熵,转到下一步。

2) 您可以通过打开终端并输入(这将每秒查看该文件)来查看您的系统有多少熵:

watch -n1 cat /proc/sys/kernel/random/entropy_avail

3) 打开第三个终端来生成你的熵。您可以尝试各种方法来尝试增加熵。以下是我注意到的一些事情,它们增加了熵,足以使 gpg 工作。请注意,这有点随机(没有双关语意)。有时做某事会增加熵;但是当我再次这样做时,它没有:

从网上获取一个大文件

wget http://us1.php.net/get/php-7.2.2.tar.bz2/from/this/mirror

做一些向终端打印很多东西的事情:

ls -R /
sudo find /folder/with/lots/of/files/ -type f | xargs grep 'simple string that shows up in lots of files'

4) 如果你正在做的事情没有增加entropy_avail,那么试试别的。

sudo apt install haveged

这将安装 haveged 服务,该服务收集熵并更有效地填充 /dev/random。安装 haveged 后,您不需要 运行 任何额外的命令,它会自动启动该服务。 systemctl status haveged 验证服务是 运行ning。你也可以cat /dev/random来证明它可以持续提供价值。在我的测试中,gpg --gen-key 在 10 秒内完成并安装了 haveged

如果你不想安装任何东西,你可以通过其他方式生成熵,但它比 haveged 慢得多(在我的测试中慢了大约 10 倍)。 运行 这在另一个终端中,而 gpg --gen-key 是 运行ning:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

# one liner
while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done