nottarik/timing-attack-rsa
GitHub: nottarik/timing-attack-rsa
这是一个学术研究项目,通过实验演示了RSA密码系统中的时序与缓存侧信道攻击,并分析了漏洞和防御措施。
Stars: 0 | Forks: 0
# RSA 时序侧信道攻击
针对 RSA 密码系统的时序与缓存侧信道攻击的实验分析。本项目作为萨拉热窝大学电气工程学院本科毕业论文而实现。
## 概述
本研究演示了通过平方乘算法实现的朴素 RSA 实现,会因执行时间的可测量差异而泄露私钥信息。共进行了七项实验:
| # | 实验 | 关键发现 |
|---|---|---|
| 1 | 时间泄漏检测 | 每比特差异 +75.90 个 CPU 周期 (p < 10⁻⁵⁰) |
| 2 | 平均化攻击 | 当 K ≥ 2000 次/比特测量时,准确率达 100% |
| 3 | 64 位密钥盲重构 | 64/64 比特正确,攻击者从未直接看到密钥 |
| 4 | 分析所有 64 个比特位 | 每个位置均存在泄漏 (p < 10⁻⁹) |
| 5 | 编译器优化影响 | GCC -O0 至 -O3 无法消除漏洞 |
| 6 | RSA 盲化 | 无法防御分支相关泄漏 |
| 7 | Flush+Reload 缓存攻击 | 341.5 周期分离度,单次测量即可分类 |
## 要求
**平台:** Linux (在 Ubuntu 24.04 LTS, x86_64 上测试)
**工具:**
```
# 编译器
gcc --version # GCC 13+
# Python 依赖
pip install -r requirements.txt # numpy, pandas, scipy, matplotlib
```
**推荐硬件:** 具有不变 TSC (constant_tsc, nonstop_tsc) 的 Intel Core 处理器
## 硬件设置
为获得可靠测量结果,需关闭动态频率调节:
```
# 禁用 Intel Turbo Boost
echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
# 设置性能调节器
sudo cpupower frequency-set -g performance
```
详细说明请参见论文附录 A 及脚本 `setup.sh`。
## 编译与运行
```
# 编译所有组件
make all
# ── 实验 1 & 2:泄漏检测与平均攻击 ──
make run # Pokretanje (pinuje na CPU 0)
make analyze # Statistička analiza → reports/analysis_latest.md
# ── 实验 3:密钥盲重建 ──
make run-blind-recon
# ── 实验 4:扫描全部 64 位位置 ──
make run-sweep
# ── 实验 5:编译器优化 ──
make compiler-experiment
# ── 实验 6:RSA 盲化 ──
make run-blinding
# ── 实验 7:Flush+Reload 缓存攻击 ──
# 在两个独立终端中运行:
make run-flush-reload # pokreće victim i attacker procese
# ── 汇编代码验证 ──
make check_asm # Verifikuje branch/cmov u generisanom kodu
```
## 项目结构
```
.
├── rsa.c / rsa.h # RSA implementacije (ranjiva, constant-time,
│ # Montgomery ladder, blinding)
├── timing.h # RDTSCP/CPUID mjerenje CPU ciklusa
├── experiment.c # Eksp. 1 & 2: detekcija curenja, averaging napad
├── key_reconstruct_blind.c # Eksp. 3: slijepa rekonstrukcija 64-bitnog ključa
├── oracle_blind.c / oracle_blind.h # Oracle interfejs (tajni ključ skrivena od napadača)
├── key_reconstruct.c # Direktna rekonstrukcija (napadač zna ključ)
├── multi_bit_sweep.c # Eksp. 4: sistematska analiza svih 64 pozicija
├── rsa_no_attr.c # Eksp. 5: kompajlerske varijante bez optimize atributa
├── blinding_experiment.c # Eksp. 6: evaluacija RSA blinding kontramjere
├── victim_fr.c # Eksp. 7: Flush+Reload žrtva
├── attacker_fr.c # Eksp. 7: Flush+Reload napadač
├── librsa_shared.c # Dijeljeni RSA kod za cache napad (.so biblioteka)
│
├── analysis.py # Statistička analiza: Welch t-test, Mann-Whitney U,
│ # Cohen's d, bootstrap CI, power analysis
├── key_reconstruct_blind_analysis.py
├── sweep_analysis.py
├── blinding_analysis.py
├── compiler_analysis.py
├── flush_reload_analysis.py
├── report_utils.py # Zajednički alati za generisanje Markdown reporta
│
├── Makefile # Build sistem sa svim eksperimentalnim targetima
├── setup.sh # Skripta za konfiguraciju hardverskog okruženja
├── requirements.txt # Python zavisnosti
│
└── latex/ # LaTeX izvorni kod teze i kompajlirani PDF
```
## 平台
实验在以下平台进行:
- **计算机:** Lenovo ThinkPad T14 Gen 4
- **处理器:** Intel Core i5-1335U (Raptor Lake, 第 13 代,混合架构)
- **操作系统:** Ubuntu Linux 24.04 LTS, 内核 6.17.0-19
- **编译器:** GCC 13.3
具体数值(75.90 周期差异,σ ≈ 567 周期,K = 2000 达到 100% 准确率)针对此架构。泄漏的根本机制适用于所有使用朴素平方乘算法实现的 x86 平台。
## 关于数据的说明
实验数据(CSV 文件,约 190 MB)未包含在代码仓库中。运行 `make run` 将在您的平台上生成新的数据集。
标签:CPU时序测量, meg, RSA算法, 侧信道攻击, 信息安全, 加密技术, 学术研究, 安全漏洞, 实验分析, 密码学, 密码学实现, 密钥泄露, 性能分析, 手动系统调用, 攻击技术, 时间侧信道, 本科论文, 硬件安全, 统计分析, 缓存侧信道, 编译优化, 逆向工具