描述安全验证中的威胁建模方法
解读
国内数字芯片项目进入车规、金融或国密级应用时,安全验证已从“加分项”变成“准入证”。面试官问“威胁建模方法”,并不是想听一段STRIDE或Attack Tree的教科书定义,而是考察三件事:
- 你是否能把“安全”拆成可验证的RTL属性;
- 你是否能把安全场景映射到UVM testbench的coverage模型;
- 你是否知道在国产IP/SoC流程里,威胁建模结果如何被后端、固件、认证机构复用。
因此,回答要围绕“从威胁到覆盖率”的闭环,突出“可量化、可追踪、可sign-off”。
知识点
-
国内主流安全标准映射
• 国密算法:SM2/SM3/SM4的侧信道与故障注入防护要求(GM/T 0008-2012、GB/T 22186-2016)。
• 车规:EVITA HSM、ISO 21434、GB/T 40861-2021,强调“威胁→安全目标→安全机制”三层追溯。
• 金融:银联芯片安全规范(UPTS v3.0)对敏感信号提出100% toggle + 奇偶/冗余覆盖。 -
RTL可验证安全属性分类
• 机密性:密钥寄存器零化时间≤3 cycle,不可被非安全主机读取。
• 完整性:ROM代码段CRC每16 cycle刷新一次,出错即触发安全中断。
• 可用性:看门狗必须在256 cycle内被安全核喂狗,否则自动擦除密钥。
• 防重放:Nonce计数器单调递增,回滚≥1即报警。 -
威胁建模四步落地流程(已在海思、平头哥、紫光验证中心内部推广)
Step1 资产识别 → Step2 威胁枚举 → Step3 攻击面量化 → Step4 验证闭合。 -
形式验证与仿真分工
• 形式:用Synopsys VC Formal/国微FV-Pro证明“密钥从未到达非安全地址空间”。
• 仿真:用UVM-SV+SystemC搭建故障注入器,支持时钟毛刺、电压跌落、激光注入三类模型。 -
覆盖率定义
• 安全covergroup分三类:asset_access_cg、attack_path_cg、countermeasure_trigger_cg。
• 国内认证机构要求“安全机制触发覆盖率≥99%,未触发场景需给出形式证明”。
答案
我以去年在车规MCU安全子系统(EVITA Full HSM)的验证实践为例,说明如何把威胁建模落到RTL验证平台。
第一步,资产识别。
我们列出Top5资产:SM4密钥、BootROM、安全中断向量、生命周期计数器、真随机数种子。用Excel导入JIRA,自动生成唯一ID,并与设计spec中的寄存器地址、位段绑定,保证后续追踪。
第二步,威胁枚举。
采用“基于攻击面的STRIDE+故障注入”双维度:
- 伪造:非安全Master伪造HSM身份写密钥寄存器;
- 篡改:激光注入修改BootROM取指;
- 否认:重放旧版OEM固件,降级生命周期;
- 信息泄露:功耗分析(SPA/DPA)猜测SM4轮密钥;
- 拒绝服务:毛刺让看门狗逻辑挂死,无法擦除密钥。
每个威胁给出Attack Vector、CVSS v3评分、受影响资产ID,形成《威胁-资产映射表》。
第三步,攻击面量化。
把攻击面拆成“时间窗、空间窗、能量窗”三维:
• 时间窗:故障注入必须在SM4第8~10轮之间有效;
• 空间窗:激光点直径≤30 μm,只能影响单bit;
• 能量窗:电压跌落≥10%且持续≥2 ns才触发异常。
用SystemC写成“fault constraint class”,嵌入到UVM sequence,保证随机激励不脱离物理可行性。
第四步,验证闭合。
- 形式验证:在VC Formal里写SVA断言
assert property (!(secure_key_valid && !hsm_sel && key_wr_en));
证明“密钥寄存器写使能”永远不会被非安全Master拉高。 - 仿真激励:
• 电压故障sequence:每1 ms随机跌落一次,跌落深度5%15%,持续210 ns;
• 激光故障sequence:在SM4第1~16轮随机选1 cycle,翻转一个S盒输出bit;
• 重放sequence:把72小时前抓取的CAN报文重放到总线,观察生命周期计数器是否回滚。 - 覆盖率收集:
• attack_path_cg采样“故障类型+注入时刻+是否被检出”;
• countermeasure_trigger_cg采样“安全中断+密钥擦除+生命周期锁定”是否被触发。
最终达到:安全机制触发覆盖率99.4%,剩余0.6%经形式证明不可达,满足ISO 21434对ASIL-D的sign-off要求。
整个威胁建模输出三件交付物:
- 《威胁-资产-安全机制追溯表》——认证机构必查;
- 形式验证报告——FPV reachability + cover证明;
- 仿真覆盖率报告——attack_path_cg + countermeasure_trigger_cg合并数据库,可直接导入国密测评中心模板。
拓展思考
-
如果芯片后期追加“后量子算法”IP,如何在不重跑全部fault simulation的前提下,快速刷新威胁模型?
提示:可把算法IP当作新资产,复用原有“时间-空间-能量”约束,仅增量跑形式验证,证明新密钥接口仍满足“非安全Master不可写”属性。 -
国内Fab对激光注入测试有严格限制,无法做物理实验,如何向认证机构证明“故障注入覆盖率”有效?
提示:采用“仿真+等效性”混合论证:先用仿真跑满故障空间,再用形式工具证明“所有单bit翻转最终都会被双核锁步比较器检出”,从而把物理实验简化为“抽检10颗样片,零失效”即可通过。 -
面对RISC-V开源生态,如何防止“恶意自定义指令”绕过安全边界?
提示:在威胁建模阶段就把“指令解码”列为攻击面,用Formal对“所有非特权指令→特权寄存器写”做reachability分析,确保自定义指令无法生成“写密钥”微操作。