abdullaabdullazade/RsaRustTool
GitHub: abdullaabdullazade/RsaRustTool
这是一个用 Rust 编写的高性能并行 RSA 攻击工具,用于加速 CTF 加密挑战的解决和安全评估。
Stars: 0 | Forks: 0
# RsaRustTool
[](https://crates.io/crates/rsa-rust-tool)
[](LICENSE)
一个高性能 RSA 攻击框架 [RsaCtfTool](https://github.com/RsaCtfTool/RsaCtfTool) 的 Rust 移植版,具有兼容的 CLI 语法和输出格式。
## 为何选择 Rust?
| 特性 | Python RsaCtfTool | RsaRustTool |
|-----------------------|------------------------|------------------------|
| 算术实现 | gmpy2 (GMP) | rug (GMP,相同后端) |
| 并行性 | 单线程 | rayon (所有核心) |
| 启动时间 | 约 1–2 秒 | 约 10 毫秒 |
| Fermat 攻击 | 基准 | 3–5 倍速 |
| Brent / Pollard | 基准 | 4–8 倍速 |
| 外部依赖 | sage, yafu, ecm … | 无 |
| 二进制大小 | 不适用 | 2.5 MB |
## 安装说明
### 前置条件
```
# Fedora / RHEL
sudo dnf install gmp-devel
# Debian / Ubuntu
sudo apt install libgmp-dev
```
### 从源码构建
```
git clone https://github.com/abdullaabdullazade/RsaRustTool.git
cd RsaRustTool
# 如果缺失则安装 Rust 工具链
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"
cargo build --release
./target/release/RsaRustTool --help
```
### 通过 Cargo 安装
```
cargo install rsa-rust-tool
```
### 全局命令(可选)
在项目目录内运行以下命令:
```
mkdir -p ~/.local/bin
ln -sf "$PWD/target/release/RsaRustTool" ~/.local/bin/RsaRustTool
```
然后将 `~/.local/bin` 添加到你的 PATH —— 根据你的 shell 选择:
**Bash**
```
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
```
**Zsh**
```
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
```
**Fish**
```
fish_add_path ~/.local/bin
```
## 文档
完整文档可在 GitHub Pages 上找到:
| 页面 | 描述 |
|------|------|
| [入门指南](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/getting-started) | 安装、构建、第一个命令、全局 PATH 设置 |
| [CLI 参考](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/cli) | 所有标志、示例和攻击选择 |
| [攻击兼容性](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/attacks) | 覆盖范围、运行时分组和存根 |
| [架构](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/architecture) | 内部流程、调度器模型、模块职责 |
| [基准测试](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/benchmark) | Rust vs Python 工作流程和可复现性提示 |
| [故障排除](https://abdullaabdullazade.github.io/RsaCtfTool-Rust/troubleshooting) | 针对超时、恐慌和环境问题的快速修复 |
## 使用方法
```
# 分解公钥并输出私钥
./RsaRustTool --publickey key.pub --private
# 解密密文(十六进制或整数)
./RsaRustTool --publickey key.pub --decrypt
# 从文件解密
./RsaRustTool --publickey key.pub --decryptfile cipher.bin
# 运行特定攻击
./RsaRustTool --publickey key.pub --attack fermat,wiener
# 直接提供 n 和 e
./RsaRustTool -n 123456789 -e 65537 --private
# 多个密钥(启用 common_factors、hastads、common_modulus_related_message)
./RsaRustTool --publickey "*.pub" --private
# 从组件创建公钥
./RsaRustTool -n 123456789 -e 65537 --createpub
# 转储密钥参数
./RsaRustTool --publickey key.pub --dumpkey
# 扩展转储(dp、dq、pinv、qinv)
./RsaRustTool --publickey key.pub --dumpkey --ext
# 设置超时和线程数
./RsaRustTool --publickey key.pub --timeout 120 -j 4
# 详细输出
./RsaRustTool --publickey key.pub --verbosity DEBUG
```
## CLI 标志
| 标志 | 默认值 | 描述 |
|------|--------|------|
| `--publickey` | — | PEM 公钥文件(支持通配符) |
| `--key` | — | 私钥文件 |
| `--output` | — | 将结果写入文件 |
| `--timeout` | 60 | 攻击超时时间(秒) |
| `--attack` | all | 攻击名称(逗号分隔) |
| `-n / -e / -p / -q / -d` | — | 直接提供密钥组件 |
| `--private` | false | 打印私钥 |
| `--createpub` | false | 从 n, e 创建公钥 |
| `--dumpkey` | false | 显示 n, e, d, p, q |
| `--ext` | false | 同时显示 dp, dq, pinv, qinv |
| `--decrypt` | — | 解密十六进制/整数密文 |
| `--decryptfile` | — | 从文件解密 |
| `--verbosity` | INFO | DEBUG / INFO / WARNING / ERROR / CRITICAL |
| `--check_publickey` | false | 验证密钥形状 |
| `--isroca` | false | 检查 ROCA 漏洞 |
| `--isconspicuous` | false | 运行可疑密钥检查 |
| `--partial` | false | 处理部分密钥输入 |
| `--convert_idrsa_pub` | false | 将 idrsa.pub → PEM 转换 |
| `--show_modulus` | false | 打印模数 |
| `--cleanup` | false | 删除生成的 `*.pub` 文件 |
| `--password` | — | 密钥密码 |
| `--ecmdigits` | — | ECM 数字长度提示 |
| `--sendtofdb` | false | 发送到 FactorDB(无操作) |
| `--tests` | false | 运行攻击测试 |
| `--withtraceback` | false | 打印回溯信息 |
| `-j / --threads` | 0 (全部) | Rayon 线程数 |
## 攻击兼容性
状态截至 2026-05-16:
| 指标 | 值 |
|------|-----|
| RsaCtfTool 攻击名称 | 59 / 59 存在 |
| RsaRustTool 总注册 | 61 个名称 |
| 额外内部名称 | `coppersmith`, `nullattack` |
| 单密钥注册 | 57 |
| 多密钥注册 | 4 |
**运行时状态:**
- **50** 个攻击可运行 (`can_run = true`)。
- **11** 个为兼容性存根 (`can_run = false`):`factordb`, `pastctfprimes`, `rapid7primes`, `lattice`, `qicheng`, `qs`, `siqs`, `small_crt_exp`, `wolframalpha`, `z3_solver`, `neca`。
**速度分组:**
| 分组 | 数量 |
|------|------|
| 快速 | 9 |
| 中等 | 36 |
| 慢速 | 12 |
| 多密钥 | 4 |
## 基准测试
运行 Rust vs Python 比较:
```
python -u scripts/benchmark_compare_attacks.py --attacks all --timeout 6 --repeat 1
```
该脚本需要本地克隆 [RsaCtfTool](https://github.com/RsaCtfTool/RsaCtfTool) 及其 Python 环境已设置好。如果路径不同,请在你的机器上使用 `--rsactf-root`、`--python-bin` 和 `--rust-bin`。
**2026-05-16 快照(两者均成功子集,43 次攻击):**
| 指标 | 值 |
|------|-----|
| 平均加速比 (Py / Rust) | ×57.98 |
| 中位加速比 | ×56.55 |
| Python 超时 | 16 |
| Rust 超时 | 0 |
| Rust 慢于 Python | 0 |
最高加速比:
| 攻击 | Python (秒) | Rust (秒) | 加速比 |
|------|----------:|--------:|--------:|
| `boneh_durfee` | 0.339 | 0.003 | ×105.00 |
| `ecm2` | 0.509 | 0.005 | ×103.27 |
| `siqs` | 0.317 | 0.003 | ×99.22 |
| `noveltyprimes` | 0.597 | 0.006 | ×97.86 |
| `factordb` | 0.386 | 0.004 | ×97.17 |
## 输出格式
```
Results for key.pub:
Private key :
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Decrypted data :
HEX : 0x666c61677b...
INT (big endian) : 123456789...
INT (little endian) : 987654321...
utf-8 : flag{...}
STR : b'flag{...}'
```
## 测试
```
# 运行所有测试
cargo test --release
# 运行单个测试
cargo test --release test_fermat
# 带输出
cargo test --release -- --nocapture
```
## 架构
```
src/
├── main.rs — CLI (clap), Python-compatible flags
├── lib.rs — crate root
├── attack.rs — RsaAttack trait + AttackEngine (rayon parallel)
├── key.rs — PEM import/export (manual DER)
├── math.rs — Miller-Rabin, iroot, mlucas, CRT, gcdext
├── output.rs — Python-compatible output formatting
└── attacks/
├── mod.rs — Registry: single_key_attacks(), multi_key_attacks()
└── *.rs — 55 attack modules
scripts/
└── benchmark_compare_attacks.py
tests/
└── attack_tests.rs
```
**设计决策:**
- **仅用 `rug`** —— 所有算术通过 GMP;不使用 `num-bigint`。
- **`rayon` 并行** —— 攻击并发运行;首次成功则中止其余。
- **纯 Rust** —— 无 unsafe 代码。
- **离线优先** —— 无实时 FactorDB 调用。
- **手动 DER** —— 无 `rsa` crate 依赖。
- **ANSI 颜色** —— 匹配 Python 的 `CustomFormatter` 输出样式。
## 许可证
MIT
标签:CTF挑战, DNS解析, GMP库, Rayon并行计算, RSA攻击, RSA漏洞, Rust语言, 加密破解, 可视化界面, 安全测试, 密码分析, 密码学, 密码学工具, 密码攻击框架, 开源项目, 快速破解, 手动系统调用, 攻击性安全, 通知系统, 高性能计算