芯片制造中的信任根:物理不可克隆函数(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注册与重构流程 PUF 注册与重构流程 注册阶段(安全环境) 1. 施加激励(Challenge) 2. 采集原始响应(Response) 3. 生成辅助数据(Helper Data) 4. 存储 Challenge + Helper Data 重构阶段(现场环境) 1. 读取 Challenge + Helper Data 2. 施加激励,采集新响应 3. 用 Helper Data 纠错 4. 输出稳定密钥 ⚠️ 关键说明: • 辅助数据(Helper Data)不包含密钥本身,可以公开存储。 • 纠错码(如BCH码)用于消除环境噪声引起的响应偏差。 • 注册阶段必须在安全环境中完成,防止辅助数据被篡改。

这张图里有两个关键点我要强调一下。第一,辅助数据不包含密钥,它只是纠错用的「提示」。就算攻击者拿到了辅助数据,也推不出原始密钥。第二,纠错码很重要。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里,结果被黑客用编程器直接改了。正确的做法是:

  1. UID存储在OTP中,出厂后不可更改。
  2. UID的读取接口需要硬件保护,防止未授权访问。
  3. UID与PUF密钥做逻辑绑定——比如用UID作为PUF的Challenge输入,这样即使UID被篡改,密钥也重构不出来。

2.6 信任根的建立流程

好了,我们把PUF、OTP、UID串起来,看看芯片的信任根到底是怎么建立的。我再用一张图来总结。

芯片信任根建立流程 芯片信任根建立流程 1. 晶圆测试阶段 写入UID到OTP 2. 封装后测试 PUF注册,生成辅助数据 3. 安全烧录 注入根证书 4. 上电启动 PUF重构密钥 → 验证证书签名 5. 信任链传递 用根密钥验证Bootloader → Bootloader验证OS → OS验证应用 💡 每一步的测量值(哈希)都会扩展到平台配置寄存器(PCR),形成完整的信任度量链。

这个流程里,最容易被忽视的是第2步——PUF注册。我见过不少团队在封装测试阶段随便找个测试工程师就把PUF注册了,结果辅助数据没做完整性保护,后面被篡改了都不知道。我的建议是:PUF注册必须在安全环境中进行,并且要生成辅助数据的HMAC,存到OTP里。每次重构密钥前,先校验HMAC。

2.7 攻击与防护

信任根也不是绝对安全的。我整理了几种常见的攻击手法和对应的防护措施。

攻击类型 攻击手法 防护措施
侧信道攻击 通过功耗、电磁辐射分析PUF响应 加掩码(Masking)、平衡电路设计
建模攻击 收集CRP对,用机器学习训练PUF模型 限制CRP公开数量、使用非线性PUF
故障注入 用激光或电磁脉冲干扰PUF电路 冗余比较、错误检测电路
物理探针 用FIB或探针台直接读取OTP内容 主动防护层、OTP加密存储

我的建议:别指望单一防护手段能挡住所有攻击。安全是分层防御——PUF提供密钥的物理不可克隆性,OTP提供存储的不可篡改性,UID提供身份的可追溯性。三层叠加,才能构建一个相对可靠的信任根。