3、基于SRAM的PUF:芯片的“物理指纹”

各位同学,咱们今天聊点实在的。设备身份认证,说白了就是解决一个问题:怎么证明“你是你”。

传统的做法,要么烧录一个密钥,要么写个ID。但这些东西,都存在一个致命缺陷——可以被复制。密钥存在Flash里,黑客总有办法读出来;ID写在芯片里,也能被模拟。

那有没有一种东西,是芯片“天生自带”,而且没法克隆的呢?

有。这就是我今天要讲的——SRAM PUF。

3.1 SRAM PUF的原理:为什么它能当“指纹”?

先问大家一个问题:你手头有一块SRAM芯片,上电的一瞬间,里面的每个存储单元,是0还是1?

答案是:不确定。

SRAM的每个bit,由两个交叉耦合的反相器构成。理论上,它是对称的。但实际制造过程中,由于掺杂浓度、氧化层厚度、线宽等微观参数的随机波动,两个反相器的阈值电压会存在微小的差异。

这种差异,叫工艺偏差。

上电瞬间,两个反相器会“竞争”。阈值电压低的那一边,会先导通,把节点拉向0或1。因为偏差是随机的,所以每个单元的上电初值,也是随机的。

但关键是:这种随机性,对同一颗芯片是固定的。

你把这颗芯片断电再上电,同一个单元,大概率还是上次那个值。这就是SRAM PUF的物理基础——利用制造过程中的不可控随机性,生成一个唯一的、不可克隆的“指纹”。

核心要点:

  • SRAM PUF不是“算法”,而是“物理特性”。
  • 它不存储密钥,而是生成密钥。
  • 密钥不在芯片里,只在芯片“运行”时存在。

我个人习惯,把SRAM PUF比作人的指纹。指纹是天生自带的,没法改,也没法复制。SRAM PUF也一样——你没法用另一颗芯片,造出完全一样的上电初值。

3.2 SRAM PUF的实现方式与挑战

原理讲完了,咱们聊聊怎么落地。我在项目里踩过不少坑,今天一并分享给你们。

3.2.1 实现方式:三步走

实现一个SRAM PUF,其实不复杂。核心就三步:

  1. 上电采样:给SRAM上电,读取所有存储单元的初始值。这一步要快,要在芯片内部状态稳定之前完成。
  2. 生成响应:把读到的原始数据,经过纠错码(ECC)和哈希处理,生成一个稳定的密钥或ID。
  3. 注册与验证:在安全环境下,把生成的响应存入服务器。后续验证时,重新采样,比对结果。

听起来简单?嗯,这里有个坑。

避坑指南:

我曾经在一个量产项目中,发现同一颗芯片,在不同温度下,上电初值有大约5%的bit会翻转。这就是SRAM PUF最大的挑战——环境稳定性。

温度、电压、老化,都会影响PUF的输出。如果不做处理,直接拿原始数据当密钥,那密钥就会“变”。

3.2.2 核心挑战:稳定性与可靠性

SRAM PUF不是完美的。我总结了一下,主要挑战有四个:

挑战 原因 我的经验
温度漂移 温度变化改变晶体管阈值电压 -40°C到85°C,误码率可能从0.1%升到5%
电压波动 供电电压影响反相器竞争速度 建议用LDO稳压,别直接用电池
老化效应 NBTI/PBTI效应导致阈值电压偏移 10年后,某些单元可能永久翻转
噪声干扰 热噪声、电源噪声导致采样错误 多次采样取多数,能有效降低误码

那怎么解决?

我建议用纠错码(ECC)。具体来说,是模糊提取器(Fuzzy Extractor)。它能把有噪声的PUF响应,恢复成稳定的密钥。

原理不复杂:注册时,生成一个“辅助数据”(Helper Data)。验证时,用这个辅助数据,把有噪声的响应“纠”回来。辅助数据本身不泄露密钥信息,可以公开存储。

我的建议:

别用太复杂的ECC。BCH码或者Reed-Muller码就够用。我见过有人用LDPC,纠错能力是强,但硬件开销太大,得不偿失。

3.3 SRAM PUF在设备认证中的应用案例

理论讲完了,咱们看个实际案例。这是我参与过的一个物联网门锁项目。

3.3.1 场景:智能门锁的防克隆

客户要求:门锁必须防克隆。传统的方案,是把密钥烧录在Flash里。但问题来了——攻击者可以拆芯片,用SPI读Flash,密钥就泄露了。

我们用的方案:SRAM PUF + 安全芯片。

具体流程是这样的:

  1. 注册阶段(工厂):
    • 给门锁上电,读取SRAM PUF的响应。
    • 生成辅助数据,存入芯片内部OTP(一次性可编程存储器)。
    • 把PUF响应的哈希值,上传到云端服务器。
  2. 验证阶段(用户使用):
    • 门锁上电,读取SRAM PUF响应。
    • 用辅助数据,通过模糊提取器恢复出稳定密钥。
    • 用这个密钥,与云端进行双向认证。

你看,密钥只在芯片运行的时候存在。攻击者就算拆了芯片,也读不到密钥——因为断电后,SRAM里的数据就消失了。

3.3.2 为什么选SRAM PUF?

有人会问:为什么不选其他PUF?比如环形振荡器PUF、仲裁器PUF?

我当时的考虑是这样的:

  • 成本:SRAM是标准单元,不需要额外工艺。很多MCU内部自带SRAM,零成本。
  • 易用性:不需要额外模拟电路,纯数字实现。
  • 安全性:SRAM PUF的响应,对温度、电压的敏感性,可以通过ECC补偿。

当然,它也有缺点。比如,SRAM容量不能太小,否则熵不够。我建议至少用4KB以上的SRAM,才能生成128bit的稳定密钥。

3.3.3 项目中的教训

最后分享一个教训。

有一次,我们做量产测试。1000颗芯片,有3颗的PUF响应,在高温下完全失效。查了半天,发现是SRAM的电源域设计有问题——高温下,内部LDO压降太大,导致SRAM工作电压低于规格。

从那以后,我养成了一个习惯:在芯片设计阶段,就要给PUF留出独立的、干净的电源域。别跟数字核心共用电源,否则噪声会严重影响PUF的稳定性。

总结一下:

  • SRAM PUF利用工艺偏差,生成唯一且不可克隆的“物理指纹”。
  • 实现时,必须考虑温度、电压、老化等环境因素,用ECC保证稳定性。
  • 在物联网设备认证中,SRAM PUF能有效防克隆,且成本低、易集成。

好了,这一章就到这里。下一章,咱们聊聊另一种PUF——环形振荡器PUF。它跟SRAM PUF有什么不同?什么时候该用它?到时候再细聊。

SRAM PUF 核心逻辑流程图 制造工艺偏差 上电瞬间竞争 生成随机初值 ECC纠错码处理 生成稳定密钥 主要挑战 • 温度漂移 • 电压波动 • 老化效应 • 噪声干扰 典型应用 • 物联网设备认证 • 智能门锁防克隆 • 安全芯片密钥生成 • 防伪溯源