在我的盒子上查看 GPG 的 strace 输出似乎表明它在加密消息时使用,即使指定了 --no-random-seed-file 也/dev/urandom没有任何访问权限。/dev/random
消息是否有被低熵会话密钥加密的风险?如果是这样,那么如何指示 GPG 不这样做呢?
编辑:我相信这是一个与处理更多临时数据的可能重复项不同的问题。我的 gpg 加密消息将有很长的生命周期,并且很容易被对手检查。
在我的盒子上查看 GPG 的 strace 输出似乎表明它在加密消息时使用,即使指定了 --no-random-seed-file 也/dev/urandom没有任何访问权限。/dev/random
消息是否有被低熵会话密钥加密的风险?如果是这样,那么如何指示 GPG 不这样做呢?
编辑:我相信这是一个与处理更多临时数据的可能重复项不同的问题。我的 gpg 加密消息将有很长的生命周期,并且很容易被对手检查。
一般情况下:
/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可能会导致一些阻塞,这有助于说服弱者“正在发生严重的密码学”。它不会让事情变得更安全,但它可能会让用户感到更安全。