Page 56 - 《软件学报》2026年第6期
P. 56
芮志清 等: MARC: 基于多智能体协同的硬件安全缺陷早期检测方法 2375
从而更有效地解决深度依赖上下文的漏洞挖掘等复杂问题. 这些工作证明了通过让 LLM 扮演领域专家角色来指
导静态分析工具, 可以有效克服传统方法在规约缺失和上下文理解方面的短板, 显著提升代码分析的精度与广度.
然而, 值得注意的是, 当前基于大语言模型的代码分析研究主要集中于 Java、C/C++等软件编程语言, 其方法
和经验难以直接迁移至硬件领域. 这种迁移的根本障碍源于软件编程语言与硬件描述语言的本质差异 [48] . 首先,
软件代码旨在为处理器编写一系列顺序执行任务的计算指令; 而硬件描述语言并非执行任务, 而是在描述一个物
理硬件架构, 其核心是定义数据如何在寄存器间并发流动、精确时序状态以及电路构建结构. 其次, 硬件描述语言
的安全意图高度依赖非结构化的自然语言设计文档, 这与软件逻辑在代码或 API 中通常具有更清晰结构化体现的
情况截然不同. 这些本质差异导致了软件领域方法无法应对的独特挑战, 即为通用软件训练的大语言模型难以理
解 RTL 独特的时序与并发约束, 而传统静态分析工具亦无法处理 RTL 的并发语义和非结构化规约依赖, 进而导
致了前文所述的高漏报率 (挑战 1) 与高误报率 (挑战 2). 因此, 尽管软件领域基于 LLM 与多智能体协同范式提供
了宝贵启示, 但如何针对硬件描述语言的独有特性进行适应性设计, 构建能同时理解硬件描述语言并发时序语义
和硬件设计规约的领域特定方法, 仍是一个亟待专门研究的开放性问题, 也正是本文工作的出发点.
1.4 小 结
针对当前 RTL 缺陷检测问题, 当前研究仍面临挑战. 一方面, 形式化验证等传统技术虽能提供高可信度的验
证, 但因其资源消耗巨大、反馈周期长而时机太晚; 另一方面, 作为主流早期检测手段的静态分析工具, 则因其分
析原理无法跨越非结构化设计文档与源代码之间的知识鸿沟, 导致了高漏报率与高误报率并存的问题.
本文旨在研究能够深度融合设计知识与代码上下文的早期检测, 提出一种基于大语言模型多智能体协同的硬
件安全缺陷检测方法, 该方法的核心在于构建一个模拟领域专家团队协同审计的多智能体框架, 通过角色化的智
能体分工与协作, 系统性地将蕴含在自然语言文档中的设计规约与 RTL 代码的深层功能语义相结合, 从而在保证
检测时效性的同时, 显著提升缺陷识别的准确性与召回率, 以期突破现有技术的瓶颈.
2 问题定义
本文的研究聚焦于硬件安全缺陷的早期检测. 本文所要解决的问题场景, 是为正在进行 RTL 级设计的硬件工
程师提供一种伴随式的安全缺陷早期检测方法. 在该场景下, 工程师对一个或多个 RTL 模块进行编写或修改, 该
方法应能实时或近实时地对当前的代码片段进行自动化分析, 并即时反馈潜在的安全隐患. 此机制旨在将缺陷发
现的节点从传统的验证阶段大幅提前至编码阶段, 从而以最小的成本消除安全风险. 该场景的核心要求是, 在功能
设计尚未完善、缺乏完整测试环境或形式化规约的环境下, 实现高精度、低误报的自动化安全缺陷早期检测.
2.1 概念定义
为精确描述本问题, 我们引入以下定义.
定义 1. RTL 设计. 一个 RTL 设计是描述硬件逻辑与结构的源代码集合, 是设计意图在物理实现前的最高层
次代码化表达. 一个 RTL 设计 D 可被定义为一个模块的集合 D = {m 1 ,m 2 ,...,m n }, 其中每个模块 m i 由其源代码 、
C i
端口集 P i 与实例化关系 I i 共同描述, 即 m i = (C i ,P i ,I i ).
定义 2. 设计知识. 设计知识是理解代码安全意图所必需的上下文, 它通常蕴含在非结构化的设计文档 T doc 之
中. 在形式上, 设计知识 K 可被定义为一个包含关键资产 A、信任边界 B 以及安全属性 S 的集合, 即 K = {A,B,S}.
这些元素共同定义了需要保护什么、在哪里保护以及应遵循何种规则.
定义 3. 安全缺陷. 一个安全缺陷本质上是代码实现与设计安全意图之间的偏差, 是构成安全风险的具体代码
点. 在形式上, 它指 RTL 源代码 C 的具体实现违背了设计知识 K 中某项安全属性 s ∈ S 的情况, 可记为 C ⊭ s. 每一
个被识别的缺陷 d 可由一个三元组 d = ⟨l,t,desc⟩ 来精确描述, 分别代表其在代码对应位置的代码片段、所属缺陷
类型和具体缺陷描述.
定义 4. 早期检测. 早期检测是一种在伴随式编码场景下, 对不完整设计进行实时分析以尽早发现潜在安全风
险的过程. 其目标是构建一个映射函数 f : (D,T doc ) → D found , 该函数通过分析 RTL 设计 D 及其相关文档 T doc , 输出

