没有任何后门的实际证据,而且几乎不可能检查,除非通过“打开”机箱并用电子显微镜逐个检查所有晶体管 -有数十亿个,所以这不是可行的。如此规模的后门往往会被心怀不满的内部人士揭露,而不是通过外部分析。
但是,我们可以讨论物理可能性。基于对大约三个概念的一些误解,您链接到的文章是使用不当的术语的混乱混乱。这些是:
微码是用于 CPU 内 CPU 的指令。这与 CPU 的传统实现方式有关:许多基本块,对于每条指令,它们是否被激活;微码描述了“激活序列”。微码可以被认为是仿真器的软件实现,它解释我们认为是“机器语言”的 RAM 中的操作码。然而,在现代 CPU 中,大多数操作码都是“硬连线”的,而微码仅用于复杂的操作,例如fsin
(在 x86 CPU 的浮点操作数上计算正弦函数)。该答案包含对微码是什么以及它可以做什么的更详细的描述。
在 CPU 中,微代码存储在 ROM 中,但在启动时被复制到一个小的静态 RAM 元素(仍在 CPU 中),这更快但也可更新。因此,在启动时,操作系统可以将一些新的微代码上传到 CPU 中,并在下次断电前使用。操作系统这样做。微码格式对每个 CPU 的每个版本都非常特定,它不是标准的,没有文档记录,并且受未指定的加密算法保护,因此从操作系统的角度来看,微码更新是不透明的直接来自英特尔或 AMD 的 blob。
微码打开了隐藏后门的可能性。CPU 本身没有网络;它在当前 RAM 和硬件的上下文中运行,并且操作系统协调所有通信。如果机器中植入了后门,那么它仍然必须从外部可以利用,否则它是没有用的。这里的故事取决于 blob 的不透明性:据推测,NSA 与英特尔合作,可以制作一些特定的微码更新,当上传到 CPU 时,它会扫描 RAM 以探索操作系统内核结构并更改它们,添加了一个更常见的基于软件的后门。然后,此微代码更新将移交给 Microsoft,以包含在下一次 Windows 更新中。在这种情况下,微软将成为受害者,他们的操作系统不情愿地将后门代码推入 CPU。
这种活动是有风险的,因为有可能检测到操作系统代码和结构的运行时操作。某处的一些业余爱好者使用DMA将物理 RAM 转储到其他设备中,然后使用调试器来探索实时操作系统代码就足够了。间谍机构通常厌恶风险。因此,虽然理论上是可能的,但我认为植入微码驱动的后门是不太可能的:并不是说它不能完成(它可以),但它似乎非常难以正确完成。在我看来,只有在更容易的路径被关闭的情况下,NSA 才会诉诸此类游戏,而事实证明他们没有。见下文。
固件更新实际上超出了问题的范围。这与 CPU 或 Intel 无关;这是关于将恶意代码推送到具有此类芯片的硬件元素中的各种闪存芯片中 - 即许多外围设备而不是 CPU 本身。一些被称为罗刹的演示被制作并获得了一些名声,尽管其含义很少被很好地理解或解释。特别是,制造这种病毒不需要任何类似 NSA 的政治权力;恰恰相反:将代码推入可重刷固件对任何可以让自己的恶意代码在具有足够权限的机器上运行的人都是开放的。在这件事上,NSA 或英特尔能做的,摩尔达维亚的一些笨蛋程序员也能做。
(如果您是摩尔达维亚开发人员并感到被冒犯,我深表歉意。)
不过,最好的部分是可以安装PRNG。所有与加密相关的活动,特别是密钥生成,最终都归结为伪 alea 的产生,这应该与纯随机性没有区别。操作系统通过收集硬件事件来做到这一点,例如硬件中断到达的精确时间(到纳秒)。每次按键、鼠标移动、网络数据包等都会发生硬件中断。在这些事件的确切时间中存在一个假定的“抖动”,这(这是关键点)无法在计算机之外以足够的精度进行测量,因此这是“未知数据”(对于攻击者)可以用来为PRNG。
在某些情况下,收集这样的硬件事件是具有挑战性的,尤其是服务器中的虚拟机,在启动时是新鲜的(因为它们只有虚构的硬件,它们往往具有更高的可重现性,从而导致可猜测的 PRNG 状态)。为了让事情变得更好,CPU 供应商现在提供硬件 RNG,其中包括一些特定的电气不稳定电路(如反向齐纳二极管):此类硬件集成在 CPU 中,可从 VM 访问,并以可接受的速率产生“真正的随机性”。
在内部,来自随机性生成电路的随机事件首先在特定电路中进行后处理,将物理测量值转换为可以交给操作系统的位序列(然后操作系统将使用哈希函数为其获取种子) PRNG)。可以想象,修改后处理阶段,以便:
- 硬件 RNG看起来是随机的,与真正的随机性无法区分;
- 除非您知道电路中也嵌入了一些秘密“密钥”,这将允许解开系统并重建随机事件;
- 即使电路是完全逆向工程的,它仍然看起来像一个完全诚实的错误,而不是故意操纵。
因此,这将提供一个“后门”,它不会留下任何痕迹(不需要微码更新来推动操作系统更新),无法从外部检测到,甚至带有合理的否认性。实际的实现将是一种散列函数,它“不幸地”包括一个进位传播错误,它将内部状态减少到大约 50 位左右,因此在穷举搜索的范围内。bcrypt的参考实现有这样一个错误,尽管实现是软件和开源的(!),但几年来没有人看到它,但没有人认为 bcrypt 的作者是故意这样做的。
如果我是 NSA 或其他类似机构,并且我想在地球上的每台计算机上安装后门,我会通过硬件 RNG 来实现。这是低风险的路径。