2、芯片封装与安全边界:封装类型对安全的影响、安全边界定义、物理访问控制
各位同学,咱们接着聊芯片安全。上一章我讲了物理攻击的基本概念,这一章咱们深入一点,聊聊封装和安全边界。
说实话,封装这事儿,很多做软件安全的同学容易忽略。他们总觉得,芯片都封起来了,外面看不见摸不着,能有什么安全问题?
嗯,我当年也这么想过。直到有一次,我在实验室里亲眼看着一台聚焦离子束(FIB)设备,像外科手术一样把一颗芯片的封装一层层剥开,露出底下的金属走线……那一刻我才意识到,封装不是铜墙铁壁,它更像一层窗户纸。
2.1 封装类型对安全的影响
不同的封装类型,安全防护能力天差地别。我按自己的经验,把常见的封装类型排了个序,从最不安全到相对安全:
| 封装类型 | 安全风险等级 | 典型攻击难度 | 我见过的真实案例 |
|---|---|---|---|
| QFP / TQFP(四边引脚扁平封装) | 高 | 低 | 探针直接扎引脚,读总线数据 |
| BGA(球栅阵列封装) | 中 | 中 | 背面研磨后,用红外显微镜看内部 |
| CSP(芯片级封装) | 中低 | 中高 | 需要化学腐蚀开盖,操作难度大 |
| WLCSP(晶圆级芯片封装) | 低 | 高 | 几乎无法无损开盖,容易破坏芯片 |
| SiP / 3D 堆叠封装 | 极低 | 极高 | 多层堆叠,攻击者很难定位目标层 |
你看这个表,QFP 封装为什么风险高?说白了,它的引脚是露在外面的。攻击者拿几根钨丝探针,配合一个显微镜,就能直接搭在引脚上监听数据。我有个朋友做金融终端安全测试,他跟我说,他们测试的第一件事就是拿探针去戳 QFP 封装的芯片引脚,十次有八次能抓到明文数据。
BGA 封装就好一些。焊球在芯片底下,引脚不直接暴露。但别高兴太早——攻击者可以从芯片背面下手。我记得有个项目,客户要求评估一颗 BGA 封装的支付芯片。我们做了背面研磨,磨掉大概 200 微米,然后用红外显微镜观察,芯片内部的金属层结构看得一清二楚。
至于 3D 堆叠封装,我个人觉得是目前最安全的。为什么呢?因为芯片是上下叠在一起的,内部走线都在中间层。攻击者想从上面或者下面接触到敏感信号,都得穿过好几层硅和金属。我曾经参与过一个 3D 封装的安全评估项目,我们花了整整两周时间,用了 FIB、X 射线、超声波扫描……最后勉强看到了部分结构,但想无损地提取数据?几乎不可能。
核心观点:封装越「薄」、越「露」,越容易被攻击。封装越「厚」、越「复杂」,防护能力越强。但代价是成本更高、散热更难。
2.2 安全边界定义
聊完封装类型,咱们说说安全边界。这个概念很多人理解得比较模糊。我换个说法:安全边界就是「你信任的区域」和「你不信任的区域」之间的分界线。
在支付芯片里,安全边界通常画在哪里?我画了一张图,你看一眼就明白了:
这张图里,最外面虚线框是物理封装,中间是芯片衬底,最里面绿色框才是真正的安全边界。安全边界内部,存放的是密钥、安全CPU、加密引擎这些核心资产。边界外部,是普通CPU、普通存储器这些不那么敏感的部分。
为什么要把安全边界画得这么清楚?因为你要告诉芯片设计团队:边界以内的东西,必须用额外的物理防护手段保护起来。边界以外的,可以适当放松要求。
我个人习惯在项目一开始就定义好安全边界。我会问几个问题:
- 密钥存在哪里?——必须在安全边界内
- 安全启动的根信任在哪里?——必须在安全边界内
- 加密运算在哪里执行?——必须在安全边界内
- 普通应用程序的数据在哪里?——可以在安全边界外
回答完这些问题,安全边界自然就画出来了。
一个小技巧:我建议在芯片的版图设计阶段,就把安全边界用专门的金属层标记出来。这样后续做物理验证的时候,工具可以自动检查安全边界内有没有违规的走线。我在一个项目里用过这个方法,效果很好,省了不少人工审查的时间。
2.3 物理访问控制
安全边界画好了,接下来就是怎么守住它。物理访问控制,说白了就是「不让别人碰到不该碰的东西」。
我总结了几种常用的物理访问控制手段,按防护强度从低到高排列:
- 封装灌胶——把芯片整个用环氧树脂封起来。攻击者想开盖?先花几个小时腐蚀胶水吧。不过这个方法防不住专业攻击者,他们有专门的去胶设备。
- 金属屏蔽层——在芯片顶层铺一层金属网格。一旦这层网格被破坏,芯片内部的传感器会检测到,然后触发安全擦除。我曾经见过一个设计,金属屏蔽层上还加了随机图案,让攻击者很难精确对准目标区域。
- 有源防护层——在芯片最上层做一个动态的防护层,里面跑着随机信号。攻击者想用FIB修改电路?防护层的信号会乱掉,芯片立刻检测到异常。这个技术成本高,但效果确实好。
- 光传感器 + 温度传感器 + 电压传感器——组合使用。芯片一旦检测到开盖(光线变化)、温度异常(液氮冷却)、电压波动(故障注入),立即触发安全响应。
注意:物理访问控制不是万能的。我曾经遇到过一个案例,客户用了三层防护——灌胶、金属屏蔽、传感器——结果攻击者用X射线定位了安全边界内的关键走线,然后用激光从芯片侧面打孔,绕过了所有防护。所以,物理防护要跟逻辑防护配合使用,不能只靠一层。
说到避坑,我分享一个亲身经历。有一次,我们评估一颗支付芯片,发现它的安全边界定义得没问题,物理防护也做得不错。但有一个致命漏洞:安全边界内的一个调试接口,在量产时没有完全禁用。攻击者只要找到这个接口,用探针接上,就能直接读取安全存储器里的数据。
嗯,这个教训让我养成了一个习惯:每次芯片流片回来,第一件事就是检查所有调试接口是不是真的关掉了。不是软件关掉,而是物理熔断——用激光把对应的金属连线烧断。这样就算攻击者逆向工程了固件,也没办法重新打开调试接口。
最后,我再说一个关于「成本与安全」的权衡。很多产品经理会问:能不能少用点防护?成本太高了。
我的回答通常是:看你的安全等级要求。如果是公交卡,丢了也就几十块钱,用个金属屏蔽层就够了。但如果是银行卡、身份证、安全模块,那就别省这个钱。你想想看,一颗芯片被攻破,导致几百万张卡需要召回,那个成本可比多花几毛钱做防护高多了。
好了,这一章的内容就到这里。封装类型、安全边界、物理访问控制,这三者是环环相扣的。封装决定了你能用什么样的物理防护,安全边界决定了你要保护什么,物理访问控制决定了你能不能守住。