4、硅PUF实现:基于SRAM的PUF、基于环形振荡器的PUF、基于仲裁器的PUF
好,咱们进入正题。上一章聊了PUF的基本原理,说白了就是利用芯片制造过程中那些“天生”的随机差异。这一章,我们来看看怎么把这些原理落地到硅片上。三种最主流的硅PUF实现:SRAM PUF、环形振荡器PUF、仲裁器PUF。
我个人习惯,每次讲实现方案,都会先问自己一个问题:这个方案在量产时,良率能不能扛得住? 你想想看,实验室里跑通一百次不算本事,产线上百万颗芯片都能稳定出指纹,那才是真功夫。
4.1 基于SRAM的PUF
SRAM PUF,可以说是最“亲民”的PUF实现。为什么?因为几乎任何数字芯片里都有SRAM,不需要额外增加工艺步骤。
原理其实很简单: SRAM的每个存储单元,在上电瞬间,两个交叉耦合的反相器会“争夺”一个稳定的状态。理论上,这个状态是随机的,但实际由于制造偏差,每个单元都会偏向0或1。这个上电初始值,就是它的“指纹”。
核心要点: SRAM PUF的响应,就是芯片上电后,所有SRAM单元初始值的集合。这个集合,每颗芯片都不同。
我在项目中遇到过一个问题:有些SRAM单元,上电后状态不稳定,这次是0,下次是1。这会导致PUF响应不可靠。怎么解决?
- 筛选稳定单元: 多次上电,只取那些每次都输出相同值的单元。
- 纠错码(ECC): 对PUF输出进行纠错编码,容忍少量比特翻转。
- 温度电压补偿: 在极端环境下,PUF的稳定性会下降,需要做补偿。
我的经验: 我曾经在一个IoT项目中,直接用芯片内部已有的SRAM做PUF。省了面积,但花了大量时间做稳定性筛选。如果你对面积不敏感,建议用专用的PUF SRAM阵列,控制会好很多。
4.2 基于环形振荡器的PUF
环形振荡器PUF,利用的是门延迟的差异。每个环振的频率,会因为制造偏差而略有不同。比较两个环振的频率,就能产生一个比特。
实现方式:
- 在芯片上放置多个结构完全相同的环形振荡器。
- 用计数器测量每个环振的频率。
- 比较两个环振的频率高低,输出0或1。
这里有个坑:环振的频率会随温度和电压变化。如果两个环振挨得很近,它们的频率变化趋势几乎一样,比较结果还是稳定的。但如果距离远,变化趋势不同,结果就可能翻转。
避坑指南: 我曾经设计过一个环振PUF,把比较器放在芯片两端。结果温度一变化,响应就乱跳。后来改成只比较相邻的环振,稳定性大幅提升。记住:比较的对象,必须在物理上靠近。
环振PUF的优点是:不需要额外的SRAM,逻辑工艺就能做。缺点是:功耗相对较高,因为环振一直在振荡。
4.3 基于仲裁器的PUF
仲裁器PUF,也叫“毛刺PUF”或“竞赛PUF”。它利用的是信号路径上的延迟差异。
工作原理:
- 一个输入信号,同时送入两条路径。
- 每条路径由一系列开关单元组成,每个单元可以选择“直通”或“交叉”。
- 两条路径的终点是一个仲裁器(通常是D触发器),判断哪个信号先到达。
- 先到的路径输出1,后到的输出0。
说白了,就是让两个信号赛跑。谁跑得快,取决于路径上的制造偏差。而路径的选择,由输入激励(Challenge)控制。
关键优势: 仲裁器PUF的Challenge-Response空间非常大。理论上,你可以通过改变路径选择,产生无数个不同的响应。这非常适合做密钥生成和认证。
但仲裁器PUF有个著名的弱点:容易被建模攻击。 因为它的行为可以用线性延迟模型近似,攻击者收集足够多的Challenge-Response对,就能训练出一个模型来预测。
我建议,如果你要用仲裁器PUF,一定要加非线性处理,比如把响应通过一个哈希函数再输出。别直接拿原始响应当密钥。
4.4 三种PUF的对比
为了让你看得更清楚,我整理了一个表格:
| 特性 | SRAM PUF | 环形振荡器PUF | 仲裁器PUF |
|---|---|---|---|
| 原理 | SRAM上电初始值 | 环振频率差异 | 路径延迟竞赛 |
| 面积 | 小(复用已有SRAM) | 中 | 中 |
| 功耗 | 低(仅上电瞬间) | 高(持续振荡) | 中(每次评估消耗) |
| 稳定性 | 中(需筛选+ECC) | 高(相邻比较) | 高(但受温度影响) |
| 安全性 | 高(难以建模) | 中(可建模) | 低(易建模攻击) |
| Challenge空间 | 小(固定地址) | 中(选择比较对) | 大(指数级) |
| 典型应用 | 密钥存储、芯片ID | 密钥生成、认证 | 强PUF、认证 |
4.5 三种PUF的核心逻辑关系图
下面这张图,帮你理清三种PUF在实现上的核心差异:
4.6 我的选择建议
说了这么多,到底该选哪种?嗯,这得看你的应用场景。
- 如果你做的是低成本IoT芯片, 对面积敏感,对安全性要求不是极端高,SRAM PUF是首选。复用已有的SRAM,几乎零成本。
- 如果你做的是汽车电子或工业控制, 对稳定性和温度范围要求高,环形振荡器PUF更靠谱。记得把比较器放在相邻位置。
- 如果你做的是高端安全芯片, 需要大量Challenge-Response对来做双向认证,仲裁器PUF是唯一选择。但一定要加后处理,防建模。
我的个人习惯: 在项目初期,我会同时评估SRAM PUF和环振PUF。SRAM PUF先上,如果稳定性不达标,再切到环振。仲裁器PUF我一般只用在需要强PUF的场景,比如金融安全芯片。
好了,这一章的内容就到这里。三种PUF的实现,各有千秋,没有绝对的好坏。关键是你得清楚自己的需求,然后选最合适的那个。