4、示波器基础与信号采集:示波器参数设置(采样率、带宽、触发)、电流探头使用技巧、采集NXP芯片运行时的功耗轨迹。

做电源分析攻击,说白了就是跟芯片的“电老虎”打交道。你想想看,芯片在算不同指令时,吃的电流其实是不一样的。这个微小的差异,就是我们破解的钥匙。而示波器,就是抓这把钥匙的钳子。

我记得刚入行那会儿,总觉得示波器嘛,不就是看波形的。结果第一次采集功耗轨迹,出来的全是噪声,根本看不出门道。后来才明白,参数没设对,再好的探头也白搭。今天我就把这几年的经验捋一捋,咱们一步步来。

4.1 示波器参数设置:别让细节溜走

示波器有三个核心参数,你得心里有数:采样率、带宽、触发。这三个设不好,采集到的轨迹就是废的。

4.1.1 采样率:够用就行,别贪多

采样率决定了示波器每秒能采多少个点。对于NXP芯片,比如常见的LPC系列或i.MX RT系列,内核频率通常在几十MHz到几百MHz。根据奈奎斯特定理,采样率至少要是信号最高频率的2倍。但实际做功耗分析时,我建议至少5倍以上。

为什么? 因为功耗轨迹里不仅有芯片主频的谐波,还有电源纹波、开关噪声等高频成分。采样率太低,这些细节会被“抹平”,你就看不到指令之间的电流差异了。

我的经验值:

  • NXP Cortex-M0/M4 系列(如LPC824、MK64):采样率 500 MSa/s 起步
  • NXP i.MX RT 系列(如RT1064):采样率 1 GSa/s 以上
  • 如果只是看整体功耗趋势,250 MSa/s 也能凑合

但别盲目追求高采样率。采样率越高,单次采集的数据量就越大。示波器的存储深度是有限的。我曾经为了追求2 GSa/s,结果只能采几十微秒的数据,根本看不到完整的AES加密过程。嗯,这里要注意:采样率 × 采集时长 ≤ 存储深度。你得算好这笔账。

4.1.2 带宽:滤掉没用的噪声

示波器的带宽决定了它能准确测量的最高频率。带宽不够,高频信号会被衰减,波形变圆润。带宽太高,又会引入不必要的噪声。

我个人习惯,做功耗分析时把示波器带宽设为20 MHz 或 100 MHz。为什么?因为NXP芯片的功耗变化主要集中在这个频段。更高的频率成分,比如几百MHz的开关噪声,对我们分析指令差异没有帮助,反而会污染轨迹。

小技巧: 很多示波器有“带宽限制”功能,直接设为20 MHz。这能有效滤除高频噪声,让功耗轨迹更干净。我在采集LPC824的功耗时,开了20 MHz带宽限制后,信噪比提升了一个数量级。

4.1.3 触发:精准定位目标指令

触发是示波器的“瞄准镜”。没有触发,你采集到的波形就是随机的,根本不知道芯片在执行哪条指令。

做电源分析攻击时,我们通常用上升沿触发。怎么用?在芯片的GPIO口上拉一个信号。当芯片开始执行目标操作(比如AES加密)时,让GPIO输出一个高电平。示波器检测到这个上升沿,就开始采集。

我曾经犯过一个低级错误:触发阈值设得太高,结果示波器一直不触发。后来才发现,芯片的GPIO输出是3.3V,我设了2.5V阈值,但信号有衰减,实际到示波器只有2.0V。所以,触发阈值要设为信号幅度的50%左右,并且用示波器的“自动设置”功能先看一下信号幅度。

4.2 电流探头使用技巧:别让探头毁了你的数据

电流探头是采集功耗轨迹的关键工具。但很多人不知道,探头本身也会引入误差。

4.2.1 探头选型:高频还是高灵敏度?

市面上常见的电流探头有两种:

类型 带宽 灵敏度 适用场景
高频电流探头(如TCP0030A) DC ~ 120 MHz 1 mA/div NXP高频芯片,需要捕捉快速电流变化
高灵敏度探头(如CT-1) DC ~ 1 GHz 0.1 mA/div 低功耗芯片,电流变化极小

对于大多数NXP芯片,我推荐用高频电流探头。因为功耗分析需要捕捉指令级的电流变化,这要求探头有足够的带宽。高灵敏度探头虽然能测小电流,但带宽往往不够,会丢失细节。

4.2.2 连接方式:串联还是感应?

电流探头有两种连接方式:

  • 串联:把探头串进电源回路里。精度高,但需要断开电路。
  • 感应:用探头夹住电源线。方便,但精度稍差。

