2. 功能安全基础

好,我们进入正题。硬件安全模块,圈里人都叫 HSM。说白了,它就是芯片里一个带锁的独立小房间。这个小房间有自己的 CPU、自己的内存、自己的总线,跟外面主核是物理隔离的。

为什么要这么干?你想想看,电驱控制器现在都联网了,攻击者要是通过 CAN 或以太网摸进来,直接读你 Flash 里的密钥怎么办?HSM 就是最后一道防线。我在项目里见过太多「软件加密一时爽,调试火葬场」的案例,最后发现——密钥根本没藏好。

2.1 HSM 架构:一个带锁的独立小房间

HSM 的典型架构,我习惯把它分成三层:

  • 应用层:主核上跑的普通软件,通过驱动调用 HSM 服务。
  • 固件层:HSM 内部跑的专用固件,负责加解密、密钥管理、安全启动。
  • 硬件层:真正的安全岛,包含专用 CPU、SRAM、OTP、TRNG、加密引擎。

这里有个关键点——HSM 的 CPU 跟主核 CPU 是异步的。主核发一个「帮我算个签名」的指令,HSM 自己算完,把结果扔回共享内存。主核全程拿不到密钥,也看不到中间结果。

核心原则:密钥只在 HSM 内部流转,永不离开安全边界。

我画了一张架构图,帮你把这几层的关系看清楚:

HSM 三层架构与数据流 应用层(主核域) 电驱控制算法 / 诊断服务 / 通信栈 通过 HSM 驱动发送安全服务请求 固件层(HSM 域) 安全服务调度 / 密钥生命周期管理 / 安全启动校验 加解密算法库(AES / ECC / RSA / SHA) 硬件层(安全岛) 专用 CPU | 安全 SRAM | OTP | TRNG | 加密协处理器 物理隔离总线 | 电压/温度/频率入侵检测 密钥永不离开 硬件层边界

这张图你多看两眼。每次做安全方案评审,我都会拿这张图出来跟团队对齐——你的密钥到底在哪一层?如果答案不是「硬件层」,那就要重新设计。

2.2 密钥管理:从出生到销毁

密钥管理是 HSM 最核心的活儿。我把它总结成五个阶段:

  1. 密钥生成:必须在 HSM 内部用 TRNG 生成,不能从外部导入。
  2. 密钥存储:存到 OTP 或安全 NVM,主核读不到。
  3. 密钥使用:主核只能通过句柄引用,不能拿到明文。
  4. 密钥更新:需要安全通道认证,防止中间人替换。
  5. 密钥销毁:物理擦除 OTP 或覆写安全 NVM,不留痕迹。
我曾经踩过的坑:某项目把根密钥放在 Flash 里,用软件读保护。结果攻击者通过调试接口直接 dump 了整片 Flash。从那以后,我坚持根密钥必须锁在 OTP 里,连 HSM 固件都不能直接读。

密钥的层级关系,我习惯用「密钥树」来理解:

层级 名称 存储位置 用途
L0 根密钥 OTP(一次性可编程) 派生所有下级密钥
L1 固件加密密钥 安全 NVM(加密存储) 加密/解密固件镜像
L2 会话密钥 HSM SRAM(掉电消失) 通信加密,每次上电重新协商

你看这个结构——攻击者就算拿到了 L2 的会话密钥,也推不出 L1 和 L0。这就是分层的好处。

2.3 安全存储:数据锁在保险柜里

安全存储不只是「把数据藏起来」。它要解决三个问题:

  • 机密性:数据加密存储,密钥在 HSM 内部。
  • 完整性:带 MAC 校验,防止篡改。
  • 防回滚:带单调计数器,防止攻击者把固件恢复到有漏洞的老版本。

我个人习惯把安全存储区域分成三块:

我的设计经验:OTP 只放根密钥和芯片唯一 ID。安全 NVM 放固件加密密钥和用户证书。SRAM 放会话密钥和临时计算结果。这样即使 NVM 被暴力破解,根密钥还在 OTP 里,攻击者拿不到派生能力。

防回滚这块特别容易出问题。我记得有个项目,攻击者把固件从 v2.0 回滚到 v1.0,而 v1.0 有个已知漏洞。结果整个安全体系被攻破。解决方案就是加单调计数器——每次升级计数器加一,旧固件的计数器值对不上,HSM 直接拒绝启动。

2.4 真随机数生成器(TRNG):安全的基石

TRNG 是 HSM 里最容易被低估的模块。很多人觉得「随机数嘛,软件 rand() 也能用」。但你要知道,rand() 是伪随机,给定种子就能预测。TRNG 不一样,它靠物理噪声源产生真正的随机性。

TRNG 的典型结构:

  • 噪声源:通常是环形振荡器的抖动,或者热噪声。
  • 数字化电路:把模拟噪声转成 0/1 比特流。
  • 后处理:用冯·诺依曼校正或哈希提取,消除偏差。
  • 健康检测:实时监控噪声源是否失效。
关键指标:TRNG 必须通过 NIST SP 800-22 或 AIS-31 的随机性测试。如果健康检测连续报警,HSM 应该主动锁死,防止使用低质量随机数。

为什么 TRNG 这么重要?你想想看——密钥生成、签名、会话协商,每一步都依赖随机数。如果随机数可预测,整个安全体系就是纸糊的。我在项目里见过一次 TRNG 失效,原因是芯片温度太高,环形振荡器锁相了。从那以后,我要求 TRNG 的健康检测必须包含温度补偿逻辑。

嗯,HSM 的基础就这些。架构、密钥、存储、随机数,这四个点串起来,就是一套完整的安全底座。下一块我们聊聊这些机制怎么具体部署到电驱控制器里——那才是真正见真章的地方。