解释故障注入(fault injection)在安全验证中的作用

解读

国内数字芯片项目进入车规、商密、国密、金融、AI 安全三类(国密二级/银联芯片/车规 ASIL-D)认证时,验证团队必须出具“安全机制有效性”证据。故障注入是唯一能系统、定量、可复现地评估芯片在“恶意或异常应力”下是否仍保持机密性、完整性、可用性的手段。它把“攻击者视角”搬进验证平台,用可控、可观测、可度量的方式把单粒子翻转、电压毛刺、时钟抖动、激光、电磁、Rowhammer 等物理故障抽象成 RTL/门级事件,从而在安全 sign-off 前把设计-实现-架构三层防护短板一次性暴露。面试官想确认:你不仅知道“插错”概念,更清楚如何把它嵌入 UVM 流程、如何跟覆盖率、如何跟国密/车规双重要求对齐,以及如何量化 residual risk。

知识点

  1. 故障模型:单比特翻转(SBU)、多比特翻转(MBU)、固定型 0/1、路径延迟、组合环、配置寄存器粘滞、ECC 静默错误。
  2. 注入层面:
    • 行为级(SystemVerilog 断言 force)
    • RTL 级(VCS fi 命令、Xcelium fi 接口、Questa fi 库)
    • 门级网表(TetraMAX 的 SAF/TDF、StarRC 提取的延迟故障)
    • 后仿真(SDF 反标)
    • FPGA 原型(通过 ILA 触发器局部重配置、Partial Reconfig 帧注入)
    • 硬件加速(Palladium 的 Fi 插件、Zebu 的 Fault App)
  3. 安全属性分类:
    • 机密性(Confidentiality)——密钥是否泄漏
    • 完整性(Integrity)——签名/明文是否被篡改
    • 可用性(Availability)——看门狗/安全岛是否被 DoS
  4. 国内合规映射:
    • 国密 SM4/AES 算法模块:GM/T 0008-2012 要求 100% 单比特故障注入 + 99% 双比特故障注入,残留风险 ≤10-6
    • 车规 ISO 26262:DFA(Dependent Failure Analysis)需证明安全机制诊断覆盖率 ≥90%,故障注入是首选证据
    • 银联芯片:Q/CUP 037-2014 要求“敏感数据在 100 ms 内清零”,需用故障注入验证清零路径在异常电压下仍有效
  5. UVM 实现套路:
    • 在 scoreboard 里开 fault_phase,与 main_phase 并行;
    • 用 uvm_hdl_force/uvm_hdl_deposit 精准定位寄存器位;
    • 用 covergroup “fault_cg” 采样 fault_type、inject_cycle、recover_cycle,确保所有 fault 模型被遍历;
    • 用 SVA 检查安全响应:fault_injected |-> ##[1:100] (alarm_triggered || data_scrubbed)
  6. 量化指标:
    • FIT(Failure In Time)= 注入故障数 × 10^9 / 总仿真周期
    • DC(Diagnostic Coverage)= 被安全机制捕获的故障数 / 总注入故障数
    • Residual Risk = (1 – DC) × Severity × Probability

答案

“在国内安全芯片项目中,故障注入是验证安全机制是否达标的‘硬证据’。我们首先在验证计划里把国密 SM4 算法模块的 128 位密钥寄存器、16 轮迭代网络、以及冗余 CRC 校验单元列为‘高优先级故障点’。随后用 VCS 自带的 fi 命令在 RTL 级建立 3 类故障模型:单比特翻转、相邻双比特翻转、固定 0/1。整个平台基于 UVM,新增一个 fault_injector agent,内部用 uvm_hdl_force 在指定时钟沿精准注入,注入窗口由 randc 变量控制,确保均匀分布。为了对齐 GM/T 0008-2012,我们设置目标覆盖率:单比特 100%、双比特 99%,用 covergroup fault_cg 交叉采样 fault_type 与 injection_cycle。Scoreboard 里用 SVA 断言检查:若故障导致密钥寄存器值改变,必须在下一个时钟检测到 alarm_o 拉高,同时 zeroize 信号在 100 ms(折算 20 个时钟周期)内完成清零;否则记为逃逸。最终跑完 10^7 个随机测试,累计注入 48 万次故障,诊断覆盖率 DC=99.37%,残留风险 6.3×10-7,低于规范要求的 10-6,获得国密二级的安全 sign-off 认可。整个流程脚本化,可一键重跑,满足车规 ASIL-D 的回归要求。”

拓展思考

  1. 如何证明“故障注入量级”足够?——可结合 SM4 的 128 位 + 32 轮结构,用组合数学估算最小故障空间,再用 Monte-Carlo 方法验证采样密度已收敛。
  2. 当设计采用双核锁步(Dual-Core Lockstep)时,故障注入需考虑同步/异步差异,如何在不破坏锁步对齐的前提下注入仅影响一个核的故障?——可在综合后网表插入 “fi_mux”,利用 isolate 属性让综合工具保留该单元,实现精准差分注入。
  3. 若芯片已流片,实验室只有示波器和电磁探头,如何把现场捕捉到的电压毛刺反向抽象成 RTL 级故障,用于下次迭代?——可用 Python 把示波器 CSV 转成 VCD,再写脚本在仿真里 force 相同翻转序列,实现“硅后-仿真”闭环。
  4. 面对量子计算带来的新攻击模型,故障注入平台如何扩展?——可在 UVM 序列里加入“叠加态”抽象,把密钥寄存器建模为概率向量,用 SystemVerilog 实数数组模拟测量坍缩,提前评估后量子密码(如 CRYSTALS-Dilithium)在故障下的泄漏边界。