IC逆向全链路解析:从物理拆解到网表恢复的硬件安全基石
发布时间:2026/10/2 6:33:41 锦皓数字建站

我最近在整理一份关于IC逆向的技术综述原本是给组里新人做内部培训用的材料梳理过程中发现不少内容值得公开分享于是就有了这篇博客。标题里的TCHES 2026并不是我看到了什么内部录用名单而是我正在围绕TCHES的征稿方向做投稿前的调研越调研越明显的一个感受是IC逆向集成电路逆向工程在密码硬件与嵌入式安全这个圈子里已经从小众技能变成了基础设施级能力。TCHES的全称是Transactions on Cryptographic Hardware and Embedded Systems属于IACR旗下的期刊与CHES学术会议关系紧密是硬件安全领域最受认可的发表平台之一。凡是和芯片、FPGA、智能卡、物联网设备上的密码实现相关的研究TCHES里基本都能找到。过去几年我陆续读了不少TCHES上的文章越来越觉得很多论文都隐含一个逆向的前置步骤要么作者逆向了一颗芯片用来验证攻击要么逆向出网表来对比逻辑锁定方案的强度要么用逆向得到的内部结构来解释侧信道泄漏的来源。所以我想与其零散地追着论文看不如把IC逆向整条技术链路系统地梳理一遍。这篇综述我不会简单地列出工具A、工具B然后草草收尾而是想从底层逻辑讲清楚一颗芯片从没拆封的塑料封装到最后恢复出可被EDA工具读取的网表中间每一步究竟在做什么、为什么必须这么做、哪些环节最容易翻车。我会穿插一些自己在实际项目中踩过的坑。写之前我给自己定了一条主线IC逆向的本质不是把芯片拆开拍照而是一条从物理世界到逻辑世界的长链路真正决定项目成败的不是显微镜或者化学试剂有多贵而是你对整条链路上每一步误差的理解和控制。1. 为什么TCHES会盯上IC逆向一个期刊和一个领域的双向奔赴1.1 TCHES的论文分布里逆向几乎无处不在TCHES的征稿范围其实不会直接写逆向工程这四个字但如果你把历年论文过一遍会发现逆向能力几乎是很多研究方向的隐性前提。我粗略梳理了一下与IC逆向擦边的论文主题大致可以分成三类它们的依赖方式还不一样论文主题逆向在其中扮演的角色逻辑锁定攻防攻击方要先通过芯片逆向恢复出目标网表才能对锁定逻辑做结构分析和密钥破解硬件木马检测需要以版图级或网表级逆向得到的参考电路为基准才能比对真实芯片里有没有多余逻辑物理攻击与侧信道逆向出的内部结构能帮助精确定位加密单元、随机数源等模块解释泄漏从哪里来这三类论文在TCHES上的数量并不少。逻辑锁定本身就是一个完整的子领域而攻击方如果不能从实际芯片中恢复网表那所有逻辑锁定攻击都只能停留在针对设计文件的仿真层面。硬件木马检测也一样——你要证明一颗芯片里被插了什么东西前提是你能把它的版图或连接关系拿到手。侧信道方向更直接很多复杂的泄漏模型最终都要回到电路布局上验证。所以可以这么说对TCHES而言IC逆向不是某个独立track它是支撑整个硬件安全研究的一根支柱。另一个容易被忽略的点是TCHES强调可复现实验。很多文章要求作者给出实测数据而实测数据往往来自对真实芯片的操作。如果作者不具备芯片逆向能力就只能停留在FPGA仿真这类工作在评审时的说服力通常会弱一截。我在组内带新人的时候也常说会做IC逆向的硬件安全研究者手里的工具箱比别人整整多了一层维度。1.2 为什么逆向能力在硬件安全里越来越关键从应用层面看IC逆向的需求大致有四类。第一专利合规分析。半导体公司经常需要在产品发布前确认某款竞品芯片是否侵犯了自己的版图专利这需要逆向出对方的版图结构做比对。第二安全审计。采购方拿到一颗标称安全的车型MCU或者金融POS芯片想确认它内部是否真的实现了所声称的防护逻辑有没有被供应商偷偷埋进去的后门这种审计离开逆向无从谈起。第三失效分析。芯片在使用中突然不工作了需要从微观层面定位是金属迁移导致的开路还是栅氧击穿导致的短路。第四硬件木马检测通过版图级比对找出设计文件之外的额外逻辑。这四类需求没有一个是可以靠猜完成的。尤其是在供应链安全和可信计算的大背景下用户拿到一颗芯片最想知道的就是它内部的真实逻辑是否和设计文档一致这颗芯片是否被恶意改造过要回答这个问题只能靠逆向。这就是为什么TCHES这样的顶级平台会持续接纳把芯片打开、把网表提出来这类工作。不是因为这些工作看起来酷而是因为它们为一整套安全结论提供了证据链。2. 芯片开盖与样品准备整个流程里最容易被低估的一步2.1 从封装到裸片的物理操作拿到一颗陌生芯片之后第一件事是开盖decapsulation。我见过很多人把这一步想得太简单以为拿着小刀或者砂纸就能把塑料封装磨开。实际上现代封装的环氧树脂很硬而且内部的金线和基板极其脆弱操作方法不对轻则把die表面划伤重则直接把相邻引线从die上扯下来整颗样品直接报废。实验室里最常用的方法是化学开盖用发烟硝酸加热到特定温度然后一滴一滴地滴在封装表面让酸溶解环氧树脂直到露出内部的die。温度一般控制在120到150摄氏度之间具体要看封装材料。每滴之间的等待时间很关键滴得太快会溢出腐蚀到引脚滴得太慢则效率极低。整个过程中要在显微镜下实时观察看到die表面出现光泽时立刻停止滴酸转入清洗环节。陶瓷封装相对好办一些可以用机械研磨甚至直接撬开但操作时同样要防碎屑掉到键合丝上。还有一些封装会涂覆黑色保护胶需要先用等离子去胶机处理。这里必须强调安全意识发烟硝酸、氢氟酸这类试剂都是高危化学品必须在通风橱里操作并戴好防酸手套和防护面罩。在设备条件和安全规范都不具备的情况下不建议任何新手自己上手我见过不止一个新人因为操作不规范把实验服烧出洞来。2.2 去层与染色化学处理直接决定成像质量开盖之后还不能直接拍照。芯片上方有一层钝化层通常是氮化硅或二氧化硅而且现代工艺芯片有好几层金属连线需要逐层去掉每去一层就拍一层这个流程叫去层delayering。去层的目标很明确既要暴露当前感兴趣的那一层又不能损伤下面一层的结构。最常见的做法是湿法蚀刻加干法蚀刻的组合。二氧化硅介质层可以用BOE去除金属连线层通常用酸性蚀刻液或离子束剥离。实际操作中如何控制恰好去掉这一层、不伤害下一层是最大的难题。每家实验室都会积累自己的祖传配方包括什么浓度、浸泡多久、是否需要超声辅助。我可以负责任地说这些参数不是从论文里抄来的而是针对手上样品反复试出来的。不同代工厂的工艺差异很大很难有放之四海皆准的配方。染色是另一个关键环节。芯片在SEM下看n型掺杂区和p型掺杂区如果不做处理图像对比度往往不够。染色常用的手段是利用某些化学试剂与硅的反应速率差异让不同掺杂区域形成不同的氧化层厚度从而在SEM图像上显现出明暗对比。这一步做得好不好直接决定了后续自动识别晶体管的难度。有的团队偏好用选择性染色来凸显特定掺杂层有的团队则用钝化处理来保持表面的平整度具体方案要结合后续成像设备来定。2.3 成像分辨率与成本权衡样品准备好之后进入成像环节。光学显微镜在0.18微米及以上的工艺上还能凑合但现代芯片很多已经进入纳米级节点必须用SEM。SEM的倍率高视场自然小。这就引出一个数学问题一颗芯片到底要拍多少张照片我经常用这个估算来说服项目负责人假设一颗芯片面积是5毫米乘5毫米也就是25平方毫米。SEM在某个合适的倍率下视场只有0.1毫米乘0.1毫米约等于0.01平方毫米。不考虑重叠的话需要2500张照片如果预留25%的重叠用于拼接实际上需要超过3000张。这还只是某一层的数量。如果这颗芯片有十层金属需要完整拼接的规模就是几万张。而且这些照片不是同一个角度拍的层与层之间还要做严格的对准工作量会进一步膨胀。设备分辨率典型视场适用工艺节点成本量级光学显微镜亚微米级毫米级0.18um 及以上低常规SEM纳米级百微米级50nm 及以上中FIB-SEM双束纳米级微米级先进节点高所以成像这一步的决策本质是成本和分辨率的权衡。你不可能一上来就把整颗芯片用最高倍率扫一遍更合理的策略是先低倍率整片扫描找到感兴趣的模块再针对ROI感兴趣区域做高倍率精细扫描。这个策略在后面章节的层次化恢复里会反复用到。2.4 物理准备阶段最容易翻的坑我个人的经验是物理准备阶段往往占整个逆向项目总时间的40%甚至更多而且这部分几乎不可自动化。新人最容易犯的错误是太着急。有一次我做一颗MCU的逆向BOE浸泡时间稍微超过了我之前总结的经验值最顶层的金属连线整片脱落原先拍过的图像全都对不上位置只能退回上一个蚀刻阶段重新处理。那一整天的时间就耗在了返工上。还有一次是染色环节。我把染色时间从标准的10秒延长到20秒想换取更强的对比度结果掺杂区被过度腐蚀晶体管的源漏边界变得模糊不清自动识别程序跑出来的结果惨不忍睹。所以我的建议是染色的目标是够用就好而不是越清楚越好。在物理准备阶段养成记录每一步参数的习惯也很重要因为一旦发现结果不对你可以反向回溯到底哪一步出了偏差。3. 版图提取与网表恢复从照片到逻辑的漫长阶梯3.1 图像拼接与对准从几千张图到一张完整版图SEM成像完成后第一件事是把几千张照片拼成完整的层图像。听起来简单做起来很有讲究。SEM在同一批次扫描时由于电子束的漂移和样品台的机械运动相邻照片之间不仅有平移还有非常微小的尺度变化甚至会有非线性畸变。如果只用简单的平移拼接接缝处会错位后续提取的连线可能是断的。实践中常用的方法是基于特征点匹配做配准比如SIFT或ORB特征。先提取相邻图像的特征点估计仿射变换参数再做全局光束法平差把整个图像集合统一到同一个坐标系下。对某些畸变特别严重的图像还要用薄板样条插值做局部修正。这一步如果做得不干净后面所有自动算法都会继承这些误差。我在自己的流程里通常会让相邻照片之间留足重叠区域重叠比例控制在20%到30%之间。理由是重叠太小特征点不足拼接容易漂移重叠太大照片数量增加处理时间也会明显上升。对于一张完整的芯片图像我会用自定义脚本批量检查拼接质量而不是肉眼一张一张看。拼完之后的层图像通常非常庞大动辄几GB甚至几十GB这也会影响后处理算法的选择所以预处理阶段的降噪和压缩策略要提前设计好。3.2 标准单元识别从晶体管到逻辑门拿到对齐后的层图像下一步是识别晶体管和金属连线。这个环节的输入是灰度图像输出是节点和连接关系。第一阶段的处理通常是图像分割用阈值或者更现代的分割算法把金属层、多晶硅层、有源区分开。然后通过形态学操作去除噪声提取出每条连线的拓扑。我习惯用Python加OpenCV先做一步快速的预处理比如用自适应阈值把金属层从介质层里分离出来import cv2 import numpy as np img cv2.imread(metal_layer.tif, cv2.IMREAD_GRAYSCALE) # 自适应阈值把金属连线与背景区分开 thresh cv2.adaptiveThreshold( img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 51, 15 ) # 形态学闭运算填补连线上的小空洞 kernel np.ones((3, 3), np.uint8) clean cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) cv2.imwrite(metal_binary.png, clean)这段代码不复杂但它完成了最关键的把图像变成二值拓扑的工作。之后要做的是提取晶体管。一个MOSFET在版图上的基本特征是多晶硅栅横跨有源区。通过检测多晶硅与有源区的相交区域就能定位晶体管沟道。再结合金属层的连接关系可以把一个个晶体管连接成电路图。电路图有了之后接下来的工作是与标准单元库做匹配。这个环节的核心是图同构匹配把提取出来的晶体管网络与库中单元的晶体管网络比较找到对应的门。开源免费的标准单元库比如SkyWater 130nm工艺的PDK里包含的单元可以用作参考但实际项目和库的工艺不一定一致因此匹配成功率通常不会很高。比较务实的思路是先手工标注一小部分单元把标注结果作为训练参考再对全图做半自动扩展识别。不要指望第一次匹配就能达到满意的准确率这通常是一个迭代过程。3.3 层次化恢复先画地图再谈进攻一颗复杂芯片的晶体管数量是百万级别想一次性提取出完整网表是不现实的。真正有效的操作是层次化恢复。具体来说我会先看电源环、时钟树、I/O PAD的分布判断出芯片的顶层模块划分再结合引脚功能、数据总线宽度推测哪些区域可能是CPU核心、哪些区域是存储、哪些区域是密码引擎或者随机数发生器等安全模块。这里有一个常见误解认为逆向工作必须整颗芯片无死角。实际上在绝大多数安全研究里关注区域不会超过整颗芯片面积的10%甚至更少。我记得有一次项目要做一颗智能卡芯片的安全评估目标是定位真随机数发生器TRNG。我们并没有去扫描整颗芯片而是先通过时钟树和电源域的分布锁定大致的模拟电路区域再在小范围内做高倍率扫描。结果在预期的时钟树附近找到了环形振荡器结构特征非常明显顺着它就把TRNG的版图区域定位出来了。这个案例让我深刻体会到模块级先验知识比单纯的高分辨率图像重要得多。层次化恢复还有一个附带的好处它天然形成了一种项目管理方法。每完成一个模块的恢复就可以独立验证正确性而不是等整个芯片全部提取完再统一验证。这样即使中间某个模块出了错也不会拖累全局。4. 工具链实测开源方案和商业软件的差距到底在哪4.1 开源工具的真实水平顺着操作流程我用过的开源工具大概有这几类Degate可以交互式标注芯片图像、提取电路适合教学演示和小规模逆向问题在于界面老旧对超大图像处理基本是灾难ImageJ/Fiji做图像预处理、增强、尺度标注很方便插件生态也很丰富但它不直接完成电路提取Python生态灵活度高适合自己写定制化脚本处理特定问题KiCad等EDA工具往往用于PCB级逆向的最终绘制而不是芯片级逆向。概括来说开源工具能覆盖图像预处理、基础晶体管识别、小规模电路的半交互提取但离全自动恢复网表还很远。如果你只是想把一颗老工艺芯片的某个模块搞清楚开源工具是够用的如果你想处理一颗先进工艺的完整安全芯片只靠开源工具会很吃力。这并不是说开源工具不好而是这个领域本身难度大需要一个完整的软件产品支撑而开源社区目前还没有出现一个足够好用的完整逆向平台。4.2 商业工具与逆向服务商业上做芯片逆向比较成熟的公司比如TechInsights以前的Chipworks手里有大量专利分析数据库和逆向工具链。还有欧洲的逆向服务机构可以接收客户的芯片样品交付网表和标注报告。商业工具和服务的优点是流程成熟、自动化程度高、交付物规范缺点非常明显贵而且很多工具并不向个人研究者开放。对于高校实验室来说批量购买商业逆向服务的预算往往不够。更常见的方式是选择一两个关键样品外包给服务机构做初步逆向然后自己团队接手细粒度分析。如果你的项目有明确的商业目标或者专利诉讼时间表外包反而是更划算的选择。我自己在做对比选型时会把服务商能否提供包含异常说明的报告作为重要评判标准因为逆向过程会遇到大量物理假象需要有经验的人去甄别。4.3 我的选型思路脚本化辅助为主不迷信自动工具我对全自动逆向工具这件事一直比较警惕。所谓全自动往往只适用于规则非常规整的版图而真实芯片里会有各种工艺偏差、不规则绕线和加密混淆逻辑。到头来真正让你效率起飞的不是一个包打天下的软件而是一堆用Python、Tcl写的小脚本它们能帮你把重复劳动砍掉八成。举个例子提取连线后我需要检查金属连线之间有没有该断开但没断开的地方。这种检查如果人工看图十层金属看下来会崩溃。我写了一个脚本把二值图像按连通域分析自动标出所有疑似桥接的位置再由人工复核效率提升了至少五倍。所以我对工具的选择标准不是牌子响不响而是能不能快速解决当下具体的问题。如果让我给新人一个建议我会说先学会用脚本处理图像再考虑买不买得起专业软件。5. 实战中的坑与排查链路5.1 金属层粘连造成的假短路有一次我们在逆向一颗60nm工艺的芯片提取出来的网表里出现了大量莫名其妙的短路节点。一开始怀疑是图像分割时的阈值设置太高把介质层残留误判成了金属于是反复调整阈值但短路依然存在。后来我回到原始SEM图像上把出问题的区域放大才发现真相去层时两层金属之间的介质并没有被完全去除残留物在成像时形成了局部导电的假象。换句话说图像上看起来确实有一条连线连到了不该连的地方但物理上这个连接并不存在。解决方案是在连线提取算法里加入最小线宽/间距约束凡是宽度小于工艺最小线宽、或者与相邻线间距小于工艺最小间距的连线直接判定为伪影。加上这个约束之后假短路数量大幅下降。这个坑给我的启发是当自动提取结果出现系统性异常时先别急着质疑算法阈值回到原始图像寻找物理层面的解释往往更高效。5.2 标准单元库不匹配功能对、引脚对不上另一个高频坑是标准单元匹配阶段。我们花了很大精力用某个公开的标准单元库去匹配一颗目标芯片的版图结果误匹配率高得离谱。一开始以为是图同构算法写得不对后来对比了多个成功案例才反应过来目标芯片的单元本质上是一个自定义工艺库和公开的库虽然是同一个逻辑功能但物理层的端口位置、金属走向都不一样。所以匹配时会出现那种逻辑功能对、物理连接关系对不上的局面。处理方式不是把单元库整个换掉而是给匹配算法增加一个端口交换等价的概念。很多标准单元的物理端口是对称的只要保证最终连接关系等价哪个引脚在左、哪个在右就不重要了。加上这种等价关系之后匹配率提升了不少。这个坑提醒我在做标准单元识别之前一定要先了解目标芯片的工艺特点而不是默认套用某个现成库。5.3 衬底噪声导致晶体管漏检还有一次我们在做掺杂区染色后的图像识别时发现很多晶体管区域被识别成了一个大晶体管。检查原因后发现是衬底噪声染色不均匀导致背景灰度出现波动部分相邻晶体管的源漏区在二值化后连成了一片。排查链路是逐步收敛的。首先我看了原始图像的灰度直方图确认背景噪声确实显著然后尝试提高阈值结果真实晶体管区域也开始断裂漏检更严重。最后用了两个手段组合解决先用形态学腐蚀把细小的噪声凸起去掉再根据晶体管沟道宽长比做聚类把明显超出合理范围的大晶体管重新拆分成多个候选器件。这个过程听起来不复杂但很考验对工艺参数的把握因为你需要知道该工艺下晶体管宽长比的合理范围。6. 从TCHES 2026的动向看IC逆向的下一步6.1 机器学习介入版图识别我最近在调研TCHES 2026征稿方向时最明显的一个趋势是机器学习正在大量介入版图识别和网表恢复。早期论文多用传统图像处理做晶体管检测自动化程度低。现在有不少工作尝试用CNN自动分割版图各层用图神经网络直接匹配标准单元甚至通过学习版图特征来推测某个模块的功能。这些方法在公开数据集或者自采样品上效果不错但工程化落地还需要时间。不过可以预见未来IC逆向研究的入门门槛会因为机器学习降低而不再是只有拥有昂贵SEM实验室的团队才能玩得起。6.2 从盲逆向到半盲逆向另一个让我感兴趣的方向是半盲逆向。所谓盲逆向是指拿到的是一颗完全陌生的芯片没有任何设计文件每一步都靠猜。半盲逆向则利用了一个很实际的前提在很多安全场景中我们至少知道目标芯片是做什么的比如它是一颗安全MCU、一颗密码协处理器或者一颗智能卡芯片。既然知道功能就可以对内部模块做出行为层面的约束。这种约束反过来可以引导恢复过程。比如我们想找AES引擎那么一旦在网表恢复过程中看到重复的SubBytes结构、有限域运算单元等特征就可以把它标记为候选模块。这类行为特征引导的逆向思路很适合和TCHES上有关逻辑锁定、硬件木马检测的工作结合。我觉得它会是未来两三年一个非常活跃的交叉方向。6.3 逆向与可信硬件验证的合流最后说一个宏观趋势IC逆向正在从解剖一颗芯片讲故事走向作为可信硬件验证的组成部分。TCHES天然关注硬件安全评测而评测一个芯片是否包含恶意逻辑、是否实现了声称的安全功能越来越离不开逆向证据。我预计未来的高质量论文会要求作者不只是仿真验证还要在真实芯片上通过逆向给出证据链。这其实对做逆向研究的人是个利好消息方法论文档会更多工具链也会慢慢成熟IC逆向在学术共同体里获得的认可度会越来越高。写到这里顺手分享我个人这几年做IC逆向最深的三个体会。第一不要试图一步到位地全自动提取整个芯片网表那是反模式层次化、半自动、人工复核才是真实世界里的工作方式。第二物理准备阶段的耐心比任何先进工具都重要因为这一阶段出错是不可逆的。第三如果目标是TCHES这类硬件安全平台那么逆向研究必须回答清楚一个问题你恢复出的网表或者版图特征最终支撑了怎样的安全结论这个问题的答案才是这类综述和实证工作的真正价值所在。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。