4、硬件信任根(RoT):什么是硬件信任根、QNX支持的RoT方案、eFuse与OTP存储

4.1 硬件信任根到底是什么?

说实话,很多做嵌入式开发的朋友,一开始听到「信任根」这个词,都觉得挺玄乎的。我当年也一样。

简单来说,硬件信任根就是整个系统安全链的「起点」。你想想看,如果这个起点本身就不安全,那后面再怎么加密、再怎么校验,都是白搭。

举个例子。你启动一个QNX系统,从BootROM开始,到IPL,再到OS内核,最后到应用程序。这一条链上,每一级都要验证下一级的签名。那问题来了——第一级是谁来验证的?

答案就是:没人验证它。它必须是天生可信的。

这个「天生可信」的硬件模块,就是信任根。它通常固化在芯片内部,出厂后不可更改。说白了,它是整个安全体系的「祖宗」。祖宗要是坏了,后面全完蛋。

硬件信任根的核心特征:

  • 不可篡改性——一旦出厂,代码和数据就不能被修改
  • 不可绕过性——系统启动必须经过它,跳不过去
  • 不可克隆性——每个芯片的信任根是唯一的

我在项目中遇到过一件事。有个客户,他们自己做的板子,BootROM里没烧信任根,结果被人用JTAG直接读出了Flash里的全部固件。嗯,那次之后,他们才真正理解了信任根的价值。

4.2 QNX支持的RoT方案

QNX作为一个硬实时系统,对安全启动的支持是很成熟的。我个人习惯把QNX的RoT方案分成三类:

方案类型 说明 适用场景
芯片内置BootROM 芯片出厂时固化的启动代码,作为第一级信任根 大多数ARM、RISC-V平台
外部安全元件(SE) 独立的加密芯片,存储密钥和执行验证 高安全要求的车载、工控设备
TPM/TEE 可信平台模块或可信执行环境 需要远程证明的场景

我建议你优先考虑芯片内置的BootROM方案。为什么?因为成本低、集成度高。但如果你做的是车规级产品,比如ADAS域控制器,那最好加上外部SE。我曾经见过一个案例,某Tier1只用BootROM,结果被侧信道攻击拿到了密钥——教训很深刻。

QNX的IPL(Initial Program Loader)在设计上,天然支持与BootROM配合。它会从BootROM那里拿到一个「信任接力棒」,然后继续验证下一级。这个接力棒,说白了就是签名校验的结果。

我的一个小技巧:

在QNX的IPL代码里,可以加一个调试用的GPIO翻转。如果BootROM验证通过,GPIO拉高;如果失败,拉低。这样在硬件调试时,一眼就能看出信任根是否工作正常。别问我怎么知道的——当年被这个问题坑过两个通宵。

4.3 eFuse与OTP存储

聊完信任根,咱们得说说密钥存哪儿。你想想看,如果密钥放在Flash里,别人一读就出来了,那还谈什么安全?

所以,业界普遍的做法是用eFuseOTP来存储密钥。

4.3.1 eFuse是什么?

eFuse,全称是电子熔丝。它本质上是一根非常细的金属线。出厂时,这根线是导通的(代表0)。如果你给它通一个大电流,它就熔断了(代表1)。

熔断之后,就再也回不去了。这就是「一次性可编程」的含义。

我习惯把eFuse比作「芯片的纹身」。纹上去了,就洗不掉了。

4.3.2 OTP存储

OTP(One-Time Programmable)是更广义的说法。eFuse只是OTP的一种实现方式。其他还有反熔丝、浮栅等。

在QNX的安全启动流程中,通常会把以下几样东西烧进OTP:

  • 根公钥的哈希值——用于验证BootROM签名的公钥
  • 芯片唯一ID——每个芯片一个,用于绑定
  • 安全配置位——比如是否启用JTAG、是否允许调试
  • 回滚保护计数器——防止固件降级攻击

⚠️ 重要警告:

OTP烧录是不可逆的!我曾经见过一个工程师,在调试阶段不小心把JTAG禁用的位给烧了。结果芯片再也连不上调试器,整批板子报废。所以,量产前一定要在测试板上反复验证烧录脚本。

4.3.3 eFuse vs OTP:有什么区别?

其实,eFuse是OTP的一种。但行业内习惯这么区分:

特性 eFuse OTP(广义)
编程原理 熔断金属线 多种物理机制
编程速度 较慢(微秒级) 较快(纳秒级)
可靠性 高,但可能重新生长 取决于工艺
面积 较大 较小

嗯,这里要注意一点。eFuse有个「重新生长」的问题。就是熔断之后,过几年可能又长回去了。虽然概率极低,但在车规级产品中,我建议你选择反熔丝类型的OTP,可靠性更高。

4.4 实战建议

最后,给你几个我在项目中总结出来的建议:

  1. 密钥不要直接存明文——存哈希值就够了。公钥本身不需要保密,但它的完整性必须保证。
  2. 留足OTP空间——我建议至少预留20%的OTP空间给未来升级用。别问我为什么,问就是吃过亏。
  3. 烧录流程要自动化——手动烧录OTP,十个有九个会出错。写个脚本,一次搞定。
  4. 测试板和生产板分开——测试板的OTP不要烧安全位,否则调试起来想死的心都有。

好了,这一章的内容就到这里。硬件信任根是整个安全体系的基石,eFuse和OTP就是这块基石的「水泥」。搞懂了这些,后面的安全启动流程就好理解了。