硬件保证这个方向有一段时间特别让人头疼:网表、RTL 代码、测试向量、故障日志,这些材料属于典型的又缺又敏感。缺是因为公开数据集少,标注成本高;敏感是因为厂商几乎把它们当成核心资产,不可能随便脱敏外传。合成生成(Synthetic Generation)就是在这种背景下被反复提起的一条解决思路——用程序化或模型化方式生成接近真实分布的数据,用于训练、验证和工具链测试。这篇文章面向硬件安全工程师、芯片验证工程师和研究相关方向的同学,重点不是把理论再讲一遍,而是把“数据稀缺与保密性到底卡在哪、合成生成能缓解到什么程度、实际落地时怎么选方法、怎么验收”这套流程拆开讲一遍。我的核心判断是:合成生成能解决一部分问题,但它不是用来替代真实数据的,而是用来补充分布、覆盖边界、降低共享门槛的。能不能用出价值,取决于你对目标分布的理解和对生成质量的验收标准。
1. 硬件保证的真实困境:不是缺数据,是缺能共享的数据
1.1 数据稀缺和保密性为什么总是同时出现
先看硬件保证里最常碰到的数据形态。RTL 代码用于设计验证和逻辑分析;门级网表用于结构检查、配置比对和木马检测;测试向量用于功能测试和故障覆盖率分析;JTAG 扫描链数据、故障注入日志用于调试和边界扫描验证;功耗波形和电磁轨迹则多用于侧信道分析。这些东西在工程实践中天天用,但真正能公开拿来做研究和工具验证的样本非常少。
原因有两层。第一层是稀缺。硬件安全不像图像分类,可以随便从公开数据集里取几万张图。芯片设计细节通常被当作商业秘密,网表和版图更是不会发给外部团队。即使厂商愿意配合,数据交付也要经过审批、脱敏、签订保密协议,周期很长。另一方面,硬件安全相关的数据标注往往需要资深工程师才能完成,比如判断某个异常结构是不是硬件木马,或者确认某段测试向量是否覆盖了特定故障,普通标注人员做不了,成本自然高。
第二层是保密。网表里往往包含电路拓扑、模块划分、IP 使用情况,这些信息能反推出设计思路。RTL 代码更容易泄露算法实现。位流文件和版图数据一旦外流,可能导致产品被克隆或反向分析。这些问题导致一个很尴尬的现状:真正有价值的真实数据散落在各个厂商内部,研究机构和第三方检测机构能拿到的只是少量脱敏片段。数据又少又不能共享,等于双重受限。
可以用下面这张表概括常见硬件数据的可用性:
| 数据形态 | 主要用途 | 共享难度 | 公开样本情况 |
|---|---|---|---|
| RTL 代码 | 逻辑验证、结构分析 | 高 | 极少 |
| 门级网表 | 木马检测、结构比对 | 很高 | 很少 |
| 测试向量 | 功能覆盖、故障测试 | 中 | 有一些 |
| 故障注入日志 | 调试、安全性评估 | 高 | 极少 |
| 功耗/电磁波形 | 侧信道分析 | 中高 | 少 |
| 版图/GDSII | 物理验证、盗版检测 | 极高 | 非常少 |
1.2 合成数据能同时缓解这两个问题吗
合成数据的价值,不在于替代真实数据,而在于把“数量不足”和“保密受限”这两个问题拆开处理。
数量不足,可以通过程序化生成器不断产出新样本,并且主动控制类别比例和边界条件。比如真实样本里某类异常结构只有 50 条,你可以让生成器按同类规则产出 1000 条,把模型训练时最缺的那部分补上。
保密受限,则可以通过“只传规则、不传原始样本”的方式缓解。规则型生成器本身不携带具体公司项目的敏感内容,而是描述结构特征、分布范围和约束条件。生成出来的数据即使对外提供,也不会直接暴露原始网表或 RTL。
但这里要打个预防针:合成生成不能解决数据保密中的所有问题。如果生成过程直接对真实样本做了复制,或者生成模型记住了训练样本的某些隐私特征,那么合成数据同样会携带敏感信息。只能说,合成生成给了我们一个更容易控制数据边界的工作方式,具体能不能做到保密,取决于生成器的设计和后期的隐私检查。
我更建议把合成生成定位在三个阶段:模型训练、工具链验证、流程预演。真正涉及到最终认证和产品级安全声明,还是需要基于真实样本的独立测试。
2. 合成生成不是伪造数据:先想清楚边界
2.1 合成数据在硬件保证里能做什么
很多人一听到“合成数据”,第一反应是“造假”。在硬件保证场景里,这不是造假,而是按照真实数据的统计规律和结构约束重新生成样本。它大约能承担四类任务。
第一类是扩充训练集。尤其是在做硬件木马检测、异常结构识别、故障分类这类有监督任务时,真实正样本往往非常稀少,合成数据可以补足类别不平衡。
第二类是覆盖稀有边界。真实数据里很多极端情况出现频率很低,比如极端时序条件下的电压异常,或者某些罕见门级电路拓扑。生成器可以专门把这类边界条件作为配置参数,主动产出一批样本,用来测试模型或工具链在边界上的表现。
第三类是工具链验证。硬件分析工具在上线前需要大量结构合法的输入做回归测试。如果用真实项目数据,要考虑保密和授权;如果自己写测试样本,工作量又大。规则型合成生成就能快速生成一批符合语法的 RTL 或网表结构,先验证工具能跑通、能输出、能报错。
第四类是流程预演。新入职工程师或新合作团队在接触真实敏感数据之前,可以先拿合成数据演练完整流程。这样既能熟悉工具链,又能避免敏感数据在初期调试阶段被反复拷贝。
2.2 三种最容易被误解的能力
误解一:合成数据等于真实数据。不成立。合成数据即使在统计分布上非常接近真实数据,也缺少真实数据里那些难以建模的细节,比如制造工艺波动、环境噪声、供应商工具链导致的隐性差异。所以合成数据只能用于辅助训练和验证,不能替代真实样本做验收。
误解二:合成数据等于脱敏数据。这是我见过最危险的判断。生成模型在训练过程中可能记住某些真实样本的敏感细节,并在生成时重现出来。如果原始样本来自某些未公开设计,生成结果就可能携带同样的敏感信息。合成数据可以降低共享门槛,但不代表它可以自动做到隐私保护。
误解三:生成结果看起来像,就说明方案有效。很多团队用到生成对抗网络后,只看生成样本的图形或波形“像不像”,就认为任务完成。实际上,硬件保证更关心下游任务能否受益。检测模型精度是否提升、工具链是否覆盖更多结构、故障覆盖率是否增加,这些才是真正的判断标准。如果只是生成结果好看,下游任务没有任何变化,说明生成流程和业务目标没有对齐。
2.3 怎么判断合成数据有没有价值
判断标准可以拆成三组问题。
分布是否接近真实数据。计算特征维度的均值、方差、取值范围和类别比例,比较真实样本与合成样本的差异。这里的接近不是“完全一致”,而是关键特征没有明显偏移。
结构是否合法。RTL 能不能通过语法检查,网表能不能通过结构规则校验,波形是否满足时序约束。如果生成的数据根本过不了工具链的结构检查,下游任务就无法使用。
任务是否真的受益。用同样的模型结构分别训练“仅真实样本”和“真实+合成样本”,再在独立的真实测试集上对比效果。如果合成数据带来明显收益,说明它提供了有效信息;如果收益为负,就说明合成样本的分布偏移或噪声干扰超过了价值。
注意:合成数据不能用来证明真实硬件是安全的。它解决的是算法训练和工具验证阶段的数据可用性问题,不是最终的产品安全结论。
3. 落地流程:从项目目标到合成数据验收
3.1 第一步:把目标转成可量化的分布要求
不要一上来就写生成器或训练模型。先回答三个问题:你最终要做什么任务,需要哪些关键特征,现有真实样本在这些特征上的分布是什么样。
举例来说,如果任务是识别网表中的可疑逻辑结构,你要先明确可疑结构的定义,包含哪些门类型、连接模式、层级关系、触发条件。然后把这些定义转成可量化的字段,比如节点数量、扇入扇出、逻辑深度、特征模式出现次数。只有这些字段被定义清楚,生成器才知道该按什么规则出样本。
这一步最容易被忽略但极其重要。很多团队直接拿一个开源生成模型来跑,结果生成的数据分布和实际业务场景差距很大。原因不是生成模型不行,而是输入的目标分布没有约束。建议先对真实样本做一次描述性统计,至少包括:类别数量、每类样本量、特征取值区间、缺失值比例。
3.2 第二步:根据数据形态选择生成策略
数据形态决定了首选的生成方法。
结构化的硬件设计数据,比如网表、RTL、逻辑连接关系,优先考虑规则驱动生成器。原因很简单:这类数据有严格的语法和结构约束,规则驱动生成器可以保证输出结构合法。你可以定义模板、定义连接规则、定义变异方式,然后随机组合。
高维连续信号,比如功耗波形、电磁轨迹、时序数据,可以先用数据增强,比如加噪声、缩放、时间偏移。如果真实样本量足够大,再考虑生成模型。这里说的“足够大”没有绝对标准,但至少能支撑一个稳定的训练过程。
小样本、高敏感场景,最适合的做法是先做规则驱动生成,再用少量真实样本做分布校准。不要直接用大型生成模型,因为样本量太少时,生成模型很容易过拟合,反而记住原始样本,制造出新的隐私风险。
3.3 第三步:生成、过滤、标注与验收
生成不能只跑一次就算完。我一般会先把生成量放大到实际需求的两到三倍,然后做过滤。
过滤规则包含三部分。第一部分是结构合法性,比如 RTL 能通过编译语法检查、网表能通过拓扑约束检查;第二部分是业务合理性,比如样本是否落入目标分布区间、是否符合预期的特征组合;第三部分是去重,去掉重复度过高的样本,保留多样性。
标注环节可以尽量自动化。如果定义好了可疑特征模式,就可以按规则自动打标。自动打标之后要人工抽检一部分,重点看边界样本:特征刚好落在阈值附近的样本,往往是最容易误标的地带。
验收环节分成小规模和大规模两轮。先用合成数据和真实数据各拿一小部分跑通整个下游流程,确认数据格式、接口、工具链没有问题;再扩大生成量,进行完整的对比实验。
注意:不要用合成数据污染测试集。测试集必须来自真实数据,并且合成数据在生成时不能参考测试集的分布细节,否则你评估出来的性能会虚高。
4. 方法选型:规则驱动、数据增强还是生成模型
4.1 三类方法的适用边界
硬件保证场景里,合成生成的方法大致可以分成三类。它们之间不是替代关系,而是递进关系。
规则驱动生成器适合结构化数据,比如网表、RTL、配置信息。优点是产出稳定、可控、易于解释,适合新手快速起步。缺点是规则设计需要业务理解,如果规则定义得太简单,生成样本的多样性会不足。
数据增强适合已有样本的情况。方法是把真实样本做小幅变换,比如位翻转、加入噪声、改变时序参数、插入冗余结构。优点是成本低、实现快。缺点是增强后的样本和原样本高度相关,模型很容易学到重复模式,对泛化能力提升有限。
生成模型适合数据量大、形态复杂的场景。生成对抗网络、变分自编码器、扩散模型都有人尝试过。优点是有机会学到更深层的特征分布。缺点是对训练数据量、算力和调参经验要求高。低配置环境不建议优先选择。
| 方法 | 适用数据 | 样本量要求 | 主要风险 | 迭代成本 |
|---|---|---|---|---|
| 规则驱动 | RTL、网表、结构化特征 | 较低 | 规则过窄、多样性不足 | 低 |
| 数据增强 | 波形、向量、日志 | 低 | 样本相关性高、收益有限 | 低 |
| 生成模型 | 高维信号 | 较高 | 训练不稳、隐私记忆 | 高 |
4.2 关键参数和实验节奏
不管你选哪种方法,有几个参数都要提前定下来。
生成数量先不要贪多。我建议第一轮生成的合成样本占训练样本的 10% 到 20%,先看下游任务收益,再逐步提升。直接把合成样本比例拉到 80%,一旦生成分布存在细微偏移,模型就可能被带偏。
迭代轮次要看生成器收敛情况。规则驱动生成器不存在收敛问题,主要看随机种子和规则范围。数据增强主要看变换幅度,比如位翻转的比例、噪声标准差。生成模型要看训练损失和生成样本质量,通常每隔固定轮次抽一批样做人工检查。
硬件资源决定了你的选择边界。只有 CPU 的机器,优先做规则驱动和数据增强。有 GPU 但显存有限,可以把生成模型的输入维度降低,缩小批量大小。不要一上来就开最大批量,先跑通再调。
4.3 一个简单的评估指标组合
评估合成数据不能只看一个指标。我建议组合三组指标。
第一组是分布接近度。对数值特征可以用 KS 检验或 Wasserstein 距离;对类别特征可以对比类别分布直方图。核心是确认合成样本没有在关键维度上发生明显偏移。
第二组是下游任务收益。固定模型和测试集,分别比较“真实数据训练”和“真实+合成数据训练”的精度、召回、F1 或故障覆盖率。收益明显提升,说明合成数据有价值;提升很小,说明补充的信息不多;效果下降,说明分布偏移抵消了数据量增加带来的收益。
第三组是结构合法率。统计生成样本通过结构校验的比例,以及结构校验失败样本被过滤后的分布变化。如果过滤后保留的样本数量不足,说明生成规则或模型效果有问题,需要回到生成阶段调整。
5. 案例串联:扩充硬件木马检测模型的训练数据
5.1 场景与初始条件
假设你手里有几百条从不同测试项目中收集的网表结构特征,需要训练一个对可疑逻辑结构进行分类的模型。这里说的特征不是原始网表文件,而是已经抽取好的向量,比如节点数量、连接关系、逻辑深度、扇入扇出系数、功耗测试结果等。
问题在于:正常样本有几百条,带可疑特征的样本只有几十条,类别极不平衡。直接训练的话,模型很容易把所有输入都判断为正常样本。这种情况下,合成生成就是合理的补充手段。
初始条件里要注意,真实样本数量虽然少,但足以统计出特征分布的均值、方差和取值范围。如果连几十条都没有,那就不适合用统计方法,可能要先靠规则模板从零构造。
5.2 合成生成与验证步骤
我的做法分几步走。
第一步,对真实样本做分布摘要。统计正常样本和可疑样本在每个特征维度上的均值和标准差,确认哪些特征对分类最有区分度,哪些特征噪声很大。
第二步,写规则生成器。正常样本生成规则可以包含特定范围内的节点数量、连接模式、逻辑深度组合。可疑样本生成规则则重点加入异常模式,比如触发器可控性异常、高扇出信号、低测试覆盖率节点。
第三步,生成后进行结构合法性和范围过滤。生成量可以放大,比如正常样本生成 4000 条,可疑样本生成 800 条,过滤后保留有效样本。
第四步,划分训练测试集。真实样本中留出独立测试集,合成样本只能混入训练集,不能混入测试集。
下面是一段流程示意,实际实现要按你的数据格式调整:
# 流程示意:真实分布摘要 -> 规则生成 -> 过滤 -> 合并训练 real_stats = describe(real_samples) # 统计真实样本分布 syn_normal = gen_by_rules("normal_rules.yaml", 4000) # 正常样本生成 syn_susp = gen_by_rules("suspicious_rules.yaml", 800) # 可疑样本生成 syn_all = filter_valid(syn_normal + syn_susp) # 结构校验 + 范围过滤 train_data = merge(real_samples[:300], syn_all) # 只合并入训练集 test_data = real_samples[300:] # 测试集保持真实第五步,做对比实验。用相同的模型结构,分别训练“仅真实样本”和“真实加合成样本”,再在同一个真实测试集上评估。重点看可疑类别的召回率是否提升,以及正常类别的误报率有没有明显恶化。
我把流程固化成一个经验:先跑通一轮最小实验,确认合成数据能被模型消费、测试集是干净的,再扩大生成量。不要跳过小规模验证直接上全量,否则一旦格式或规则有问题,浪费的是大把生成时间。
5.3 这个案例里最容易忽略的点
最容易忽略的是测试集污染。很多团队在混合数据时不小心把合成样本混进验证集,或者生成时参考了测试集的统计信息,结果评估出来的指标非常漂亮,上线后立刻打回原形。
其次是正样本太少时,要提前确认评估指标。如果只看总体准确率,不平衡数据下很容易虚高。建议重点关注可疑类别的召回率和精确率,必要时单独看该类别在阈值附近的表现。
还有一个经常被忽略的地方:合成样本的分布偏移会随着生成器迭代而被放大。不是每轮迭代都会让分布更接近真实数据。每次调整生成规则后,都要重新做分布对比,不能只盯生成器的损失曲线。
6. 常见翻车点:从现象反推原因
6.1 性能不升反降
现象:加入合成数据后,模型在真实测试集上的效果反而变差了。
优先检查生成数据分布。最典型的原因是合成样本并不符合真实分布的边界条件,比如正常样本生成时把某些参数范围定得太宽,导致模型学到大量无意义的组合。解决办法是先把合成样本比例降回去,再逐项对比特征分布。
另外一个原因是标签噪声。自动标注规则有可能把边界样本标错,合成数据本身没问题,但标签是错的,训练时带偏了整个模型。检查方式是按置信度排序,抽看一批边界样本的人工标注结果。
6.2 多样性崩塌和分布偏移
现象:生成样本看起来很多,但去重分析后发现大量样本非常相似,多样性很低,或者各类别比例严重失衡。
规则驱动生成器容易出现多样性不足,因为随机范围可能限定得太窄。可以增加随机扰动维度,或者在规则里加入更多合法组合。生成模型则容易陷入模式坍塌,尤其是样本量少或训练不稳定时。检查方式很简单:随机抽几十条样本,做特征间的相似度计算,看看重复比例。
还有一种情况是分布偏移。合成数据和真实数据在某个特征维度上差异很大。这往往不是生成器的问题,而是目标分布定义不准确。回到 3.1 的步骤,重新确认统计摘要和业务约束。
6.3 排查顺序
遇到任何生成数据导致的问题,我建议按下面这个顺序排查,不要先怀疑模型。
先看生成质量指标。分布距离、结构合法率、多样性指标是否异常。
再看真实数据和合成数据的重叠情况。如果两者特征分布几乎完全重合且合成数据量很大,模型相当于反复学习了同样的信息;如果几乎不重合,模型可能学到了错误的偏移分布。
再看训练和测试划分。确认测试集没有混入合成样本,确认特征归一化时没有把两组数据合并计算统计量。
最后看下游任务本身的稳定性。小样本下模型效果波动很大,单次实验不能说明问题。可以多次重跑,观察收益是否稳定。
| 现象 | 首选排查项 | 常见原因 |
|---|---|---|
| 效果不升反降 | 合成样本分布对比 | 分布偏移或标签噪声 |
| 多样性不足 | 去重率和相似度 | 规则范围太窄、模式坍塌 |
| 指标虚高但线上失效 | 测试集污染检查 | 合成数据混入测试集 |
| 生成器损失很低但效果差 | 下游任务收益对比 | 只拟合分布,无用信号 |
7. 保密合规和工程化落地建议
7.1 合成数据不等于脱敏数据
我特别想强调这一点。生成模型在训练过程中有记忆能力,如果原始样本量少,模型很可能把某些样本原样或近似重现。这在硬件保证场景里非常危险,因为原始样本可能包含未公开设计细节。
所以无论你使用哪种生成方法,都要做隐私检查。做法至少有三种:对生成样本做人工抽检,比对是否存在和真实样本高度相似的内容;对特征字段做最小化处理,只保留任务需要的关键字段,不生成无关细节;条件允许时引入差分隐私训练或噪声注入,降低模型对外部敏感字段的依赖。
7.2 长期维护需要盯的三件事
合成数据一旦进入长期使用,维护成本不比真实数据低。有三件事必须提前安排。
第一是版本管理。生成规则、生成模型权重、随机种子、原始样本版本都要记录。硬件数据的特征分布可能会随工艺节点变化,如果规则不变,后期生成的样本可能早就偏离新场景。
第二是数据血缘。每一条合成样本要能追溯到生成来源。比如这一批样本是哪条规则生成的,用了哪个随机种子,经过了哪些过滤步骤。没有血缘关系,排查问题时根本不知道该从哪里下手。
第三是定期重估。不要认为合成数据生成一次就能一直用。每隔一段时间,用新收集的真实数据重新验证合成数据的分布一致性。如果差异扩大,就要更新生成规则或重新训练生成模型。
7.3 个人建议
如果让我给一个务实的建议,我会说:先从规则驱动和数据增强开始。很多硬件保证任务本身是结构化数据,规则驱动生成器完全够用,成本低、可控性强、易解释。生成模型可以作为第二阶段的选择,在确实需要高维信号建模、并且真实样本数量足够的情况下再引入。
与其追求生成数据的数量,不如先把目标分布定义清楚,把测试集边界守住,把隐私检查纳入固定流程。合成生成在硬件保证领域能否发挥价值,不取决于生成模型多先进,而取决于你对任务的理解和对生成质量的验收机制。先把这层地基打好,合成数据才能真正成为缓解数据稀缺和保密限制的可用工具。