为PGP密钥生成熵


12

我已远程登录到VM,并尝试生成4096位PGP密钥,由于没有熵,它一直会永久挂起,并且由于我正在通过远程桌面工作,因此它可能不会将鼠标移动检测为熵。

我如何产生一些?

我尝试过,cat /dev/urandom > /dev/null但这没有帮助。

Answers:


13

获取数据出来/dev/random或者/dev/urandom是绝对不会去帮忙,所有它的作用就是消耗你的熵池,使问题变得更糟。这两个文件之间的主要区别在于,即使内核用尽了熵,urandom也将继续生成质量较低的随机数据,而random将阻塞直到收集到新的高质量随机数据。PGP需要尽可能高的随机数据来生成安全密钥,因此它将始终使用/dev/random

如果周围有良好的随机数据,或者从另一台服务器导出了一些随机数据,则/dev/random可以将cat导入到服务器中/dev/random以获取更多信息。但是,您永远不应cat将同一文件两次/dev/random

如果您经常发现自己用尽了熵,还可以考虑安装诸如Haveged之类的守护程序,该守护程序会在后台重新生成熵并/dev/random根据需要重新填充。

也可能很容易将符号链接/dev/random/dev/urandom,但这应被视为安全隐患,因为使用它生成的任何密钥都可能比应有的安全性低。虽然它可能对不太重要的应用程序有所帮​​助,但您必须考虑对的其他所有可能的用法/dev/random,包括其他生成自己的密钥,CSR等的用户。


请注意,在FreeBSD上,/dev/random高质量PRNG,通常不应阻塞。
凯文

当然,@ Kevin /dev/random是现代BSD和Linux上的高质量PRNG。但是,如果没有足够的熵,它将阻塞。另一方面,/dev/urandom如果没有足够的可用空间,则不会阻塞,但是这种情况下其随机性质量可能会受到影响。在细节上,Linux与各种BSD之间的随机和urandom实现之间有许多微妙的区别,但是以上对于所有AFAIK都是正确的。
惠更斯2015年

在Linux上,ping 8.8.8.8如果您拥有另一个网络主机,则可以通过简单地ping主机(例如)来产生更多的熵(例如,如果您的RTT <100ms),则尝试每100ms进行ping。和/或find用于在硬盘上查找文件并在每次文件搜索之间刷新RAM缓存。
惠更斯2015年

@Huygens:打开我链接的手册页,然后按Ctrl + F“ kern.random.sys.seeded”;默认情况下,/dev/random它不会在FreeBSD上阻止。
凯文

1
@Kevin是的,您是对的,熵池或收获也许是“播种” PRNG的两种不同方式。在我的BSD盒子上进行了一些测试之后,我发现随机和urandom的行为方式相同,当它们无法生成足够好的PRNG时它们会阻塞。尝试dd if=/dev/random of=/tmp/rndtest bs=64M count=1在全新启动后运行,它连续运行了2次才能看到生成64MB文件增加的时间。我以为我不会看到urandom作为输入的这种效果,但是与Linux不同,FreeBSD似乎也对它产生了阻碍。
惠更斯2015年


4

我建议在本地计算机上生成您的gpg密钥,这将比远程计算机具有更好的随机性。然后使用SSH将密钥迁移到您的远程计算机。

本地生成将更快(熵的来源更多),更安全(如果您的计算机未受到感染,则任何人都无法监视进程,更好的随机性)。

如果您仍然想远程生成这些信息:在Linux上,ping 8.8.8.8如果您拥有另一台网络主机,则只需对主机(例如)进行ping操作,就可以产生更多的熵(例如,如果您的RTT <100ms当然),请每100毫秒执行一次ping操作。和/或find用于在硬盘上查找文件并在每次文件搜索之间刷新RAM缓存。

haveged如果在虚拟环境中运行它,也可以安装但要阅读限制:https : //wiki.archlinux.org/index.php/Haveged#Virtual_machines


在我看来,这是正确的解决方案-向我+1。
MadHatter

3

在基于Debian的系统上,您可以rng-tools使用atp-get 安装软件包,然后启动守护程序以生成熵:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

在CentOS-6服务器上,rng守护程序作为基本工具之一安装(至少在我使用过的大多数系统上),并且可以运行以下命令来启动它,以生成熵:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

我认为将urandom用作rngd的来源并不聪明。这将有助于更快地耗尽可用的熵,并且一旦耗尽,它将成为熵的有偏差来源。所以我会避免这种解决方案。
惠更斯

1
sudo yum install haveged && sudo systemctl start haveged

肯定可以在CentOS 7.2 VM上运行。有时,如果要创建一堆并希望完好地保留钥匙圈,则希望在vm上创建GPG钥匙。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.