从RO-PUF到TERO-PUF:利用瞬态振荡次数构建抗锁定的硬件安全指纹 1. 项目概述从RO-PUF的困境到TERO-PUF的破局在硬件安全领域物理不可克隆函数PUF一直扮演着“硅指纹”的角色。它利用芯片制造过程中无法复制的微观工艺偏差为每一颗芯片生成一个独一无二的身份标识。这个标识不是存储在非易失性存储器中的一串数据而是从硅片物理特性中“测量”出来的因此理论上无法被克隆或预测。在物联网设备认证、防伪溯源、安全密钥生成等场景中PUF提供了硬件根信任的基石。然而理想很丰满现实却往往伴随着挑战。在众多PUF实现方案中基于环形振荡器RO-PUF的结构因其设计相对简单、在FPGA上易于实现且统计特性良好一度被认为是ASIC和FPGA平台的理想选择。但一个致命的弱点限制了它的广泛应用锁定现象。锁定现象简单来说就是当多个环形振荡器在物理上靠近或在特定环境如电源电压扰动、电磁干扰下它们的振荡频率会趋于同步。想象一下两个原本各自以不同节奏摇摆的钟摆在某种外力影响下逐渐变成了整齐划一的摆动。对于RO-PUF而言其唯一性正是依赖于每个振荡器频率的微小差异。一旦发生锁定这些差异消失PUF的响应就失去了唯一性变得可预测。更严重的是攻击者可以通过电磁故障注入EMFI等手段主动诱发锁定或者通过侧信道分析探测振荡频率从而破解PUF。这就像给每个保险箱配了一把独一无二的锁但攻击者却发现了一种能让所有锁芯共振并自动打开的声波。正是在这样的背景下一种名为瞬态效应环形振荡器TERO的结构进入了研究者的视野。TERO最初被用于真随机数发生器TRNG它利用的是电路在特定激励下产生的短暂振荡现象而非稳定的持续振荡。这项工作的核心创新在于他们敏锐地意识到TERO这种“昙花一现”的振荡特性其振荡次数而非频率同样由工艺偏差决定并且对锁定现象免疫。因为锁定影响的是频率的同步而TERO-PUF根本不关心频率它只关心在激励信号触发后环路能振荡多少次才归于稳定。基于此他们设计并实现了TERO-PUF。这项工作的价值在于它没有试图去加固脆弱的RO-PUF而是另辟蹊径选择了一个对锁定攻击“天然免疫”的物理效应作为熵源为高安全需求的FPGA应用提供了一个新的、更稳健的硬件身份认证方案。如果你正在为嵌入式设备寻找一个难以攻破的硬件身份标识或者对RO-PUF的安全性心存疑虑那么理解TERO-PUF的原理与实现将为你打开一扇新的大门。2. TERO-PUF的核心原理为何振荡次数比频率更可靠要理解TERO-PUF为何能抗锁定我们必须先深入其核心——瞬态效应环形振荡器TERO单元的工作原理。这与我们熟悉的环形振荡器RO有本质区别。2.1 TERO单元一场精心策划的“短暂混乱”一个基本的TERO单元结构并不复杂其核心是一个由两个与门AND和一个偶数个反相器通常是两个构成的环路整体形成了一个具有置位S和复位R功能的SR触发器结构。关键在于其激励方式一个外部的ctrl控制信号同时连接到S和R端。当ctrl信号从低电平跳变到高电平上升沿时一场“混乱”在环路中被触发。由于环路中存在正反馈和路径延迟的微小不对称性记为Td环路不会立即稳定在某个逻辑状态而是会进入一种“振荡性亚稳态”。此时输出信号会在‘0’和‘1’之间快速振荡。但这种振荡不是永久的。由于环路固有的不对称性Td振荡能量会逐渐耗散通常在几十到几百个周期后振荡停止输出会稳定在一个确定的逻辑电平‘0’或‘1’。注意这里的关键参数是振荡次数和最终稳态。两者都受到制造工艺偏差的影响路径延迟的微小差异即Td的大小直接决定了振荡能持续多久。Td越小不对称性越弱振荡次数可能越多甚至在某些极端对称的情况下振荡可能无法停止成为永久振荡。而最终稳定在0还是1也由触发时刻环路的状态偏差决定。2.2 从TRNG到PUF熵源提取的视角转换TERO最初在TRNG中的应用看中的是其振荡次数的随机性。由于热噪声等随机因素会影响每次触发时的初始条件因此即使同一个TERO单元其每次产生的振荡次数也会有波动。这个波动的低位比特LSB具有很好的随机性适合用于生成随机数。而TERO-PUF的智慧在于它提取的是振荡次数的稳定性部分。虽然单次测量有噪声但对同一个TERO单元进行大量例如218次测量后其振荡次数的平均值是一个极其稳定的值。这个平均值是由该单元固有的、由工艺偏差决定的物理特性主要是Td所主导的。不同TERO单元之间的工艺偏差不同因此它们的平均振荡次数也不同。这就构成了PUF响应的熵源。2.3 抗锁定能力的根源频率无关性锁定现象的本质是频率耦合。当两个RO距离很近或通过电源、衬底等途径产生耦合时一个振荡器的电磁场会影响另一个最终迫使它们的振荡频率同步。RO-PUF直接比较频率因此锁定对其是毁灭性的。TERO-PUF完全绕开了频率。考虑以下两点测量对象不同TERO-PUF测量的是在固定宽度由ctrl信号高电平持续时间决定的激励窗口内振荡发生的次数。它不关心每次振荡的周期即频率是多少。即使两个TERO单元因为耦合而频率同步只要它们的Td决定振荡衰减速度的参数不同它们在同一个时间窗口内完成的振荡次数仍然会不同。激励方式不同TERO是瞬态激励。ctrl信号是一个脉冲振荡只发生在一段短暂的时间内。而RO是持续振荡。瞬态工作模式使得TERO单元大部分时间处于静态相互干扰的机会远小于始终活跃的RO。因此攻击者即使通过电磁攻击探测到TERO单元在振荡期间的频率他也无法得知振荡的总次数更无法推断出决定平均振荡次数的关键参数Td。这从根本上切断了通过频率分析攻击PUF的路径。2.4 差分结构对抗环境噪声的铠甲工艺偏差是我们需要的熵源而环境噪声如电压波动、温度变化则是我们需要抑制的干扰。TERO-PUF采用了差分结构来提升稳定性。其基本思想不是直接使用一个TERO单元的绝对振荡次数而是使用一对TERO单元振荡次数的差值。具体架构中见图3多个TERO单元成对组合。每对单元的输出分别驱动一个计数器记录振荡次数。然后将两个计数器的值相减。这样做的妙处在于环境噪声如电源电压的轻微波动通常会同时影响同一芯片上相邻的两个TERO单元使它们的振荡次数同向变化同时增加或减少。当计算差值时这部分共模噪声被大幅抵消了。而工艺偏差导致的固有差异则作为差模信号被保留下来。这种结构显著提升了PUF响应在不同环境条件下的可重复性即降低了 Intra-device variation。3. TERO-PUF的FPGA实现与设计细节理论需要实践的检验。原文作者在9块Altera DE1开发板搭载Cyclone II EP2C20 FPGA上实现了TERO-PUF并进行了详尽的测试。我们将深入拆解其实现方案补充作为实践者必须关注的细节。3.1 硬件架构解析整个TERO-PUF系统可以分解为几个关键模块TERO单元阵列这是熵源。文中使用了64个基础的TERO环路。每个环路占用一个FPGA的逻辑阵列块LAB。选择LAB作为布局单位是为了保证布局的一致性便于在不同位置Placement实现相同的设计以测试稳定性。控制与计数逻辑每个TERO单元或每对单元配有一个8位异步计数器。当ctrl信号为高时TERO单元振荡计数器对振荡边沿进行计数。ctrl信号由全局时钟分频产生文中测试时使用了50MHz和390kHz等多种频率以观察不同激励条件下的行为。均值计算与熵提取这是核心处理单元。为了得到稳定的平均值系统对每个TERO单元进行了大量218次测量。原文使用了一个26位的累加器来累加218次测量的计数值然后通过一个18位的移位寄存器来实现除以218的操作近似取平均值。实际上在FPGA中更常见的做法是使用一个状态机控制多次测量并将累加结果右移适当的位数因为218接近256右移8位相当于除以256是硬件友好的操作。差分与响应生成计算每对TERO单元平均振荡次数的差值。这个差值是一个多位数例如8位。并非所有比特都稳定可用。作者通过统计分析发现差值结果的高位比特MSB非常稳定而低位比特LSB则受噪声影响较大。因此PUF的最终响应即芯片ID由每对单元差值结果的若干个最高有效位拼接而成。例如取每个差值的最高2位64个单元组成32对即可生成一个64位的响应。文中实验了取2、3、4位分别得到126、189、252位的响应。3.2 实操要点与参数选择如果你要在自己的FPGA项目如Xilinx 7系列或Intel Cyclone 10系列中尝试实现TERO-PUF以下几点至关重要1. TERO单元的实现与布局约束TERO单元的结构简单但实现时的布局布线对性能影响巨大。你必须为每个TERO单元及其对应的计数器施加严格的布局约束。实践建议在Xilinx Vivado或Intel Quartus中使用PBLOCK或LogicLock区域约束将每个“TERO单元计数器”的组合锁定在FPGA上一个较小的、独立的区域例如一个CLB/Slice或一个LAB。这能最大限度地减少布线延迟的随机性对振荡行为的影响确保不同次实现之间的一致性。同时要确保用于生成ctrl信号的时钟网络到每个TERO单元的延迟尽可能一致避免因触发时间不同引入额外偏差。2. 计数器位宽与测量次数的权衡原文使用8位计数器测量218次。这基于一个观察振荡次数不超过255次。你需要根据你的TERO设计反相器链长度、器件速度和ctrl脉冲宽度来确定合适的计数器位宽。设计步骤 a. 先用一个较宽的计数器如16位进行初步测试观察在设定的ctrl脉冲宽度下最大振荡次数是多少。 b. 根据最大值确定计数器的安全位宽例如最大值500则10位计数器足够。 c. 测量次数的选择次数越多均值越稳定但生成响应的时间越长。218次是一个折衷。你可以通过计算响应比特的稳定度Intra-device variation与测量次数的关系曲线来为你的应用选择一个合适的值。通常128、256这些2的幂次方数在硬件上更容易处理。3.ctrl信号频率与脉冲宽度的选择ctrl信号的频率决定了PUF响应的生成速度。脉冲宽度必须足够长以容纳TERO单元完成其振荡过程并归于稳定。调试方法通过嵌入式逻辑分析仪如Xilinx的ILA或Intel的SignalTap捕获TERO单元的输出信号。逐步增加ctrl脉冲的宽度观察振荡包络。脉冲宽度应设置为最慢TERO单元振荡完全停止所需时间的1.5到2倍留有充足余量。频率则根据脉冲宽度和系统需求确定。4. 响应比特选取策略不能盲目地使用差值结果的所有比特。必须进行片上特征化。操作流程 a. 在固定环境常温常压下对同一FPGA的同一配置进行数百次PUF响应读取。 b. 对每一对TERO单元差值结果的每一个比特位计算其在这数百次读取中发生翻转0变1或1变0的概率。 c. 设定一个稳定性阈值例如翻转概率 0.5%。选取所有低于该阈值的比特位作为有效PUF响应比特。通常高位比特更稳定。原文中最高2位非常稳定第3、4位的稳定性也可接受但需要更强的纠错。3.3 资源评估与优化方向TERO-PUF的主要开销在于大量的计数器和累加逻辑。对于64个TERO单元每个单元需要一个计数器每对单元需要做减法和比特选取逻辑。这在资源有限的FPGA上是一个挑战。优化思路时分复用不必为所有TERO单元同时配备计数器。可以使用一个或少数几个高速计数器通过多路选择器MUX轮流连接到各个TERO单元的输出进行计数。这能大幅减少寄存器资源的使用但会延长整体响应生成时间。压缩测量不一定需要218次测量来求精确均值。可以探索更高效的统计算法例如计算中位数或使用过零检测等简化方法在保证足够稳定性的前提下减少测量次数。熵压缩如果每对单元只能提供2个稳定比特熵效率较低。可以研究更复杂的后处理电路从多个单元的振荡数据中提取出更多稳定、独立的比特。4. 性能表征与结果分析数据说了算论文中对TERO-PUF进行了全面的性能表征主要围绕三个核心指标偏置Bias、设备内差异Intra-device variation或称可靠性和设备间差异Inter-device variation或称唯一性。这些数据是评估一个PUF能否投入实用的关键。4.1 关键性能指标解读偏置Bias指PUF响应中‘0’和‘1’的比例。理想的PUF响应应该是完全随机的即‘0’和‘1’各占50%偏置为0.5。如果偏置严重偏离0.5说明响应熵不足容易被预测。TERO-PUF通过选择差值的高位比特其偏置被控制在接近0.5的理想值。设备内差异可靠性衡量同一芯片、同一PUF电路在相同条件下多次生成响应的一致性。通常用汉明距离HD的平均值表示。理想情况下每次生成的响应应该完全相同HD为0%。TERO-PUF的结果非常出色126位ID平均设备内HD为1.73%即平均只有约2.2个比特会翻转。189位ID平均设备内HD为2.07%。252位ID平均设备内HD为2.75%。 这个水平意味着TERO-PUF具有很高的稳定性为后续纠错留下了很小的负担。设备间差异唯一性衡量不同芯片之间PUF响应的差异程度。理想情况下任意两个芯片的响应应该像随机序列一样有50%的比特不同。TERO-PUF的结果同样接近理想126位ID平均设备间HD为48.07%。189位ID平均设备间HD为48.99%。252位ID平均设备间HD为49.27%。 这表明TERO-PUF能很好地区分不同的芯片。4.2 与RO-PUF的对比优势表3对比数据清晰地展示了TERO-PUF的竞争力。与RO-PUF相比抗锁定这是最根本的优势。TERO-PUF对锁定现象不敏感而这是RO-PUF的阿克琉斯之踵。稳定性TERO-PUF的设备内差异~1.73%优于许多传统的RO-PUF实现通常在3%-6%或更高。响应长度通过简单的结构就能产生较长的响应位126-252位且唯一性良好。硬件复用潜力同一个TERO硬件单元其振荡次数的低位波动可用于TRNG高位稳定值用于PUF。这为构建紧凑的“安全子系统”提供了可能。4.3 实测中的挑战与应对在实际FPGA测试中你可能会遇到一些论文中未详尽描述但至关重要的问题挑战一TERO单元的不稳定性。论文提到约29%的TERO单元输出最终状态不稳定持续振荡。这对于想用最终稳态做PUF的方案是致命的但TERO-PUF利用的是振荡次数因此只要振荡能停止就能使用。然而如果某些单元在设定的ctrl脉冲宽度内永远不停止振荡计数器会溢出。解决方案在设计中加入“看门狗”机制。为计数器设置一个合理的上限值略高于正常振荡次数的最大值。当计数达到该上限时强制终止计数并标记该次测量无效或在后续处理中剔除该单元的数据。挑战二环境变化的影响。虽然差分结构抑制了共模噪声但极端温度或电压变化仍可能影响振荡特性。解决方案 a.片上校准集成简单的温度/电压传感器。当检测到环境条件超出标定范围时可以触发一个重校准流程例如轻微调整ctrl脉冲宽度或采用一个预先存储的、针对该环境的轻微纠错偏移量。 b.自适应比特选择在特征化阶段不仅在常温常压下也在高低温、高低压的 corner cases 下测试每个比特的稳定性。只选取在所有测试条件下都稳定的比特作为最终PUF响应。这会减少有效比特数但能换来极高的环境鲁棒性。挑战三启动时间的瞬态效应。FPGA上电初期电源和温度可能未完全稳定此时读取的PUF响应可能会有较大波动。解决方案在系统启动流程中加入一个短暂的“预热”或“稳定等待期”例如几十毫秒再进行PUF响应读取。或者采用多次读取取均值的方式作为最终的“注册”响应。5. 从原型到产品工程化考量与安全增强将实验室的原型转化为可交付的产品还需要跨越工程化的鸿沟。TERO-PUF也不例外其较大的硬件开销和必要的纠错环节是必须面对的问题。5.1 面积优化与系统集成论文中坦承TERO-PUF的面积开销较大。在实际产品中我们需要极致的优化。逻辑压缩仔细分析图3中的架构26位累加器和18位移位寄存器是面积大户。如果我们将218次测量固定那么除以218的操作可以简化为乘以一个固定系数1/218的乘法或者直接用比较器实现。例如我们并不需要知道振荡次数的精确均值只需要知道它是否高于某个阈值。可以设计一个电路在218次测量中统计振荡次数超过阈值N_th的次数。如果超过半数则输出‘1’否则输出‘0’。这可以用一个比较器和一个计数器实现面积小得多。与系统共享资源在SoC或复杂的FPGA设计中PUF可能不是常开功能。可以考虑与系统中已有的计时器、计数器等模块共享硬件资源在需要生成密钥或进行认证时临时配置成TERO-PUF模式。作为硬核IP对于大规模量产芯片可以将优化后的TERO-PUF设计成固定的硬件模块Hard Macro其面积和性能都是可预测和最优的。5.2 纠错码ECC的必要性与选择即使TERO-PUF的设备内差异低至1.73%对于一个126位的响应平均仍有约2个错误比特。在密码学应用中密钥必须分毫不差。因此必须引入纠错码。经典方案模糊提取器Fuzzy Extractor。它通常包含两个阶段1)纠错使用如BCH码、重复码等将可能有错的“模糊”响应R纠正为正确的“稳定”响应S。2)熵提取使用哈希函数如SHA-256从S中提取出均匀分布的最终密钥K并生成一个公开的帮助数据P用于后续纠错。针对TERO-PUF的优化由于TERO-PUF的错误比特率较低且相对稳定可以选择纠错能力适中但开销较小的ECC。例如对于126位原始响应可以将其分为若干块每块使用轻量级的BCH码或重复码进行纠错。帮助数据P需要安全存储或与芯片序列号绑定但它不泄露关于密钥K的信息。5.3 对抗建模攻击与物理攻击任何PUF都可能面临建模攻击通过大量挑战-响应对训练一个数学模型来模拟PUF和物理攻击探针、激光故障注入等。对抗建模攻击TERO-PUF的响应生成过程涉及模拟性质的振荡和计数其输入输出关系比简单的仲裁器PUF等更复杂、非线性程度更高这本身增加了建模难度。可以进一步在挑战-响应协议中引入非线性变换例如不是直接使用TERO单元的原始地址作为挑战而是先通过一个PUF内部的哈希或置换网络来映射到实际被激活的单元对上。对抗物理攻击探测与成像TERO单元在静态时功耗极低仅在短暂激励期间活动这增加了攻击者通过功耗分析或电磁探针定位其活动的难度。故障注入针对TERO单元的故障注入如激光、电磁脉冲可能会改变其振荡行为。防御措施包括在TERO单元周围添加传感器网络如环形振荡器传感器检测环境异常或在算法层面使用多次测量投票、完整性校验等机制。5.4 应用场景展望TERO-PUF凭借其抗锁定和高稳定性的特点非常适合以下场景高安全嵌入式设备如支付终端、汽车电子控制单元ECU、工业控制器等需要抵抗物理攻击和恶劣环境。物联网节点身份认证为海量、低成本的物联网设备提供难以克隆的硬件ID用于安全入网和设备管理。FPGA知识产权IP保护将TERO-PUF生成的密钥与FPGA配置文件的加解密绑定实现“一芯一密”的IP保护。混合安全原语利用TERO单元同时实现PUF和TRNG为安全芯片提供一个紧凑的随机性与唯一性来源。TERO-PUF的研究展示了一条清晰的路径通过深入理解物理现象的本质弱点如RO的锁定并巧妙地利用另一种物理现象的特性TERO的瞬态振荡次数来规避它从而设计出更健壮的安全原语。它的实现过程从单元设计、差分结构、比特选取到性能表征为硬件安全工程师提供了一个如何系统性地设计、评估和优化一个PUF的完整范例。尽管在面积和速度上还有优化空间但其在安全性上的独特优势使其在对抗日益复杂的物理攻击环境中成为一个非常有价值的候选方案。