耗尽熵是否会让系统更容易受到破坏?

耗尽熵是否会让系统更容易受到破坏?

熵对于许多安全功能(例如 TCP 序列号和加密密钥/参数生成)非常重要。我的理解是,熵池是通过一个简单的操作耗尽的,就像cat /dev/random隐藏在恶意或写得不好的脚本中一样。这也可能是由接管非特权本地帐户并试图深入系统的攻击者完成的。

由于大多数系统使用加密安全的伪数生成器 ( /dev/urandom) 而不是/dev/random,我想知道耗尽的熵池是否会产生任何安全后果。举个例子:如果新生成的 SSL 证书生成时熵池较低,是否会更容易猜测其私钥?我读过man 4 random,但我仍然不确定系统如何处理熵。

答案1

这个问题的谬误在于,不存在“耗尽熵”这样的东西。 (在任何意义上,在宇宙耗尽熵以让你生活之前,你都不会耗尽熵。)

任何为密码学设计的随机生成器都需要两个元素:熵源和“平滑”熵源的方法。熵源是不是作为随机位的来源,它们存在需要消除的偏差。无条件的熵源对密码学没有好处。调节,即将熵源转变为均匀随机位的源,是由加密安全的伪随机数生成器(简称CSPRNG)。一旦 CSPRNG 被植入了足够的熵,它就可以在宇宙中至少运行几个生命周期。

Linux/dev/urandom使用 CSPRNG,它会定期用额外的熵重新播种。定期重新播种有助于防止机器部分受损,从而以某种方式泄漏随机生成器的内部状态。

Linux/dev/random使用 CSPRNG,它会定期用额外的熵重新播种。 (听起来很熟悉?)Linux 维护了一个内部计算,假设 CSPRNG 算法严重损坏并快速泄漏熵并阻塞/dev/random。但是,如果您不信任 CSPRNG 背后的加密货币,那么您甚至无法信任/dev/random最初为您提供的加密货币,或者您将使用的几乎任何其他加密货币。

所以不,耗尽熵不会以任何方式使你的系统更容易受到攻击。

Linux 的唯一风险/dev/urandom是它很乐意为您提供可预测的输出在正确播种之前。对于“普通”桌面或服务器计算机上的日常使用来说,这不是问题,因为它们将熵池保存在磁盘上。如果您有新安装的系统或从只读介质启动的实时系统,则需要担心。 (实时系统是坏的生成长期密钥的地方!)一旦系统有足够的熵,那就永远了。

如果您想了解专业密码学家对这个问题的看法,您可以阅读托马斯·波宁的或者托马斯·胡恩的

^ 熵位数取 2计算来弄清楚。如果每秒生成 10 亿位,并且从 128 位的体面安全级别开始,则 1 个宇宙生命让您有时间生成大约 1 万亿位,即 2 96,大大低于限制。

答案2

,不断读取随机位/dev/{u,}random}不会使攻击系统的其他部分变得更容易。 (也就是说,除非攻击者可以从生成器的输出中预测生成器的内部状态。但人们认为任何人都不太可能做到。)

/dev/{,u}random一旦后面的随机数生成器(它们基本上是相同的东西)被播种,总会有足够的“随机性”可用。从设备读取大量随机位不会改变系统伪数生成器的内部状态,从而降低生成数的质量。

引用http://2uo.de/myths-about-urandom@roaima 在评论中提到了这一点:

熵变低怎么办?

没关系。

底层加密构建块的设计使得攻击者无法预测结果,只要一开始就有足够的随机性(又名熵)。 “足够”的通常下限可能是 256 位。不再。

相关内容