二、硬件信任根(RoT):从概念到实战

大家好,我是你们的嵌入式安全讲师。今天我们来聊聊安防系统里最底层的安全基石——硬件信任根。说白了,信任根就是整个系统信任链的起点。如果这个起点不可信,那后面的一切安全措施都是空中楼阁。

我在做安防产品安全评估时,见过太多「软件加密看起来很牛,但硬件一捅就破」的案例。嗯,咱们今天就把这个根扎牢。

2.1 RoT的概念:为什么需要它?

信任根(Root of Trust,RoT)是一个永远可信的硬件实体。它负责在系统启动的最早期,验证下一级固件的签名。只有验证通过,才允许执行。

你想想看,如果攻击者能篡改你Flash里的Bootloader,那你的加密算法再强也没用。RoT就是那个「谁都不信,只信自己」的看门大爷。

核心原则:信任链必须从硬件开始,逐级验证,不能有「先执行后验证」的环节。

典型的信任链是这样的:

  1. 硬件RoT(ROM代码,不可修改)→ 验证
  2. Bootloader(第一级)→ 验证
  3. 操作系统内核 → 验证
  4. 应用程序 → 运行

每一级只信任上一级的签名结果。这就是所谓的「安全启动链」。

我的经验:有一次客户说他们的IPC摄像头被黑了,我一看,Bootloader竟然没有签名验证。攻击者直接替换了固件,摄像头变成了矿机。嗯,这就是没有RoT的后果。

2.2 物理不可克隆函数(PUF):芯片的「指纹」

PUF这个概念,我第一次接触时觉得挺玄乎的。说白了,它就是利用芯片制造过程中不可避免的物理差异,生成一个唯一的、不可克隆的「芯片指纹」。

为什么需要PUF?因为传统的密钥存储方式——把密钥写在Flash或EEPROM里——有个致命问题:攻击者可以用探针、电子显微镜等手段读出来。而PUF的密钥是「即时生成」的,不上电就不存在。

PUF的工作原理

常见的PUF类型有几种:

PUF类型 原理 典型应用
SRAM PUF 利用SRAM上电时每个单元的随机初始值 FPGA、MCU内部
环形振荡器PUF 利用门延迟的工艺偏差 ASIC芯片
蝴蝶PUF 利用交叉耦合结构的亚稳态 低功耗设备

我个人习惯用SRAM PUF,因为它实现简单,很多MCU自带的SRAM就能用。但要注意,SRAM PUF对温度和电压敏感,需要配合纠错电路(ECC)使用。

避坑指南:我曾经在一个项目中直接用裸SRAM PUF生成密钥,结果设备从-20°C搬到60°C环境,密钥就变了。后来加了模糊提取器(Fuzzy Extractor)才解决。记住:PUF的输出不是100%稳定的,必须做纠错和稳定性处理。

PUF的实战用法

// 伪代码:PUF密钥生成流程
1. 上电后读取SRAM初始值(PUF响应)
2. 运行纠错算法(如BCH码)修复位翻转
3. 通过哈希函数(如SHA-256)生成固定长度密钥
4. 使用该密钥解密固件或进行身份认证

// 注意:PUF响应每次上电可能略有不同
// 必须使用辅助数据(Helper Data)进行纠错

你想想看,攻击者即使拿到芯片,也无法复制出同样的PUF响应。这就是硬件安全的核心优势。

2.3 安全元件(SE):独立的「保险柜」

安全元件(Secure Element,SE)是一个独立的、防篡改的芯片,专门用来存储敏感数据和执行加密运算。它有自己的CPU、存储器和加密引擎,和主处理器完全隔离。

我经常把SE比作「保险柜」——你把最值钱的东西(私钥、证书)放进去,外面的人拿不到,里面的东西也不会被篡改。

SE的典型功能

  • 安全存储:私钥、证书、生物特征数据
  • 加密运算:RSA、ECC、AES等算法硬件加速
  • 安全启动:作为RoT验证主处理器固件
  • 防篡改:检测到物理攻击时自动擦除数据

