3. 主动屏蔽层设计:顶层金属屏蔽网格、传感器网格检测电路、入侵检测响应机制

各位同学,咱们今天聊一个我特别喜欢的防护手段——主动屏蔽层。说白了,这就是给芯片最核心的敏感区域穿上一件「带电的铠甲」。我在做安全芯片那几年,跟这玩意儿打了太多交道了。你想想看,攻击者想用探针去戳总线、去读存储单元,第一关就得过这个屏蔽层。

主动屏蔽层不是一块死板的金属板,它是一套活的、会呼吸的防御系统。我习惯把它拆成三个部分来讲:顶层金属怎么铺、检测电路怎么搭、发现入侵后怎么办。咱们一个一个来。

3.1 顶层金属屏蔽网格

先说说这个「铠甲」长什么样。它不是一整块实心的金属,而是一层精心设计的网格。为什么用网格?嗯,这里有个实际考量——芯片顶层通常还要走电源线和信号线,全铺死了其他线就没法走了。

网格的典型参数我列一下,大家有个概念:

参数 典型值 说明
线宽 0.5 - 2 μm 太细容易断,太粗浪费面积
线间距 1 - 5 μm 探针直径通常10μm以上,这个间距能挡住
金属层 顶层(如M6/M7) 必须是最厚的那层,抗物理冲击
材料 铝或铜 铜的电阻率更低,但工艺兼容性要确认

网格的走线方式也有讲究。我见过两种主流做法:一种是平行线网格,简单好做,但容易被沿着线方向划开;另一种是蛇形走线网格,抗切割能力更强。我个人偏爱后者,虽然布线麻烦点,但安全等级高一个档次。

关键点:网格的每条线都必须连接到检测电路,不能有浮空的线段。浮空线就是给攻击者留的后门,我曾经在评审一个设计时发现过这种问题,当场就要求改版了。

3.2 传感器网格检测电路

网格铺好了,怎么知道它有没有被破坏?这就轮到检测电路上场了。检测电路的核心思想很简单:往网格线里注入一个信号,然后看回来的信号对不对。

我常用的检测方案有三种,各有各的适用场景:

  • 直流电阻检测:给网格线加一个恒流源,检测电压降。如果线被切断,电阻变大,电压飙升;如果线被短路到地,电压直接掉到零。优点是电路简单,缺点是只能检测断路和短路,检测不了信号注入攻击。
  • 交流阻抗检测:注入一个高频正弦波,检测相位和幅值变化。这个能发现寄生电容的改变——攻击者用探针靠近时,电容会变。我在一个银行卡芯片项目里用过这个方案,效果不错,但功耗偏大。
  • 动态码流检测:这是我最推荐的做法。往网格线里跑一串伪随机码,接收端比对码流是否一致。攻击者想伪造这个码流?几乎不可能,因为码流是实时变化的,而且每个芯片的种子都不一样。

来看一个简化的动态码流检测电路伪代码,方便理解:

// 伪随机码生成器(LFSR)
reg [15:0] lfsr = 16'hACE1;  // 每个芯片不同种子
wire [15:0] grid_out;

always @(posedge clk) begin
    lfsr <= {lfsr[14:0], lfsr[15] ^ lfsr[13] ^ lfsr[12] ^ lfsr[10]};
    grid_drive <= lfsr[0];  // 驱动网格线
end

// 比较器
assign alarm = (grid_out != lfsr[0]) ? 1'b1 : 1'b0;

这段代码看着简单,但实际工程里坑不少。我曾经遇到过一个问题:网格线太长,信号延迟导致比较器误判。后来加了延迟对齐电路才解决。所以大家做的时候,一定要做时序仿真,别偷懒。

小技巧:检测频率不要固定。我习惯让检测电路每隔一段时间随机改变检测频率,这样攻击者想用同步注入来欺骗检测电路,难度会大很多。

3.3 入侵检测响应机制

检测电路报警了,然后呢?很多新手设计到这里就停了,觉得报警就完事了。其实不然,响应机制才是整个系统的灵魂。你想想看,如果报警后芯片什么都不做,攻击者大可以无视报警继续攻击。

我一般把响应分为三个等级,根据安全需求来选择:

  1. 软响应:报警后,芯片立即擦除敏感密钥和临时数据,然后进入复位状态。这种响应速度快,适合对实时性要求高的场景。缺点是攻击者可能已经读走了一部分数据。
  2. 硬响应:报警后,芯片直接熔断内部保险丝,永久禁用安全功能。这个狠,但代价也大——芯片基本就废了。适合高安全等级的场景,比如军用设备。
  3. 诱饵响应:这是我最喜欢的一种。报警后,芯片假装正常工作,但返回的都是假数据。攻击者以为自己成功了,拿着假密钥去解密,结果什么都解不开。等攻击者反应过来,芯片早就把真数据销毁了。

警告:响应动作必须在检测到入侵后的纳秒级时间内完成。我曾经见过一个设计,检测电路报警后要通过I2C总线通知主控芯片擦除密钥——结果I2C总线被攻击者先一步切断了,报警信号根本传不过去。所以,响应电路必须和检测电路在同一个电源域、同一个时钟域,独立工作。

响应机制还有一个容易被忽略的点:不可逆性。一旦触发响应,不能通过断电重启来恢复。攻击者最常用的手段就是断电重启,试图让芯片「忘记」自己已经被入侵过。我习惯在响应电路里加一个非易失性标志位,比如用OTP(一次性可编程)存储器来记录「已被入侵」状态,这样就算断电,标志位也不会丢。

最后说一句,主动屏蔽层不是万能的。它防得住物理探针,防得住FIB(聚焦离子束)切割,但防不住侧信道攻击和软件攻击。所以,它必须和其他安全机制配合使用,比如我之前讲过的电压检测、温度检测、时钟毛刺检测,形成一个纵深防御体系。这才是做安全芯片的正确思路。