try ai
科普
编辑
分享
反馈
  • 可信计算基

可信计算基

SciencePedia玻尔百科
核心要点
  • 可信计算基(TCB)是系统中对安全至关重要的所有组件的集合,应将其规模最小化以减少潜在的攻击面。
  • “信任链”从一个不可变的硬件信任根开始,通过在启动过程的每个阶段进行加密验证来扩展,从而建立系统完整性。
  • 安全启动通过只允许经签名的代码运行来强制执行策略,而度量启动则通过在可信平台模块(TPM)中记录加密度量值来报告系统状态。
  • 一个组件“可信”(属于 TCB 的一部分)并不意味着它是“值得信赖的”(没有漏洞),这使得针对可信代码中漏洞的运行时防御成为必要。

引言

在数字世界中,我们如何能确定一台计算机正在执行我们期望的操作,而不是攻击者的指令?这个关于信任的问题是所有计算机安全的基石。从消息的私密性到银行账户的完整性,每一项安全保障都依赖于一组核心组件的正确行为。如果这些基础部件中哪怕只有一个遭到破坏,整个安全结构就会崩溃。这个至关重要的基础被称为​​可信计算基(Trusted Computing Base, TCB)​​。它要解决的核心问题是:复杂性是安全之敌;每增加一行代码,都可能成为隐藏缺陷的地方。因此,安全系统设计的核心原则就是让 TCB 尽可能地小且易于验证。

本文将深入剖析可信计算基的理论与实践。在第一章​​“原理与机制”​​中,我们将探讨信任的基本机制。我们将定义 TCB,研究不同的操作系统架构如何显著改变其规模,并剖析如安全启动(Secure Boot)和度量启动(Measured Boot)等加密过程,这些过程从一个不可变的硬件信任根开始构建起一条“信任链”。随后,在​​“应用与跨学科联系”​​一章中,我们将展示 TCB 并非仅仅是操作系统设计者的抽象概念。我们将看到,这个单一理念如何为我们提供一个强大的视角,用以分析从智能手机、云服务器到构建软件的工具本身,乃至进行科学研究的仪器等万物的安全性。

原理与机制

究竟什么是信任?可信计算基

想象一下,你需要发送一封密信。你写好信,封入信封,然后交给一位你信任的信使。用计算机安全的语言来说,这位信使就是你的​​可信计算基(TCB)​​的一部分。你依赖他,且只依赖他,来确保你的信件安全送达。你整个系统的安全都压在他的肩上。如果这位信使诚实且能干,你的秘密就是安全的。但如果他被欺骗、被胁迫,或者仅仅是犯了个错,整个系统就失败了。

在计算机中,TCB 是所有硬件、固件和软件组件的集合,这些组件的正确性对于执行系统安全策略至关重要。它是我们绝对必须依赖的所有“信使”的集合。这包括操作系统内核的部分、启动计算机的固件,甚至某些硬件部件。如果这个神圣圈子内的任何一个组件存在缺陷或恶意,游戏就结束了,任何安全保证都无从谈起。

这就引出了安全系统设计的第一条,也是最重要的一条戒律:​​让 TCB 尽可能小。​​

这不仅仅是一句含糊的口号,而是一条严酷的概率法则。每一行代码都可能存在一个漏洞,而其中一些漏洞可能演变成安全缺陷。可以这样想:如果每行代码存在一个严重缺陷的微小独立概率为 β\betaβ,那么你的 TCB 中预期的缺陷总数就是代码行数 NNN 乘以 β\betaβ。“预期的漏洞面”与其规模成正比。更复杂的模型可能会使用泊松分布,但结论是相同的:更大的 TCB 意味着更大的攻击面,为缺陷提供了更多的藏身之处,也为攻击者提供了更多的可乘之机。一个小的 TCB 是我们有希望进行形式化验证、严格审计并最终信任的。

四种架构的故事

