3、密钥生成与注入:TRNG、PRNG 与全生命周期策略
密钥管理的第一步,也是最关键的一步——密钥从哪来?
很多人觉得生成密钥不就是调个随机数函数吗?其实没那么简单。在 AUTOSAR 架构下,密钥的生成与注入涉及硬件、密码学、生产流程和 OTA 安全,任何一个环节出问题,整个安全体系都可能崩塌。
我个人习惯把密钥生成分成三个层次来看:随机数源、生成策略、注入流程。咱们一个一个拆开讲。
3.1 真随机数生成器 (TRNG) 与伪随机数生成器 (PRNG)
随机数是密钥的“原材料”。原材料质量不行,密钥就是纸糊的。
3.1.1 TRNG:硬件熵源
TRNG 依赖物理过程产生随机数,比如热噪声、时钟抖动、半导体噪声。它的输出不可预测,是密钥生成的理想种子源。
我在项目中遇到过一个问题:某款 MCU 的 TRNG 在高温下输出熵值下降,导致生成的密钥出现可预测模式。后来我们加了健康检测机制,每次取随机数前先检查熵源状态。
| 特性 | TRNG | PRNG |
|---|---|---|
| 熵源 | 物理过程(硬件) | 算法 + 种子(软件) |
| 输出可预测性 | 不可预测 | 种子已知则可预测 |
| 速度 | 慢(通常 kbps 级别) | 快(Mbps 级别) |
| AUTOSAR 典型用途 | 生成种子、密钥派生初始值 | 批量密钥生成、会话密钥 |
3.1.2 PRNG:算法扩展
PRNG 用确定性算法从种子扩展出随机序列。AUTOSAR 中常用 CTR_DRBG(基于 AES-CTR)或 Hash_DRBG(基于 SHA-256)。
你想想看,如果 PRNG 的种子被猜中,所有派生密钥就全废了。所以 AUTOSAR 规范要求:PRNG 种子必须来自 TRNG,且每次上电重新生成。
核心原则:TRNG 产种子,PRNG 产密钥。种子质量决定密钥安全上限。
3.2 密钥生成策略:三种典型路径
密钥怎么生成?不是拍脑袋决定的。根据应用场景和安全等级,AUTOSAR 定义了三种主流策略。
3.2.1 工厂注入
最传统的方式。ECU 在产线上通过安全硬件接口(如调试端口、专用烧录器)写入密钥。
- 优点:物理隔离,无网络暴露风险;密钥可预先生成并审计。
- 缺点:产线管理复杂;密钥更新困难;一旦泄露影响全批次。
- 我建议:工厂注入的密钥只用作“根密钥”或“设备身份密钥”,不要直接用于通信加密。
3.2.2 OTA 下发
车辆出厂后,通过安全通道从云端下发密钥。这是目前智能汽车的主流方式。
我曾经帮客户排查过一个 OTA 密钥下发失败的问题——原因是 ECU 的 HSM 内存不足,无法同时存储新旧两套密钥。嗯,这里要注意:OTA 下发必须支持“原子切换”,要么新密钥生效,要么回滚到旧密钥,不能出现中间态。
3.2.3 本地派生
ECU 利用已有密钥(如根密钥)和上下文信息(如计数器、UID),通过 KDF(密钥派生函数)生成新密钥。
说白了,这就是“密钥生密钥”。AUTOSAR 中常用 AES-CMAC 或 HMAC-SHA256 作为 KDF 算法。
实战建议:本地派生适合生成会话密钥或临时密钥。派生时一定要加入“用途标签”(如 0x01 用于加密,0x02 用于认证),防止密钥误用。
3.3 密钥注入流程与安全考量
密钥注入不是简单的“写进去”三个字。它是一套完整的协议,涉及身份认证、通道保护、状态机管理。
3.3.1 注入流程四步走
- 身份认证:注入工具与 ECU 互相验证身份。常用方法:证书链验证 + 挑战响应。
- 安全通道建立:协商会话密钥,加密后续传输。AUTOSAR 中常用 TLS 或 SecOC 扩展。
- 密钥传输:加密后的密钥数据通过安全通道下发。注意:密钥必须分段传输并加 MAC 校验。
- 密钥安装与验证:ECU 解密后写入 HSM 安全存储,然后回传校验值确认。
3.3.2 安全考量清单
我在多个项目中总结过密钥注入的常见坑,列出来供你参考:
- 回滚攻击:攻击者注入旧密钥。对策:注入时带版本号,ECU 拒绝版本低于当前值的密钥。
- 重放攻击:截获注入报文重复发送。对策:使用一次性 nonce 或时间戳。
- 侧信道泄露:注入过程中功耗/电磁辐射泄露密钥。对策:使用掩码技术,HSM 内完成解密。
- 产线安全:烧录工具被篡改。对策:工具必须硬件加密,且每次使用前向服务器认证。
警告:千万不要在生产环境中使用“测试密钥”或“默认密钥”。我曾经见过某 OEM 的产线脚本里写死了测试密钥,结果 10 万台车用了同一个密钥——这等于没锁门。
3.4 密钥生成与注入全流程框架图
下面这张图概括了从随机数生成到密钥注入的完整链路。我习惯把它贴在项目白板上,每次评审都过一遍。
3.5 小结:密钥生成与注入的核心原则
讲到这里,我想强调几个关键点:
- TRNG 是根,PRNG 是叶。没有好的种子,再强的算法也白搭。
- 策略选择看场景。工厂注入保底,OTA 下发灵活,本地派生高效。三者可以组合使用。
- 注入流程必须可审计。每次密钥注入都要记录日志,包括时间、工具 ID、密钥指纹。
- 安全考量要前置。不要等量产了才发现回滚攻击没防住——那代价太大了。
我的习惯:每次设计密钥注入方案时,先画一张类似上面的框架图,然后对着每个节点问自己三个问题——这个节点被攻击会怎样?攻击面在哪?怎么防御?问完一圈,方案基本就稳了。