4. 硬件信任根
在工业网关的安全启动链条中,硬件信任根(Root of Trust, RoT)是整个信任体系的起点。它是一组不可被软件篡改、始终可信的硬件与固件组合,负责在系统上电的第一时刻提供可信的度量基准与密钥保护能力。没有硬件信任根,后续的引导加载程序、操作系统内核、应用容器乃至证书体系都如同建立在沙地之上——攻击者只需替换一个引导文件,整条信任链便彻底崩塌。
一、核心原理:信任必须从不可变处开始
信任根的基本逻辑是"信任锚定"。系统上电后,CPU 首先执行固化在 ROM 中的一段代码(通常称为 BootROM 或信任根 ROM),这段代码在芯片制造时写入,运行时不可修改。它完成两件事:一是校验下一级引导程序(如 U-Boot SPL)的数字签名,二是将校验结果通过度量寄存器记录下来。只有校验通过,控制权才交给下一级;校验失败则进入恢复模式或直接停机。
这一过程形成了"度量—校验—传递"的链式结构。每一级在将控制权交给下一级之前,先度量下一级的完整性,再决定是否放行。最终,度量值被写入受硬件保护的寄存器(如 TPM 的 PCR),供远程证明或本地策略判断使用。工业网关常见的做法是:BootROM → SPL → U-Boot → Linux 内核 → 根文件系统 → 容器镜像,每一级都参与签名校验。
二、实现方式:TPM、TEE 与安全芯片的差异
三种载体在工业网关中的落地方式各有侧重。TPM 2.0 是标准化程度最高的方案,它通过独立的物理芯片提供 PCR 寄存器和密钥层级,支持远程证明(Remote Attestation)。网关启动时,BootROM 将各级度量值扩展到 PCR,平台可向管理服务器提交 Quote 签名,证明自身运行状态未被篡改。TPM 的缺点是增加 BOM 成本,且部分低端网关的 CPU 不提供 TPM 接口。
TEE 则利用 CPU 内部的安全世界(如 ARM TrustZone 的 Secure World)运行可信应用。OP-TEE 是工业网关中常见的开源实现,它可以在不增加外置芯片的前提下提供密钥存储与安全服务。TEE 的优势是集成度高、功耗低,适合边缘计算网关;但其信任边界依赖于 CPU 厂商的硬件实现质量,且不同平台的 TEE 移植成本差异较大。
安全芯片(Secure Element)如 Microchip ATECC608A,以极低的成本提供密钥生成、ECDSA 签名和 AES 加密能力。它通常通过 I2C 接口与主控连接,私钥在芯片内部生成且永不导出。对于只需要"设备身份认证 + 证书私钥保护"的工业网关,安全芯片是性价比最高的选择。其局限在于存储容量小(通常仅能存放少量密钥和证书),无法承担完整的度量与证明功能。
三、选型考量:从场景出发的决策清单
| 选型维度 | TPM 2.0 | TEE | 安全芯片 |
|---|---|---|---|
| 信任边界 | 独立芯片,边界清晰 | CPU 内部,依赖厂商 | 独立芯片,防篡改 |
| 度量与证明 | 完整 PCR + Quote | 部分支持,需 TA 实现 | 不支持完整度量 |
| 密钥保护 | 强,密钥层级完整 | 强,安全世界隔离 | 强,私钥不出芯片 |
| 成本 | 中高 | 低(集成于 SoC) | 低 |
| 典型场景 | 电力、轨交等合规场景 | 边缘计算、视频网关 | 计量、充电桩、小型网关 |
四、案例与误区复盘
某工业网关厂商在早期产品中仅使用软件方式存储设备私钥,私钥以明文形式保存在文件系统中。攻击者通过调试串口获取 shell 后,直接读取私钥并伪造设备身份接入云平台。整改方案是引入 ATECC608A 安全芯片,将私钥生成与签名操作全部迁移至芯片内部,主控仅能调用签名接口而无法读取私钥。整改后,即使攻击者获得 root 权限,也无法导出私钥。
另一个常见误区是"有了 TPM 就安全了"。实际上,TPM 只提供度量与密钥保护能力,若启动链中某一级未接入度量(例如 U-Boot 未将内核哈希扩展到 PCR),攻击者仍可在该环节替换固件而不被发现。因此,硬件信任根必须与完整的度量链配合,才能形成有效防护。
# 查看 TPM PCR 度量值示例(Linux 环境)
$ cat /sys/class/tpm/tpm0/pcr-sha256/0
3d4f8a2b1c9e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a
# 使用 tpm2-tools 读取 PCR[0] 与 PCR[7]
$ tpm2_pcrread sha256:0,7
sha256:
0 : 0x3D4F8A2B1C9E7F6A5B4C3D2E1F0A9B8C7D6E5F4A3B2C1D0E9F8A7B6C5D4E3F2A
7 : 0x9A8B7C6D5E4F3A2B1C0D9E8F7A6B5C4D3E2F1A0B9C8D7E6F5A4B3C2D1E0F9A8B
# 生成 Quote 远程证明(简化示意)
$ tpm2_quote -c 0x81010001 -l sha256:0,7 -q "nonce-2024" -m quote.msg -s quote.sig