ChipWhisperer教程(一)

发布于:2025-06-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、ChipWhisperer介绍

ChipWhisperer 是一个完整的开源工具链,用于学习嵌入式设备上的侧信道攻击并验证这些设备的侧信道抗性。ChipWhisperer主要用于功耗分析,利用设备功耗泄露的信息进行攻击,也可用于故障攻击(电压和时钟毛刺攻击),通过短暂干扰设备的电源或时钟来引起故障行为。ChipWhisperer 包含以下四个部分:

1. 硬件:ChipWhisperer包括捕获板,用于发起信道攻击,以及目标板,作为被测设备。硬件文档可以在找到。硬件在大多数情况下是开源的,设计文件/原理图可以在 ChipWhisperer Github 仓库UFO 目标板仓库 找到。

2. 固件:ChipWhisperer 还包括捕获板和目标板的开源固件。捕获板固件是用 Verilog(用于 FPGA)和 C语言(用于处理器)编写的,可以在 ChipWhisperer Github 仓库 的 hardware/capture​ 部分找到。目标板固件同样是用C 语言和Verilog编写,可以在 ChipWhisperer Github 仓库 的 hardware/victims/firmware​ 目录中找到。

3. 软件:ChipWhisperer 有一个开源的 Python 库,用于控制捕获板并与目标板通信。ChipWhisperer ReadTheDocs提供了 API 文档和安装说明,API 的源代码位于 ChipWhisperer Github 仓库

4. 教程:ChipWhisperer 还包括 Jupyter Notebook 教程,演示了如何使用 ChipWhisperer 进行的侧信道攻击,以及如何使用 Python API。这些教程可以在 ChipWhisperer Jupyter Github 仓库 找到。

总体来说,ChipWhisperer包括三个部分:运行于电脑主机的采集软件、通过USB与电脑连接的捕获板、与捕获板相连的目标板。首先,在电脑在安装采集软件,并将捕获板与目标板正确连接,之后准备用于烧写到目标板上代码(c语言或verilog),最后在采集软件(交互界面集成在jupyter notebook上)上编写用于采集的代码,在jupyter notebook中运行这些代码即可进行采集。

对于用户来说,需要准备两部分代码,其一是烧写到目标板中的代码,另一部分就是运行在jupyter notebook上的采集代码。当目标板是STM32F或XMEGA等处理器时,需要编写c语言代码,以及对应的Makefile文件,c语言代码需要按照ChipWhipsperer框架的约定,Makefile用于自动构建软件项目,以生成二进制文件。当目标板是FPGA时,需要编写verilog代码,verilog代码同样需要按照既定的接口规范,编写好后用vivado等工具生成比特流文件。采集部分代码主要用于控制捕获板进行采集、以及将二进制文件或比特流文件烧写到目标板中。

二、环境安装

1. windows环境

注意:Windows Subsystem for Linux (WSL) 会干扰jupyter notebook中的 %%bash​ 块,遇到错误时可以禁用 WSL 或将 %%bash​ 更改为 %%sh​。

(1) 打开https://github.com/newaetech/chipwhisperer/releases,点击下图红圈中的链接进行安装程序的下载。

(2) 运行可执行文件并选择你希望安装 ChipWhisperer 的路径。你必须对该位置具有读/写权限,因此避免安装在类似 C:Program Files​ 的位置。默认安装位置(用户的主目录)将适用于大多数用户。

(3) 选择是否要为运行 ChipWhisperer 创建桌面快捷方式,Make 和编译器将始终安装。

​(4) 等待安装完成。请注意,在安装完成之前会打开第二个窗口以完成其他步骤。

一旦你完成了上述步骤,你应该拥有一个功能齐全、自包含的安装,包含你所需的一切。由于所有内容都是自包含的,或者至少在 Windows 上是尽可能自包含的,因此只有在运行我们提供的应用程序时,你才能访问 ChipWhisperer、编译器、git bash 等。

