1. 信任根与信任链:构建可信的起点

做嵌入式安全这么多年,我越来越觉得,安全这件事就像盖房子。你地基没打好,上面装修得再豪华也没用。信任根(RoT)就是那个地基。

说白了,信任根是一个绝对可信的起点。它必须满足三个条件:不可伪造、不可篡改、行为可预测。你想想看,如果连起点都不可信,那后面建立的一切都是空中楼阁。

核心定义:信任根(Root of Trust, RoT)是一个在物理上或逻辑上被强制保证可信的实体,它是整个安全体系中最底层的信任锚点。

1.1 信任链的建立过程

信任链,就是从信任根开始,一级一级地把信任传递下去。我习惯把它比作「接力赛」——每一棒都要验证上一棒的身份和完整性,确认没问题了,才接过接力棒。

典型的信任链建立过程是这样的:

  1. 上电复位:CPU 从 ROM 中执行第一条指令。这段代码是出厂固化的,物理上不可修改。
  2. 验证 Bootloader:ROM 代码计算 Bootloader 的哈希值,与存储在一次性可编程(OTP)存储器中的参考值比对。
  3. 验证 OS 内核:Bootloader 验证操作系统的内核镜像,确保它没有被篡改。
  4. 验证系统服务:OS 内核验证关键系统服务和驱动。
  5. 验证应用:系统服务验证用户态应用程序的签名。

每一步都环环相扣。只要有一环断裂,整个信任链就崩塌了。

我的经验:曾经在一个 IoT 项目中,客户说「我们 Bootloader 已经签名了,安全没问题」。结果我一看,Bootloader 验证完内核后,内核加载驱动时根本没做签名校验。攻击者只要替换一个驱动模块,就能拿到系统控制权。这就是典型的「信任链断裂」。

1.2 硬件信任锚的角色

纯软件实现的信任根有个致命问题——它自己谁来保护?所以业界普遍的做法是,把信任根锚定在硬件上。常见的硬件信任锚有三种:TPM、HSM 和 TEE。

类型 核心能力 典型场景 安全等级
TPM 密钥存储、平台度量、远程证明 PC、服务器、工业设备 中等
HSM 密钥全生命周期管理、高速加解密 金融、CA、云端密钥管理 高
TEE 隔离执行环境、安全存储、可信UI 手机、平板、智能汽车 中高

TPM(可信平台模块)

TPM 是一个独立的安全芯片。它最核心的功能是平台配置寄存器(PCR)。PCR 的值只能通过扩展操作来改变,而且扩展操作是不可逆的。这意味着,你可以通过读取 PCR 的值,来判断系统固件和软件的状态是否被篡改过。

我记得有一次帮客户调试远程证明方案,发现 PCR 值总是对不上。查了两天才发现,是 BIOS 在启动过程中加载了一个可选 ROM,而这个 ROM 没有被纳入度量链。嗯,这就是典型的「度量盲区」。

HSM(硬件安全模块)

HSM 是硬件信任锚里的「重武器」。它不仅能安全存储密钥,还能在芯片内部完成所有密码学运算,密钥永远不会以明文形式离开 HSM。

我建议在以下场景优先考虑 HSM:

  • 需要 FIPS 140-2 Level 3 及以上认证
  • 密钥数量大、更新频繁
  • 需要审计日志和密钥备份
  • 合规要求严格(如 PCI-DSS、GDPR)

避坑指南:我曾经见过一个项目,采购了昂贵的 HSM,却把它当普通加密机用——密钥直接通过 API 导出到应用层。这等于花了大价钱买了个保险柜,却把钥匙挂在保险柜外面。HSM 的价值在于「密钥不出芯片」,这一点一定要守住。

TEE(可信执行环境)

TEE 的思路和 TPM、HSM 不太一样。它不是在主处理器之外加一个独立芯片,而是在主处理器内部划分出一个安全区域。这个区域有独立的内存、独立的执行上下文,甚至独立的 I/O 路径。

ARM 的 TrustZone 是最典型的 TEE 实现。它把 SoC 硬件和软件资源划分为两个世界:

  • 安全世界(Secure World):运行可信 OS 和安全应用
  • 非安全世界(Normal World):运行普通 OS 和用户应用

两个世界通过「监控模式(Monitor Mode)」进行切换。这种硬件隔离的强度,远高于软件层面的进程隔离。

1.3 信任根与信任链的关系

为了让你更直观地理解,我画了一张图:

信任根与信任链架构图 信任根 (RoT) 硬件锚点 TPM HSM TEE 第1级:ROM Code → 度量 Bootloader 第2级:Bootloader → 度量 OS 内核 第3级:OS 内核 → 度量系统服务 第4级:系统服务 → 度量用户应用 每一级都通过哈希比对和签名验证,确保上一级未被篡改

从这张图你可以看到,信任根是整个信任链的「源头」。TPM、HSM、TEE 是三种主流的硬件锚点实现方式。它们各有侧重,但目标一致——为信任链提供一个不可篡改的起点。

1.4 如何选择硬件信任锚

说实话,没有「最好」的硬件信任锚,只有「最适合」的。我一般会从这几个维度来评估:

  • 成本敏感度:消费类产品选 TEE(集成在 SoC 中,成本低);金融设备选 HSM(独立芯片,成本高)
  • 性能要求:需要大量密码学运算的场景,HSM 有硬件加速优势
  • 合规要求:某些行业强制要求使用特定等级的 HSM
  • 供应链安全:TPM 和 HSM 有成熟的供应链,TEE 依赖 SoC 厂商

我的建议:如果你刚开始做安全设计,可以先从 TEE 入手。它集成度高、开发资源丰富,而且 ARM TrustZone 几乎成了移动设备的标配。等产品成熟了,再考虑叠加 TPM 或 HSM 来满足更高等级的安全需求。

1.5 一个简单的信任链代码示例

下面是一个简化的信任链验证流程,用伪代码表示:

// 第1步:ROM Code 验证 Bootloader
bootloader_hash = sha256(bootloader_image)
if bootloader_hash != otp_reference_hash:
    halt_system("Bootloader 被篡改!")

// 第2步:Bootloader 验证 OS 内核
os_signature = rsa_verify(os_image, os_sig, bootloader_pubkey)
if not os_signature:
    halt_system("OS 内核签名无效!")

// 第3步:OS 内核验证系统服务
for service in critical_services:
    service_hash = sha256(service_image)
    if service_hash != service_manifest[service].hash:
        halt_system(f"服务 {service} 被篡改!")

// 第4步:系统服务验证用户应用
for app in user_apps:
    app_signature = rsa_verify(app_image, app_sig, system_pubkey)
    if not app_signature:
        reject_app(app)

这段代码看起来简单,但实际工程中要考虑的细节很多。比如:OTP 存储的参考哈希值怎么安全烧录?公钥怎么安全分发?度量过程中会不会引入侧信道攻击?

嗯,这些我们后面章节会逐一展开。今天先把信任根和信任链的概念理清楚,这是后面所有安全机制的基础。