第二章 ChipWhisperer平台介绍
好,咱们正式开始动手之前,得先把家伙事儿认全了。ChipWhisperer这个平台,说白了就是一套专门用来搞侧信道攻击的软硬件工具链。我最早接触它的时候,还是CW1173刚出的那会儿,那时候文档少得可怜,踩了不少坑。现在生态成熟多了,但选型不对照样头疼。
2.1 ChipWhisperer硬件家族
ChipWhisperer的硬件,核心就两个系列:CW1173 和 CW308。其他像CW1200、CW501这些,要么是配件,要么是特定场景用的。咱们重点讲这两个主力。
2.1.1 CW1173 — 入门首选
CW1173,也叫ChipWhisperer-Lite。它把采样、激励、目标板三合一了。你想想看,一根USB线连电脑,就能开始抓功耗曲线,多方便。
核心参数:
- 采样率:最高 96 MS/s(兆样本每秒)
- ADC分辨率:10位
- 板载目标:XMEGA(8位AVR)、STM32F3(ARM Cortex-M4)
- 触发接口:支持外部触发输入/输出
- 供电:USB供电,无需额外电源
我个人习惯,新手入门直接买CW1173。为什么?因为省心。你不需要自己搭目标板,不需要纠结时钟同步问题。板子上那个XMEGA芯片,就是用来练手的——它的AES实现有经典漏洞,正好拿来演示CPA攻击。
我的经验:CW1173的采样率虽然只有96MS/s,但对于8位MCU和低速ARM来说完全够用。我见过有人非要用高端示波器来抓,结果触发同步搞了三天没搞定。CW1173的硬件触发设计得很聪明,你只要在代码里加个GPIO翻转,它就能精准抓到加密运算的那一段。
2.1.2 CW308 — 进阶利器
CW308就不一样了。它是个通用目标板,本身不带MCU,而是通过更换子板(Target Board)来支持不同芯片。说白了,CW308就是个插座,你插什么芯片,它就攻击什么芯片。
我记得有一次项目里要评估一款国产RISC-V芯片的侧信道防护能力。CW1173不支持,怎么办?换CW308,插上对应的子板,改几行代码就开干了。
| 特性 | CW1173 | CW308 |
|---|---|---|
| 目标芯片 | 板载固定(XMEGA/STM32F3) | 可更换子板(支持20+种芯片) |
| 采样率 | 96 MS/s | 取决于前端(通常更高) |
| 灵活性 | 低(适合入门) | 高(适合研究) |
| 价格 | 约$250 | 约$400(不含子板) |
| 适用场景 | 学习、原型验证 | 芯片评估、定制攻击 |
避坑指南:我曾经以为CW308能通吃所有芯片,结果发现有些子板的电源噪声滤波做得不好,抓出来的曲线毛刺特别多。后来我学乖了,买子板之前先看社区论坛里有没有人用过,或者自己加个LC滤波。嗯,这里要注意,CW308的电源设计比CW1173更依赖你的动手能力。
2.2 软件环境:ChipWhisperer Python库
硬件有了,软件呢?ChipWhisperer的软件核心就是cw这个Python库。你装好之后,import cw就能开始玩了。
安装其实很简单,我建议用虚拟环境:
# 创建虚拟环境
python -m venv cw_env
source cw_env/bin/activate # Linux/Mac
# 或 cw_env\Scripts\activate # Windows
# 安装ChipWhisperer
pip install chipwhisperer
装完之后,验证一下:
import chipwhisperer as cw
print(cw.__version__)
# 应该输出类似 5.6.0 的版本号
这个库提供了什么?说白了,三件事:
- 连接硬件:自动识别CW1173或CW308,配置采样参数
- 抓取波形:一键触发、采集、存储功耗轨迹
- 分析攻击:内置CPA、DPA、SAD等经典攻击算法
举个例子,抓一条AES加密的功耗曲线,代码就这么简单:
import chipwhisperer as cw
# 连接硬件
scope = cw.scope()
target = cw.target(scope)
# 设置采样参数
scope.clock.adc_src = "clkgen_x1" # 时钟源
scope.adc.samples = 10000 # 采样点数
scope.adc.offset = 0 # 触发偏移
# 抓取一条轨迹
trace = cw.capture_trace(scope, target, plaintext, key)
print(f"轨迹长度: {len(trace.wave)}")
你看,就这么几行。我刚开始用的时候,最惊讶的就是这个——以前用示波器抓一条曲线要手动调半天触发,现在代码里一行就搞定了。
核心API速查:
cw.scope()— 初始化采样器cw.target()— 连接目标板cw.capture_trace()— 抓取单条轨迹cw.attack()— 运行攻击算法
2.3 开发板选型指南
选型这事儿,我踩过的坑比谁都多。给你个实用建议:
- 纯学习:直接买CW1173。别犹豫,它自带的XMEGA目标足够你学完前20章的内容。
- 评估特定芯片:买CW308 + 对应子板。比如你要测STM32L4,就买STM32L4的子板。
- 搞研究/写论文:CW308 + 自己画子板。我当年为了测一款国产安全芯片,自己画了块子板,虽然折腾,但数据真实可靠。
- 预算有限:二手CW1173。闲鱼上经常有人出,注意别买到坏的就行。
我的建议:如果你不确定自己会不会坚持学下去,先买个CW1173。我见过太多人一上来就买全套CW308+十几个子板,结果吃灰了。CW1173二手也好出,亏不了多少钱。
2.4 知识体系总览
下面这张图,是我自己整理的ChipWhisperer知识体系。你看一眼,心里就有数了:
这张图把整个知识体系分成了三层:硬件层、软件层、攻击方法层。底层是应用场景,顶层是学习路径。你照着这个路径走,不会迷路。
一句话总结:ChipWhisperer不是玩具,它是正经的侧信道攻击平台。CW1173让你快速上手,CW308让你深入探索。选对硬件,装好软件,后面的事就好办了。