启动 ChipWhisperer 并开始教程的最简单方法是运行 ChipWhisperer 应用程序,该应用程序可通过“开始”菜单、你安装 ChipWhisperer 的文件夹或桌面快捷方式(如果你选择了此选项)获得。运行后,你应该会看到一个终端弹出,随后浏览器中会打开一个新窗口,如下图所示,一旦你看到这个窗口打开,建议点击 jupyter​,然后运行 0 - Introduction to Jupyter Notebooks.ipynb​ 以验证一切安装正确。

​2. linux环境

下面例举在Ubuntu中使用pyenv和conda创建ChipWhisperer环境的方法,任选一种即可。

(1) 使用pyenv创建环境

以Ubuntu为例(其他类型Linux系统类似),运行下面的命令后重启系统即可完成安装:

#更新所有软件包
sudo apt update && sudo apt upgrade

#从pyenv构建Python依赖环境
sudo apt-get install build-essential gdb lcov pkg-config \
    libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
    libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
    lzma lzma-dev tk-dev uuid-dev zlib1g-dev curl

#构建目标板的依赖环境
sudo apt install libusb-dev make git avr-libc gcc-avr \
    gcc-arm-none-eabi libusb-1.0-0-dev usbutils

#安装pyenv(也可以使用conda来创建环境)
curl https://pyenv.run | bash

#使pyenv在终端启动时正确启动
echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="~/.pyenv/shims:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
#应用当前终端的更改
source ~/.bashrc

#创建一个名为cw的环境并激活
pyenv install 3.9.5
pyenv virtualenv 3.9.5 cw
pyenv activate cw

#从Github下载ChipWhisperer到主目录
cd ~/
git clone https://github.com/newaetech/chipwhisperer

#创建一些udev规则,以便有权限访问USB和串行设备
cd chipwhisperer
sudo cp 50-newae.rules /etc/udev/rules.d/50-newae.rules
sudo udevadm control --reload-rules

#这些规则实际上将权限授予chipwhisperer组,因此需要创建该组并将用户添加到该组
sudo groupadd -f chipwhisperer
sudo usermod -aG chipwhisperer $USER
sudo usermod -aG plugdev $USER
git submodule update --init jupyter

#安装ChipWhisperer的依赖包
python -m pip install -e .
python -m pip install -r jupyter/requirements.txt

#获取nbstripout,它会使git和jupyter的交互更好
cd jupyter
python -m pip install nbstripout
nbstripout --install

运行这些安装说明后,请确保重新启动计算机。 你可以导航到 chipwhisperer 并运行下面的命令,检查安装是否成功,如果在浏览器中打开jupyter notebook窗口则安装成功。

jupyter notebook

(2) 使用conda创建环境的过程类似,具体命令如下:

sudo apt update && sudo apt upgrade
sudo apt-get install build-essential gdb lcov pkg-config \
    libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
    libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
    lzma lzma-dev tk-dev uuid-dev zlib1g-dev curl

sudo apt install libusb-dev make git avr-libc gcc-avr \
    gcc-arm-none-eabi libusb-1.0-0-dev usbutils


#创建一个名为cw的conda环境
conda create -n cw python=3.9.5
conda activate cw

cd ~/
git clone https://github.com/newaetech/chipwhisperer
cd chipwhisperer
git submodule update --init jupyter

python -m pip install -e .
python -m pip install -r jupyter/requirements.txt

sudo cp 50-newae.rules /etc/udev/rules.d/50-newae.rules
sudo udevadm control --reload-rules
sudo groupadd -f chipwhisperer
sudo usermod -aG chipwhisperer $USER
sudo usermod -aG plugdev $USER

cd jupyter
python -m pip install nbstripout
nbstripout --install

使用 Conda 创建和管理环境可以简化依赖项的管理,并且可以更容易地切换不同的 Python 版本和包版本。

三、参考网站

  1. ChipWhisperer官网:https://chipwhisperer.readthedocs.io/en/latest/index.html
  2. github仓库:https://github.com/newaetech/chipwhisperer
  3. jupyter notebook官网:https://jupyter-notebook.readthedocs.io/en/stable
  4. jupyter notebook用户手册:https://jupyter-notebook.readthedocs.io/en/stable/notebook.html
  5. NewAE硬件产品文档:https://rtfm.newae.com