前段时间,我记得读过一篇关于计算中随机化的文章,以及如何随机的你实际上可以得到一个系统。如果我没记错的话,这篇文章的出现是因为代码中发生了一些看似微小的变化,但却导致了一个很大的安全漏洞。
我找不到这篇文章,也不记得具体是什么错误。仅凭对几年前修复的某个错误的模糊记忆而在网络上进行搜索,结果发现比我想象的要困难。然而我做到了,找到这个。它似乎符合描述,但只涉及 openssl。
我想知道这个错误是否比 openssl 中的随机数更广泛,并且实际上弄乱了整个熵池。如果这个错误与熵池无关,那么:是否曾经存在过这样的错误(导致熵显着减少,从而导致可预测的随机化)?如果是这样,我想知道哪些发行版容易受到攻击以及在哪里可以找到这些错误的报告。
如果这样的错误不存在……我度过了一个可怕的夜晚(失眠),众所周知,这会引起人们的幻觉和妄想……请原谅我。
致有关人士:
我问这个问题的原因是因为我正在编写一些代码,并且我们已经得到了很多希格斯-巴格森错误报告。我们一直在研究可能导致某些问题的原因,结果只是有与可预测的随机化有关。
我不能透露太多细节,遗憾的是,我不是在开源公司工作,而且必须签署保密协议。
答案1
软件随机数生成器并不是系统中唯一的熵来源。实际上它们根本不是熵的来源——软件 RNG使用外部熵源为系统提供熵。真正的来源是总是物理的(无论是专用硬件 RNG、温度传感器、音频输入、网络数据包计时、用户输入,甚至CPU的内部状态(对于虚拟CPU来说,从某种意义上来说,这并不是严格意义上的“物理”)——你能想到的都可以)。
现在关于你的问题:正如 Mat 在他的评论中提到的那样,大多数错误都是由于草率的设计/编码(/测试)造成的 - 我什至可以说这是 100%。我的猜测是你的代码正在经历某种竞争条件处理得很差(如果有的话)。因此,从某种意义上说,它与熵相关(因为竞争条件是随机事件)。至少将其归咎于 RNG 是一个相当大胆的说法——除非你使用随机数来触发它,在这种情况下它看起来更像是一个功能。
顺便说一句,如果 RNG 的故障是你问题的原因,你实际上会相当可预见地看到它们。关于 Debian OpenSSL 错误 - 我认为除了基于 Debian 的发行版(包括 Ubuntu)之外,没有任何其他发行版受到过影响。然而,从它最初是如何发生的角度来看,这个错误本身就很有教育意义。