TCB 的大小不仅仅是编程纪律的问题,它也是操作系统架构中基本设计选择的直接结果。让我们通过 TCB 的视角来比较四种不同的哲学。

​​单核内核(monolithic kernel)​​是传统的、一体化的设计。文件系统、网络协议栈、设备驱动程序、内存管理——几乎所有东西都存在于一个以最高权限运行的庞大程序中。对于一个只需要做一件简单事情的应用程序来说,其 TCB 仍然是这个庞然大物。TCB 的规模巨大且实际上是恒定的,与应用程序的需求无关。其规模随应用程序使用的功能数量 fff 呈 O(1)O(1)O(1) 扩展,但这个常数非常巨大。这就像为一个小小的柠檬水摊建造一座摩天大楼;无论你用一个房间还是一千个,地基都同样广阔。

为了应对这种复杂性,​​微内核(microkernel)​​哲学应运而生。在这里,内核被精简到最基本的要素:程序间通信的机制(进程间通信或 IPC)、基本的调度和底层的内存管理。其他所有东西——驱动程序、文件系统、网络协议栈——都被 relegated 到称为服务器的用户空间进程中。内核本身的 TCB 非常小。然而,如果你的应用程序需要使用网络,它必须与网络服务器通信,该服务器现在是控制硬件的可信中介。该服务器成为你应用程序 TCB 的一部分。因此,总的 TCB 大小与你使用的功能数量成线性增长,规模为 O(f)O(f)O(f)。这是一种更模块化的方法,就像拥有一个小型中央办公室,并根据需要租用特定的、可信的服务。

​​外核(exokernel)​​将这种极简主义推向了极致。内核的唯一工作就是安全地划分硬件资源,然后“让路”。它提供保护,但几乎不提供抽象。所有传统的“操作系统服务”都在与应用程序直接链接的库中实现,并在该应用程序的非特权空间中运行。TCB 仅仅是那个微小的外核本身,其大小再次是一个很小的常数,O(1)O(1)O(1)。到目前为止,这是所有架构中 TCB 最小的。这就像给开发者们各自一块围起来的土地,让他们在不侵犯他人的前提下随心所欲地建造。

最后,​​单内核(unikernel)​​提供了一种定制化的解决方案。应用程序代码和仅必需的库操作系统组件被编译成一个单一的、专门的镜像,直接在硬件或 hypervisor 上运行。整个镜像都以内核权限运行。因此,TCB 包括了应用程序所需的所有操作系统库。与微内核一样,其大小随 fff 呈 O(f)O(f)O(f) 扩展,但由于用户空间和内核空间之间没有分离,组件可以被高度优化,并且通常更小。这是终极的定制机器,不包含任何无关的东西。

从零开始建立信任:信任链

好了,我们设计了一个具有最小 TCB 的系统。但是,当计算机开启时,我们如何知道 TCB 内部的组件是正确的呢?我们必须从一个无懈可击的基础之上建立信任。这个基础就是​​信任根(Root of Trust)​​,一个天生值得信赖的组件,通常因为它具有不可变性——代码被蚀刻在主板上一个无法更改的只读存储器(ROM)芯片中。

从这个单一的信任点,我们可以构建一条延伸至整个系统的​​信任链(Chain of Trust)​​。它的工作方式就像一系列的交接:

  1. 不可变的信任根(我们称之为第 0 阶段)启动。它的第一个也是唯一的工作是验证启动过程的下一阶段,即第 1 阶段(例如,主固件)。
  2. 如果第 1 阶段被验证,第 0 阶段就交出控制权。第 1 阶段现在是可信的。
  3. 然后,第 1 阶段验证第 2 阶段(例如,操作系统引导加载程序)。如果验证通过,它就交出控制权。
  4. 这个过程持续进行,信任链中的每个可信环节在执行前都会验证下一个环节。

