芯片制造中的信任根:物理不可克隆函数(PUF)原理、安全OTP存储、芯片唯一身份标识
各位好,我们接着聊芯片供应链安全。上一章我们讲了整条链路上有多少双眼睛盯着你的芯片,那这一章就深入到底层——芯片本身怎么证明「我是我」?
你想想看,一颗芯片从晶圆厂流片出来,经过封装、测试、分销,最后到整机厂手里。中间经手的人那么多,你怎么保证这颗芯片没被调包?怎么保证它里面的固件没被篡改?
答案就在芯片的「信任根」里。说白了,就是芯片出厂时就烙下的、谁也改不了的那个身份印记。
2.1 物理不可克隆函数(PUF)——芯片的「指纹」
先问一个问题:世界上有没有两片完全相同的树叶?没有。那有没有两颗完全相同的芯片?理论上也没有。
为什么?因为芯片制造过程中,光刻、掺杂、刻蚀这些工艺,都存在纳米级的随机偏差。哪怕同一片晶圆上相邻的两颗芯片,它们的晶体管阈值电压、金属互连线的延迟、SRAM单元的上电初始值,都会有细微差别。
PUF就是利用这种天然的物理随机性,生成一个独一无二的「芯片指纹」。这个指纹不可克隆——你就算拿到设计图纸,也造不出第二颗一模一样的。
核心要点:PUF不是把密钥存进芯片,而是从芯片的物理特性中「提取」出密钥。密钥在芯片通电时才生成,断电即消失。这就避免了传统存储密钥被物理探针或电子显微镜读取的风险。
2.2 主流PUF类型与对比
我在项目中接触过好几种PUF实现,这里给大家列个表,方便对比选型。
| PUF类型 | 基本原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| SRAM PUF | 利用SRAM单元上电时的随机初始值 | 无需额外电路,标准CMOS工艺即可 | 受温度和电压影响较大,需要纠错 | FPGA、MCU |
| 环形振荡器PUF | 利用环形振荡器频率的工艺偏差 | 稳定性较好,可重复性高 | 功耗较高,面积较大 | 安全芯片、TPM |
| 仲裁器PUF | 利用两条对称路径的传播延迟差 | 响应速度快,可生成大量CRP | 易受机器学习建模攻击 | 认证场景 |
| 蝶形PUF | 交叉耦合锁存器的亚稳态 | 面积小,适合资源受限设备 | 稳定性不如SRAM PUF | IoT节点 |
我的经验:选PUF类型不能只看论文里的指标。我曾经在一个IoT项目里选了仲裁器PUF,觉得它速度快、CRP多。结果量产时发现,芯片在高温下延迟差漂移严重,导致认证失败率高达5%。后来换成SRAM PUF加纠错电路,才把良率拉回来。所以,一定要结合你的工作温度范围和工艺节点来做测试。
2.3 PUF的工作流程
PUF在实际使用中,通常分两个阶段:注册和重构。我画了一张图,帮大家理解这个过程。
这张图里有两个关键点我要强调一下。第一,辅助数据不包含密钥,它只是纠错用的「提示」。就算攻击者拿到了辅助数据,也推不出原始密钥。第二,纠错码很重要。PUF的响应不是100%稳定的,温度一变,可能就有几位翻转。没有纠错,密钥就重构不出来。
2.4 安全OTP存储——一次性可编程的「保险箱」
PUF生成了密钥,但密钥不能一直飘在空气里。芯片还需要一个安全的地方来存储根密钥、证书、以及PUF的辅助数据。这个地方就是OTP(One-Time Programmable)存储器。
OTP,顾名思义,只能写一次。写进去之后,就再也不能改了。这听起来有点死板,但恰恰是它的安全优势——攻击者想篡改你的根密钥?门都没有。
常见的OTP实现方式有两种:
- 熔丝(Fuse)OTP:通过大电流熔断金属或多晶硅连线。编程后不可逆。我记得早期的一些安全芯片用的就是这种,编程时能闻到一股焦味——嗯,真的。
- 反熔丝(Anti-Fuse)OTP:通过高压击穿栅氧化层,形成永久导通。面积更小,可靠性更高,是当前主流。
⚠️ 避坑指南:我曾经在一个项目中,把PUF的辅助数据直接存进了OTP。结果发现OTP的读取接口没有做访问控制,任何软件都能通过调试接口把辅助数据读出来。虽然辅助数据不直接泄露密钥,但结合侧信道攻击,还是有可能被破解。后来我们加了一个硬件访问锁,只有安全处理器才能读OTP。记住:存储介质安全不等于接口安全。
2.5 芯片唯一身份标识(UID)
PUF和OTP解决了密钥的安全存储问题,但芯片还需要一个公开的身份标识——就像人的身份证号。这个标识叫UID(Unique Identifier),通常是芯片出厂时写入的一段固定数据。
UID的典型用途:
- 设备认证:服务器通过UID识别设备是否合法。
- 密钥派生:用UID结合主密钥,派生出每颗芯片独有的会话密钥。
- 证书绑定:将UID写入X.509证书的Subject字段,实现芯片与证书的一一绑定。
UID的存储位置也有讲究。我见过一些低端芯片把UID放在Flash里,结果被黑客用编程器直接改了。正确的做法是:
- UID存储在OTP中,出厂后不可更改。
- UID的读取接口需要硬件保护,防止未授权访问。
- UID与PUF密钥做逻辑绑定——比如用UID作为PUF的Challenge输入,这样即使UID被篡改,密钥也重构不出来。
2.6 信任根的建立流程
好了,我们把PUF、OTP、UID串起来,看看芯片的信任根到底是怎么建立的。我再用一张图来总结。
这个流程里,最容易被忽视的是第2步——PUF注册。我见过不少团队在封装测试阶段随便找个测试工程师就把PUF注册了,结果辅助数据没做完整性保护,后面被篡改了都不知道。我的建议是:PUF注册必须在安全环境中进行,并且要生成辅助数据的HMAC,存到OTP里。每次重构密钥前,先校验HMAC。
2.7 攻击与防护
信任根也不是绝对安全的。我整理了几种常见的攻击手法和对应的防护措施。
| 攻击类型 | 攻击手法 | 防护措施 |
|---|---|---|
| 侧信道攻击 | 通过功耗、电磁辐射分析PUF响应 | 加掩码(Masking)、平衡电路设计 |
| 建模攻击 | 收集CRP对,用机器学习训练PUF模型 | 限制CRP公开数量、使用非线性PUF |
| 故障注入 | 用激光或电磁脉冲干扰PUF电路 | 冗余比较、错误检测电路 |
| 物理探针 | 用FIB或探针台直接读取OTP内容 | 主动防护层、OTP加密存储 |
我的建议:别指望单一防护手段能挡住所有攻击。安全是分层防御——PUF提供密钥的物理不可克隆性,OTP提供存储的不可篡改性,UID提供身份的可追溯性。三层叠加,才能构建一个相对可靠的信任根。