我个人强烈建议用串联方式。为什么?因为感应方式容易受到外部电磁干扰。我在项目中遇到过,用感应夹采集功耗轨迹,结果波形上全是50 Hz的工频噪声,根本没法用。后来改成串联,噪声立刻消失了。

注意: 串联时,探头本身有内阻(通常0.1Ω左右)。这个内阻会引入压降,影响芯片供电。对于低电压芯片(如1.8V供电),这个压降可能导致芯片工作不稳定。解决办法是:用示波器的“数学运算”功能,把探头内阻的压降补偿掉。

4.2.3 校准:每次都要做

电流探头在使用前必须校准。不校准的话,直流偏置可能偏移,导致测出的电流值不准。

校准方法很简单:把探头夹在空气中(不夹任何导线),然后按示波器上的“探头校准”按钮。示波器会自动把直流偏置归零。我习惯每次换探头或换量程时都做一次校准。别嫌麻烦,这能省掉后面很多排查问题的时间。

4.3 采集NXP芯片运行时的功耗轨迹

好了,参数设好了,探头也接好了。现在我们来实战采集。

4.3.1 搭建测试环境

你需要:

  • NXP开发板(比如LPCXpresso824或MIMXRT1060-EVK)
  • 示波器(至少500 MHz带宽,1 GSa/s采样率)
  • 电流探头(高频型,带宽≥100 MHz)
  • 跳线、杜邦线若干

连接步骤:

  1. 断开开发板的VDD电源线
  2. 把电流探头串联进VDD回路(注意正负极)
  3. 把示波器的触发通道接到开发板的GPIO触发引脚
  4. 给开发板上电,确认芯片正常工作

4.3.2 编写测试程序

在NXP芯片上跑一个简单的程序:先让GPIO输出高电平,然后执行目标操作(比如AES加密),完成后让GPIO输出低电平。这样示波器就能精准地采集到加密过程的功耗轨迹。

// 伪代码示例
void main() {
    GPIO_SetHigh(TRIGGER_PIN);  // 触发信号拉高
    AES_Encrypt(data, key);     // 执行AES加密
    GPIO_SetLow(TRIGGER_PIN);   // 触发信号拉低
    while(1);
}

4.3.3 采集与观察

按下示波器的“Run”按钮,你应该能看到类似这样的波形:

  • 触发信号上升沿后,电流波形开始变化
  • 加密过程中,电流有规律的起伏(对应不同的轮运算)
  • 加密结束后,电流回到空闲状态

如果波形全是噪声,检查以下几点:

  • 触发阈值是否合适?
  • 探头是否校准?
  • 示波器的带宽限制是否开启?
  • 电源是否有纹波?可以在电源端加一个10 μF的电容滤波

我的经验: 第一次采集时,先用“自动设置”让示波器自己找参数。然后手动微调。别一上来就手动设,容易漏掉信号。我见过有人设了1 V/div的量程,结果信号只有10 mV,啥也看不到。

4.4 知识体系:功耗轨迹采集的核心逻辑

下面这张图,是我自己总结的功耗轨迹采集流程。你照着走,基本不会出错。

功耗轨迹采集核心流程 1. 环境搭建 开发板 + 示波器 + 探头 2. 参数设置 采样率 / 带宽 / 触发 3. 探头连接 串联 / 校准 / 量程 4. 采集 运行程序 波形正常? 保存轨迹 用于后续分析 排查问题 检查参数/连接

这张图的核心逻辑很简单:先搭环境,再设参数,然后连探头,最后采集。如果波形不对,别慌,回到参数设置和探头连接那两步排查。我90%的问题都出在这两个环节。

4.5 避坑指南

最后,分享几个我踩过的坑:

  • 探头地线太长:地线越长,引入的噪声越大。我习惯用地线弹簧,直接套在探头前端,把地线长度控制在1 cm以内。
  • 忘记校准:有一次我连续采集了1000条轨迹,结果发现直流偏置漂了0.5 mA。所有数据都得重采。从那以后,我每次开机第一件事就是校准探头。
  • 触发信号太短:如果GPIO触发信号只有几个微秒,示波器可能来不及触发。我一般让触发信号保持至少10 μs,确保示波器能稳定触发。

好了,示波器这块就聊到这儿。参数设对了,探头接好了,采集到的轨迹才能用。下一节,咱们就拿着这些轨迹,开始真正的攻击分析。


公众号:蓝海资料掘金营,微信deep3321