每一步的验证都不是简单的检查,而是一个包含三部分的加密仪式:

  • ​​真实性(Authenticity)​​:验证者检查下一阶段代码的​​数字签名​​。这确认了代码来自可信的供应商(如微软或苹果),而不是攻击者。
  • ​​完整性(Integrity)​​:验证者计算代码的​​密码学哈希​​(如 SHA-256),并将其与被签名的哈希值进行比较。这证明了代码自供应商签名以来未被篡改或损坏。
  • ​​新鲜性(Freshness)​​:验证者检查嵌入在代码中的版本号是否不低于​​单调计数器​​中的值。单调计数器是一种特殊的硬件存储器,其值只能增加。这可以防止攻击者诱使系统加载一个较旧的、虽有签名但已知存在漏洞的组件版本——即“回滚攻击”。

从不可变的根到完全加载的操作系统,这整个强制执行过程就是我们所说的​​安全启动(Secure Boot)​​。其目标是​​强制执行​​一个简单的策略:只允许运行真实的、未被篡改的、最新的代码。

知晓与阻止:信任的两个方面

安全启动非常强大,但它的视野很窄。它只关心可执行代码的真实性。那么其他一切呢?

考虑一个简单而现实的攻击:一个对手暂时接触到一台机器,并修改了引导加载程序配置文件中的内核命令行。他们可能会添加一个像 selinux=0 这样的参数来禁用一个关键的安全模块。当计算机重启时,安全启动会检查引导加载程序和内核。它会发现它们的签名都是完美的。它对命令行一无所知;那只是配置数据。于是,它允许启动。系统在一个危险的弱化状态下启动,而安全启动对此毫不知情。

这揭示了对另一种机制的需求,其工作不是强制执行,而是​​报告​​。这就是​​度量启动(Measured Boot)​​和​​可信平台模块(Trusted Platform Module, TPM)​​的角色。

TPM 是主板上的一个小型、专门的安全芯片。它包含一组​​平台配置寄存器(Platform Configuration Registers, PCRs)​​。在度量启动期间,当每个组件即将被加载时——无论是可执行代码、驱动程序,还是像内核命令行这样的配置文件——都会计算其密码学哈希。这个哈希随后被“扩展”(extend)到一个 PCR 中。扩展操作是特殊的:PCRnew=H(PCRold∥measurement)PCR_{new} = H(PCR_{old} \Vert \text{measurement})PCRnew​=H(PCRold​∥measurement)。这是一条单行道。你不能擦除一个度量值或回退;你只能向链中添加内容。

结果是,在启动过程结束时,PCR 的值是记录下所发生每一件事情的唯一加密指纹。在我们的命令行攻击场景中,引导加载程序作为 TCB 的可信部分,会尽职地度量被修改过的命令行,并将其扩展到 PCR 中。最终的 PCR 值现在将与正常启动时的值不同。

回报来自于​​远程证明(Remote Attestation)​​。远程服务器可以向计算机发起质询,要求 TPM 提供其当前的 PCR 值。TPM 使用一个它从不泄露的唯一秘密密钥——证明密钥(Attestation Key)——来对 PCR 值进行签名,并发送给服务器。服务器随后可以将这份签名的报告与一个安全配置系统的“已知良好” PCR 值进行比较。当它看到不匹配时,它就获得了系统偏离安全基线的加密证明。它可能不确切知道原因,但它知道不应信任该系统,并可以拒绝其访问网络或敏感数据。

因此,我们有两个互补的系统:​​安全启动强制执行,度量启动报告。​​它们共同为信任提供了坚实的基础。

细节中的魔鬼:信任链中的微妙缺陷

即使有了这套精美的加密机制,构建一条真正安全的链条仍然充满了危险。物理硬件和并发操作的世界引入了一些微妙的方式来破坏信任。

其中最阴险的一种是​​检查时-使用时(Time-of-Check to Time-of-Use, TOCTOU)​​攻击。想象一下引导加载程序的操作序列:

  1. 从硬盘将操作系统内核加载到内存中。
  2. ​​检查​​其签名和哈希。一切正常!(这是检查时)。
  3. 跳转到内存中内核的入口点开始执行。(这是使用时)。

