2. AURIX安全硬件基础
在英飞凌AURIX TC3xx系列中,安全能力并非由软件单独实现,而是由一组硬件安全模块与存储保护机制共同支撑。理解这些硬件单元各自负责什么、彼此如何衔接,是后续做密钥管理、安全启动与安全服务开发的前提。本节围绕HSM、CSRM、SHE、TRNG、PFLASH/SFLASH保护以及安全启动链展开,并给出密钥存储介质的映射关系。
一、HSM:独立的安全执行域
HSM(Hardware Security Module)是AURIX内部一个独立的处理器子系统,通常基于ARM Cortex-M系列内核,拥有自己的代码、数据存储区与中断控制,与主核(TriCore)在物理上隔离。它的价值在于:主核运行的应用软件即使被攻破,也无法直接读写HSM内部的密钥与安全逻辑。HSM通过共享内存或邮箱(Mailbox)与主核通信,主核只能以“请求—响应”的方式调用HSM提供的安全服务,例如加解密、签名验签、密钥派生、随机数获取。
实际工程中,HSM固件通常分为两部分:由芯片厂商提供的HSM固件(含底层驱动与基础密码算法)和用户开发的HSM应用(实现具体安全服务)。主核侧通过HSM驱动接口发起服务请求,请求参数放入共享内存,HSM处理完成后回写结果并置位状态。判断一次调用是否成功,应同时检查返回状态码与结果数据长度,而不是只看函数返回值。
二、CSRM、SHE与TRNG的定位
CSRM(Cyber Security Real-time Module)是AURIX中面向实时安全功能的硬件模块,可理解为承载SHE等安全功能的硬件载体。SHE(Secure Hardware Extension)是一套标准化的安全功能规范,定义了密钥槽结构、命令集(如CMD_ENC、CMD_MAC、CMD_LOAD_KEY)以及安全启动与密钥更新的基本流程。SHE的价值在于标准化:不同厂商的SHE实现遵循同一命令语义,便于整车厂统一管理密钥。
TRNG(True Random Number Generator)提供真随机数源,是密钥生成、挑战值、Nonce等安全数据的熵来源。它与伪随机数发生器(PRNG)的区别在于:TRNG从物理噪声中提取熵,不依赖确定性算法。工程上要注意,TRNG上电后需要一定的“熵积累”时间,首次读取前应检查其状态寄存器是否就绪,否则可能读到质量不足的数据。
三、PFLASH与SFLASH的保护机制
AURIX的Flash分为PFLASH(Program Flash,存放程序代码)与DFLASH/SFLASH(数据Flash,存放数据与配置)。安全相关的保护主要体现在三个层面:
- 读保护(Read Protection):通过UCB(User Configuration Block)配置,可禁止外部调试接口读取Flash内容。一旦使能,调试器无法直接读取代码与密钥区。
- 写保护(Write Protection):对关键区域设置写保护,防止运行时被篡改。HSM固件区通常对主核只读。
- 访问权限控制:HSM拥有独立的Flash区域,主核无法访问;SHE密钥槽存储在受保护区域,只能通过SHE命令间接操作。
需要特别注意的是,UCB中的安全配置属于一次性写入(OTP)或有限次写入,错误配置可能导致芯片永久锁定。因此在量产前必须确认配置方案,并在开发阶段使用可复位的配置模式。
四、安全启动链
AURIX的安全启动链遵循“逐级验证”的原则:
- BootROM阶段:芯片上电后首先执行固化在BootROM中的代码,检查启动模式与UCB配置,决定是否进入安全启动流程。
- HSM固件验证:BootROM验证HSM固件的完整性与真实性(通常基于CMAC或签名),验证通过后才释放HSM执行。
- 主核应用验证:HSM固件启动后,可对主核应用的代码段进行校验,校验通过后允许主核跳转到应用入口。
这条链的核心是:每一级在将控制权交给下一级之前,必须先验证下一级的完整性。如果某一级验证失败,系统应停留在安全状态(如进入Bootloader或复位),而不是继续执行未验证的代码。
五、密钥存储介质映射
不同安全等级的密钥应存放在不同的介质中,形成分层映射:
| 密钥类型 | 推荐存储介质 | 访问方式 | 典型用途 |
|---|---|---|---|
| 主密钥(Master Key) | SHE密钥槽 / HSM内部存储 | 仅HSM/SHE可访问 | 密钥派生、安全启动根信任 |
| 应用密钥 | SFLASH受保护区 | 通过HSM服务调用 | 通信加密、数据保护 |
| 会话密钥 | RAM(运行时) | 主核/HSM临时使用 | 单次会话加密 |
| 公钥/证书 | PFLASH或外部存储 | 可公开读取 | 签名验证、身份认证 |
六、实操要点:从配置到验证
以配置SHE密钥为例,典型流程如下:
1. 确认芯片处于可配置状态(未锁定)
2. 通过HSM驱动发送CMD_LOAD_KEY命令
- 指定密钥槽ID(如KEY_1)
- 提供密钥明文与验证码(M1/M2/M3)
3. HSM内部完成密钥写入与完整性校验
4. 读取密钥槽状态,确认写入成功
5. 使用CMD_ENC或CMD_MAC验证密钥功能正常
验证时,可构造一组已知明文与期望密文,调用SHE加密命令后比对结果。若结果不一致,应检查密钥槽ID、密钥属性(如是否允许加密)以及命令参数格式。对于安全启动,可通过修改应用镜像的一个字节,观察系统是否拒绝启动,以此确认验证链生效。