giuliozing/SideChannelAttacks
GitHub: giuliozing/SideChannelAttacks
基于缺页侧信道的公钥密码密钥恢复概念验证工具,通过分析内存访问追踪数据重建模幂运算和椭圆曲线标量乘法的秘密参数。
Stars: 0 | Forks: 0
# 缺页侧信道攻击
针对公钥密码实现的密钥恢复概念验证攻击,利用了**缺页侧信道**:能够观察(或诱导)受害者在执行期间发生缺页异常的攻击者可以推断出随时间推移被访问的内存页,并从该访问模式中重建用于模幂运算和椭圆曲线标量乘法的秘密指数/标量。
每个脚本都会读取一份记录的缺页追踪数据(即受害者进程访问的一系列内存地址),并根据页面访问模式重建密钥,而无需直接看到密钥本身。
该项目由 Shweta Shinde 教授指导,为苏黎世联邦理工学院的**信息安全实验室**开发。最终得分:100/100。
## 攻击
| 脚本 | 攻击 | 描述 |
|---|---|---|
| `double_and_add_key_recovery.py` | 平方乘(Double-and-add)模幂运算 | 识别出访问最频繁的页面(模幂运算循环),并在其调用的页面中,通过相对频率和顺序区分*平方*(double)和*乘*(add)操作。平方和乘操作的交替直接揭示了密钥的位。 |
| `naf_scalar_multiplication_key_recovery.py` | NAF(Non-Adjacent Form,非相邻形式)标量乘法 | 定位从标量乘法循环进入点加倍例程的转换过程,并检查每次迭代中访问的辅助页面,以恢复每个 NAF 数字(`-1`、`0` 或 `1`)。然后将数字序列转换回整数标量。 |
| `sliding_window_exponentiation_key_recovery.py` | 固定窗口模幂运算 | 跟踪对固定窗口模幂运算使用的预计算查找表的访问。访问的表索引序列直接对应于秘密指数的固定大小窗口,将这些窗口拼接即可重建密钥。 |
## 用法
每个脚本都是一个独立的命令行工具,可读取追踪文件并输出十六进制格式的恢复密钥。
```
python3 double_and_add_key_recovery.py
python3 naf_scalar_multiplication_key_recovery.py
python3 sliding_window_exponentiation_key_recovery.py _mem
```
追踪文件应每行包含一个十六进制内存地址,这是由缺页/内存访问追踪工具(例如,在密码操作期间监控受害者进程的插桩 hypervisor、基于 `ptrace` 的追踪器或指令级模拟器)生成的。
## 环境要求
- Python 3
无需第三方依赖。
## 免责声明
此代码是作为大学安全课程的一部分,出于教育目的而编写的。它旨在演示受控实验室环境中的密码侧信道漏洞,未经明确授权,严禁将其用于攻击任何系统。
## 许可证
本项目基于 MIT 许可证授权 — 有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:Python, 侧信道攻击, 信息安全的, 密码学, 密钥恢复, 手动系统调用, 无后门