1、可信启动概述:什么是可信启动、可信启动的信任链、TPM与TCM简介

各位同学好,我是老张。今天咱们开始《可信启动配置日志校验》的第一章。说实话,这个主题在安全领域里属于「基础但极其重要」的那一类。我见过太多系统被攻破,就是因为启动阶段没人管——你想想看,如果连系统是怎么起来的都不清楚,后面做再多安全加固也是白搭。

1.1 什么是可信启动

可信启动,英文叫 Trusted Boot,说白了就是「从硬件到操作系统,每一步都验明正身」。它不像传统启动那样只管把系统跑起来,而是要求:每一级代码在加载下一级之前,都要先验证它的数字签名或哈希值是否合法。

我在项目中遇到过一件事:某客户的内网服务器被植入了一个 bootkit,每次启动时恶意代码先于操作系统加载,把杀毒软件和EDR全部干掉。后来我们查了半年才发现,问题出在引导扇区——因为没有做可信启动,攻击者改了个引导程序就绕过了所有安全机制。嗯,从那以后,我给自己定了个规矩:凡是生产环境,必须上可信启动。

核心要点:可信启动不是「能不能启动」,而是「启动的是不是你想要的那个系统」。它解决的是启动阶段的完整性校验问题。

1.2 可信启动的信任链

信任链这个概念,我建议你把它想象成「接力赛」。每一棒选手都要确认上一棒的身份,然后才能接过棒子继续跑。在可信启动里,这个链条是这样的:

  1. 硬件根信任(Root of Trust)——通常是固化在芯片里的不可修改代码,比如 Intel 的 Boot Guard 或 TPM 中的初始固件。
  2. BIOS/UEFI 固件——由硬件根验证其完整性,通过后才执行。
  3. 引导加载程序(如 GRUB、shim)——由 UEFI 固件验证签名。
  4. 操作系统内核——由引导加载程序验证。
  5. 内核模块与关键服务——由内核在加载时验证。

为什么会这样设计?因为信任必须有一个「起点」。这个起点不能是软件,软件可以被改;必须是硬件,而且是不可篡改的硬件。我习惯把这个起点叫做「信任锚点」——它一旦被攻破,整个链条就全完了。

个人经验:我曾经在调试一台服务器时发现,它的 TPM 芯片固件版本太旧,导致信任链在第一步就断了。后来升级了 TPM 固件才解决问题。所以,别以为硬件根信任就永远可靠,它也需要更新。

下面这张图展示了完整的信任链流程:

可信启动信任链流程图 可信启动信任链 硬件根信任 (CRTM) UEFI 固件 引导加载程序 (GRUB/shim) 操作系统内核 信任传递方向 每一级验证下一级 的签名或哈希值 关键原则 信任不能传递 必须逐级验证

注意:信任链一旦在任意一环断裂,系统就不应该继续启动。但现实中很多系统配置了「失败后继续启动」的策略——这等于把安全机制变成了摆设。我建议你在生产环境中严格配置为「验证失败即停止」。

1.3 TPM 与 TCM 简介

聊完信任链,咱们得说说实现它的硬件基础——TPM 和 TCM。这两个东西是可信启动的「物理根基」。

1.3.1 TPM(可信平台模块)

TPM 是国际标准(ISO/IEC 11889),由 TCG(Trusted Computing Group)制定。它本质上是一个独立的密码协处理器,焊在主板上,有自己的存储、随机数生成器、RSA/SHA 引擎。它的核心能力包括:

  • 平台配置寄存器(PCR)——存储启动过程中各阶段的哈希值,只能扩展(extend),不能重置(除非重启)。
  • 密钥存储——私钥永远不出芯片,只用于签名或解密。
  • 远程证明——向远程服务器证明当前系统的启动状态是可信的。

我记得有一次帮客户做等保测评,对方问「TPM 里的 PCR 值怎么读?」我现场敲了个命令:

# 读取所有 PCR 值(Linux 下)
cat /sys/class/tpm/tpm0/pcr-sha256

# 或者用 tpm2_tools
tpm2_pcrread sha256:0-23

结果发现 PCR[0] 的值跟预期不符——说明 UEFI 固件被改过。后来一查,是 BIOS 升级时刷错了版本。你看,TPM 不仅能防攻击,还能帮你发现运维事故。

1.3.2 TCM(可信密码模块)

TCM 是中国国家标准(GM/T 0012-2012),由国密局主导制定。它跟 TPM 功能类似,但有几个关键区别:

对比项 TPM TCM
标准来源 TCG 国际标准 中国国家标准
密码算法 RSA、SHA-256、ECC SM2、SM3、SM4
密钥管理 RSA 密钥对为主 SM2 密钥对为主
应用场景 全球通用,Windows/Linux 原生支持 国内合规场景,需专用驱动
PCR 数量 通常 24 个(TPM 2.0) 通常 16 个

我的建议:如果你做的是国内政企项目,优先考虑 TCM,因为合规要求摆在那里。如果是海外业务或通用服务器,TPM 2.0 更成熟、生态更好。但不管用哪个,核心逻辑是一样的——用硬件保护信任根。

1.3.3 两者在可信启动中的角色

无论是 TPM 还是 TCM,在可信启动里都扮演同一个角色:存储和报告启动度量值。具体来说:

  1. 启动过程中,每一级代码(UEFI、GRUB、内核)都会计算下一级代码的哈希值。
  2. 这个哈希值通过 TPM2_PCR_Extend(或 TCM 的对应接口)写入 PCR。
  3. 系统启动完成后,可以通过 TPM2_PCR_Read 读取 PCR 值,与预期值比对。
  4. 如果比对一致,说明启动过程没有被篡改。

你可能会问:「那攻击者能不能伪造 PCR 值?」答案是:不能。因为 PCR 的扩展操作是单向的——你只能追加哈希值,不能覆盖或删除。而且 PCR 值在芯片内部维护,操作系统无法直接写入。这就是硬件信任根的威力。

避坑指南:我曾经遇到一个案例,某厂商的 TCM 芯片在 PCR 扩展时没有做原子操作,导致并发写入时 PCR 值错乱。后来我们要求厂商打补丁才解决。所以,采购 TPM/TCM 芯片时,一定要确认它通过了 TCG 或国密局的认证测试,别买杂牌货。

1.4 本章小结

这一章咱们把可信启动的骨架搭起来了:

  • 可信启动就是「启动时逐级验证完整性」。
  • 信任链从硬件根信任出发,经过 UEFI、引导程序、内核,每一级都验明正身。
  • TPM 和 TCM是信任链的物理载体,用 PCR 记录启动度量值,不可篡改。

嗯,这些概念听起来可能有点抽象。别急,后面几章我们会一步步动手配置、验证、排错。到时候你会发现,理解了信任链,整个系统的安全边界就清晰了。