在第 2 步和第 3 步之间的微小时间间隔内会发生什么?可能会发生很多事。许多现代外围设备,如网卡和存储控制器,可以在不涉及 CPU 的情况下直接写入主内存,这一特性称为​​直接内存访问(Direct Memory Access, DMA)​​。如果这些设备之一上的恶意固件处于活动状态,它可能会在 CPU 跳转到完美验证过的内核之前仅几纳秒内,用恶意载荷覆盖它。系统验证了一个有效的内核,但执行了恶意软件。

这打破了“等价不变性”——即你验证的就是你执行的这一关键假设。它也教会我们一个深刻的教训:我们的 TCB 不仅必须包括那些执行验证的组件,还必须包括任何有能力在验证结果被使用前使其失效的组件。在这种情况下,控制支持 DMA 设备的存储驱动程序本身必须成为 TCB 的一部分。一个更广泛的解决方案是使用一个名为​​输入输出内存管理单元(Input-Output Memory Management Unit, IOMMU)​​的硬件组件。它充当 DMA 的防火墙,系统固件应在加载任何复杂驱动程序之前,用“默认拒绝”策略对其进行配置,确保没有任何外围设备可以写入它不拥有的内存。

当信任还不够时:后启动世界

我们的系统现在已经启动。信任链是完美的。度量值是正确的。我们正在运行真实的、由供应商提供的代码。我们终于安全了吗?

不。

这可能是可信计算中最重要的教训。一个组件是 TCB 的一部分意味着它是可信的,而不是说它是值得信赖的或无漏洞的。数字签名是来源的声明,而不是完美的保证。

考虑一个由供应商签名的内核驱动程序。它经过了安全启动的验证和 TPM 的度量。它是 TCB 不可或缺的一部分。但它包含一个微妙的漏洞——一个缓冲区溢出。一个现在作为普通用户运行的攻击者可以构造一个特殊的输入来触发这个漏洞,劫持驱动程序的执行,并获得系统的完全控制权。安全启动和度量启动在这里无能为力;它们的任务在驱动程序被加载的那一刻就已完成。它们是启动时技术,而这是一个运行时攻击。

这表明 TCB 并非一座一旦建成便坚不可摧的堡垒。它是我们必须用额外的安全层来捍卫的关键阵地。

  • ​​运行时防御​​:我们需要能够实时防范漏洞利用的技术。​​控制流完整性(Control-Flow Integrity, CFI)​​就是这样一种防御措施,它可以防止攻击者将程序的执行重定向到恶意代码片段(一种称为 ROP 或 JOP 的技术)。
  • ​​最小权限原则​​:限制一个受损 TCB 组件造成损害的最佳方法是削弱其权力。如果那个易受攻击的驱动程序可以被重新设计,在一个隔离的、沙盒化的进程中运行,只拥有它所需要的最小能力,那么它的被攻破将不再意味着整个系统被接管。这是微内核等架构背后的动机。
  • ​​动态信任​​:信任链不能在启动时结束。它必须是一个动态的过程。当通过​​热补丁(live patching)​​将一个关键的安全修复应用于正在运行的内核时,该补丁本身必须被签名并度量到 TPM 中。这将信任链扩展到新的代码,确保一份证明报告总是反映实际正在运行的代码,而不仅仅是启动时运行的代码。同样的原则也适用于操作系统动态加载一个新库时;可信的操作系统加载程序负责在这些新代码运行前度量它,将信任图扩展到系统的运行时生命周期中。

可信计算基不仅仅是一组组件,它是一项指导原则。它迫使我们在系统的每个层面直面“我们信任谁,以及为什么?”这个问题。建立这种信任是一个旅程,从一块不可变的硅片信任根开始,经过一条加密的交接链条,进入一个运行中系统的动态、混乱的世界。这是一个永无止境的过程。

应用与跨学科联系

