ChipWhisperer教程(一)

一、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 curlsudo 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 cwcd ~/
git clone https://github.com/newaetech/chipwhisperer
cd chipwhisperer
git submodule update --init jupyterpython -m pip install -e .
python -m pip install -r jupyter/requirements.txtsudo 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 $USERcd 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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【持续更新】计算机网络试题

问题1 请简要说明TCP/IP协议栈的四层结构,并分别举出每一层出现的典型协议或应用。 答案 应用层:ping,telnet,dns 传输层:tcp,udp 网络层:ip,icmp 数据链路层:arp,rarp 问题2 下列协议或应用分别属于TCP/IP协议…

短剧系统开发:打造高效、创新的短视频娱乐平台 - 从0到1的完整解决方案

一、短剧市场迎来爆发式增长 - 不容错过的万亿级蓝海 随着5G技术的普及和移动互联网的深度渗透,短剧市场正在经历前所未有的爆发式增长。根据权威机构艾瑞咨询最新发布的《2023年中国网络短剧行业发展报告》显示: 市场规模:2023年中国短剧市…

ChipWhisperer教程(三)

——CW305目标板的波形采集 一、目标板介绍 CW305 是一款独立的 FPGA 目标板,搭载的FPGA芯片为Xilinx Artix-7系列。 它具有与 FPGA 通信的 USB 接口、为 FPGA 提供时钟的外部 PLL、编程 VCC-INT 电源以及用于故障注入环境的二极管保护。 CW305 电路板有多种配置&…

django中如何解析content-type=application/json的请求

django中如何解析content-typeapplication/json的请求 本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 往期文章回顾: …

Chainlink VRF 深度解析与实战

背景 在区块链的去中心化应用中,随机性是一个常见但难以实现的需求。例如,区块链游戏需要随机决定战斗结果,NFT 项目需要随机分配稀有属性,去中心化抽奖需要公平选择获奖者。然而,传统的链上随机数生成方法&#xff0…

7. TypeScript接口

TypeScript 中的接口(Interfaces)用于定义对象的结构。它们允许开发者指定一个对象应具有哪些属性以及这些属性的类型。接口有助于确保对象遵循特定的结构,从而在整个应用中提供一致性,并提升代码的可维护性。 一、认识接口 Typ…

UE 新版渲染器输出视频

安装包解压到C盘 打开UE插件 Movie Render Queue 进入UE引擎在项目设置找到 libx264 aac mp4 影片渲染队列调用出 命令行编码器安装包路径,序列输出路径,定序器不能有中文

基于用户的协同过滤推荐算法实现(Java电商平台)

在电商平台中,基于用户的协同过滤推荐算法是一种常见的推荐系统方法。它通过分析用户之间的相似性来推荐商品。以下是一个简单的实现思路和示例代码,使用Java语言。 实现思路 数据准备:收集用户的评分数据,通常以用户-商品评分矩…

LeetCode - 904. 水果成篮

题目 904. 水果成篮 - 力扣(LeetCode) 思路 题目本质 你有一个整数数组,每个元素代表一种水果。你只能用两个篮子,每个篮子只能装一种水果。你要在数组中找一个最长的连续子数组,这个子数组里最多只包含两种不同的…

发现 Kotlin MultiPlatform 的一点小变化

最近发现 Kotlin 官方已经开始首推 Idea 的社区版的 KMP 插件了. 以前有网页创建 KMP 的项目的文档也消失了. 虽然有 Android Studio 的选项. 但是却不是在默认的位置上了. 足以说明官方是有意想让大家直接使用 Idea 社区版或者专业版 所以我直接在社区版上安装 KMP 插件. 尝试…

【Photoshop】金属字体制作

新建一个空白项目,选择横排文字工具,输入想要的文件建立文字图层 选择横排文字工具选择出文字内容,在通知栏出点击’拾色器‘,设置好需要的文字颜色 图层面板右下角点击‘添加图层样式’,选择斜面和浮雕 样式设置为内斜…

centos 7.9 升级ssh版本 7.4p1 升级到 8.2p1

centos 7.9 升级ssh版本 7.4p1 升级到 8.2p1 1、安装包下载2、安装telnet3、安装openssl-OpenSSL_1_1_1f.tar.gz4、安装openssh-8.2p1.tar.gz5、修改ssh服务的相关配置文件6、确定可以ssh连接服务器后,卸载telnet,因为telnet不安全 本文是离线环境下升级…

stm32---dma串口发送+fifo队列框架

之前分享了一个关于gd32的fifo框架,这次就用stm32仿照写一个,其实几乎一样,这次说的更详细点,我全文都写上了注释,大家直接cv模仿我的调用方式即可 uasrt.c #include "stm32f10x.h" // D…

【生产就曲篇】让应用可观测:Actuator监控端点与日志最佳实践

摘要 本文是《Spring Boot 实战派》系列的终章,我们将探讨如何让应用真正达到**“生产就绪” (Production-Ready)** 的标准。文章的核心是可观测性 (Observability),即从外部了解一个系统内部运行状态的能力。 我们将深度挖掘 Spring Boot Actuator 的…

操作系统知识(1)

操作系统的分类总结 1、批处理操作系统:单道批处理和多道批处理(主机与外设可并行) 2、分时操作系统:一个计算机系统与多个终端设备连接。将CPU的工作时间划分为许多很短的时间片,轮流为各个终端的用户服务。 3、实时操作系统:实时是指计算机对于外来信息能够以足…

一.Sharding分库分表-基因法+自定义多key分片实现多字段查询

前言 当下遇到这样一个场景,由于订单数据量达到千万级别,采用分库分表进行优化,根据订单的热查条件:order_no订单编号进行分表,但是这样带来一个问题,用户查询自己的订单怎么查?由于分片键使用…

【leetcode】543. 二叉树的直径

二叉树的直径 题目题解解释 题目 543. 二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 题解 …

AI基础知识(07):基于 PyTorch 的手写体识别案例手册

目录 实验介绍 实验对象 实验时间 实验流程 实验介绍 随着人工智能技术的飞速发展,图像识别技术在众多领域得到了广泛应用。手写体识别作为图像 识别的一个重要分支,其在教育、金融、医疗等领域具有广泛的应用前景。本实验旨在利用深度 学习框架 PyTorc…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

信号(瞬时)频率求解与仿真实践(2)

引言 本文是信号(瞬时)频率求解与仿真实践专题的第二篇文章,在上一篇博文 [1]信号(瞬时)频率求解与仿真实践(1)-CSDN博客中,我构建了信号瞬时频率求解的基本框架,并且比较详细地讨论了瞬时频率法。这篇博文探讨适用于信号瞬时频率求解的另一种…