4、硬件信任根:eFuse与OTP原理、硬件唯一密钥(HUK)的生成与保护、物理不可克隆函数(PUF)简介

各位同学,咱们今天聊点硬核的——硬件信任根。说白了,就是整个安全体系的“祖坟”。你想想看,软件层面的安全再怎么加固,如果硬件本身就不靠谱,那一切等于白搭。我这些年做TEE部署,踩过最大的坑,十有八九都跟硬件信任根没搞扎实有关。

4.1 eFuse与OTP:一次编程,终身锁定

先说说eFuse和OTP。这俩东西,本质上都是“一次性可编程存储器”。

OTP(One-Time Programmable),顾名思义,只能写一次。写进去之后,就再也改不了了。这就像在石头上刻字,刻完就定型了。

eFuse 是OTP的一种具体实现。它利用电迁移效应,通过大电流“熔断”芯片内部的金属丝或多晶硅丝。熔断前代表“0”,熔断后代表“1”。一旦熔断,不可恢复。

我在项目中遇到过一件事:某次产线烧录,因为电压不稳定,导致一批芯片的eFuse烧录了一半就停了。结果这批芯片既不是全0,也不是全1,处于一种“半熔断”的诡异状态。嗯,那批货最后全废了。所以,烧录eFuse时,电源稳定性是第一位的。

⚠️ 警告: eFuse烧录是不可逆操作。一旦烧错,芯片直接报废。建议在烧录前做三次校验,确保数据无误。

eFuse在TEE里主要用来存什么?

  • 根密钥(Root Key):整个安全体系的起点。
  • 芯片ID:每颗芯片独一无二的标识。
  • 安全配置:比如是否启用JTAG调试、是否允许回退到旧版本固件。
  • 生命周期状态:芯片处于开发态、生产态还是报废态。

这里有个关键点:eFuse的容量通常很小,几十到几百个bit。所以,我们不会把完整的密钥存进去,而是存一个“种子”,再由这个种子派生出其他密钥。

4.2 硬件唯一密钥(HUK):每颗芯片的“身份证”

HUK,全称Hardware Unique Key。每颗芯片出厂时,都会基于eFuse中存储的种子,结合芯片自身的物理特性,生成一个独一无二的密钥。

这个密钥有什么用?

  • 加密本地存储:用户数据、应用密钥,都用HUK加密后存到Flash里。就算有人把Flash拆下来,没有HUK也解不开。
  • 身份认证:云端可以通过挑战-应答机制,验证芯片是不是正品。
  • 派生会话密钥:每次通信时,用HUK派生出临时会话密钥,实现一话一密。

HUK的生成过程,我习惯这么设计:

HUK = KDF(HUK_Seed || Chip_ID || Die_Coordinate)

其中:

  • HUK_Seed:存储在eFuse中的随机数,每颗芯片不同。
  • Chip_ID:芯片的序列号,也是唯一的。
  • Die_Coordinate:芯片在晶圆上的物理坐标。同一片晶圆上,不同位置的芯片,物理特性会有细微差异。
  • KDF:密钥派生函数,比如HKDF-SHA256。

这样生成的HUK,即使两个芯片的eFuse种子相同(理论上概率极低),最终的HUK也会因为物理坐标不同而不同。

💡 提示: HUK必须永远不出TEE。它只能在TEE内部使用,任何试图将HUK读出到REE(富执行环境)的操作,都应该被硬件阻止。我曾经见过一个方案,把HUK通过MMIO寄存器暴露给REE,结果被侧信道攻击一把梭了。

4.3 物理不可克隆函数(PUF):芯片的“生物特征”

PUF,Physical Unclonable Function。这玩意儿很有意思,它利用芯片制造过程中不可避免的工艺偏差,来生成一个独一无二的“指纹”。

你想想看,同一片晶圆上,不同位置的晶体管,阈值电压、延迟时间都会有微小的差异。这些差异,就是PUF的“熵源”。

PUF和eFuse最大的区别是什么?

特性 eFuse PUF
存储方式 显式存储(熔丝状态) 隐式存储(物理特性)
可编程性 可烧录一次 不可编程,只可读取
抗物理攻击 较弱(可被显微镜观察) 较强(物理特性难以复制)
稳定性 高(熔断后永久不变) 受温度、电压影响,需要纠错
成本 需要额外工艺步骤 可利用标准CMOS工艺

PUF的典型应用场景:

  • 替代eFuse存储密钥:不需要显式存储密钥,密钥由PUF实时生成。攻击者即使物理剖开芯片,也找不到密钥。
  • 防克隆:每个芯片的PUF响应都是唯一的,无法通过复制版图来克隆。

不过,PUF也有它的毛病。最典型的就是噪声问题。同一个PUF,在不同温度下读出来的响应可能不一样。所以,PUF输出后面必须跟一个纠错电路(ECC),把有噪声的响应纠正成稳定的密钥。

我个人习惯,在量产时会把PUF的辅助数据(Helper Data)存到eFuse里。这样,每次上电时,PUF + Helper Data + ECC,就能稳定地恢复出同一个密钥。

🔑 核心要点: eFuse是“写进去就固定”,PUF是“读出来才生成”。两者结合,可以构建出既稳定又抗物理攻击的硬件信任根。

4.4 知识体系总览

下面这张图,是我自己梳理的硬件信任根知识体系。你可以把它当作一个“地图”,方便理解各个组件之间的关系。

硬件信任根知识体系 硬件信任根 (HRoT) eFuse / OTP 硬件唯一密钥 (HUK) 物理不可克隆函数 (PUF) 存储根密钥、芯片ID、安全配置 一次性编程,不可逆 容量小(几十~几百bit) 基于种子 + 芯片ID + 坐标派生 加密本地存储、身份认证 永不出TEE 利用工艺偏差生成唯一指纹 抗物理攻击,不可克隆 需要纠错电路(ECC) 三者结合:eFuse存种子 → 派生HUK → PUF提供额外熵源

这张图里,我把eFuse、HUK、PUF的关系梳理得很清楚。说白了,eFuse是“地基”,HUK是“房子”,PUF是“防盗门”。三者缺一不可。

4.5 避坑指南

最后,分享几个我亲身踩过的坑:

  • eFuse烧录时序:不同厂家的eFuse,烧录时序差异很大。有的需要先擦除再写入,有的直接写就行。一定要仔细看Datasheet,别想当然。
  • HUK派生不要用固定盐:有些方案为了省事,直接用全0作为盐。这等于把HUK的熵源砍掉了一半。我建议用芯片ID + 随机数作为盐。
  • PUF的纠错开销:PUF的纠错电路不是免费的。它需要额外的存储空间存Helper Data,还需要额外的计算时间。量产前一定要评估好成本和性能。
  • 测试覆盖率:eFuse和PUF在芯片测试阶段,必须100%覆盖。我见过一个项目,因为测试向量没覆盖到某个eFuse位,导致量产时1%的芯片无法正常启动。

嗯,硬件信任根这块,内容确实不少。但只要你把eFuse、HUK、PUF这三者的关系理清了,后面的安全启动、安全存储,都会顺理成章。

可可精品资料库