2. AURIX HSM硬件架构与安全子系统
AURIX TC3xx 系列把 HSM(Hardware Security Module)做成一个独立于 Host CPU 的安全子系统,而不是一颗外挂的加密芯片。理解它的硬件架构,是后续写安全固件、划分内存、配置中断与 DMA 的前提。本节围绕 HSM 内核、TRNG、AES/SHA/ECC 加速器、安全 RAM/ROM、中断与 DMA 通路,以及它与 Host CPU 的交互机制展开。
一、HSM 子系统的整体构成
HSM 在芯片内部是一个带独立总线主控能力的子系统,典型组成包括:一颗安全内核(常见为 ARM Cortex-M3 类内核,运行 HSM 固件)、专用安全 RAM 与安全 ROM、真随机数发生器 TRNG、对称/非对称密码加速器(AES、SHA、ECC,部分型号还带 RSA/ECDSA 引擎)、定时器与中断控制器,以及连接 Host 侧与内部资源的总线接口。它拥有自己的时钟、复位和电源域,Host CPU 不能直接读写 HSM 内部 RAM,只能通过受控的通信接口交互。
这种“独立内核 + 独立存储 + 硬件加速器”的结构带来两个关键特性:一是 Host 被攻破时,密钥与安全逻辑仍被隔离在 HSM 域内;二是密码运算由硬件加速器承担,Host 只负责发起请求和取回结果,避免软件实现带来的侧信道与性能问题。
二、HSM 内核与安全固件
HSM 内核运行的是厂商预置或用户签名的安全固件,它负责调度加速器、管理密钥、处理 Host 请求。内核本身不直接暴露给 Host,Host 只能通过 Bridge 提交命令。安全固件通常分为引导区、服务区和应用区:引导区校验固件签名,服务区提供加解密、签名、随机数等标准服务,应用区承载项目自定义逻辑(如安全启动校验、SecOC 密钥派生)。
实际开发中,HSM 固件与 Host 固件是两套独立的编译产物,通过共享内存中的命令/响应结构体通信。一个典型的命令结构包含命令 ID、输入数据指针、输出缓冲区指针、长度和状态字段。Host 写入命令后触发 Bridge 通知,HSM 内核读取并执行,完成后回写状态并触发 Host 侧中断。
三、TRNG 与密码加速器
TRNG 提供真随机数,用于生成密钥、IV、挑战值等。它通常输出原始随机比特,经后处理(如 DRBG)后供加速器或固件使用。使用时要关注熵源就绪状态和健康测试,若 TRNG 未就绪就取数,可能得到低质量随机数。
AES 加速器支持 128/256 位密钥的 ECB/CBC/CTR 等模式,常用于 SecOC 报文认证、数据加密。SHA 加速器支持 SHA-256 及 HMAC,用于完整性校验和密钥派生。ECC 加速器支持 ECDSA 签名/验签和 ECDH 密钥协商,用于安全启动签名验证和会话密钥建立。三者都通过寄存器或描述符方式配置,运算完成后置位状态位并可触发中断。
四、安全 RAM/ROM 与访问隔离
安全 RAM 存放运行时的密钥、会话上下文和中间数据,安全 ROM 存放固件和不可变常量。它们位于 HSM 域内,Host 无法直接寻址。Host 与 HSM 之间共享的只有一块受控的共享 SRAM 或寄存器窗口,用于传递命令和结果。这种隔离是 HSM 安全性的基础:即使 Host 软件被篡改,也无法直接读取密钥。
五、中断与 DMA 通路
HSM 内部中断用于通知内核加速器完成、TRNG 就绪、Bridge 收到新命令等事件。Host 侧则通过 Bridge 中断感知 HSM 响应。DMA 通路用于在共享内存与加速器之间搬运数据,减少内核参与,提高吞吐。配置 DMA 时要明确源/目的地址、传输长度和触发源,避免与 Host 访问共享内存产生竞争。
六、Host 与 HSM 的交互机制
Host 与 HSM 的交互遵循“请求—处理—响应”模型。Host 不能直接调用 HSM 内部函数,而是把请求写入共享内存,通过 Bridge 寄存器触发。HSM 处理完成后写回结果并触发中断。典型交互流程如下:
- Host 准备命令结构体,填入命令 ID、输入/输出缓冲区地址和长度。
- Host 将结构体写入共享 SRAM,并确保缓存一致性(必要时执行 cache clean)。
- Host 写 Bridge 命令寄存器,通知 HSM 有新请求。
- HSM 内核读取命令,调用对应加速器或固件服务执行。
- HSM 将结果写回共享内存,更新状态字段,触发 Host 中断。
- Host 在中断服务中读取状态和结果,必要时执行 cache invalidate。
七、一个可参考的命令结构示例
下面给出一个用于 AES-CBC 加密的共享内存命令结构示例,字段可根据项目调整:
typedef struct {
uint32_t cmdId; // 例如 0x01 表示 AES-CBC 加密
uint32_t keyHandle; // 密钥句柄,密钥不直接出现在共享内存
uint32_t ivAddr; // IV 缓冲区地址
uint32_t inAddr; // 明文缓冲区地址
uint32_t outAddr; // 密文缓冲区地址
uint32_t length; // 数据长度(字节)
uint32_t status; // 0=空闲, 1=处理中, 2=成功, 3=失败
} HsmAesCbcCmd;
Host 填充该结构后触发 Bridge,HSM 根据 keyHandle 从安全 RAM 取密钥,执行 AES-CBC,把密文写入 outAddr,最后把 status 置为 2 或 3。Host 通过轮询或中断读取 status 判断结果。这种“句柄代替密钥”的设计,保证密钥始终不离开 HSM 域。
八、架构层面的关键约束
- Host 不能直接访问 HSM 内部 RAM/ROM,只能通过共享内存和 Bridge 交互。
- 密钥以句柄形式引用,明文密钥不出 HSM 域。
- 加速器运算与 DMA 搬运可并行,但共享内存访问需同步。
- HSM 固件与 Host 固件独立编译、独立签名、独立升级。
- 中断是 Host 感知 HSM 完成事件的主要手段,轮询可作为兜底。
掌握这些硬件构成与交互约束后,后续配置 HSM 服务、划分共享内存、编写 Host 侧驱动时,就能明确哪些操作在 Host 侧完成、哪些必须由 HSM 固件承担,避免把密钥或安全逻辑错误地放到 Host 域。