验证链从哪里开始
计算机启动时,会依次运行固件、引导程序和操作系统内核等组件。安全启动让已经处于信任基础内的组件,在把控制权交给下一组件之前,按既定策略检查它。验证可以利用数字签名确认映像与获信任签名者的关系,也可以按策略核对获准的映像摘要。
这种链条必须有起点:最初执行的验证逻辑、信任数据及其保护机制不能再由同一条链无限向前证明。UEFI Secure Boot主要规范UEFI映像的授权检查,并不单凭一个开关就证明全部早期硬件、固件及操作系统均可信。
以Windows为例,UEFI阶段验证引导组件,随后Windows Trusted Boot继续检查内核及后续启动组件。这些阶段相互衔接,但固件的安全启动与操作系统自己的验证职责仍应区分,不能把某一平台的全部启动安全功能都叫作UEFI Secure Boot。
密钥与签名数据库的职责
UEFI用平台密钥PK体现平台对安全策略管理的控制,并用密钥交换密钥数据库KEK管理可授权更新签名数据库的密钥。它们主要控制谁可以修改信任策略,不应被理解为所有启动映像都必须直接用PK签名。
允许数据库db保存可接受的签名者或映像摘要;禁止数据库dbx保存不再允许的签名者或摘要。若映像同时落入允许与禁止条件,禁止项优先。因而判断不仅是“签名在数学上是否正确”,还包括签名者或映像是否仍被当前策略接受。
在正常受保护的运行模式中,这些变量的更新需要符合认证要求;初始设置等模式另有规则。数据库及验证逻辑本身也必须受到保护,否则攻击者若能任意更换信任数据,后续的签名检查就失去原有意义。
为什么需要撤销和更新
获授权的软件仍可能在后来被发现存在漏洞,签名密钥也可能失去可信性。撤销更新让平台能够拒绝此前被接受的特定映像或签名者,而不必假定所有旧签名永久有效。这说明安全启动是一项需要维护的策略,而不是设备出厂时完成一次配置就永远不变。
例如一个旧引导程序曾合法签名,但存在已知缺陷,攻击者可能借它进入后续启动流程。仅重新验证旧签名不能识别这种风险;更新后的禁止数据库才可能让它不再被加载。更新同时需要考虑仍依赖旧组件的启动介质和恢复路径,避免把“拒绝旧代码”误当成没有兼容性代价的动作。
与加密和度量启动的区别
磁盘加密保护存储数据的机密性,安全启动限制启动时执行什么代码,目标并不相同。系统可以把解密密钥的释放与平台状态联系起来,但这种组合不意味着安全启动本身已经加密磁盘,也不意味着磁盘加密已经检查每个启动组件。
度量启动则记录组件或配置的度量值,常把摘要扩展进可信平台模块的PCR,并形成可供后续判断的证据。记录“启动了什么”与在加载前决定“允许启动什么”是不同职责;度量结果还需要与可信基准及策略比较。
最终,签名验证说明映像符合所选信任策略和完整性检查,不是对程序行为的全面证明。合法签名代码可能有缺陷,启动之后也可能遭受攻击,因此安全启动不能替代补丁、访问控制和运行时防护,更不能作为整个系统绝无恶意行为的保证。