现在我们已经探讨了可信计算基(TCB)的基本机制——这个我们赖以构建数字城堡的、最小且可验证的核心理念——你可能会觉得这只是一个相当抽象的概念,仅仅是操作系统架构师才需要关心的问题。但事实远非如此!TCB 是一面透镜,一种强大的思维方式,一旦你掌握了它,你就会开始发现它无处不在。它是一项统一的原则,连接着你口袋里的手机、你使用的云服务、构建我们软件的工具本身,甚至是一项科学发现的完整性。那么,让我们来一次小小的游览,看看这个简单而美妙的想法能带我们走多远。

口袋里的世界

让我们从我们每天使用的设备开始:智能手机和笔记本电脑。乍一看,它们似乎用途相似,但如果我们通过 TCB 的视角来看待它们,会发现它们内部的安全格局惊人地不同。两者都依赖于安全启动过程来建立一个可信状态,但必须信任的组件集合——即 TCB——会因其架构的不同而差异巨大。

以一部现代智能手机为例。它不仅包含运行你应用程序的主处理器,还包含其他专用处理器。其中一个关键处理器是蜂窝基带处理器(Cellular Baseband Processor, CBP),它是一个“计算机中的计算机”,处理与蜂窝网络的所有通信。现在,让我们提出 TCB 的问题:为了手机的安全,我们必须信任 CBP 吗?答案取决于其硬件能力。在许多设计中,出于性能考虑,CBP 被赋予了一种称为直接内存访问(Direct Memory Access, DMA)的特殊“后台通行证”,允许它直接读写系统的主内存,绕过主处理器和操作系统的保护。

如果 CBP 拥有无限制的 DMA 权限,它就可以窥探你的密码,读取你的私人信息,或修改操作系统本身。无论主操作系统有多安全,一个被攻破的 CBP 都能破坏整个系统。因此,CBP 庞大而复杂的固件成为智能手机 TCB 中不可避免的一部分。其完整性至关重要。

相比之下,许多笔记本电脑采用一种称为输入输出内存管理单元(Input-Output Memory Management Unit, IOMMU)的硬件“保镖”。IOMMU 位于 Wi-Fi 卡(笔记本电脑中相当于 CBP 的角色)等外围设备和主内存之间。它检查每一个内存访问请求,确保设备只与其指定的内存区域通信。有了正确配置的 IOMMU,即使一个完全被攻破的 Wi-Fi 卡也无法在其沙盒之外进行读写。IOMMU 强制执行隔离,通过允许我们不信任外围设备的固件,有效地缩小了 TCB。这阐明了一个深刻的原则:TCB 不仅仅关乎软件;它关乎组件之间的物理和架构连接。我们可以通过简化软件或通过构建硬件壁垒来强制隔离,从而缩小 TCB。

建造堡垒的艺术

思考 TCB 不仅能帮助我们分析现有系统,它还是设计新系统的基本指南。想象一下,我们受命构建引导加载程序(bootloader),这个加载操作系统的关键软件。我们有两种架构选择:我们可以构建一个单一、庞大、无所不包的单体引导加载程序,或者我们可以构建一系列更小、更专业的阶段,每个阶段验证并加载下一个。

TCB 原则会推动我们选择后者。一系列更小、更简单的模块几乎总是优于一个庞大、复杂的模块。我们必须信任的代码总量更小,更重要的是,每个独立部分都足够简单,使我们有很大机会对其进行形式化验证或审计以发现漏洞。这就是 TCB 最小化原则的实际应用:用小巧、简单且制作精良的砖块来建造你的堡垒。虽然这可能会引入更多以配置选项形式存在的“大门”——每个都可能是人为错误的潜在点——但这种权衡通常会在安全性方面带来回报。

