为什么 gpg 使用 /dev/urandom

信息安全 gnupg 随机的
2021-09-09 14:40:56

在我的盒子上查看 GPG 的 strace 输出似乎表明它在加密消息时使用,即使指定了 --no-random-seed-file 也/dev/urandom没有任何访问权限。/dev/random

消息是否有被低熵会话密钥加密的风险?如果是这样,那么如何指示 GPG 不这样做呢?

编辑:我相信这是一个与处理更多临时数据的可能重复项不同的问题。我的 gpg 加密消息将有很长的生命周期,并且很容易被对手检查。

2个回答

一般情况下:

  • /dev/urandom安全性不亚于/dev/random. 事实上,它们都使用相同的算法和相同的种子。有时,/dev/random只是停下来,因为有一天,有人读到一些关于熵的东西,但不理解它,现在认为随机性是一种在使用时会被烧毁的东西,必须定期补充。

    此页面很好地解释了有关该主题的内容。)

  • 可能存在整个系统中没有足够可用熵的情况。这些情况在普通 Linux 发行版中不会发生,因为它们会在启动时生成并保存一个随机种子,以用于下一次启动,从而有效地确保/dev/urandom始终是加密安全的。要进入其中一种情况,您必须使用虚拟机快照玩一些奇怪的游戏,或者不使用 PC 而是使用一些非常有限的嵌入式系统;这与您使用 GnuPG 的环境相去甚远。

  • 非常值得注意的是,在虚拟机快照的情况下,“熵估计”/dev/random会兴高采烈地报告说它充满了东西,在这种情况下,这是非常错误的。也就是说,它的阻塞行为不仅没有/dev/random科学依据,而且在一个实际案例(VM 快照)中也完全无法触发,因为可能会担心熵损失。

  • 还要记住,/dev/urandom不适当的上下文也是/dev/random不适当的上下文。使用/dev/random不会让事情变得“更随机”;充其量,它会拒绝工作,而不是生成理论上安全性较低的密钥(“理论上”,因为这些都没有导致实际中断,即使作为实验室控制条件下的演示)。如上所述,这实际上是“充其量”,它实际上不适用于 VM 快照和重置。

    幸运的是,引导所涉及的所有活动都意味着收集足够的熵以实现加密安全(/dev/urandom甚至对于任意长的输出)。有关更多分析,请参阅本文GnuPG 密钥生成不是由内核在早期引导步骤中完成的;在正常操作期间,当 PRNG 已正确播种时,它会发生得更晚。

这一切都不能阻止一些人坚持一些带有熵的仪式性舞蹈。显然,GnuPG 的作者是特定神学解释的一部分——要么是因为他们相信这一点,要么是因为他们在市场压力下屈服了。

总结:使用/dev/urandom代替对于 GnuPG/dev/random来说并不弱。GnuPG 用于/dev/urandom正确播种并且将实现所有必需的不可预测性的上下文中,并且/dev/random不会做得更好(在实践中不是,在理论上也不是)。在一种情况(VM 快照)中,/dev/urandom对于 GnuPG 的输出可能/dev/random不足,出于同样的原因, 的输出同样不足,并且/dev/random不会触发 的阻塞机制。结论是从 GnuPG 切换/dev/urandom/dev/random完全没用的。

...也就是说,从技术角度来看。使用/dev/random而不是/dev/urandom可能会导致一些阻塞,这有助于说服弱者“正在发生严重的密码学”。它不会让事情变得更安全,但它可能会让用户感到更安全。

回答我自己的问题:

Eureka: FIPS 模式导致 /dev/random 用于会话密钥,并允许做出许多其他明智的决定。虽然看起来 Fedora可能已经决定取消它因此,尽管我的筹码几乎被那些说满足于“足够好”的人溢出,但实际上还有一个可行的选择。