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 后跑,而是两者有明确的先后与握手关系。典型时序如下:
- 上电复位释放:Host 与 HSM 同时退出复位,但 HSM BootROM 优先获得执行权。
- HSM BootROM 自检:校验自身 ROM 完整性、读取 eFuse 中的器件密钥与生命周期状态。
- HSM 固件加载与验证:BootROM 从 HSM Flash 读取固件镜像,计算哈希并与签名比对。验证通过后跳转到固件入口。
- HSM 固件初始化:初始化安全外设(TRNG、AES、SHA、PKE 等),建立与 Host 的共享内存通道。
- HSM 就绪信号:HSM 通过中断或状态寄存器通知 Host "安全子系统已就绪"。
- Host 启动:Host 在收到 HSM 就绪信号后,才允许访问 HSM 提供的密钥服务接口。
这个顺序的关键在于:Host 不能先于 HSM 完成信任根建立而访问密钥服务。如果 Host 抢先调用密钥灌装接口,HSM 会返回"未就绪"或"权限拒绝"错误。实际调试中,很多"密钥写不进去"的问题,根源就是 Host 启动代码没有等待 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 中的固件镜像是否与签名工具输出的哈希一致,常见原因是烧录时地址偏移或镜像截断。
理解这条启动链与信任根的关系,是后续所有密钥灌装操作的前提。信任根不是抽象概念,它具体表现为 BootROM 的校验逻辑、固件的签名验证、以及生命周期状态对接口的开关控制。只有信任根建立成功,密钥灌装才有意义;否则,写进去的密钥既无法被信任,也无法被正确使用。