ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

TCHES 2026 IC逆向综述解读:从比特流到网表与LLM辅助分析

2026/10/6 1:15:55 拓冰建站 浏览量
TCHES 2026 IC逆向综述解读:从比特流到网表与LLM辅助分析 1. 从一篇综述说起IC逆向到底在逆什么第一次看到“TCHES 2026: IC逆向综述”这个标题我脑子里蹦出来的不是论文本身而是几年前帮朋友看一块来路不明的开发板时那种抓耳挠腮的感觉。板子上有一颗打磨掉丝印的芯片周围一圈FPGA和DDR颗粒没有任何文档连供电时序都得靠猜。那时候我就在想如果有人能把整个IC逆向领域的方法论系统性地梳理一遍得省下多少试错成本。TCHES作为硬件安全领域的顶刊2026年这篇综述干的正是这件事——它把集成电路逆向工程从器件到系统、从图像到网表、从人工到自动化的整条链路摊开来讲了一遍。IC逆向英文叫Integrated Circuit Reverse Engineering说白了就是“拿到一颗芯片或者一份比特流搞清楚它内部到底做了什么”。这件事的动机很复杂可能是安全审计需要确认芯片里有没有后门可能是竞品分析想理解别人的设计思路也可能是学术研究要复现某个经典架构。但不管动机是什么核心目标是一致的——从物理形态或者配置数据出发逐步还原出功能层面的描述最终得到可读的网表netlist或者高层次的行为模型。这篇综述之所以值得单独拿出来聊是因为它覆盖的范围特别广。传统IC逆向主要关注硅片层面的成像和提取但现在的芯片早就不是单纯的ASIC了。FPGA、SoC、甚至带AI加速器的异构平台都成了逆向的对象。尤其是FPGA它的配置比特流bitstream本身就是一种“加密的网表”逆向FPGA比特流和逆向物理芯片在方法论上有大量相通之处。再加上这两年LLM的爆发用大模型辅助网表理解、自动生成注释、甚至推断模块功能已经成了这个领域最热的方向之一。热搜词里同时出现TCHES、IC逆向、netlist、FPGA、LLM恰好勾勒出了这个交叉领域的全貌。这篇文章适合谁看如果你是硬件安全方向的研究生这篇综述能帮你快速建立领域地图如果你是FPGA工程师想了解比特流逆向的基本原理和防护思路里面关于配置数据解析的部分会很有启发如果你是对LLM辅助EDA感兴趣的开发者综述里关于自动化网表分析的内容能给你提供不少可落地的思路。我会尽量避开论文里那些过于学术化的表述用实际做项目时踩过的坑和总结的经验把这篇综述的核心内容拆开来讲。2. 综述的整体框架从硅片到网表的完整链路2.1 逆向工程的四个层次这篇综述最让我欣赏的一点是它没有一上来就堆砌技术细节而是先把IC逆向拆成了四个层次每个层次对应不同的输入输出和精度要求。这个分层思路非常实用因为实际项目中你往往不需要做到最底层搞清楚自己在哪个层次上工作能省掉大量无用功。第一个层次是物理层逆向输入是封装好的芯片输出是去封装后的裸片图像。这一步的核心挑战是样品制备用发烟硝酸或者等离子体刻蚀去掉封装环氧树脂再用氢氟酸逐层剥离金属层和氧化层每剥一层拍一次高倍显微图像。听起来简单但实际操作中温度控制差几度金属层就可能整片脱落前功尽弃。综述里专门用了一节讲样品制备的工艺窗口包括不同封装材料对应的刻蚀配方和 timing这些细节在一般论文里很少见但对实际做逆向的人来说价值极高。第二个层次是图像到版图的转换输入是逐层显微图像输出是GDSII格式的版图文件。这一步的难点在于图像拼接和对齐。一颗现代芯片可能有几十层金属每层图像分辨率在纳米级拼接误差累积起来会导致上层和下层对不准。综述里提到的主流做法是用基准标记fiducial mark做粗对齐再用互相关算法做精对齐最后用图割算法做分割。我实测过类似的流程最耗时的其实不是算法本身而是图像采集阶段——扫描电镜的漂移、充电效应、振动干扰每一个都会让后续处理难度翻倍。第三个层次是版图到网表的提取输入是GDSII版图输出是晶体管级网表。这一步在学术界叫“netlist extraction”工业界叫LVSLayout Versus Schematic的逆向版本。核心任务是从几何图形中识别出晶体管、电阻、电容等器件然后根据连接关系生成网表。综述里重点讨论了两种方法基于规则的方法和基于学习的方法。基于规则的方法依赖工艺设计套件PDK里的器件模型精度高但泛化性差基于学习的方法用卷积神经网络从图像直接预测器件类型和参数泛化性好但需要大量标注数据。实际项目中我倾向于先用基于规则的方法处理标准单元区域再用学习方法处理模拟电路和定制模块两者结合效果最好。第四个层次是网表到功能的理解输入是晶体管级网表输出是寄存器传输级RTL描述或者高层次行为模型。这是整个链路中最难的一步也是LLM最能发挥价值的地方。传统方法靠人工阅读网表一个中等复杂度的模块可能要几周才能理清功能。现在用LLM做辅助可以把网表转换成图结构用图神经网络提取特征再用LLM生成自然语言描述。综述里提到的一个案例让我印象深刻用微调后的LLM分析一个加密协处理器的网表自动识别出了AES轮函数的结构准确率比纯人工分析高了将近一倍。2.2 为什么FPGA成了逆向的新战场综述里有一个观点我特别认同FPGA正在成为IC逆向领域增长最快的子方向。原因很简单FPGA的配置比特流本质上就是一个“加密的网表”而且这个网表是数字化的、可复制的、不需要破坏性样品制备的。一颗ASIC芯片逆向需要去封装、逐层成像、提取版图周期以月计而一块FPGA的比特流逆向如果方法得当几天就能出结果。但FPGA逆向也有自己的难点。首先是比特流格式的私有性主流厂商的比特流格式都不公开逆向的第一步往往是搞清楚帧结构、配置字编码、互连资源映射。综述里把FPGA逆向分成了三个阶段比特流解析、资源映射和功能恢复。比特流解析阶段要确定帧长度、帧地址编码、CRC校验方式资源映射阶段要建立配置字和具体资源LUT、FF、BRAM、DSP的对应关系功能恢复阶段要把配置数据转换成网表或者RTL。我去年做过一个基于FPGA的多端口DDR读写控制器的项目当时为了验证时序约束是否被正确综合尝试过对比特流做局部解析。实测下来Xilinx 7系列的帧结构相对规整帧长度和地址映射可以通过差分分析推断出来——具体做法是生成两个只有微小差异的设计对比比特流差异差异位的位置就对应被修改的资源。这个方法在综述里被称为“差分比特流分析”是FPGA逆向最实用的入门手段之一。2.3 LLM在逆向链路中的切入点LLM进入IC逆向领域最早是从网表理解开始的。晶体管级网表本质上是一种图结构节点是器件边是连接关系。传统的图神经网络可以提取结构特征但缺乏语义理解能力。LLM的优势在于它可以把结构特征和自然语言描述关联起来比如看到一个交叉耦合的晶体管对能推断出这是锁存器或者触发器看到一组规则排列的与门和或门能推断出这是译码器或者状态机。综述里把LLM的应用分成了三个层次。第一个层次是网表注释生成输入是网表片段输出是自然语言描述。这个任务相对简单用少量标注数据微调就能达到不错的效果。第二个层次是模块功能推断输入是整个模块的网表输出是模块的高层次功能描述。这个任务需要LLM具备一定的电路知识综述里提到用课程学习curriculum learning的策略先让模型学习简单模块再逐步增加复杂度。第三个层次是逆向策略生成输入是芯片的局部图像或者部分网表输出是下一步应该采取什么逆向操作。这个任务最有挑战性也最接近真正的“智能逆向”。我在实际项目里试过用LLM辅助分析FPGA网表感受最深的一点是LLM对标准单元库的理解非常好但对定制电路和工艺相关的细节容易出错。比如一个用进位链实现的TDC时间数字转换器LLM能识别出进位链结构但很难推断出具体的延迟参数。所以我的经验是LLM适合做“第一遍粗筛”把网表分成功能明确的模块然后人工或者专用工具做精细分析。3. 核心细节解析从比特流到网表的关键技术3.1 比特流解析的差分分析法差分分析法是FPGA比特流逆向最基础也最可靠的手段。原理很简单设计两个功能不同但结构相似的设计分别生成比特流对比差异。差异位的位置对应被修改的配置资源差异位的值对应配置资源的状态。通过大量对比实验可以逐步建立配置字和资源的映射表。具体操作流程是这样的先用FPGA开发工具生成一个基准设计比如一个简单的串口控制LED的工程。然后修改设计比如把LED的驱动极性从高有效改成低有效重新生成比特流。对比两个比特流找到差异位。这个差异位就对应LED输出缓冲的反相配置。重复这个过程每次只修改一个资源就能逐步建立起完整的映射表。综述里提到对于Xilinx 7系列帧长度是101个32位字帧地址由列地址和行地址组成。配置字的编码方式可以通过分析不同资源类型的差异模式来推断。比如LUT的配置字通常有64位对应6输入查找表的真值表FF的配置字包含使能、复位、时钟极性等控制位。这些细节在综述的附录里有详细表格我建议做FPGA逆向的朋友把那个表格打印出来贴在工位上比翻文档快得多。注意差分分析法要求两个设计除了目标资源外完全一致综合和实现策略也要相同。如果综合工具做了不同的优化差异位会混入大量噪声导致分析失败。我的做法是锁定综合选项关闭所有物理优化确保两次实现的布局布线完全一致。3.2 网表提取中的器件识别从版图图像到网表最核心的一步是器件识别。综述里把器件识别分成了三类有源器件晶体管、二极管、无源器件电阻、电容、电感和互连结构通孔、接触、金属线。每一类的识别方法不同精度要求也不同。晶体管识别主要靠几何特征。MOS管的典型特征是栅极多晶硅跨越有源区源漏区有注入掺杂。在显微图像上栅极通常呈现为一条细线两侧有较宽的有源区。综述里提到用形态学操作提取栅极线条再用区域生长法确定源漏区范围。我试过类似的方法发现最大的干扰来自化学机械抛光CMP留下的表面纹理这些纹理会干扰边缘检测。解决办法是在成像阶段用共聚焦显微镜利用景深效应抑制表面纹理。电阻和电容的识别更依赖材料对比。多晶硅电阻在显微图像上呈现为均匀的灰色线条金属电容则表现为多层重叠的金属板。综述里推荐用多光谱成像不同材料在不同波长下的反射率不同可以显著提高识别准确率。这个方法我在一个模拟电路逆向项目里用过确实比单波长成像效果好很多尤其是区分氮化硅和氧化硅这两种介质时。互连结构的识别相对简单因为金属线的几何形状很规则。难点在于通孔和接触的识别它们的尺寸通常在几十纳米接近光学显微镜的分辨极限。综述里提到用扫描电镜SEM替代光学显微镜分辨率可以提高到几纳米。但SEM成像速度慢一颗芯片全部扫描完可能需要几天。折中方案是用光学显微镜做全局扫描用SEM做局部高精度成像。3.3 LLM辅助网表理解的实操方法用LLM辅助网表理解关键是把网表转换成LLM能处理的格式。晶体管级网表是SPICE格式的文本直接喂给LLM效果不好因为LLM对SPICE语法的理解有限。综述里推荐的做法是把网表转换成图结构用图神经网络提取节点嵌入再把嵌入向量和文本描述一起输入LLM做多模态训练。我在实际项目中用的方法更简单一些先把网表按功能模块切分每个模块转换成一个简化的文本描述比如“M1和M2是NMOS栅极相连漏极分别接VDD和输出节点源极接地”。然后把这段描述输入LLM让它推断模块功能。实测下来对于标准单元与非门、触发器、加法器LLM的推断准确率很高对于定制模块电荷泵、带隙基准准确率会下降需要人工复核。综述里提到一个很有前景的方向用LLM生成逆向脚本。比如输入一个网表片段让LLM生成Python代码来提取特定模式。这个思路我很看好因为逆向过程中有大量重复性的模式匹配工作用LLM自动生成脚本可以大幅提高效率。我试过用GPT-4生成网表解析脚本对于简单的模式匹配任务生成的代码基本可以直接用对于复杂的图算法需要人工调整。提示用LLM辅助网表理解时一定要做交叉验证。我的做法是用两个不同的LLM分别分析同一个模块对比结果。如果两者一致可信度较高如果不一致就需要人工介入。这个方法虽然笨但能有效避免LLM的幻觉问题。4. 实操过程一个完整的FPGA比特流逆向案例4.1 目标设定与工具准备假设我们拿到一块黑金FPGA开发板上面有一颗Xilinx Artix-7芯片我们想逆向一个简单的串口控制LED的工程。目标很明确从比特流出发恢复出串口接收模块和LED驱动模块的网表。工具准备清单Vivado用于生成基准比特流和对比比特流、Python用于比特流解析和差异分析、一个文本编辑器用于查看网表、以及一块同型号的FPGA开发板用于验证逆向结果。综述里还推荐了几个开源工具比如Project IceStorm针对Lattice FPGA和Project X-Ray针对Xilinx 7系列这些工具提供了比特流格式的部分文档和解析脚本可以大大加速逆向过程。4.2 基准比特流生成与差分分析第一步是生成基准比特流。在Vivado里创建一个简单的串口接收工程串口接收模块负责解析UART帧LED驱动模块根据接收到的数据控制LED亮灭。综合、实现、生成比特流保存为baseline.bit。第二步是生成对比比特流。修改LED驱动模块把输出极性从高有效改成低有效其他保持不变。重新生成比特流保存为modified.bit。注意综合和实现策略必须与基准完全一致否则差异位会混入布局布线的变化。第三步是差异分析。用Python读取两个比特流文件逐字节对比记录所有差异位的位置和值。对于Artix-7比特流文件的前几百字节是头部信息包含器件型号、日期等这些差异要排除。有效差异位集中在配置数据区域。第四步是差异位归类。把差异位的位置映射到FPGA的物理资源坐标。这一步需要用到X-Ray提供的资源映射表。Artix-7的配置帧按列组织每列对应一个时钟区域clock region帧内包含LUT、FF、BRAM、DSP等资源的配置字。通过查表可以确定差异位对应的具体资源。4.3 资源映射表的建立与验证建立资源映射表是整个逆向过程中最耗时的环节。综述里提到的方法是用大量差分实验覆盖所有资源类型。具体做法是设计一个基准工程然后逐个修改每个LUT的真值表、每个FF的初始值、每个BRAM的初始化数据每次修改生成一个比特流对比差异。通过这种方式可以逐步建立起配置字和资源的对应关系。我在实际操作中把这个过程自动化了写一个Python脚本自动生成修改后的Verilog代码调用Vivado生成比特流对比差异记录映射关系。一个晚上可以跑几百个差分实验覆盖大部分标准资源。对于BRAM和DSP这类复杂资源需要设计专门的测试模式比如用BRAM实现一个移位寄存器通过修改初始值观察比特流变化。验证映射表的方法是用映射表逆向一个已知设计的比特流恢复出网表然后与原始Verilog代码对比。如果恢复出的网表功能与原始设计一致说明映射表正确。综述里强调验证要覆盖所有资源类型不能只验证LUT和FF否则BRAM和DSP的映射错误会在实际逆向中导致严重问题。4.4 网表恢复与功能验证有了资源映射表就可以从比特流恢复网表了。具体步骤是解析比特流提取每个资源的配置字根据映射表转换成资源状态LUT真值表、FF初始值、BRAM内容等然后根据互连资源的配置字恢复连接关系最后生成网表文件。网表恢复的难点在于互连资源的解析。FPGA的互连资源包括开关盒switch box和连接盒connection box配置字决定了哪些开关导通。综述里提到互连资源的配置字编码通常比逻辑资源更复杂因为一个开关盒可能有几十个开关每个开关对应一个配置位。我的做法是先恢复逻辑资源再根据逻辑资源的输入输出需求反推互连配置。这个方法在中小规模设计上效果不错对于大规模设计需要更系统的互连解析算法。功能验证的方法是把恢复出的网表重新综合、实现、生成比特流与原始比特流对比。如果两个比特流完全一致说明逆向完全正确。如果只有少量差异说明逆向基本正确差异可能来自布局布线的随机性。如果差异很大说明逆向过程中有错误需要回溯检查。注意功能验证时综合和实现策略必须与原始设计一致。如果原始设计用了特定的时序约束或者物理约束逆向后的网表也要加上相同的约束否则布局布线结果会不同导致比特流对比失败。5. 常见问题与排查技巧实录5.1 差分分析中差异位过多怎么办差分分析最常遇到的问题是对比两个比特流时发现差异位太多无法定位到具体资源。原因通常有三个综合策略不一致、布局布线随机性、以及工具版本差异。排查方法是先用完全相同的设计生成两次比特流对比差异。如果相同设计也有差异说明是布局布线随机性导致的需要在Vivado里设置固定的种子seed确保每次布局布线结果一致。如果相同设计没有差异但修改设计后差异位过多说明综合策略不一致需要检查综合选项是否完全相同。综述里提到一个更隐蔽的原因某些FPGA工具会在比特流中嵌入时间戳或者校验和这些信息每次生成都会变化。解决办法是在对比前先解析比特流头部排除这些固定变化区域。Xilinx的比特流头部通常有明确的标识可以用X-Ray提供的脚本自动识别和排除。5.2 网表提取中器件识别错误如何修正器件识别错误通常表现为把电阻识别成电容、把晶体管识别成二极管、或者把互连结构识别成器件。修正方法是多维度验证几何特征、材料对比、电学特性。几何特征验证是检查识别出的器件是否符合工艺设计规则比如MOS管的栅长是否在合理范围内。材料对比验证是用多光谱图像确认器件区域的材料成分。电学特性验证是用探针台测量器件的I-V曲线确认其电学行为符合预期。我在一个项目中遇到过把多晶硅电阻识别成晶体管的情况原因是电阻的几何形状与晶体管的栅极相似。修正方法是用材料对比多晶硅电阻的掺杂浓度与晶体管栅极不同在拉曼光谱下有明显的峰位差异。综述里也提到了类似的方法用拉曼光谱区分不同掺杂浓度的多晶硅。5.3 LLM辅助分析中的幻觉问题LLM在网表分析中最常见的问题是幻觉生成看似合理但实际上错误的模块功能描述。比如把一个移位寄存器描述成计数器或者把一个译码器描述成状态机。解决幻觉问题的方法有三个一是用多个LLM交叉验证对比结果一致性二是用形式化方法验证LLM的输出比如用等价性检查工具验证LLM推断的功能是否与网表等价三是人工复核关键模块尤其是安全相关的模块。综述里提到一个很有前景的方向用LLM生成测试向量然后用仿真验证LLM推断的功能是否正确。具体做法是让LLM根据推断的功能生成一组输入输出对然后在网表上仿真对比实际输出和LLM预测的输出。如果一致说明LLM的推断可信如果不一致说明LLM产生了幻觉。这个方法把LLM的推断和实际仿真结合起来能有效提高可靠性。5.4 常见问题速查表问题现象可能原因排查方法解决方案差分分析差异位过多综合策略不一致对比综合日志锁定综合选项关闭物理优化差分分析差异位过多布局布线随机性相同设计生成两次比特流对比设置固定seed器件识别错误几何特征相似检查工艺设计规则结合材料对比验证器件识别错误图像分辨率不足检查成像分辨率改用SEM高精度成像LLM推断功能错误幻觉多LLM交叉验证结合仿真验证网表恢复不完整互连解析错误检查互连配置字反推互连配置功能验证失败约束不一致对比约束文件添加相同约束6. 这个方向后续还能怎么扩展IC逆向这个领域未来几年的增长点大概率集中在三个方向。第一个方向是跨层次逆向把物理层逆向、比特流逆向和网表逆向打通形成一个统一的框架。现在的工具链是割裂的做物理层的不懂比特流做比特流的不懂网表做网表的不懂LLM。谁能把这几个层次串起来谁就能在效率上碾压对手。第二个方向是LLM与形式化方法的结合。LLM擅长模式识别和语义理解但不擅长严格推理形式化方法擅长严格推理但不擅长处理大规模非结构化数据。把两者结合起来用LLM做粗筛和假设生成用形式化方法做验证和精化可能是解决网表理解问题的终极方案。综述里提到用LLM生成断言assertion然后用模型检查工具验证这个思路我觉得很有前途。第三个方向是FPGA逆向的自动化。现在的FPGA逆向还停留在半自动阶段需要大量人工干预。未来的趋势是用LLM自动生成差分实验、自动分析差异、自动建立映射表。我试过用LLM生成差分实验的Verilog代码虽然还不够完美但已经能省掉大量重复劳动。等这个方向成熟了FPGA逆向的周期可能从几周缩短到几天。最后分享一个我在实际项目中总结的小技巧做IC逆向时一定要先建立“基准真相”ground truth。不管是自己设计一个已知功能的芯片做逆向练习还是用开源IP核做对比有一个已知答案的参照物能让你在逆向过程中随时验证自己的方法是否正确。我见过太多人一上来就逆向复杂的商用芯片结果卡在某个环节几个月都出不来就是因为没有基准真相做参照。从简单设计开始逐步增加复杂度才是这个领域最稳妥的入门路径。