模糊提取多重注册方案分析
降低 FRR 的多种策略及其权衡
什么是多重注册
多重注册(Multiple Enrollment)的核心目的是降低模糊提取的重建失败率(FRR)——每次重建时 PUF 的噪声可能超出一次注册的纠错能力,但有多个注册版本可选,只要一个匹配即可。
FRR 与注册/重试次数的关系
多重注册降低 FRR 的基本原理是独立重复实验。假设单次注册(或单次重建)的 FRR 为 p,则 n 份独立的注册数据(或 n 次重试)中全部失败的概率为 pn,即综合 FRR = pn。
单次 FRR = 10⁻⁴ → 2 份 → FRR = 10⁻⁸ → 3 份 → FRR = 10⁻¹² 单次 FRR = 10⁻³ → 2 份 → FRR = 10⁻⁶ → 4 份 → FRR = 10⁻¹² 单次 FRR = 1% → 2 份 → FRR = 0.01% → 3 份 → FRR = 0.0001%
注意,这一规律适用于所有"独立"的注册/重试方式,区别仅在于"多份数据"的来源和代价不同。下面的六种方式从不同维度实现了这一原理。
方式索引
| 方式一 | 同一区域、同一密钥、多环境注册 |
| 方式二 | 同一区域、同一密钥、多噪声注册 |
| 方式三 ★ | 多个区域、同一密钥、空间冗余 |
| 方式四 | 多个区域、不同密钥、互为备份 |
| 方式五 | 同一区域、分片冗余 |
| 方式六 | 多次重试(掉电重启) |
方式一:同一区域、同一密钥、多环境注册
对同一个 SRAM 区域 A,在多种环境条件(温度、电压)下分别注册,生成多份帮助数据 H(A)25°C、H(A)85°C、H(A)-40°C ... 重建时依次尝试,直到通过校验。
| FRR | 极低。每种环境都有专属注册数据,噪声匹配度最高 |
| FAR | 不变(不增加攻击面) |
| 存储开销 | 高。每份 H(A) 约与区域大小相当,3~5 个温度点就是 3~5 倍 |
| 产线成本 | 高。需要温箱等设备,产线耗时 |
| 安全性 | 好。攻击面未扩大 |
| 适用场景 | 车规、工业级芯片,能承担产线温度测试成本 |
方式二:同一区域、同一密钥、多噪声注册
在标称环境下对同一区域 A 注册多次(如 100 次),每次因 PUF 噪声产生略有不同的注册数据。生成 100 份 H(A)1 ~ H(A)100。重建时顺序尝试,直到通过校验。
| FRR | 非常低。多份 H(A) 覆盖了绝大多数噪声模式 |
| FAR | 理论上略增(每份 H(A) 是一次攻击机会),实践中可忽略 |
| 存储开销 | 很高。每份 H(A) 约 32KB,100 份就是 3.2MB |
| 产线成本 | 低。在芯片测试座上即可完成,无需变温 |
| 安全性 | 需注意多份 H(A) 可能泄露更多关于原始 PUF 的信息 |
| 适用场景 | Flash 存储宽裕、FRR 要求严苛的场景 |
方式三:多个区域、同一密钥、空间冗余 ★
选取多块独立的 SRAM 区域 A1~A4,为每块分别生成可恢复出同一个 KEYA 的帮助数据。注册时确保各区域重建出的密钥一致。重建时只要任意一块区域成功即可。
| FRR | 极低。多块独立物理区域同时全部故障的概率极低,约 pn(p 为单区域 FRR,n 为区域数) |
| FAR | 不变 |
| 存储开销 | 中。多份 H(A) 存入片上读保护区域,但区域数量通常有限(2~4) |
| 产线成本 | 低。一次产线操作即可完成多区域注册 |
| 可靠性 | 极高。即使某个区域因老化或物理损伤完全失效,其他区域仍可用 |
| 双区域架构适配 | 适合。多个 A 区域共享一份 H(B),不增加 Flash 存储 |
方式四:多个区域、不同密钥、互为备份
各区域产出各自独立的 KEYA1~KEYA4。同一份 H(B) 用各 KEYA_i 分别加密,生成多份加密后的 H(B) 存入 Flash。重建时顺序尝试各 KEYA_i 解密对应的加密 H(B),直到成功。
| FRR | 极低(同方式三) |
| FAR | 略增(每个 KEYA_i 是一次解密尝试) |
| 存储开销 | 高。同一份 H(B) 加密 n 次,需 n 倍 Flash 存储空间 |
| 产线成本 | 低 |
| 安全性 | 与方式三无本质区别(见下方详细分析) |
| 适用场景 | Flash 存储宽裕且需隔离各区域密钥的场景 |
方式五:同一区域、分片冗余
将同一大区域 B 划分为 B1~Bk 个子块,分别注册 H(B1)~H(Bk)。每个 H(Bi) 允许各自独立重建 KEYBi(或重建后拼接为完整 KEYB)。部分子块失败不影响整体密钥。
| FRR | 低。各子块独立纠错,相当于 k 次独立实验 |
| FAR | 不变 |
| 存储开销 | 中(k 份 H(B)) |
| 特殊优势 | 可与方式一/二/三/四任意组合 |
方式六:多次重试
与前几种"一次注册、多份数据"的思路不同,多次重试是一种时间维度的容错策略——不存储多份帮助数据,而是在重建失败时掉电重启 MCU,获得一次全新的 SRAM 上电采样,然后重新尝试重建。
每次重启后,PUF 噪声模式会重新随机化(热噪声成分发生变化),相当于一次新的独立重建实验。连续 k 次全部失败的概率为 pk(p 为单次 FRR)。例如单次 FRR = 1%,重试 3 次后 FRR = 0.0001%。
| FRR | 低。连续 k 次重试失败概率 pk,增加重试次数可任意降低 |
| FAR | 不变。帮助数据只有一份,攻击面不变 |
| 存储开销 | 最低。只需要 1 份帮助数据 |
| 产线成本 | 最低。只需一次标准注册,无需任何额外产线操作 |
| 可靠性 | 中。老化导致噪声增大时,重试次数可能需要增加;极端噪声下单次 FRR 过高时重试效果有限 |
| 特殊限制 | 重建耗时可能较长(每次重启 + 重建约数十毫秒到数百毫秒),不适合低延迟场景 |
| 适用场景 | 资源极度受限的 MCU、对启动时间不敏感的应用、作为其他方式的补充兜底 |
综合对比
| 方式 | 名称 | FRR | FAR | 存储开销 | 产线成本 | 抗老化 | 推荐度 |
| 一 | 多环境注册 | 极低 | 不变 | 高 | 高 | 高 | 车规首选 |
| 二 | 多噪声注册 | 很低 | 略增 | 很高 | 低 | 中 | Flash 宽裕时可用 |
| 三 | 多区域同密钥 | 极低 | 不变 | 中 | 低 | 极高 | 综合最佳 |
| 四 | 多区域多密钥 | 极低 | 略增 | 高 | 低 | 极高 | 安全性最高,但 Flash 开销大 |
| 五 | 分片冗余 | 低 | 不变 | 中 | 低 | 高 | 易与以上组合 |
| 六 | 多次重试 | 可调(重试次数) | 不变 | 最低 | 最低 | 中 | 资源受限场景首选 |
安全性分析
基本安全模型
方式三的完整攻击路径为:
攻击者目标:获得 KEYB(corrected_sram)
↓
需击穿:① 突破芯片读保护,获取多份 H(A1)~H(An)
② 从 H(Ai) 中恢复 KEYA
③ 用 KEYA 解密 Cipher(H(B)),获得 H(B) 明文
④ 获取该芯片 SRAMB 的新鲜上电测量值
⑤ 用 H(B) 完成 FE 重建 + 后向传播,得到 KEYB
方式三的安全性问题核心集中在第②步:多份 H(A1)~H(An) 是否比单份 H(A) 更容易恢复出 KEYA?
关键结论:多份 H(A) 不降低 KEYA 的安全性
(a)每份 H(A) 只泄露其对应区域的物理信息。 A1~A4 是物理上独立的 SRAM 存储单元,各自的制造偏差和物理特性互不相关。H(A1) 的信息仅限于是什么噪声模式可以从 A1 的测量值中恢复 KEYA,对 A2~A4 无任何帮助。
(b)模糊提取的 information-theoretic 安全性不随 H(A) 份数增加而退化。 标准 code-offset 模糊提取中,H(A) = enrollment_data ⊕ code。多一份不同区域的 H(A') 不会增加对原始 enrollment_data 的了解。
(c)多份 H(A) 不能形成已知明文攻击。 所有 A 区域重建出的 KEYA 相同,但攻击者在破解过程中不知道 KEYA,不存在已知明文验证的条件。
方式三与方式四的安全性实质相同
攻击者的最终目标是 KEYB,而非某个特定的 KEYA_i。在第③步(解密 H(B))之后,两条路径完全汇合。方式四的唯一实际代价(多份 H(B) 的 Flash 存储)并未换来真正有意义的安全性提升。
方式三的潜在风险
(a)片上读保护是单点故障。 所有 H(A1)~H(An) 都存储在片上读保护区域。一旦读保护被突破,攻击者可同时获得全部 n 份 H(A)。
(b)产线注册时的 KEYA 一致性保证。 需通过至少一次产线重建验证来确认各区域一致性。
(c)老化对不同区域的影响可能不同。 但在方式三中,这反而是优势——只要 n 个区域中还有任何一个可用,KEYA 就能恢复。
级联码结构下 rand_input 的区域策略
核心结论:只有最后一级 rand_input(KEY)需要一致
以典型的 QS16→QS16 两级级联为例:
rand_input(总长 145 字节)
┌──────────┴──────────┐
│ 前级(Stage 0) │ 后级(Stage 1)
│ bit_v=5, ns=176 │ bit_v=5, ns=55
│ 共 880 bit │ 共 275 bit = KEY
└──────────┬──────────┘
│
SRAM_bits ──→ Stage 0 ──→(交织)──→ Stage 1 ──→ KEY
↑ ↑
helper_0 helper_1
CRC32 + SHA-256
校验的正是 KEY
对于多个区域 A1~A4:
| 级联层级 | 内容 | 区域间是否需要一致? |
| 前级 rand_input(Stage 0 输入) | 用于选择编码字的随机数 | 不需要,各自独立 |
| 最后一级 rand_input(Stage 1 输入 = KEY) | 最终要恢复的密钥 | 必须完全一致 |
区域 A1: rand_input = [R0_A1(独立随机)| KEY(全局固定)] 区域 A2: rand_input = [R0_A2(独立随机)| KEY(全局固定)] 区域 A3: rand_input = [R0_A3(独立随机)| KEY(全局固定)] 区域 A4: rand_input = [R0_A4(独立随机)| KEY(全局固定)]
前级 rand_input 独立随机可以增强安全性
若不独立(前级全部相同):
helper_0_A1 = codebook(R0) ⊕ SRAM_A1 helper_0_A2 = codebook(R0) ⊕ SRAM_A2 # codebook(R0) 相同 helper_0_A1 ⊕ helper_0_A2 = SRAM_A1 ⊕ SRAM_A2 # 泄露差值模式
若独立(前级各自随机):
helper_0_A1 = codebook(R0_A1) ⊕ SRAM_A1 helper_0_A2 = codebook(R0_A2) ⊕ SRAM_A2 # codebook(R0_A2) ≠ codebook(R0_A1) # helper_0_A1 ⊕ helper_0_A2 = 伪随机序列 ⊕ SRAM_A1 ⊕ SRAM_A2,无信息泄露
策略建议
推荐的多区域注册流程:
1. 生成一份完整随机数 R(含前级和 KEY)
2. 用 R 对区域 A1 enroll → 得到 helpers_A1
3. 从 R 中提取 KEY(最后 275 bit),固定下来
4. 对区域 A2:生成新前级 R0_A2,拼接 KEY → 新的 rand_input
用新 rand_input 对区域 A2 enroll → 得到 helpers_A2
5. 同法处理 A3、A4
6. 销毁所有随机数中间态