硬件信任根:eFuse与OTP存储、物理不可克隆函数、安全密钥注入流程
大家好,我是你们的嵌入式安全讲师。今天我们来聊聊硬件信任根,也就是 Root of Trust,简称 RoT。这是整个安全体系的基石,说白了,就是芯片的“出生证明”和“身份证”。如果这个根不可信,那上面盖的所有安全楼阁都是空中楼阁。
我个人习惯把硬件信任根比作芯片的“基因”。它必须在芯片制造过程中就被植入,并且要保证绝对不可篡改。为什么?因为一旦芯片启动,所有后续的校验、解密、认证,都要依赖这个最初的信任点。你想想看,如果这个根能被轻易改写,那攻击者就能伪造身份,整个系统就彻底沦陷了。
eFuse 与 OTP 存储:一次编程,终身锁定
先说说最传统的硬件信任根实现方式——一次性可编程存储,也就是 OTP。eFuse 是 OTP 的一种主流实现,它本质上是一根根微小的“保险丝”。
工作原理其实很简单:
- 芯片出厂时,所有 eFuse 都是连通的(逻辑 0)。
- 当我们需要写入数据时,通过施加一个较大的电流,把对应的保险丝“熔断”(变成逻辑 1)。
- 一旦熔断,就再也无法恢复。这就是“一次性”的含义。
我在项目中遇到过一个问题:某次量产时,eFuse 编程的良率突然下降。排查了很久,发现是编程电流的时序没调好,导致部分保险丝熔断不彻底。嗯,这里要注意,eFuse 的编程对电压和温度非常敏感,量产前一定要做充分的工艺角仿真。
eFuse 的典型应用场景:
- 存储根密钥的密文: 真正的根密钥通常不会直接明文存在 eFuse 里,而是存储一个经过硬件加密后的版本。
- 安全配置位: 比如“是否允许 JTAG 调试”、“是否强制安全启动”等。这些位一旦熔断,就永久锁定了芯片的安全策略。
- 芯片唯一标识: 用于设备身份认证。
物理不可克隆函数:芯片的“生物指纹”
eFuse 虽然可靠,但它有一个天生的弱点:数据是静态的。如果攻击者通过物理手段(比如聚焦离子束,FIB)探针直接读取 eFuse 的状态,密钥就泄露了。这时候,物理不可克隆函数(PUF)就登场了。
PUF 是什么?说白了,它利用芯片制造过程中不可避免的工艺偏差——比如晶体管的阈值电压、金属线的延迟差异——来生成一个独一无二的“指纹”。
为什么叫“不可克隆”?
- 即使使用完全相同的掩膜版,在同一片晶圆上,相邻的两个芯片的 PUF 响应也是不同的。
- 攻击者无法通过逆向工程复制出完全一样的 PUF 行为。
- PUF 响应是“按需生成”的,平时不存储在芯片中,只在需要时才通过激励-响应对(Challenge-Response Pair, CRP)计算出来。
我个人习惯把 PUF 比作芯片的“生物指纹”。指纹是独一无二的,而且你平时不会把指纹印在纸上到处乱放,对吧?PUF 也是这个道理。
PUF 的典型工作流程:
- 注册阶段(Enrollment): 芯片出厂时,向 PUF 输入一个激励(Challenge),PUF 输出一个响应(Response)。这个响应就是芯片的“指纹”。
- 辅助数据生成: 由于 PUF 响应受环境(温度、电压、老化)影响会有微小波动,我们需要生成辅助数据(Helper Data),用于后续的纠错。
- 重构阶段(Reconstruction): 芯片上电后,再次输入相同的激励,PUF 会输出一个带有噪声的响应。结合辅助数据,通过纠错算法(比如 BCH 码),恢复出原始的、干净的密钥。
下面我用一张 SVG 图来展示 PUF 的核心逻辑:
安全密钥注入流程:从“裸片”到“可信”
有了 eFuse 和 PUF 这些硬件基础,我们还需要一个安全的流程,把密钥注入到芯片中。这个过程,我们称之为“安全密钥注入”或“密钥烧录”。
你想想看,如果密钥在注入过程中被截获,那后续所有安全机制都白费了。所以,这个流程必须设计得滴水不漏。
一个典型的安全密钥注入流程包含以下步骤:
| 步骤 | 操作 | 安全要求 |
|---|---|---|
| 1 | 芯片进入安全编程模式(通常需要物理引脚或一次性令牌触发) | 防止未授权进入编程模式 |
| 2 | 编程器与芯片建立加密通道(如 TLS 或专用对称加密) | 防止中间人攻击 |
| 3 | 编程器发送经过加密的密钥材料 | 密钥在传输过程中不可见 |
| 4 | 芯片内部硬件解密,并将密钥写入 eFuse 或用于 PUF 注册 | 密钥在芯片内部解密,不暴露在总线上 |
| 5 | 写入完成后,芯片执行自检,验证密钥是否正确 | 防止写入错误导致芯片变砖 |
| 6 | 永久熔断安全配置位,锁定编程接口 | 防止后续再次编程或读取密钥 |
关于 PUF 的密钥注入,有一点特别值得注意:
PUF 的密钥不是“注入”的,而是“提取”的。芯片出厂时,我们只需要注册 PUF,生成并存储辅助数据。真正的密钥是在芯片每次上电时,由 PUF 电路实时生成的。这意味着,密钥在芯片生命周期中,从未以明文形式存储在任何非易失性存储器中。这是 PUF 相比 eFuse 最大的安全优势。
- 对于成本敏感、安全等级中等的产品: 使用 eFuse 存储根密钥密文,配合片上硬件解密引擎。
- 对于高安全等级、需要防物理攻击的产品(如车规域控制器、金融支付终端): 强烈建议使用 PUF。虽然成本稍高,但安全性提升了一个量级。
- 密钥注入流程一定要有物理安全措施: 比如在安全环境中进行,编程设备要有防篡改设计,注入完成后要销毁临时密钥。
好了,关于硬件信任根的内容就讲到这里。记住,信任根是整个安全体系的基石,这块做扎实了,后面的安全启动、固件加密才能站得住脚。希望今天的分享对你有帮助。