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算法, 侧信道攻击, 信息安全, 加密技术, 学术研究, 安全漏洞, 实验分析, 密码学, 密码学实现, 密钥泄露, 性能分析, 手动系统调用, 攻击技术, 时间侧信道, 本科论文, 硬件安全, 统计分析, 缓存侧信道, 编译优化, 逆向工具