因此,我一直在尝试创建一个新的 GPG 密钥,但不断收到这个众所周知的错误:
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 294 more bytes)
因此,经过 20 分钟的鼠标移动后,甚至没有+++++
在终端底部出现令人鼓舞的 s,我尝试了似乎已经为其他人解决了问题的方法:我安装rng-tools
并运行:
rngd -r /dev/random
但这也没什么用。一点变化都没有。当我运行:
cat /proc/sys/kernel/random/entropy_avail
我的输出从来没有超过 60 左右。
因此,除了眼前的问题(即无法生成新的 GPG 密钥)之外,为什么我的机器会这么快地消耗熵?看来一定有一个潜在问题需要解决。
答案1
要获得更多的熵,请查看我在 Server Fault 上的回答为 PGP 密钥生成熵。
该答案的摘要如下:
- 生成网络和磁盘 IO;
- 使用 haveged(但在 VM 环境中要小心,请参阅链接)。
至于您对 rngd 的使用,它不会“起作用”。程序 rngd 是一种随机事物的收集器,经过一些去偏和白化后,它将用于提供熵池,该熵池将用于使用 PRNG 生成随机数。因此,rngd 是一个为 Linux 的 PRNG 提供“输入”的收集器。当您使用 时/dev/random
,Linux 会估计熵池,如果它认为它足够好,它将使用它为 生成一个新的随机数/dev/random
。检查这个有关 LWN 上随机数的技术文章,请参阅“管理员建议”一章。
基本上,当调用/dev/random
或 gpg 时,您正在使用(并“消耗”)相同的熵池。所以它不会有帮助/工作。使用硬件 RNG 作为 rngd 的源或任何源(如网络摄像头、麦克风等),但您需要适当的驱动程序将它们链接到 rngd。这取决于您是否使用 VM 以及您使用哪个发行版。
注意:如果您运行的是裸机(因此不在客户虚拟机中),则可以将 TPM 用于硬件 RNG。如果您最大的敌人是 NSA,则不建议使用 TPM ;-) 在线阅读有关 TPM 的信息。但如果您想使用它,这里有一种将 TPM 链接到 rngd 的方法(免责声明是我写的这篇文章):http://www.berthon.eu/2015/using-tpm-as-a-source-of-randomness-entropy/
并检查此 PDF 演示文稿以获取使用熵的信息:-)https://www.blackhat.com/docs/us-15/materials/us-15-Potter-Understanding-And-Managing-Entropy-Usage.pdf