模糊提取多重注册方案分析

降低 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%

注意,这一规律适用于所有"独立"的注册/重试方式,区别仅在于"多份数据"的来源和代价不同。下面的六种方式从不同维度实现了这一原理。

方式索引

方式一同一区域、同一密钥、多环境注册
方式二同一区域、同一密钥、多噪声注册
方式三 ★多个区域、同一密钥、空间冗余
方式四多个区域、不同密钥、互为备份
方式五同一区域、分片冗余
方式六多次重试(掉电重启)
推荐 ★ — 方式三在 FRR、存储开销、产线成本之间取得了最佳平衡;方式六(多次重试)实现最简单、存储开销最低,很多场合可直接采用。

方式一:同一区域、同一密钥、多环境注册

对同一个 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、对启动时间不敏感的应用、作为其他方式的补充兜底

综合对比

方式名称FRRFAR存储开销产线成本抗老化推荐度
多环境注册极低不变车规首选
多噪声注册很低略增很高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 存储)并未换来真正有意义的安全性提升。

结论:方式三与方式四在保护 KEYB 这个最终目标上安全性等价。选择方式三的核心理由是 FRR 更低 + 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. 销毁所有随机数中间态