解释特权架构验证的关键点

解读

国内SoC项目普遍采用RISC-V或ARMv8/ARMv9作为CPU内核,特权架构(Privilege Architecture)决定了“普通世界”与“安全世界”的切换、中断路由、MMU/MPU权限检查、调试访问控制等核心机制。验证团队常被问到“特权架构验证怎么做”,面试官想确认候选人是否能把“功能正确”与“安全合规”同时闭环,而不仅是跑通基本用例。回答时要体现:① 对特权级别、异常模型、内存属性、隔离机制的透彻理解;② 能构造边界场景并量化覆盖率;③ 熟悉国内芯片过审(如国密、等保、商密)对特权隔离的硬性要求;④ 具备可交付的sign-off标准。

知识点

  1. 特权级别与状态切换:RISC-V M/S/U或ARMv8 EL3/EL2/EL1/EL0,以及国内定制扩展的“监控模式”。
  2. 异常与中断路由:同步异常(ecall、ebreak、页错误)、异步中断(软件中断、外部中断、SEI、NMI),中断控制器(PLIC、GIC600/700)的优先级、亲和性、安全状态路由。
  3. 地址转换与权限检查:MMU/MPU、Stage-1/Stage-2、PMP、SMPU、PBMT,以及国内商密算法加速区的“仅安全世界可访问”属性。
  4. 调试与跟踪:HAD、JTAG、DMI、ETM、STM,调试器在非安全世界不能访问安全世界寄存器,防止密钥泄露。
  5. 安全隔离机制:TrustZone/TEE、Multi-Zone、WorldGuard,国内项目需额外验证“国密算法区”与“非安区”的物理地址隔离。
  6. 形式验证与定理证明:对“特权级别切换不变式”进行SVA+Formal,确保在任何中断嵌套深度下,CSR写操作不会破坏安全状态机。
  7. 覆盖率模型:特权交叉覆盖率=特权级别×异常类型×内存属性×安全状态×中断使能位,国内流片前要求达到100%交叉,并提交第三方审计。
  8. 硬件加速与FPGA原型:在 Palladium/Zebu 或国产EMU平台跑Linux+OP-TEE,用裸机攻击程序模拟“侧信道+特权逃逸”组合攻击,确保在1亿周期无安全状态机非法跳转。
  9. Sign-off标准:除功能0缺陷外,还需提交《特权架构安全验证报告》,包含异常嵌套时序图、特权切换覆盖率热图、形式化证明结论、国密算法区隔离证据,作为工信部或客户审计的必备材料。

答案

特权架构验证的核心是“级别切换正确”+“隔离不可绕过”+“中断时序合规”+“安全审计可交付”。具体关键点如下:

  1. 特权级别切换路径验证
    搭建UVM环境,例化CPU RTL与特权模型(RISC-V PrivSpec或ARM ARM),用定向+随机混合方式触发ecall、ebreak、中断、异常返回指令。在scoreboard里比对特权级别、PC、CSR、PMP/MPU配置,确保切换前后状态完全一致。对国内扩展的“监控模式”新增一条独立切换路径,必须单独构造1000条用例,覆盖率单列。

  2. 异常嵌套与优先级验证
    在GIC600配置不同Group、Priority、Security State,用SystemVerilog断言检查“高优先级安全中断能否抢占非安全世界”以及“NMI是否能在任何级别嵌套一次”。用形式工具证明:无论嵌套深度如何,退出异常时的ERET指令必须回到正确特权级,且CSR不会泄露安全世界信息。

  3. 地址转换与权限检查穷尽
    把MMU/MPU/PMP配置空间拆成“粒度因子”:4K/2M/1G、Device-nGnRnE、Normal-NonCacheable、Secure-Only、国密区只读可执行。用SVA断言检查“非安全世界访问安全页表是否触发权限异常”,并用国产形式工具Boolector跑24小时,证明无反例。覆盖率要求:每一类内存属性至少与每一级特权交叉一次。

  4. 调试端口安全隔离
    在JTAG DMI接口插入bus functional model,模拟调试器在非安全世界发起“CSR寄存器写”和“安全世界内存读”。期望行为:返回SLVERR并触发安全中断。用FPGA原型全速跑Linux+GDB,连续48小时无密钥区数据泄露,方可进入sign-off。

  5. TEE与国密算法区隔离
    国密算法加速单元挂在安全AXI总线,验证用例需覆盖“非安全世界通过DMA伪装描述符攻击”场景。在UVM环境中构造恶意描述符,用AXI slave agent检查任何非安全AWPROT/ARPROT=2’b01的访问是否被slave立刻返回DECERR,并记录覆盖率。

  6. 覆盖率与签核标准
    特权架构单独建立covergroup,包含:priv_lvl、exc_type、mem_attr、sec_state、interrupt_enable、nested_level。国内流片要求100%交叉,且用“特权状态机热图”展示哪些切换路径未被命中。最终提交《特权架构安全验证报告》,经第三方审计机构签字后方可tape-out。

拓展思考

  1. 面对RISC-V后续Privilege Spec 1.13或ARMv9.4新增的“机密计算扩展”(CCA、ShadowStack),验证环境如何快速可配置化?
    建议把特权模型做成Python-configurable VIP,通过YAML描述新CSR、新异常号,UVM环境零代码改动即可展开回归,缩短规格更新到验证闭环到两周以内。

  2. 国内车规芯片要求ASIL-D,对“特权隔离+双核锁步”提出故障注入需求。
    可在Palladium平台插入SBST(Software-Based Self-Test)+ 时钟毛刺注入,验证当安全世界发生双核输出 mismatch 时,特权状态机能否在下一个时钟周期进入安全失败静默(Fail-Silent)模式,并通知外部PMIC断电,避免密钥泄露。

  3. 形式验证规模爆炸怎么办?
    采用“分层抽象”策略:先对单条异常路径做轻量级形式证明,再把结论抽象成SVA assume,在顶层做“特权不变式”证明;同时利用国产形式工具提供的“割点(cut-point)”功能,把PLIC/GIC等大型FIFO抽象成黑盒,只保留优先级仲裁逻辑,可在24小时内完成完整证明。

  4. 如何用AI辅助生成特权攻击用例?
    基于强化学习的用例生成器把“安全状态机跳转”作为reward,自动变异ecall参数、页表项、中断优先级,可在三晚内发现传统随机难以触发的“两级嵌套+页错误+调试请求”组合缺陷,提前暴露风险。