
硬件保证这个方向有一段时间特别让人头疼网表、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 个人建议如果让我给一个务实的建议我会说先从规则驱动和数据增强开始。很多硬件保证任务本身是结构化数据规则驱动生成器完全够用成本低、可控性强、易解释。生成模型可以作为第二阶段的选择在确实需要高维信号建模、并且真实样本数量足够的情况下再引入。与其追求生成数据的数量不如先把目标分布定义清楚把测试集边界守住把隐私检查纳入固定流程。合成生成在硬件保证领域能否发挥价值不取决于生成模型多先进而取决于你对任务的理解和对生成质量的验收机制。先把这层地基打好合成数据才能真正成为缓解数据稀缺和保密限制的可用工具。