abdullaabdullazade/RsaRustTool

GitHub: abdullaabdullazade/RsaRustTool

这是一个用 Rust 编写的高性能并行 RSA 攻击工具,用于加速 CTF 加密挑战的解决和安全评估。

Stars: 0 | Forks: 0

# RsaRustTool [![Crates.io](https://img.shields.io/crates/v/rsa-rust-tool.svg)](https://crates.io/crates/rsa-rust-tool) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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语言, 加密破解, 可视化界面, 安全测试, 密码分析, 密码学, 密码学工具, 密码攻击框架, 开源项目, 快速破解, 手动系统调用, 攻击性安全, 通知系统, 高性能计算