3、信任根密钥注入:密钥生成、密钥注入流程、密钥存储安全、防探测技术

好,咱们进入第三章节。前面两章我们聊了信任根是什么,也看了硬件架构怎么搭。但说句实在话,没有密钥的信任根,就是个空壳子。

密钥才是信任根的灵魂。你芯片里烧进去的密钥,决定了整个启动链的安全水位。我见过不少产品,硬件设计得挺漂亮,结果密钥注入环节出了纰漏,整条链子直接崩掉。所以这一章,咱们把密钥从出生到入土——不对,是到安全存储——的整个流程,掰开揉碎了讲清楚。

3.1 密钥生成:随机数质量决定一切

密钥生成,第一步就是要有好的随机数。你想想看,如果随机数发生器(TRNG)质量不行,密钥就有规律可循。攻击者只要拿到几个样本,就能推算出你的密钥空间。

我个人习惯,在选型阶段就会仔细看芯片的 TRNG 指标。别信厂商宣传的「硬件真随机数」,你得看它有没有通过 NIST SP 800-22 或 AIS-31 的测试。我在一个 IoT 项目里就踩过坑——某款芯片的 TRNG 输出居然有明显的周期性,用示波器都能看出规律来。那批货最后全部召回,教训惨痛。

密钥生成的核心原则:

  • 必须使用硬件 TRNG,不能依赖软件伪随机数
  • TRNG 输出必须经过在线健康检测(连续测试)
  • 密钥生成过程要在安全环境内完成,防止侧信道泄露
  • 生成后立即写入安全存储,不在总线上明文传输

实际项目中,密钥长度怎么选?我建议至少 256 位对称密钥,或者 2048 位以上的 RSA 密钥。别为了省那几微秒的启动时间,选个 128 位的——量子计算时代快来了,128 位扛不住的。

密钥类型 推荐长度 安全生命周期 典型用途
AES 对称密钥 256 位 10-15 年 固件加密、会话保护
ECDSA 签名密钥 P-256 / P-384 10-15 年 启动镜像签名验证
RSA 签名密钥 3072 / 4096 位 10-15 年 兼容旧系统时使用
HMAC 密钥 256 位 5-10 年 固件完整性校验

3.2 密钥注入流程:从产线到芯片的生死线

密钥注入,说白了就是把密钥写进芯片里。但这个过程,是整条信任链最脆弱的环节。为什么?因为密钥在注入前、注入中、注入后,都有泄露风险。

我参与过一条产线的安全审计,发现他们用 JTAG 直接灌密钥,而且 JTAG 口在灌完密钥后没熔断。你想想看,攻击者只要接上 JTAG,就能把密钥读出来。这种问题,设计阶段就得堵死。

一个标准的密钥注入流程,应该长这样:

  1. 密钥生成:在离线安全工作站上生成,工作站不联网
  2. 密钥封装:用产线公钥加密密钥,形成密文包
  3. 传输到产线:密文包通过加密通道传到烧录设备
  4. 安全解密:烧录设备用私钥解密,得到明文密钥
  5. 注入芯片:通过安全接口(如 SWD 或专用 OTP 编程接口)写入
  6. 验证回读:芯片内部计算密钥哈希,回传给烧录设备比对
  7. 熔断接口:永久关闭编程接口,防止后续读取

避坑指南:我曾经见过一个方案,密钥注入后没有做验证回读。结果有批芯片的 OTP 单元坏了,密钥写进去是错的,整批产品启动不了。后来我们强制要求:注入后必须做哈希比对,不一致就报废。

这里有个关键点——密钥在芯片内部的传输路径。我建议密钥从 IO 引脚进入后,直接走硬件安全通道,不经过 CPU 或主内存。这样即使 CPU 被恶意代码控制,也截获不到密钥。

3.3 密钥存储安全:OTP、eFuse 与防篡改

