第四章:示波器与采集配置
好,咱们进入正题。示波器配置这块,说白了就是给侧信道攻击搭好「眼睛」和「耳朵」。你想想看,信号都抓不准,后面分析再牛也是白搭。我刚开始玩ChipWhisperer时,就在采样率上栽过跟头,折腾了一整天才发现是设置问题。
4.1 采样率设置:别太快,也别太慢
采样率这东西,不是越高越好。我见过不少新手上来就开最高采样率,结果数据量大到电脑直接卡死。嗯,这里要注意一个原则:采样率只要够用就行。
对于侧信道攻击,我们关心的信号频率通常在几十MHz以内。以ChipWhisperer的ADC为例,它最高支持100MS/s。但实际项目中,我一般这样选:
- 目标芯片是8位MCU(如AVR):20-40MS/s就够。芯片主频一般8-16MHz,功耗变化不会太快。
- 目标芯片是32位ARM:40-80MS/s。ARM的指令执行更快,信号细节更多。
- 做简单功耗分析(SPA):10-20MS/s。我们只看指令级别的功耗差异,不需要太精细。
- 做差分功耗分析(DPA):40-80MS/s。需要捕捉到每个时钟周期内的细微波动。
核心公式:采样率 ≥ 2.5 × 目标信号最高频率。这是奈奎斯特的保守版,我实测下来比较靠谱。
我曾经在一个项目中,为了省存储空间把采样率降到10MS/s,结果DPA死活跑不出有效峰值。后来一查,原来是采样率太低,把关键的功耗尖峰给「平滑」掉了。从那以后,我宁可多存点数据,也不在这上面省。
4.2 触发条件:抓住对的时刻
触发,是侧信道攻击里最容易被忽视的环节。你想想看,如果触发点没设对,抓到的全是噪声,那分析个啥?
ChipWhisperer的触发机制其实很灵活。我个人习惯用两种方式:
- 硬件触发(GPIO):在目标板上拉一根线到ChipWhisperer的触发输入。当目标执行到加密函数时,拉高这个引脚。这是最可靠的方式。
- 软件触发(Pattern Match):在功耗信号里找特定模式。比如AES的S盒操作会产生固定的功耗特征,用这个作为触发点。
具体配置时,我一般这样操作:
# ChipWhisperer Python API 触发配置示例
scope.trigger.triggers = "tio4" # 使用GPIO触发
scope.io.tio4 = "high" # 触发信号为高电平有效
scope.trigger.pre_delay = 0 # 预触发延迟,设为0
scope.trigger.post_delay = 100 # 后触发延迟,采集100个样本后停止
小技巧:预触发延迟可以设一个负值,这样能采集到触发前的信号。我习惯设-50个样本,方便观察触发前后的变化。
为什么预触发有用?因为有时候加密函数开始执行前,芯片会有一些初始化操作。这些操作可能会干扰分析。抓一段触发前的信号,可以帮你确认触发点是否准确。
4.3 增益与滤波:信号调理的艺术
增益和滤波,说白了就是让信号「看得清」。增益太小,信号弱得像蚊子叫;增益太大,直接削顶失真。滤波则是把不要的噪声去掉。
我一般遵循这个流程:
- 先调增益:让信号幅度占ADC量程的70%-90%。ChipWhisperer的ADC是10位,量程0-1023。我习惯让信号峰值在700-900之间。
- 再调滤波:先关掉所有滤波,看原始信号。然后根据噪声情况,逐步打开低通或高通滤波。
具体参数可以参考这个表:
| 场景 | 增益设置 | 滤波设置 | 说明 |
|---|---|---|---|
| 8位MCU,SPA分析 | 10-20 dB | 低通 10 MHz | 信号变化慢,滤波可以狠一点 |
| 32位ARM,DPA分析 | 20-30 dB | 低通 50 MHz | 保留高频细节,但滤掉开关噪声 |
| 电磁探头采集 | 30-40 dB | 带通 1-50 MHz | 电磁信号弱,需要高增益和带通 |
| 电源纹波测量 | 5-10 dB | 高通 100 kHz | 滤掉直流分量,只看交流变化 |
警告:增益不要超过40 dB!我曾经贪心开到50 dB,结果信号直接削顶,所有峰值都被截断了。那批数据全废了,白白浪费了三天时间。
滤波这块,我有个习惯:先用示波器的FFT功能看看噪声频谱。如果发现某个频点噪声特别大(比如50Hz工频干扰),就针对性加一个陷波滤波器。ChipWhisperer的硬件滤波虽然简单,但配合软件滤波效果也不错。
4.4 实战配置流程
说了这么多,咱们来个完整的配置流程。这是我每次做实验都会走一遍的步骤:
- 连接硬件:把ChipWhisperer的探头夹到目标芯片的VCC引脚上。地线夹到GND,越近越好。
- 打开示波器:在ChipWhisperer的Python环境中,初始化scope对象。
- 设置采样率:根据目标芯片选40 MS/s。
- 设置触发:用GPIO触发,高电平有效。
- 调增益:先设20 dB,看信号幅度。如果太小就加,太大就减。
- 加滤波:打开低通滤波,截止频率设为20 MHz。
- 抓一次看看:运行一次采集,观察波形。如果触发点不对,调整触发延迟。
- 微调:根据波形质量,微调增益和滤波参数。
嗯,这套流程我用了好几年,基本没出过问题。你刚开始可能会觉得麻烦,但多跑几次就顺手了。
避坑指南:我曾经在一次演示中,忘了检查地线连接。结果抓到的信号全是50Hz工频干扰,波形像波浪一样起伏。后来发现是地线夹松了。所以每次开始前,我都会用力拽一下地线夹,确认它夹牢了。
4.5 知识体系总览
下面这张图,是我自己画的配置流程。你可以把它当成一个检查清单:
这张图把咱们刚才讲的内容串起来了。你每次配置时,按这个流程走一遍,基本不会漏掉什么。
最后说一句:配置示波器就像调相机,参数没有绝对的对错,只有合不合适。多试几次,找到最适合你目标板的那组参数,后面分析就顺了。
公众号:蓝海资料掘金营,微信deep3321