2. HSM 启动链与信任根建立

在 AURIX 这类带独立 HSM(Hardware Security Module)子系统的 MCU 上,密钥灌装与生命周期管理并不是"上电后直接写密钥"这么简单。HSM 内部有一枚独立的安全核(通常为 ARM Cortex-M 系列),它拥有自己的 ROM、RAM、Flash 与安全外设,并且与 Host(TriCore 主核)之间通过共享内存和中断进行通信。整条启动链的核心问题是:在允许任何密钥写入之前,系统必须先证明"当前运行的代码是可信的"。这个"可信起点"就是信任根(Root of Trust, RoT),而 BootROM 是信任根的第一块基石。

信任根的三层结构

AURIX HSM 的信任根通常由三层构成,自底向上依次是:

  • 硬件信任根(Hardware RoT):固化在 HSM BootROM 中的启动代码、芯片内唯一的不可读密钥(如基于 PUF 或 eFuse 的器件密钥)、以及安全启动校验逻辑。这部分不可修改,是整条链的绝对起点。
  • 固件信任根(Firmware RoT):HSM 固件镜像(HSM Firmware)经签名后烧录到 HSM Flash,BootROM 用硬件 RoT 中的公钥或对称密钥验证其完整性与真实性。
  • 配置信任根(Configuration RoT):HSM 的配置数据(如访问权限、密钥槽属性、生命周期状态)同样需要被保护,通常由固件 RoT 派生出的密钥进行校验。

这三层形成一条"信任链":BootROM 信任自己 → 验证 HSM 固件 → 固件验证配置 → 配置决定密钥灌装是否被允许。任何一环校验失败,启动链就会在对应阶段中止,密钥灌装接口不会被开放。

HSM 与 Host 的启动时序

上电复位后,AURIX 的启动并不是 Host 先跑、HSM 后跑,而是两者有明确的先后与握手关系。典型时序如下:

  1. 上电复位释放:Host 与 HSM 同时退出复位,但 HSM BootROM 优先获得执行权。
  2. HSM BootROM 自检:校验自身 ROM 完整性、读取 eFuse 中的器件密钥与生命周期状态。
  3. HSM 固件加载与验证:BootROM 从 HSM Flash 读取固件镜像,计算哈希并与签名比对。验证通过后跳转到固件入口。
  4. HSM 固件初始化:初始化安全外设(TRNG、AES、SHA、PKE 等),建立与 Host 的共享内存通道。
  5. HSM 就绪信号:HSM 通过中断或状态寄存器通知 Host "安全子系统已就绪"。
  6. Host 启动:Host 在收到 HSM 就绪信号后,才允许访问 HSM 提供的密钥服务接口。

这个顺序的关键在于:Host 不能先于 HSM 完成信任根建立而访问密钥服务。如果 Host 抢先调用密钥灌装接口,HSM 会返回"未就绪"或"权限拒绝"错误。实际调试中,很多"密钥写不进去"的问题,根源就是 Host 启动代码没有等待 HSM 就绪信号。

AURIX HSM 启动链与信任根建立时序 时间 HSM 安全子系统 Host (TriCore 主核) ① 上电复位释放 BootROM 优先执行 ② BootROM 自检 读 eFuse 器件密钥 / 生命周期状态 ③ HSM 固件加载与签名验证 哈希比对 + 签名校验 ④ 安全外设初始化 TRNG / AES / SHA / PKE ⑤ 发出 HSM 就绪信号 中断 / 状态寄存器置位 复位释放,等待 HSM 就绪 不可提前访问密钥服务 ⑥ 收到就绪信号 开放密钥服务接口 ⑦ 密钥灌装 / 生命周期操作 受信任根校验结果约束 就绪 禁止提前访问 信任根:BootROM → HSM 固件 → 配置 校验失败 → 启动中止,密钥接口不开放

信任根如何影响密钥灌装

信任根建立的结果直接决定密钥灌装能否进行,具体体现在三个层面:

第一,接口开放条件。HSM 固件只有在签名验证通过后才会初始化密钥管理模块。如果固件被篡改或签名不匹配,BootROM 会停留在错误状态,Host 永远等不到就绪信号,密钥灌装命令会超时失败。此时用调试器读取 HSM 状态寄存器,通常会看到 HSM_STATUS = 0x0000_0002(固件验证失败)之类的错误码。

第二,密钥槽权限。HSM 固件根据生命周期状态(如 ALIVE、PERSONALIZED、SECURED)设置每个密钥槽的读写权限。在 ALIVE 状态下,灌装接口开放;一旦进入 SECURED,灌装接口被永久关闭,只能使用已灌入的密钥。这个状态迁移由 HSM 固件控制,而固件本身的可信性由信任根保证。

第三,密钥加密保护。灌装到 HSM 的密钥通常不是明文存储,而是用器件密钥(Device Key)加密后写入。器件密钥来自 eFuse 或 PUF,属于硬件信任根的一部分。如果信任根校验失败,器件密钥不会被释放,即使强行写入密钥数据也无法被正确解密使用。

实际调试中的观察点

在工程实践中,判断信任根是否建立成功,可以按以下顺序检查:

  • 读取 HSM 状态寄存器,确认 BOOT_DONE 位是否置位;
  • 检查 Host 侧是否收到 HSM 就绪中断(通常为 HSM_IRQ 或共享内存标志位);
  • 通过 HSM 服务接口读取当前生命周期状态,确认是否处于允许灌装的状态;
  • 若固件验证失败,检查 HSM Flash 中的固件镜像是否与签名工具输出的哈希一致,常见原因是烧录时地址偏移或镜像截断。
注意:不要试图在 Host 启动代码中"跳过"等待 HSM 就绪的步骤。HSM 未就绪时访问密钥服务,轻则返回错误,重则触发安全异常并锁定调试接口。正确的做法是在 Host 启动流程中显式轮询或等待 HSM 就绪信号,再进入密钥灌装阶段。

理解这条启动链与信任根的关系,是后续所有密钥灌装操作的前提。信任根不是抽象概念,它具体表现为 BootROM 的校验逻辑、固件的签名验证、以及生命周期状态对接口的开关控制。只有信任根建立成功,密钥灌装才有意义;否则,写进去的密钥既无法被信任,也无法被正确使用。