1. 信任根与信任链:构建可信的起点
做嵌入式安全这么多年,我越来越觉得,安全这件事就像盖房子。你地基没打好,上面装修得再豪华也没用。信任根(RoT)就是那个地基。
说白了,信任根是一个绝对可信的起点。它必须满足三个条件:不可伪造、不可篡改、行为可预测。你想想看,如果连起点都不可信,那后面建立的一切都是空中楼阁。
核心定义:信任根(Root of Trust, RoT)是一个在物理上或逻辑上被强制保证可信的实体,它是整个安全体系中最底层的信任锚点。
1.1 信任链的建立过程
信任链,就是从信任根开始,一级一级地把信任传递下去。我习惯把它比作「接力赛」——每一棒都要验证上一棒的身份和完整性,确认没问题了,才接过接力棒。
典型的信任链建立过程是这样的:
- 上电复位:CPU 从 ROM 中执行第一条指令。这段代码是出厂固化的,物理上不可修改。
- 验证 Bootloader:ROM 代码计算 Bootloader 的哈希值,与存储在一次性可编程(OTP)存储器中的参考值比对。
- 验证 OS 内核:Bootloader 验证操作系统的内核镜像,确保它没有被篡改。
- 验证系统服务:OS 内核验证关键系统服务和驱动。
- 验证应用:系统服务验证用户态应用程序的签名。
每一步都环环相扣。只要有一环断裂,整个信任链就崩塌了。
我的经验:曾经在一个 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 信任根与信任链的关系
为了让你更直观地理解,我画了一张图:
从这张图你可以看到,信任根是整个信任链的「源头」。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 存储的参考哈希值怎么安全烧录?公钥怎么安全分发?度量过程中会不会引入侧信道攻击?
嗯,这些我们后面章节会逐一展开。今天先把信任根和信任链的概念理清楚,这是后面所有安全机制的基础。