TCB 最小化的哲学一直是操作系统演进的主要驱动力,在虚拟化领域尤其如此。早期的 hypervisor(Type 2)像一个应用程序一样构建在像 Windows 或 Linux 这样的全功能操作系统之上。其 TCB 非常庞大——它包括了整个底层操作系统!不可避免的演进是走向裸金属 hypervisor(Type 1),它直接在硬件上运行。这就像拆掉一个杂乱无章的大仓库,在一个干净、极简的混凝土地基上建造一个安全的金库。这种演进今天仍在继续,一些设计甚至将 hypervisor 的管理功能分解到独立的、非特权的域中。

为何如此执着于最小化?我们可以直观地理解。每一行代码和每一个网络接口都是漏洞可能隐藏的地方,是攻击者可能进入的门户。一个更小的 TCB 意味着更少的代码行和更少的接口。这直接转化为系统生命周期内安全故障的概率更低,这一概念可以使用可靠性工程模型进行形式化。一个更小的 TCB 不仅仅是一种审美选择;它是对系统长期安全的直接投资。

环环相扣的链条

构建一个小的 TCB 是一个很好的开始,但我们还必须极其巧妙地选择包含哪些内容。让我们回到我们的堡垒比喻。想象一下,建筑工需要从采石场取石头。取石头的车夫不是建筑工,对吧?我们不需要信任他。但如果这个车夫心怀不轨呢?他可以向建筑工展示一块完好的石头供检查,然后在检查完毕到石头被砌入墙体的瞬间,把它换成一块有裂缝的。

这是一个经典的“检查时-使用时”(TOCTOU)攻击。那个看似无害的、从磁盘获取操作系统内核的存储驱动程序就是那个车夫。如果驱动程序被攻破,它可以向验证程序呈现真实的内核,然后将一个恶意的内核提供给处理器执行。验证通过了,但系统却被攻破了。这个教训是深刻的:TCB 不仅必须包括那些执行验证的组件,还必须包括任何介导对被验证数据访问的组件。

在启动过程中精心构建的信任链,也必须在系统的整个运行期间得到维护。安全启动就像一个 meticulous 的仪式,确保登上王位的国王(内核)是合法的。但如果国王一旦加冕,立即宣布一项政策说:“任何顾问,即使没有凭证,也可以加入我的委员会并行使我的权力”,会发生什么?王国就沦陷了。这正是当一个经过完美签名和验证的内核被配置为允许在运行时加载未签名的、可能恶意的驱动程序或模块时发生的情况。信任链不是被外部攻击者破坏的,而是被一个可信组件内部的薄弱策略破坏的。TCB 被危险地扩大了,堡垒从内部被攻破。

这让我们对这些安全保证的范围有了实际的理解。在一台受管理的大学工作站上,安全启动可以阻止拥有管理权限的学生替换内核(废黜国王)。但它并不能阻止该学生修改用户空间的应用程序或文档(洗劫城堡的房间)。最初的信任链只保证了启动过程的完整性。

这就是度量启动和 TPM 提供更精细工具的地方:密封(sealing)。想象一下,皇冠上的珠宝被锁在一个盒子里,这个盒子只有在国王和他所有最初的、可信的顾问都在场并且身份无误的情况下才能打开。这就是 TPM 密封所做的事情。关键的秘密,如磁盘加密密钥,可以被“密封”到一个特定的、已知的良好平台状态(由 PCR 值表示)。如果管理员篡改了系统,即使是以安全启动允许的方式,平台状态也会改变,PCR 值不再匹配,TPM 就会拒绝解封秘密。拥有管理员权限的学生除非机器处于原始状态,否则无法获取数据。

超越单台机器的 TCB

我们的世界充满了抽象,TCB 的概念也随之扩展。我们现在的大部分计算都发生在云端,运行在虚拟机上,而这些虚拟机只是某个遥远服务器上由 hypervisor 创造出的幻象。在这个世界里,hypervisor 就是你的信任根。你的虚拟机的安全完全依赖于创造和管理其现实的 hypervisor 的完整性。TCB 变成了一个嵌套结构:客户机操作系统信任其虚拟固件,虚拟固件信任 hypervisor,而 hypervisor 又必须信任物理硬件。hypervisor 中的一个缺陷就是你虚拟世界结构中的一个缺陷。

