FredChang823913319/hardware-side-channel-attacks
GitHub: FredChang823913319/hardware-side-channel-attacks
该项目通过实现 Prime+Reload 和 Flush+Reload 两种缓存侧信道攻击技术,研究处理器缓存计时行为如何泄露程序执行的内存访问信息。
Stars: 0 | Forks: 0
# 硬件侧信道攻击
这是一个学术性的硬件安全项目,旨在探索基于缓存的侧信道攻击,使用了 Prime+Reload 和 Flush+Reload 技术。
该仓库包含了单线程和多线程实现、实验性攻击变体、支持代码以及一份独立研究报告。
## 项目概述
现代处理器使用缓存来提高性能。然而,缓存的行为也可能会泄露有关程序执行的信息。
本项目研究了如何利用缓存访问的时间差异来推断内存访问模式。主要关注两种缓存侧信道技术:
- Prime+Reload
- Flush+Reload
该项目是作为硬件安全和计算机体系结构方向的学术独立研究完成的。
## 目标
- 研究基于缓存的侧信道行为
- 实现单线程攻击实验
- 实现多线程攻击实验
- 比较不同的攻击变体
- 分析时间测量
- 记录实验结果和观察
## 技术
### Prime+Reload
Prime+Reload 首先将选定的内存位置加载到缓存中,随后测量它们是否保留在缓存中,以此来观察缓存行为的变化。
一般的实验流程如下:
1. 填充选定的缓存行。
2. 允许目标工作负载执行。
3. 重新加载受监控的内存位置。
4. 测量访问延迟。
5. 推断特定位置是否被访问过。
### Flush+Reload
Flush+Reload 在测量选定的缓存行是否随后被重新加载之前,会先将它们从缓存中移除。
一般的实验流程如下:
1. 刷新选定的缓存行。
2. 允许目标工作负载执行。
3. 重新加载受监控的内存位置。
4. 测量访问延迟。
5. 推断目标是否访问了受监控的位置。
## 仓库结构
```
hardware-side-channel-attacks/
├── Multi_thread_Mengjia_1/ # Multi-threaded experiment variant
├── Single_Thread/ # Single-threaded implementation
├── Single_Thread_Attack_Working/ # Working single-threaded attack version
├── Stackoverflow Syntax/ # Supporting syntax and reference experiments
├── multi_thread/ # Additional multi-threaded implementation
├── ECE 396 Independent Study Report.docx
└── README.md
```
## 实验变体
### 单线程实现
单线程版本提供了一个受控环境,用于测试缓存计时行为并验证攻击逻辑。
它适用于:
- 测量缓存命中和缓存未命中的时间;
- 验证阈值;
- 测试重新加载机制;
- 分析基本的侧信道行为。
### 多线程实现
多线程版本将实验扩展到了并发执行场景。
它适用于研究:
- 同步;
- 计时可变性;
- 线程间干扰;
- 共享缓存行为;
- 并发工作负载下的可靠性。
### 可用的攻击版本
`Single_Thread_Attack_Working/` 目录包含可用于验证攻击工作流程的单线程实现。
## 研究报告
以下文件:
```
ECE 396 Independent Study Report.docx
```
包含了该项目的完整学术报告。
该报告包括:
- 项目动机;
- 缓存背景知识;
- 侧信道攻击方法论;
- 实现细节;
- 实验观察;
- 结论与未来工作。
建议将其重命名为:
```
hardware-side-channel-attacks-report.docx
```
## 技术与概念
- C 或 C++
- 多线程
- 缓存计时分析
- CPU 内存层次结构
- 硬件安全
- 计算机体系结构
- 侧信道分析
- 性能测量
仅在仓库中确实使用了列出的编程语言时才保留它们。
## 运行项目
确切的构建和执行说明取决于每个目录中的实现方式。
典型的工作流程如下:
```
cd Single_Thread_Attack_Working
```
使用合适的编译器编译源文件:
```
gcc -o side_channel_test
```
或者:
```
g++ -o side_channel_test
```
运行编译后的程序:
```
./side_channel_test
```
对于多线程实现,构建命令可能需要开启线程支持:
```
gcc -pthread -o side_channel_test
```
将 `` 替换为所选目录中实际的源文件名。
## 实验结果
实验评估了缓存访问计时,并比较了观察到的缓存命中与缓存未命中之间的延迟。
有用的测量数据包括:
- 平均缓存命中延迟;
- 平均缓存未命中延迟;
- 计时阈值;
- 检测准确性;
- 假阳性率;
- 假阴性率;
- 多线程的影响;
- 执行时间的可变性。
在此处添加报告中实际的测量数据。
示例格式:
| 实验 | 缓存命中延迟 | 缓存未命中延迟 | 检测阈值 |
|---|---:|---:|---:|
| 单线程 | 添加结果 | 添加结果 | 添加结果 |
| 多线程 | 添加结果 | 添加结果 | 添加结果 |
## 项目范围
本项目展示了以下方面的经验:
- 硬件安全;
- 处理器缓存行为;
- 时间测量;
- 底层系统编程;
- 多线程;
- 实验性研究;
- 计算机体系结构;
- 技术文档编写。
## 局限性
- 结果可能因处理器架构而异。
- 缓存行为取决于硬件、操作系统和编译器优化。
- 时间阈值可能需要针对不同的系统重新校准。
- 多线程可能会引入调度噪声。
- 本项目是一个学术原型,而不是生产级的安全工具。
## 可能的改进
- 为每种实现添加确切的构建说明
- 添加 Makefile 或 CMake 配置
- 添加处理器和操作系统详细信息
- 记录实验方法
- 添加时间分布图
- 添加缓存命中和缓存未命中基准测试
- 添加自动化实验脚本
- 规范目录命名
- 添加可重现的测试数据
- 添加研究报告的 PDF 版本
- 添加许可证
- 添加 GitHub Actions 进行编译检查
## 负责任的使用
本仓库仅用于:
- 学术研究;
- 受控的安全实验;
- 防御性安全教育;
- 理解处理器和缓存的行为。
未经授权,请勿将本仓库中的技术用于攻击系统。
## 项目状态
本项目是作为硬件安全和基于缓存的侧信道分析的独立研究完成的。
标签:Flush+Reload, Prime+Reload, UML, 侧信道攻击, 客户端加密, 硬件安全, 缓存侧信道