第一章:ChipWhisperer概述

硬件安全与侧信道攻击简介

说到硬件安全,很多人第一反应是「加密算法够强就行」。其实不然。我见过太多产品,算法选的是AES-256,理论上牢不可破,结果实际用起来,功耗波形一采集,密钥就暴露了。

为什么会这样?因为芯片在执行运算时,电流消耗会随着处理的数据变化。你想想看,CPU内部翻转的晶体管数量不同,耗电自然不一样。这种物理层面的泄露,软件层面根本防不住。

侧信道攻击,说白了就是利用这些物理泄露来破解秘密。常见的侧信道包括:

  • 功耗分析:采集芯片运行时的电流变化
  • 电磁辐射分析:捕捉芯片周围的电磁场波动
  • 时序分析:测量不同输入下的执行时间差异
  • 故障注入:通过电压毛刺或激光干扰芯片运行

其中功耗分析是最容易上手、效果也最直接的。我在帮客户做安全评估时,十次里有八次先用功耗分析试试水——往往第一次就能抓到问题。

核心观点:硬件安全不是加密算法的选择题,而是物理实现的必答题。算法再强,物理泄露不堵住,等于白搭。

ChipWhisperer平台介绍

ChipWhisperer是什么?它是一套专门用来做侧信道攻击和防护研究的开源硬件平台。NewAE Technology公司做的,我用了好几年,确实顺手。

这套平台包含几个核心部件:

  • 捕获板(Capture Board):负责采集功耗波形,自带ADC和放大器
  • 目标板(Target Board):运行被攻击的固件,通常是AVR或ARM芯片
  • 编程器(Programmer):烧录固件到目标板上
  • 软件工具链:Python库 + Jupyter Notebook环境

我最喜欢ChipWhisperer的一点是,它把实验室里那套昂贵的示波器+探针方案,压缩到了几百美元的桌面设备上。而且所有软件开源,想改哪里改哪里。

组件功能我常用的型号
捕获板高速采样(最高200MS/s)CW-Husky
目标板运行待测固件CW308T系列
编程器烧录固件板载编程器

小提示:如果你是第一次接触,建议直接买ChipWhisperer Lite套装。几百块钱,该有的都有了。我当年就是拿Lite版入的门,到现在还在用。

功耗分析攻击原理

功耗分析攻击的原理,其实不复杂。芯片在执行不同指令、处理不同数据时,消耗的电流会有微小差异。我们用高精度ADC把这些差异记录下来,然后从波形里反推出密钥。

常见的攻击方式有两种:

  1. 简单功耗分析(SPA):直接看单条波形,识别出不同操作。比如AES的轮运算在波形上会呈现重复的模式。
  2. 差分功耗分析(DPA):采集大量波形,用统计方法找出与密钥相关的微小差异。这招对付加了噪声的防护也管用。

我举个例子。假设AES加密中有一个S盒查找操作:output = SBox[input XOR key]。如果我们能猜对key的一个字节,那么所有输入对应的output就是确定的。而output的比特位会直接影响功耗——1比0耗电多一点点。采集几千条波形,按某个比特位分组求平均,两组波形之间的差异峰值,就出现在S盒执行的那个时刻。峰值越高,说明猜的key越对。

# 伪代码示意:DPA攻击流程
for key_guess in range(256):
    # 假设key_guess是密钥的一个字节
    # 计算所有输入对应的S盒输出
    outputs = SBox[inputs XOR key_guess]
    # 按outputs的最低位分组
    group0 = traces[outputs.bit0 == 0]
    group1 = traces[outputs.bit0 == 1]
    # 计算两组波形的平均差异
    diff = mean(group1) - mean(group0)
    # 差异最大的key_guess就是正确答案
    if max(abs(diff)) > threshold:
        print(f"密钥字节 = {key_guess}")

注意:DPA攻击需要波形对齐。如果每次采样的触发点有偏移,统计结果会大打折扣。我曾经花了一整天调试对齐参数,最后发现是触发信号没接好——嗯,硬件连接永远是第一位的。

实验环境搭建与硬件连接

搭建环境这件事,说简单也简单,说坑也多。我按步骤来,你跟着做就行。

第一步:安装软件

ChipWhisperer的软件环境基于Python。我建议用Anaconda管理,省心。

# 创建虚拟环境
conda create -n chipwhisperer python=3.8
conda activate chipwhisperer

# 安装ChipWhisperer库
pip install chipwhisperer

# 验证安装
python -c "import chipwhisperer as cw; print(cw.__version__)"

第二步:硬件连接

连接顺序很重要。我习惯这样:

  1. 先把目标板插到捕获板的扩展接口上
  2. 用USB线连接捕获板到电脑
  3. 给目标板供电(如果是独立供电的话)
  4. 检查LED指示灯——正常应该亮绿色

第三步:验证通信

打开Jupyter Notebook,运行以下代码:

import chipwhisperer as cw

# 连接设备
scope = cw.scope()
target = cw.target(scope)

# 检查连接状态
print(f"Scope connected: {scope.connect_status}")
print(f"Target connected: {target.connect_status}")

# 发送一个测试命令
target.write("Hello ChipWhisperer\n")
response = target.read()
print(f"Response: {response}")

如果看到返回信息,说明环境搭好了。

避坑指南:我曾经遇到过USB线质量不好导致采样数据出错的情况。换了一根带磁环的线,问题就解决了。嗯,别小看线材的影响。

硬件连接完成后,建议先跑一下官方自带的示例程序。比如AES加密的功耗采集demo,能跑通就说明一切正常。我第一次跑通时,看到波形图上清晰的AES轮运算模式,那种感觉——嗯,就像你第一次点亮LED一样兴奋。

ChipWhisperer 功耗分析攻击知识体系 功耗分析攻击 攻击原理 物理泄露:功耗随数据变化 SPA:单条波形直接分析 DPA:统计方法提取密钥 ChipWhisperer平台 捕获板:高速ADC采样 目标板:运行待测固件 软件工具链:Python库 实验环境搭建 软件安装:Anaconda + pip 硬件连接:捕获板+目标板 验证通信:运行测试代码 核心逻辑:物理泄露 → 波形采集 → 统计分析 → 密钥恢复 硬件安全不是算法选择题,而是物理实现的必答题

好了,第一章的内容就到这里。硬件连接搞定后,下一章我们会真正动手采集第一条功耗波形,看看AES加密在示波器上长什么样。