1. PUF基础概念:物理不可克隆函数

各位同学,咱们今天聊聊PUF——物理不可克隆函数。这名字听着挺唬人,其实说白了,就是给每个芯片发一张独一无二的「身份证」。而且这张身份证,连芯片自己都复制不出来。

我刚开始接触PUF时,也觉得这玩意儿有点玄乎。直到有一次,我在一个安全芯片项目里,亲眼看到同一批晶圆上切下来的芯片,用PUF提取出的响应完全不同——嗯,从那天起,我就彻底信了。

1.1 物理不可克隆函数的定义

PUF的全称是Physical Unclonable Function。它利用芯片制造过程中不可避免的工艺偏差——比如掺杂浓度、氧化层厚度、线宽这些参数的微小波动——来生成一个芯片独有的「指纹」。

你想想看,就算是同一片晶圆、同一个光刻掩模版、同一台设备,造出来的芯片在微观层面也不可能完全一样。这些差异小到连最精密的测量设备都难以精确控制,但PUF电路却能把这些差异「读」出来,变成一串二进制数。

核心定义:PUF是一个物理实体,它接收一个输入(称为挑战,Challenge),产生一个输出(称为响应,Response)。这个挑战-响应对(CRP)对于每个芯片都是唯一的,且无法通过任何已知的制造手段复制。

我个人的理解是:PUF不是算法,不是软件,而是一个物理系统。它的「不可克隆」特性,根植于物理制造过程的随机性,而不是数学上的计算复杂度。

1.2 PUF的数学原理

从数学角度看,PUF可以建模为一个函数:

R = f(C, θ)

其中:

  • C 是挑战(输入)
  • R 是响应(输出)
  • θ 是芯片的物理参数向量(比如延迟、电压阈值、电容值等)

这个函数有几个关键性质:

性质 描述 实际意义
确定性 同一芯片,同一挑战,始终产生同一响应 保证密钥可重复生成
唯一性 不同芯片,同一挑战,产生不同响应 芯片身份可区分
不可克隆性 无法通过任何手段制造出具有相同CRP的芯片 防伪、防复制
单向性 给定响应,无法反推出挑战或物理参数 防止逆向工程

这里有个坑,我得提醒一下。PUF的「不可克隆」不是数学意义上的——理论上你可以用无限精度的测量设备去提取θ,然后造一个模拟电路去模仿。但现实中,这种攻击的成本远高于芯片本身的价值。说白了,PUF提供的是「经济上的不可克隆性」。

1.3 PUF的物理基础

PUF的物理基础,说白了就是利用芯片制造过程中的随机偏差。我把它分成几类:

1.3.1 基于延迟的PUF

这类PUF利用信号在电路中的传播延迟差异。最典型的就是环形振荡器PUF(RO PUF)和仲裁器PUF(Arbiter PUF)。

  • RO PUF:比较两个环形振荡器的频率差异。频率差由工艺偏差决定。
  • Arbiter PUF:让两个信号路径同时出发,看谁先到达终点。路径选择由挑战控制。

我记得在某个项目中,我们用的就是RO PUF。当时最头疼的问题是温度漂移——同一个RO,25°C和85°C下频率能差好几个百分点。后来我们用了差分比较的方法,才把这个问题压下去。

1.3.2 基于存储的PUF

这类PUF利用存储单元的上电随机状态。最典型的是SRAM PUF。

  • SRAM PUF:SRAM单元在上电瞬间,由于两个反相器的阈值电压不完全相同,会随机稳定到0或1。这个初始状态就是PUF的响应。

SRAM PUF的好处是零额外电路开销——芯片上本来就有SRAM。但坏处是,响应会受温度和电压影响,而且老化后可能漂移。我曾经踩过这个坑,后来加了纠错码(ECC)才搞定。

1.3.3 基于模拟电路的PUF

这类PUF利用模拟电路的参数偏差,比如电容充放电时间、电流镜的匹配误差等。

我个人不太推荐这类PUF,因为模拟电路对工艺、温度、电压的变化太敏感了。除非你有非常成熟的模拟设计经验,否则很容易翻车。

经验之谈:如果你刚接触PUF,建议从RO PUF或SRAM PUF入手。这两类PUF的文献最多,工具链也最成熟。别一上来就搞什么混合信号PUF,那玩意儿调试起来能让你怀疑人生。

1.4 PUF的评估指标

评估一个PUF好不好,不能光看它能不能工作。我一般用以下几个指标来打分:

1.4.1 唯一性(Uniqueness)

衡量不同芯片之间的响应差异。理想值是50%。

Uniqueness = (2 / (k*(k-1))) * Σ Σ HD(Ri, Rj) / n

其中k是芯片数量,n是响应位数,HD是汉明距离。

如果唯一性太低,说明芯片之间的响应太相似,容易被猜出来。如果太高(接近100%),说明响应不稳定,可能有问题。

1.4.2 可靠性(Reliability)

衡量同一芯片在不同环境条件下的响应稳定性。理想值是100%。

Reliability = 1 - (1/m) * Σ HD(R_ref, R_i) / n

其中m是测量次数,R_ref是参考响应。

我见过最惨的一个项目,可靠性只有70%。也就是说,同一个芯片在不同温度下,30%的响应位都变了。这种PUF基本没法用。

1.4.3 随机性(Randomness)

衡量响应中0和1的分布是否均匀。理想值是50%。

这个指标可以用NIST随机性测试来评估。如果响应有明显的偏置(比如70%都是0),攻击者就可以利用这个偏置来降低搜索空间。

1.4.4 不可预测性(Unpredictability)

衡量给定部分CRP,能否预测其他CRP。这个指标没有统一的数学公式,但可以用机器学习攻击的成功率来间接评估。

注意:很多论文只报告唯一性和可靠性,却故意不提不可预测性。但实际攻击中,最致命的往往就是可预测性。我曾经用简单的逻辑回归,就攻破了一个号称「高安全性」的PUF设计。所以,评估PUF时,一定要做机器学习攻击测试。

1.4.5 资源开销

包括面积、功耗、延迟。这个不用多说,工程上必须考虑。

下面这张图,是我个人总结的PUF评估框架:

PUF评估指标体系 PUF评估指标 唯一性 芯片间差异 可靠性 环境稳定性 随机性 0/1分布均匀 不可预测性 抗ML攻击 资源开销 面积/功耗/延迟 评估优先级建议 学术研究:唯一性 > 可靠性 > 随机性 > 不可预测性 工程应用:可靠性 > 资源开销 > 唯一性 > 不可预测性

你看,学术研究和工程应用的侧重点是不一样的。学术界喜欢追求极致的唯一性和随机性,但工业界更关心可靠性——毕竟产品不能因为温度变化就罢工。

好了,这一章的内容就到这里。PUF的基础概念是后面所有章节的基石,尤其是评估指标这部分,后面讲攻击方法时还会反复用到。大家先把这些概念吃透,后面我们才能聊怎么攻、怎么防。