4、物理不可克隆函数:PUF技术在传感器芯片防篡改中的应用原理与选型

各位工程师朋友,咱们继续聊传感器身份溯源。前面几章讲了数字证书、密钥体系,这些方案都有一个共同的前提——密钥得安全地藏在芯片里。但现实是,传统的密钥存储方式,说白了就是把秘密放在一个盒子里,总有办法撬开它。

那有没有一种技术,让密钥本身就不是“存”在芯片里的,而是“长”在芯片里的?这就是我今天要讲的——物理不可克隆函数,PUF。

4.1 为什么传统密钥存储靠不住?

先说说我踩过的坑。几年前我做一款工业压力传感器,客户要求防抄板。我们用了安全芯片,把私钥写死在eFuse里。结果呢?第三方用聚焦离子束(FIB)直接把芯片顶层剥开,用电子显微镜读出了熔丝状态。密钥被提取,整个产品线被克隆,损失惨重。

传统方案的问题很明显:

  • 密钥是静态数据——只要存在非易失存储器里,就有被物理读取的可能
  • 存储介质有物理痕迹——eFuse、Flash、EEPROM,都能通过逆向工程读出
  • 攻击手段成熟——FIB、探针台、侧信道分析,都是公开技术
⚠ 注意: 不要以为加了加密算法就安全。密钥存储是整个安全链的“阿喀琉斯之踵”。攻击者不破解算法,只偷密钥。这是最省力的攻击路径。

4.2 PUF的核心原理:芯片的“指纹”

PUF的思路很巧妙。它不存储密钥,而是利用芯片制造过程中不可避免的物理差异来“生成”密钥。

你想想看,同一片晶圆上,相邻两个晶体管的阈值电压都会有微小差异。金属互连线的宽度、氧化层的厚度,这些参数在光刻和刻蚀过程中,会因为光的衍射、刻蚀速率的不均匀而产生随机偏差。这种偏差,就是PUF的物理熵源。

PUF的工作原理可以概括为:

  1. 激励(Challenge)——给PUF电路输入一个信号
  2. 响应(Response)——PUF电路输出一个唯一且不可预测的数值
  3. 激励-响应对(CRP)——每个芯片都有自己独特的CRP映射关系

这个映射关系,就是芯片的“指纹”。同一个激励,在不同芯片上会得到完全不同的响应。而且,这个响应是芯片物理结构决定的,无法复制。

💡 核心概念: PUF不是算法,而是一个物理系统。它的安全性不依赖于数学难题,而依赖于物理制造过程的随机性。你无法克隆一个芯片的物理结构,所以你也无法克隆它的PUF响应。

4.3 主流PUF结构对比与选型

PUF不是一种单一技术,而是一类技术。不同的PUF结构,适合不同的应用场景。我根据项目经验,把几种主流PUF做了个对比。

PUF类型 物理原理 面积开销 稳定性 典型应用
仲裁器PUF (APUF) 路径延迟差异 小 中(受温度电压影响大) FPGA、低端MCU
环形振荡器PUF (RO PUF) 振荡频率差异 中 高(可通过校准提升) 传感器节点、IoT设备
SRAM PUF 上电初始状态随机性 极小(复用SRAM) 中(需纠错码辅助) 通用MCU、安全芯片
蝴蝶PUF (Butterfly PUF) 交叉耦合门的不稳定态 小 高 FPGA、ASIC
DRAM PUF 电容放电时间差异 极小(复用DRAM) 低(需频繁刷新) 内存丰富的SoC

我个人习惯,在工业传感器芯片上,首选环形振荡器PUF。为什么?

  • 稳定性好——工业现场温度范围宽(-40°C到85°C),RO PUF通过频率计数和校准,能保持较好的稳定性
  • 实现简单——不需要特殊的工艺选项,标准CMOS工艺就能做
  • 面积可控——一个RO单元大概几十个门,做64位密钥也就几百个门

但RO PUF也有坑。我曾经在一个项目中,RO PUF的响应在高温下出现了比特翻转。后来加了温度补偿电路和纠错码(ECC),才把误码率降下来。

🔧 选型建议: 如果芯片面积极度受限,选SRAM PUF,因为它复用芯片上已有的SRAM阵列。如果对稳定性要求极高,选蝴蝶PUF。如果成本敏感且对安全性要求中等,APUF也能用,但一定要做环境补偿。

4.4 PUF在传感器防篡改中的典型应用

PUF在传感器身份溯源中,主要解决两个问题:密钥生成和芯片认证。

4.4.1 密钥生成:不需要存储的密钥

传统方案需要把密钥烧录到芯片里。用PUF,密钥是在芯片上电时“实时生成”的。