但也许 TCB 思维最令人费解的应用来自编译器设计领域。它源于 Unix 的创造者之一 Ken Thompson 提出的一个著名的思想实验。他问道,当你无法信任用于构建程序的工具时,你如何信任程序本身?如果你得到的编译器是暗藏恶意的,它可以向它编译的任何程序中注入后门。最阴险的是,如果你让它从源代码编译一个干净的新版编译器,它可以识别出自己在做什么,并将同样的后门注入到新版本中。这种恶意变得可以自我复制。

你如何才能打破这个循环并建立一个可信的编译器?答案是 TCB 最小化的一个漂亮示范。你不是从一个复杂的编译器开始。你从一些简单到可以用手验证的东西开始:一个用于该语言小子集的微小解释器。这个可审计的、可信的种子成为你的 TCB。你使用这个可信的解释器来运行一个稍微复杂一些的编译器,然后用它来构建一个更强大的编译器,依此类推。在每个阶段,你都在你已经验证过的基础上进行构建,有效地将信任从你那个微小的种子“洗白”到最终复杂的程序。这个自举过程是 TCB 原则最深刻的体现:通过从一个不可简化的、可理解的核心开始来建立信任。

从代码到宇宙:一个普适原则

到目前为止,我们已经将 TCB 视为构建和验证系统的工具。但它的效用并不仅限于此。在数字取证领域,度量启动提供了一种非凡的能力。把启动过程想象成一个故事,每个加载的组件——固件、引导加载程序、内核、驱动程序——都是一个章节。度量启动不仅让这些章节可以被阅读,它还计算了这个故事的加密摘要,每增加一个新章节就更新 TPM 中的最终校验和。TPM 持有最终的、可信的校验和,而完整的故事——事件日志——存储在(不可信的)磁盘上。

事件发生后到达的调查员可以扮演一名加密侦探。他们可以向 TPM 请求其可信的校验和,然后从磁盘上的事件日志中重放故事,边走边计算自己的校验和。如果两个校验和匹配,事件日志就是真实的。如果不匹配,它就被篡改过。TPM 充当了硬件支持的测谎仪,而事件日志则成为你计算机启动过程的不可变飞行记录仪,让我们能够以加密的确定性重建过去。

让我们用最后一次广阔的飞跃来结束我们的旅程。想象一个科学实验室正在测量水样中污染物的浓度。一台连接到精密仪器的计算机显示出最终结果:百万分之 0.130.130.13。这个数字值得信赖吗?让我们应用 TCB 思维。

我们信任应用程序软件,因为我们信任它运行的操作系统。我们信任操作系统,因为它是由安全启动过程加载的。我们信任安全启动过程,因为它由固件和硬件信任根所锚定。但这个链条并没有在计算机内停止。计算机记录了来自分析仪器的信号。我们信任仪器,因为它是经过适当校准的。它是使用一个已知浓度的参考标准进行校准的。我们信任那个标准的浓度,因为它是通过将精确质量的纯化学品溶解在精确体积的溶剂中制备的。而我们信任那个质量和那个体积,因为它们是使用最近校准过的​​分析天平​​和经过认证的​​容量瓶​​测量的。

突然之间,这个单一科学结果的可信计算基不仅仅是代码!它跨越了数字和物理世界。TCB 包括计算机的固件,但它也包括实验室角落里的分析天平、容量瓶的校准证书,以及来自供应商的化学标准的纯度。启动固件和分析天平都是同一个 TCB 的基础组件。

这就是可信计算基的终极教训。它不仅仅是计算机安全专家的一个术语。它是我们在任何复杂系统中建立确定性的一种基本推理方法。它教我们不断追问最重要的问题:我必须信任什么?以及我如何能使那组事物尽可能地小、尽可能地简单、尽可能地可验证?从启动我们手机的硅片到测量我们世界的仪器,这个优雅的理念为我们构建一个更值得信赖的现实提供了基础。