关键点:SE和主处理器之间通过安全通道通信(如SPI加密链路),防止中间人攻击。

我记得有一次做门禁控制器的安全设计,客户要求密钥不能以明文形式出现在任何总线上。我们用了SE,密钥只在SE内部使用,主处理器只能通过API调用加密服务。这样即使主处理器被攻破,密钥也拿不到。

SE的选型建议

应用场景 推荐SE型号 特点
智能门锁 NXP SE050 小尺寸、低功耗、支持I2C
安防摄像头 Microchip ATECC608 支持安全启动、密钥轮换
边缘网关 Infineon OPTIGA TPM 完整TPM功能、大容量存储

我的建议:如果成本允许,尽量用SE做RoT。它比纯软件方案安全一个数量级。但要注意,SE也有自己的固件,需要确保SE固件本身是安全的。

2.4 TPM芯片:工业标准的安全协处理器

TPM(Trusted Platform Module)是一种标准化的安全芯片,由TCG组织定义规范。它本质上是一个功能更丰富的SE,除了存储和加密,还提供平台完整性度量、远程证明等功能。

TPM在PC和服务器上很常见,现在越来越多的安防设备也开始集成。我个人觉得,TPM最大的价值在于它的标准化——API接口统一,软件生态成熟。

TPM的核心功能

  • 平台配置寄存器(PCR):存储系统启动过程中的度量值(哈希值)
  • 密封存储:只有当PCR值匹配特定状态时,才能解密数据
  • 远程证明:向远程服务器证明平台的可信状态
  • 密钥管理:生成、存储、使用密钥,密钥永不离片

TPM在安防系统中的应用

// TPM安全启动流程(简化版)
1. 系统上电,CPU执行ROM代码
2. ROM代码度量Bootloader(计算哈希,存入PCR[0])
3. Bootloader度量OS内核(存入PCR[1])
4. OS度量应用程序(存入PCR[2])
5. 应用程序向TPM请求解密密钥
6. TPM检查PCR值是否与密封时的值一致
7. 一致则释放密钥,不一致则拒绝

// 关键:任何环节被篡改,PCR值都会变化
// 密钥永远不会被释放给被篡改的系统

为什么会这样?因为TPM的PCR是「只扩展,不复位」的。你只能往PCR里追加哈希值,不能覆盖。这样攻击者即使篡改了某个环节,也无法让PCR回到「干净」状态。

注意:TPM不是万能的。我曾经遇到一个案例,攻击者通过SPI总线嗅探,拿到了TPM和CPU之间的通信数据。虽然密钥没泄露,但攻击者通过重放攻击绕过了验证。解决方案是启用TPM的加密会话功能。

TPM vs SE:怎么选?

对比项 TPM SE
标准化程度 高(TCG规范) 低(各厂商私有)
功能丰富度 高(PCR、远程证明等) 中(偏重存储和加密)
成本 较高 较低
软件生态 成熟(Linux、Windows原生支持) 依赖厂商SDK
典型场景 服务器、PC、高端安防设备 IoT设备、门锁、摄像头

我的建议是:如果你的设备需要远程证明或复杂的平台完整性度量,选TPM。如果只是需要安全存储和加密运算,SE性价比更高。

小结

硬件信任根是安防系统安全的基础。PUF提供了芯片级的唯一身份,SE和TPM提供了独立的安全执行环境。在实际项目中,我通常这样组合:

  • 低成本设备:MCU内部PUF + 软件模拟RoT
  • 中端设备:独立SE作为RoT
  • 高端设备:TPM + SE组合,TPM做平台度量,SE做密钥管理

记住一句话:没有硬件信任根的安全启动,就像没有地基的房子。下一章我们讲固件加密的具体实现,到时候会用到今天讲的这些硬件基础。

课后思考:如果你的设备只有一颗MCU,没有SE也没有TPM,怎么实现硬件信任根?提示:可以利用MCU内部的OTP(一次性可编程)存储和BootROM。