3、硬件安全模块(HSM)基础:车规级HSM介绍、HSM的密钥存储机制、HSM的加密/解密操作、HSM与主控芯片的通信。
好,咱们进入第三章节。前面聊了密钥的生命周期和架构选型,很多同学会问:这些密钥到底存在哪儿才安全?答案就是——硬件安全模块,也就是 HSM。
说实话,我最早接触车规级 HSM 是在一个 T-Box 项目里。当时客户要求密钥必须防物理提取,我心想:软件加密不也能防吗?结果被安全审计打脸了。从那以后,我再也不敢轻视 HSM 了。
3.1 车规级HSM是什么?
车规级 HSM,说白了就是一颗专门干「密码活」的安全芯片。它跟普通 MCU 里的加密协处理器不一样——它有自己的 CPU、内存、真随机数发生器,甚至能独立跑安全固件。
你想想看,主控芯片跑着复杂的应用逻辑,万一被黑客攻破,密钥就裸奔了。HSM 的作用就是:密钥不出门,计算在内部。
车规级 HSM 的核心特性:
- 物理隔离:独立的处理器和存储区域,与主控应用完全隔离
- 防篡改:检测到物理攻击(如探针、激光)时自动擦除密钥
- 真随机数发生器:基于物理噪声生成高质量随机数,用于密钥生成
- 硬件加速:AES、RSA、ECC、SM2/SM4 等算法有专用硬件引擎
- 安全启动:保证 HSM 自身固件的完整性和真实性
我在项目中遇到过一种情况:某供应商说他们的 MCU 内置了 HSM,结果一看规格书,只是个软件模拟的「安全区」。嗯,这里要注意——真正的车规级 HSM 必须通过 Common Criteria EAL4+ 或 EVITA 认证,不是随便贴个标签就能叫 HSM 的。
3.2 HSM的密钥存储机制
密钥存在 HSM 里,不是像 U 盘那样直接读文件。HSM 的存储分几个层级,我习惯用「金库-保险柜-抽屉」来类比:
| 存储层级 | 名称 | 存储内容 | 访问权限 |
|---|---|---|---|
| 第1层 | OTP(一次性可编程) | 根密钥、设备唯一密钥 | 出厂写入后只读 |
| 第2层 | NVM(非易失性存储器) | 派生密钥、证书链 | 仅 HSM 内部固件可读写 |
| 第3层 | SRAM(易失性存储器) | 会话密钥、临时密钥 | 掉电即消失 |
关键点来了:主控芯片永远拿不到明文密钥。HSM 对外暴露的是密钥句柄(Key Handle),就像你去酒店存行李,拿到的凭证是号码牌,不是行李本身。
我的经验:曾经有个团队把根密钥存在 NVM 里,结果 OTP 区域没锁死,被攻击者通过 JTAG 读出来了。避坑指南——根密钥必须锁在 OTP 里,且熔断写保护位。这是血的教训。
3.3 HSM的加密/解密操作
HSM 做加解密,不是把密钥传给主控,而是主控把数据发给 HSM,HSM 算完再返回结果。流程大概是这样的:
主控芯片 HSM
| |
|-- 1. 发送指令(加密, 句柄0x01) -->|
|-- 2. 发送明文数据 ------------>|
| |-- 3. 内部查找密钥
| |-- 4. 硬件引擎加密
|<-- 5. 返回密文 ----------------|
| |
我举个例子。假设你要用 AES-128 加密一条 CAN 报文:
// 伪代码示例
// 主控侧
hsm_result = HSM_Encrypt(
key_handle = 0x01, // 密钥句柄,不是密钥本身
algorithm = AES_128_CBC,
plaintext = can_message,
iv = random_nonce,
ciphertext = output_buffer
);
// HSM 内部实际执行
// 1. 验证主控权限(访问控制列表检查)
// 2. 从安全存储中读取 key_handle 对应的密钥
// 3. 使用硬件 AES 引擎执行加密
// 4. 返回密文,密钥始终未离开 HSM
注意:HSM 的加解密操作是有速率限制的。我见过有人用 HSM 做视频流加密,结果 HSM 过热降频,导致丢帧。HSM 适合做「小数据、高安全」的操作,比如签名、密钥协商、少量报文加密。大数据量加密建议用对称密钥派生后,交给主控的硬件加速器处理。
3.4 HSM与主控芯片的通信
通信方式取决于 HSM 的物理形态。目前主流的有三种:
- 片内集成:HSM 作为 MCU 的一个独立安全核,通过内部总线通信。比如 NXP S32K3 系列、Infineon TC3xx 系列。延迟最低,但安全边界在同一颗芯片内。
- 片外独立:HSM 是单独的芯片,通过 SPI/I2C 与主控连接。比如 Microchip ATECC608A。灵活性高,但容易被中间人攻击——需要额外做通信加密。
- SHE/HSM 规范:AUTOSAR 定义的标准化接口,主控通过 SHE(Secure Hardware Extension)驱动与 HSM 通信。这是目前最主流的做法。
我个人最推荐片内集成 + SHE 规范。为什么?因为通信路径最短,攻击面最小。我曾经调试过一个片外 HSM 项目,SPI 线上被接了逻辑分析仪,攻击者直接重放了加密指令——嗯,后来我们加了通信会话密钥才解决。
通信安全要点:
- 主控与 HSM 之间的指令必须带消息认证码(MAC),防止指令篡改
- 每次会话使用不同的通信密钥,防止重放攻击
- HSM 应验证主控的身份(通常是基于证书的双向认证)
- 通信超时后自动销毁会话密钥
下面这张图展示了 HSM 在整个车端安全架构中的位置,以及它与主控、外设的交互关系:
最后说一句:HSM 不是万能的。它防得住物理攻击,但防不住逻辑漏洞。比如主控侧把密钥句柄泄露给了攻击者,或者 HSM 固件本身有后门——这些都需要结合安全开发流程来规避。我习惯把 HSM 当作「最后一道防线」,而不是「唯一防线」。