1. FPGA安全NTT架构设计背景与挑战数论变换Number Theoretic Transform, NTT作为现代格密码如Kyber、Dilithium等的核心运算模块其硬件实现面临着日益严峻的安全威胁。在FPGA平台上NTT模块不仅需要保证运算效率更需要应对硬件木马注入、侧信道攻击等安全风险。传统NTT架构通常仅关注性能优化而忽视了安全防护机制这使得攻击者可以通过控制信号篡改、时序扰动等方式破坏NTT运算的正确性甚至窃取密钥信息。我们团队在Artix-7 FPGA平台上实测发现未受保护的NTT模块在面对以下攻击时表现脆弱硬件木马攻击通过植入恶意电路篡改控制信号如rd_en、wr_en等导致NTT运算流程异常时序攻击人为引入时钟延迟或停顿破坏NTT的严格时序要求单次攻击侧信道分析SASCA通过监测未受保护的中间值恢复密钥信息2. 安全NTT架构总体设计2.1 三重防护机制针对上述威胁我们提出如图1所示的安全NTT架构包含三大核心防护层[控制流完整性检查(CFI)] ↓ [时钟周期计数器(CCC)] ↓ [局部掩码(LM)单元]控制流完整性检查(CFI)采用独立于主控制器的备份状态寄存器CSR通过移位寄存器结构实时验证控制信号的合法性。当检测到异常状态跳转时立即触发故障警报。时钟周期计数器(CCC)为每个关键操作多项式读取、蝶形运算等建立严格的时钟周期预算。任何超时操作都会被判定为潜在攻击。局部掩码(LM)在NTT运算过程中动态掩码中间值防止SASCA攻击获取有效信息。掩码因子ωr在每次NTT初始化时随机生成。2.2 硬件架构实现在Artix-7 FPGA上的具体实现包含以下模块主NTT引擎采用基2时域抽取(DIT)结构支持256点变换故障检测单元集成CFI和CCC电路位流修补器(Bit Patcher)管理部分重配置(PR)位流内部配置访问端口(ICAP)实现动态重配置总线互连采用AXI4-Stream接口确保数据传输安全关键参数配置时钟频率100MHz多项式系数n256模数q3329系数位宽12bit内存配置poly_mem12×256 bitsw_mem12×256 bits3. 故障检测机制详解3.1 控制流完整性检查(CFI)CFI模块通过双轨验证机制确保控制信号的合法性主控制器生成原始控制信号备份CSR采用LFSR结构模拟理想控制流比较器每个周期比对两者输出当检测到不匹配时更新故障计数器if (csr_state / ctrl_state) then cfi_fault cfi_fault 1; end if;3.2 时钟周期计数器(CCC)CCC模块监控六个关键操作的时序多项式读取蝶形运算模约减写回操作UV计算Barrett约减每个操作设有最大允许时钟周期数如Barrett运算≤8周期。超时触发ccc_fault计数。3.3 故障分级与阈值设置两级故障阈值实现分级响应故障类型轻度阈值严重阈值CFI256512CCC2565124. 自适应校正策略4.1 校正流程决策树如图2所示校正策略根据故障严重程度动态选择if (n_cfi_fault cfi_th_reld) (n_cfi_fault cfi_th_relc) → 执行Measure III-A1 else if (n_cfi_fault cfi_th_relc) → 执行Measure III-A2 else if (n_cfi_fault cfi_th_reld) (n_cfi_fault cfi_th_relc) → 执行Measure III-A34.2 三种校正措施Measure III-A1寄存器更新操作仅更新可靠性指数Ri硬件参与主机CPU时延10ns1时钟周期适用场景瞬时干扰Measure III-A2同PR位流重载通过ICAP重载当前位流更新Ri值时延~150μs56KB位流100MHzMeasure III-A3最优PR切换选择Ri最低的备用NTT位流通过ICAP加载新位流时延~256μs包含搜索时间5. 硬件木马防护场景分析表1总结了不同木马位置的防护效果木马位置影响范围CFI有效性CCC有效性LM有效性上游(Outside Up)输入信号××✓内部(Inside NTT)控制流/时序✓✓×下游(Outside Dn)输出信号××✓监测模块内部检测电路失效可能失效可能失效-典型防护案例RTL级木马CFI检测到非法状态跳转综合后木马CCC捕获异常时序位流级攻击LM阻止SASCA泄漏6. 实现结果与性能分析6.1 资源开销对比在Vivado 2022.2下的实现结果版本LUTsFFsDSPs功耗基线NTT27329842991nJ仅检测(CFICCCLM)29732443021nJ完整方案32735643094nJ开销分析切片资源增加19.7%功耗增加3%无时序违例满足100MHz6.2 防护效果验证在Kyber-1024上的测试结果操作类型执行次数注入故障数检测率校正率密钥生成16,38416,384100%100%封装16,38416,384100%100%解封装16,38416,384100%100%故障注入方法// 主机端故障注入控制 void inject_fault(uint16_t Rt, uint16_t Rs) { pci_write(FAULT_REG, (Rt 16) | Rs); }其中Rt∈[0,1023]攻击时钟周期Rs∈[0,1023]故障信号选择7. 工程实践建议7.1 阈值配置经验根据实测数据推荐轻量级应用阈值设为128/256高安全场景阈值设为256/512需平衡误报率与响应速度7.2 位流管理技巧存储至少4个不同布局的PR位流定期轮换使用位流以增强防护使用XDC约束确保关键路径隔离7.3 调试注意事项使用ILA监控CFI状态机添加调试头输出CCC计数值预留JTAG接口用于Ri读取8. 典型问题排查问题1CFI误报率高现象未受攻击时频繁报错排查步骤检查主CSR与备份CSR的初始状态是否一致验证时钟域交叉处理CDC是否恰当调整比较器采样时钟相位问题2重配置失败现象ICAP传输超时解决方案检查ICAP时钟是否稳定建议≤100MHz验证位流头格式是否正确添加硬件看门狗定时器问题3LM导致运算错误现象NTT结果验证失败调试方法捕获ωr值与理论值比对检查模乘运算单元是否溢出验证去掩码时序是否符合要求我们在Artix-7 AC701开发板上实测发现当采用上述架构后Kyber-1024的加解密操作仍能保持约12,800次/秒的吞吐量相比无防护版本仅降低7.2%。这种性能折损对于大多数实际应用场景是可接受的。