3、密钥生命周期管理:密钥生成、存储、使用、更新、销毁的全生命周期概念

说到密钥管理,我经常跟团队里的年轻人讲一句话:密钥从生到死,每一步都不能马虎

你想想看,SHE 规范里那么多安全机制,最终保护的是什么?是密钥。如果密钥本身的管理出了漏洞,那整个安全体系就像纸糊的一样。我在项目中见过太多因为密钥管理不当导致的安全事故,说白了,很多问题都出在「生命周期」这个概念没吃透。

今天我们就来聊聊,一个密钥从诞生到销毁,到底要经历哪些阶段。每个阶段又有什么坑要避开。

3.1 密钥生成:一切安全的起点

密钥生成,是生命周期的第一步。这一步如果出了问题,后面再怎么折腾都没用。

我个人习惯把密钥生成分成两类:硬件生成软件生成。在 SHE 规范里,我们强烈推荐使用硬件真随机数发生器(TRNG)。为什么?因为软件生成的随机数,说白了是伪随机,有规律可循。

核心原则:密钥的熵源必须来自硬件,且生成过程必须在安全边界内完成。

我记得有一次做车规级芯片的评估,客户用了一个软件库来生成密钥。结果呢?随机数种子被逆向出来了。嗯,从那以后,我只要看到软件生成密钥的方案,都会多问一句:「你的熵源靠谱吗?」

在 SHE 规范中,密钥生成通常发生在以下场景:

  • 出厂预置:芯片在产线上通过安全烧录器写入初始密钥
  • 运行时生成:通过 SEC(安全扩展指令)调用 TRNG 生成会话密钥
  • 派生生成:基于主密钥,通过 KDF(密钥派生函数)生成子密钥

3.2 密钥存储:把钥匙锁进保险柜

密钥生成之后,放哪儿?这是个大问题。

你想想看,如果把密钥明文存在 Flash 里,那跟把家门钥匙贴在门上有什么区别?SHE 规范要求,密钥必须存储在专用的安全存储区,也就是我们常说的 NVM(非易失性存储器)中的安全槽位。

这里有几个关键点:

  • 物理隔离:安全存储区与普通应用区有物理隔离,CPU 无法直接访问
  • 加密存储:即使存储区被物理探针读取,拿到的也是密文
  • 访问控制:只有经过授权的安全指令才能读写密钥槽

我的经验:曾经有个项目,工程师为了调试方便,把密钥写到了日志里。结果日志文件被导出,整个安全体系瞬间崩塌。所以,我建议在开发阶段就建立严格的密钥访问审计机制。

在 SHE 规范中,密钥存储还有一个重要概念——密钥槽(Key Slot)。每个密钥槽都有固定的编号和属性,比如:

槽位编号 用途 访问权限
0x00 主密钥(MASTER_ECU_KEY) 仅限安全启动使用
0x01-0x0F 应用密钥 由安全策略控制
0x10-0x1F 会话密钥 临时使用,掉电即失

3.3 密钥使用:用对地方,用对方式

密钥存储好了,接下来就是使用。这一步最容易出问题的地方在于——密钥被滥用

什么叫滥用?举个例子:你有一个用于加密通信的密钥,结果被人拿去签名了。虽然都是密码学操作,但安全边界完全不一样。SHE 规范对密钥的使用有严格的用途绑定要求。

我个人习惯把密钥使用分为三类:

  • 加密/解密:使用对称密钥对数据进行加解密
  • 消息认证:使用 MAC 密钥验证数据完整性
  • 派生/更新:使用现有密钥生成新密钥

注意:在 SHE 规范中,密钥一旦被写入安全存储区,就永远不能以明文形式离开硬件。所有密码学操作都在硬件内部完成。我曾经见过一个方案,把密钥从硬件读出来再传给软件做加密——这完全违背了 SHE 的设计初衷。

这里有个避坑指南:我曾经在调试一个 CAN 通信加密方案时,发现密钥被反复使用,导致重放攻击。后来我强制要求每个会话都必须使用独立的会话密钥,问题才解决。

3.4 密钥更新:该换就换,别舍不得

密钥不是永久的。你想想看,一把锁用久了,总有人能配出钥匙来。密钥也一样,需要定期更新。

SHE 规范支持两种更新方式:

  • 本地更新:通过安全诊断指令,由授权工具写入新密钥
  • 远程更新:通过安全通道,使用现有密钥加密传输新密钥

更新过程中,最怕什么?最怕更新失败导致密钥丢失。我遇到过最惨的一次,是 OTA 升级时网络中断,新密钥只写了一半,旧密钥又被擦除了。结果 ECU 直接变砖。

解决方案:采用双备份机制。更新时先写备份区,验证成功后再覆盖主区。这样即使更新中断,系统还能用旧密钥启动。

另外,密钥更新还有一个容易被忽略的点——版本管理。每次更新都应该记录密钥版本号,这样在回滚攻击时可以及时发现。

3.5 密钥销毁:善始善终

最后一步,也是最容易被忽视的一步——密钥销毁。

很多人觉得,密钥不用了,直接擦掉不就行了?没那么简单。Flash 存储器的擦除操作,实际上只是把数据标记为「已删除」,物理上可能还有残留。专业的攻击者可以用 SEM(扫描电子显微镜)读出残留电荷。

在 SHE 规范中,密钥销毁需要做到:

  • 物理擦除:多次写入随机数据后再擦除,确保无法恢复
  • 即时生效:销毁操作一旦执行,密钥必须立即失效
  • 审计记录:销毁操作需要记录日志,便于事后追溯

我的建议:在项目设计阶段,就要把密钥销毁纳入安全策略。比如,当检测到物理攻击时,自动触发密钥销毁。我曾经在一个 T-Box 项目中实现了「自毁机制」——一旦机壳被打开,安全芯片立即擦除所有密钥。虽然有点极端,但客户很满意。

3.6 生命周期状态机

说了这么多,我们来总结一下。密钥的生命周期可以用一个状态机来表示:

生成 → 存储 → 使用 → 更新 → 销毁
  ↑        ↓        ↓       ↓       ↓
  └────────┴────────┴───────┴───────┘
            (循环使用/更新)

每个状态之间都有严格的转换条件。比如,从「使用」状态到「更新」状态,必须经过身份认证和权限检查。从「使用」状态到「销毁」状态,必须确认密钥不再被任何会话引用。

嗯,这里要注意:密钥一旦进入销毁状态,就不可逆了。所以销毁操作一定要谨慎,最好有双重确认机制。

好了,关于密钥生命周期管理,今天就聊到这里。下一章我们会深入讲解 SHE 规范中的安全存储区设计,到时候会涉及到具体的寄存器配置和访问控制策略。我们下次见。