// PUF密钥生成伪代码示例
// 输入:PUF原始响应(128位)
// 输出:稳定密钥(128位)

uint8_t puf_raw_response[16];  // PUF原始响应
uint8_t stable_key[16];        // 稳定密钥

// 步骤1:读取PUF响应
puf_read(puf_raw_response);

// 步骤2:纠错码解码(BCH码)
// 辅助数据存储在片上,不泄露密钥信息
ecc_decode(puf_raw_response, helper_data, stable_key);

// 步骤3:哈希提取(消除偏置)
sha256(stable_key, stable_key);

// 现在stable_key就是芯片的唯一密钥
// 这个密钥从未被存储过,只在运行时存在寄存器中

这个流程的关键是:辅助数据(Helper Data)可以公开存储,它不泄露密钥信息。攻击者拿到辅助数据,也无法反推出PUF响应。

4.4.2 芯片认证:挑战-响应协议

在传感器接入网络时,可以用PUF做身份认证。流程是这样的:

  1. 注册阶段——传感器芯片在安全环境下,生成一组CRP(激励-响应对),存入服务器数据库
  2. 认证阶段——服务器随机选择一个激励,发送给传感器
  3. 响应阶段——传感器用PUF生成响应,返回给服务器
  4. 验证阶段——服务器比对返回的响应与数据库中存储的响应是否一致

这个协议的好处是:每次认证用的激励都不同,即使攻击者截获了一次CRP,也无法伪造下一次响应。

⚠ 注意: CRP的数量是有限的。一个PUF结构能产生的有效CRP数量受物理熵源限制。如果CRP用完,芯片就无法再认证。所以,在工业场景中,我建议把PUF认证和传统PKI结合使用——PUF用于生成设备私钥,PKI用于证书管理。

4.5 PUF技术的核心挑战与应对

PUF不是万能的。我在实际项目中遇到过几个棘手问题。

4.5.1 稳定性问题

PUF响应受环境因素影响很大。温度变化、电压波动、芯片老化,都会导致PUF响应发生比特翻转。

应对方法:

  • 纠错码(ECC)——BCH码、Reed-Muller码,可以纠正少量比特错误
  • 模糊提取器(Fuzzy Extractor)——结合ECC和哈希,从有噪声的PUF响应中提取稳定密钥
  • 温度补偿——在RO PUF中,用参考频率做归一化

4.5.2 建模攻击

有些PUF结构(比如APUF)的激励-响应关系,可以用机器学习模型拟合。攻击者收集一定数量的CRP后,就能预测新的响应。

应对方法:

  • 使用非线性PUF——比如XOR APUF、Feed-Forward APUF,增加建模难度
  • 限制CRP暴露次数——每个激励只用一次
  • 结合哈希函数——对PUF响应做哈希处理,破坏线性关系

4.5.3 老化效应

芯片长时间工作后,晶体管参数会漂移,PUF响应也会变化。

应对方法:

  • 定期校准——在系统空闲时,重新生成辅助数据
  • 冗余设计——用多个PUF单元做投票,取多数结果
  • 选择抗老化的PUF结构——蝴蝶PUF和SRAM PUF的老化特性相对较好
🔧 实战经验: 我在一个工业网关项目中,用了RO PUF做密钥生成。为了应对老化,我们设计了一个“密钥刷新”机制——每运行1000小时,系统自动重新生成一次辅助数据。这样即使PUF响应缓慢漂移,密钥也能保持稳定。

4.6 PUF选型决策框架

说了这么多,到底怎么选?我总结了一个简单的决策框架。

PUF选型决策框架 PUF选型决策 面积极度受限 稳定性优先 推荐:SRAM PUF 推荐:蝴蝶PUF 需配合ECC和模糊提取器 面积允许,可加温度补偿 适用:低成本MCU、安全芯片 适用:工业传感器、网关 选型要点 面积、稳定性、环境范围、成本,四者权衡 没有完美的PUF,只有最适合场景的PUF

这个框架是我在多个项目中总结出来的。记住,没有完美的PUF,只有最适合你场景的PUF。

4.7 小结

PUF技术给工业传感器身份溯源带来了一个全新的思路——密钥不是存进去的,而是长出来的。它从根本上解决了密钥存储的安全问题。

但PUF也不是银弹。稳定性、建模攻击、老化效应,这些都是需要工程师在设计中认真对待的挑战。我个人建议,在工业场景中,把PUF作为密钥生成和芯片认证的底层技术,上层仍然需要完整的PKI体系来管理证书和信任链。

嗯,这一章就到这里。PUF的内容其实很深,后面讲到具体实现时,我还会再展开。