密钥存哪儿?这是个老生常谈的问题。常见的方案有三种:

  • 一次性可编程存储器(OTP):熔丝或反熔丝结构,写入后不可改
  • eFuse:电熔丝,可以部分编程,但不可擦除
  • 安全 NVM:带访问控制的非易失存储器,可读可写但有保护

我个人偏好 OTP 或 eFuse。为什么?因为密钥一旦写入,物理上就改不了了。攻击者想改你的信任根密钥,得把芯片磨开,用 FIB(聚焦离子束)去改熔丝——这成本高得离谱,一般攻击者扛不住。

但 OTP 也有坑。我记得有个项目,OTP 的读保护没做好,攻击者通过电压毛刺让读保护逻辑失效,直接把密钥读出来了。后来我们加了物理防探测层——在 OTP 阵列上方铺金属屏蔽层,一旦被磨开,金属层断裂,密钥自动清零。

警告:密钥存储区域必须与芯片其他逻辑隔离。不要和普通数据共用存储空间。攻击者可能通过 Rowhammer 或类似攻击,翻转相邻存储单元,破坏密钥完整性。

存储安全还有个容易被忽略的点——密钥备份。有些产品为了防丢,会把密钥备份到另一个区域。但备份意味着攻击面扩大。我建议:信任根密钥不备份。丢了就丢了,芯片报废。这是安全性和可用性的权衡,我选安全性。

3.4 防探测技术:让攻击者无从下手

防探测,就是防止攻击者通过各种手段拿到密钥。常见的攻击手段包括:

  • 微探针:用探针直接接触芯片内部走线
  • 电压毛刺:通过电源噪声让安全逻辑失效
  • 电磁分析:通过电磁辐射反推密钥
  • 激光故障注入:用激光打乱芯片逻辑
  • 温度攻击:通过极端温度改变存储单元特性

怎么防?我总结了几条实战经验:

第一,物理屏蔽。密钥存储区域上方铺多层金属,走线用 dummy pattern 混淆。攻击者想磨到密钥区域,得先破坏屏蔽层,而屏蔽层一断,密钥就自毁。

第二,总线加密。密钥在芯片内部传输时,不走明文。我习惯在 SoC 内部加一条专用加密总线,密钥从 OTP 读到安全 CPU 的过程中,全程加密。

第三,时序随机化。密钥读取操作加入随机延迟,让攻击者无法通过时序分析定位关键操作。这个技巧我在一个车规级芯片上用过,效果不错。

第四,主动屏蔽层。在芯片顶层铺一层有源屏蔽网格,网格里通着随机变化的信号。攻击者一旦用探针接触,信号变化被检测到,芯片立即擦除密钥。

防探测的黄金法则:

让攻击者获取密钥的成本,远高于攻击收益。你不需要做到绝对安全——那不可能——你只需要做到让攻击者觉得「划不来」。

下面这张图,是我常用的信任根密钥注入与保护的整体架构:

信任根密钥注入与保护架构 密钥生成 硬件 TRNG + 健康检测 密钥封装 产线公钥加密 安全传输 加密通道到产线 密钥注入 安全接口写入 OTP 芯片安全边界 OTP / eFuse 密钥存储 + 屏蔽层 安全 CPU 密钥使用与验证 防探测逻辑 主动屏蔽 + 自毁 哈希验证 关键安全措施 • 离线生成,不联网 • 全程加密传输 • 注入后熔断接口 防探测手段 • 物理屏蔽层 • 总线加密 • 时序随机化

这张图把整个流程串起来了。你注意看芯片安全边界内部——OTP、安全 CPU、防探测逻辑、哈希验证,这四个模块必须在一个物理隔离的安全岛上。任何跨边界的通信,都要经过加密和认证。

最后说一句,密钥注入不是一次性工作。产品生命周期里,可能会有密钥轮换的需求。但信任根密钥——也就是启动链最底层的那个密钥——我建议一次性注入,终身不变。轮换的是上层应用密钥,不是信任根。