rshreya20/timing-side-channel-attack
GitHub: rshreya20/timing-side-channel-attack
一个演示计时旁路攻击原理的教学项目,展示如何通过密码验证的时间差异恢复密钥,并提供安全实现对照。
Stars: 0 | Forks: 0
# 计时旁路攻击演示
本项目演示了针对易受攻击身份验证系统的**计时旁路攻击**。
它展示了攻击者如何通过分析密码验证过程中的**响应时间差异**来恢复秘密密码。
## 项目概述
在许多系统中,密码是**逐个字符**比较的。
如果每个正确字符之后都会发生延迟,系统就会通过**计时差异**无意中泄露信息。
攻击者可以通过以下方式利用这一点:
- 发送多个密码猜测
- 测量身份验证系统的响应时间
- 根据较长的响应时间推断正确的字符
- 逐步重构整个密码
本项目模拟了该攻击,并演示了如何**缓解该漏洞**。
## 演示的关键概念
- 旁路攻击
- 计时攻击
- 密码认证漏洞
- 安全的常量时间比较
- 自动化攻击脚本
- 安全缓解技术
## 项目结构
SIDE_CHANNEL_PRJCT
│
├── password_checker.py
├── attack_script.py
├── secure_password_checker.py
├── vulnerable_server.py
├── timing_attack.py
├── timing_graph.py
└── timing_results.txt
## 文件说明
### password_checker.py
- 模拟**易受攻击的身份验证系统**
- 按顺序比较密码字符
- 在每个正确字符后引入延迟
- 造成计时旁路漏洞
### attack_script.py
- 执行**本地计时攻击**
- 测量不同密码猜测的执行时间
- 逐个字符恢复密码
### secure_password_checker.py
- 演示**安全实现**
- 使用常量时间比较(`hmac.compare_digest`)
- 防止计时泄露
### vulnerable_server.py
- 实现**基于 Flask 的登录 API**
- 模拟现实世界中易受攻击的 Web 身份验证系统
### timing_attack.py
- 向易受攻击的服务器发送自动化的 **HTTP 请求**
- 测量响应时间
- 利用计时差异推断正确的密码字符
### timing_graph.py
- 可视化计时泄露
- 生成图表,显示响应时间如何随着正确字符的增加而增加
### timing_results.txt
- 存储攻击期间收集的计时测量数据
## 攻击原理
1. 攻击者向系统发送多个密码猜测。
2. 系统逐个比较字符并产生延迟。
3. 如果匹配的字符越多,响应时间就越长。
4. 攻击者测量响应时间。
5. 攻击者识别导致最长延迟的字符。
6. 重复此过程,直到恢复完整密码。
## 安全缓解措施
为了防止计时攻击:
- 使用**常量时间比较函数**
- 避免逐个字符的密码检查
- 实施适当的身份验证框架
安全比较示例:
```
import hmac
hmac.compare_digest(user_input, real_password)
```
标签:CWE-208, Flask, hmac, Python, T1059, Web安全, 侧信道攻击, 安全漏洞演示, 密码学, 密码安全, 恒定时间比较, 手动系统调用, 攻击脚本, 无后门, 时序攻击, 时间延迟分析, 网络安全实验, 蓝队分析, 身份验证绕过, 逆向工具, 防御缓解