Skip to content

wooluo/RSA

Repository files navigation

🔐 RSA CTF 工具集

一套专为CTF比赛中RSA相关题目设计的强大工具集,集成了多种常见的RSA攻击方法和自动化解密功能。

image image

Python License CTF

📋 目录

✨ 功能特色

  • 🚀 一键解密 - 自动识别攻击方法,快速解密
  • 🔍 智能分解 - 集成多种因数分解算法和在线查询
  • 🎯 多种攻击 - 支持10+种常见RSA攻击方法
  • 📁 格式兼容 - 支持PEM、DER、Base64、Hex等多种格式
  • 🛠️ 易于使用 - 命令行和Python API双重接口
  • 📊 进度显示 - 长时间运算显示实时进度
  • 🔧 错误恢复 - 一种方法失败自动尝试其他方法

🚀 快速开始

1. 克隆或下载代码

git clone <repository-url>
cd RSA

2. 一键启动

# 使用一键启动脚本
./run.sh

# 或手动安装
python3 -m venv venv
source venv/bin/activate
pip install pycryptodome gmpy2 rsa requests

3. 立即使用

# 最简单的使用方式
python3 quick_rsa.py key.pub flag.b64

# 或使用启动脚本
./run.sh quick_rsa.py key.pub flag.b64

4. 🖥️ GUI图形界面(推荐)

为了更加便捷的使用,我们提供了美观的GUI界面:

# 安装GUI依赖
pip install PyQt6

# 启动GUI界面
python3 run_gui.py

# 或者直接运行
python3 rsa_gui.py

GUI界面特点:

  • 🎨 美观的图形界面,操作简单直观
  • 📋 多标签页设计:快速解密、RSA攻击、因数分解、RSA工具集、使用示例
  • 🚀 一键式操作,适合初学者和高级用户
  • 📊 实时进度显示和结果反馈
  • 📋 文件拖拽支持,操作更便捷
  • 📚 内置详细的使用教程和示例

💡 推荐使用GUI界面,特别适合新手学习和复杂攻击场景。详细使用说明请参考 GUI_USAGE.md

5. 🍎 Mac应用程序

对于macOS用户,我们提供了独立的.app应用程序包:

# 构建 Mac 应用程序
python3 build_app.py

# 或者使用 Bash 脚本
./build_app.sh

Mac应用程庋特点:

  • 🍎 原生macOS应用体验,与系统完美集成
  • 📦 独立应用包,无需安装Python环境
  • 🎨 精美的应用图标和界面
  • 📞 支持文件关联,可直接双击打开RSA文件
  • 🗺 支持拖拽放置到Applications文件夹

📚 详细构建指南请参考 BUILD_MAC_APP.md

🛠️ 工具说明

🔧 主要工具

工具 描述 适用场景
quick_rsa.py 快速解密脚本,基于经典方法优化 大多CTF题目的首选工具
rsa_gui.py 🎆 GUI图形界面(推荐) 初学者友好,集成所有功能
rsa_ctf_tool.py 完整功能的RSA工具集 需要高级功能和多种攻击方法
factor_tool.py 专门的因数分解工具 单独进行因数分解任务
rsa_attacks.py RSA攻击方法集合 特定攻击方法的研究和实现
test_rsa.py 测试脚本 生成测试用例、验证工具功能
examples.py 使用示例 学习如何使用各种工具
run.sh 一键启动脚本 快速环境配置和工具运行
run_gui.py GUI启动脚本 一键启动图形界面
build_app.py 🍎 Mac应用构建脚本 构建Mac .app应用程序包

📚 使用方法

🎯 快速使用 (推荐)

适用于90%的CTF RSA题目:

# 基本用法 - 自动分解并解密
python3 quick_rsa.py key.pub flag.b64

# 已知p和q的情况
python3 quick_rsa.py key.pub flag.b64 <p> <q>

# 使用一键启动脚本
./run.sh quick_rsa.py key.pub flag.b64

🔍 因数分解

单独进行因数分解:

# 传入n的值
python3 factor_tool.py 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019

# 使用启动脚本
./run.sh factor_tool.py <n的值>

🎆 高级用法

使用主工具集的完整功能:

# 命令行模式
python3 rsa_ctf_tool.py -k key.pub -c flag.b64 -f base64

# 交互模式
python3 rsa_ctf_tool.py

# 显示RSA参数信息
python3 rsa_ctf_tool.py -k key.pub --info

# 尝试Wiener攻击
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener

命令行参数说明

参数 描述 示例
-k, --key 公钥文件路径 -k public.pem
-c, --cipher 密文文件路径 -c encrypted.txt
-f, --format 密文格式 -f base64 / -f hex / -f int
-n RSA模数n -n 12345...
-e RSA指数e -e 65537
-p RSA质数p -p 123...
-q RSA质数q -q 456...
--info 显示RSA参数信息 --info
--factor 尝试分解n --factor
--wiener 尝试Wiener攻击 --wiener

🛡️ 攻击方法

本工具集支持10+种常见的RSA攻击方法:

📊 因数分解类

方法 适用场景 复杂度
在线分解 已知因数的n,查询FactorDB O(1)
试除法 小质因数,弱密钥 O(√n)
费马分解 p和q接近时 O(√(q-p))
Pollard's rho 通用分解方法 O(n^1/4)

🔑 低指数攻击类

方法 适用场景 成功条件
小指数攻击 e=3且消息小 m^e < n
Håstad广播攻击 相同消息,相同e,不同n 需要e个密文
共模攻击 相同n,不同e,相同消息 gcd(e1,e2)=1

🔍 私钥攻击类

方法 适用场景 成功条件
Wiener攻击 d相对较小 d < n^1/4
部分密钥泄露 知道d的部分位 需要格攻击
dp/dq泄露 知道dp或dq dp=d mod(p-1)

🎯 示例场景

💼 场景1:标准RSA解密

# 你有公钥文件和base64编码的密文
python3 quick_rsa.py public_key.pem encrypted.b64

# 输出示例:
# [+] 成功加载公钥
# [*] 尝试在线分解 n...
# [+] FactorDB分解成功!
# [+] 解密成功: flag{example_flag}

🔢 场景2:已知p和q

# 从其他途径获得了p和q(如文件泄露、其他题目)
python3 quick_rsa.py key.pub flag.b64 863653476616376575308866344984576466644942572246900013156919 965445304326998194798282228842484732438457170595999523426901

📊 场景3:只有n和e

from rsa_ctf_tool import RSACTFTool

tool = RSACTFTool()
# 设置参数
tool.set_params(n=12345..., e=65537)
# 尝试自动分解
if tool.calculate_private_key():
    result = tool.decrypt_message(ciphertext)
    print(f"解密结果: {result}")

⚡ 场景4:小指数攻击 (e=3)

from rsa_attacks import RSAAttacks

# e=3的小指数攻击
n = 12345678901234567890
e = 3
c = 98765432109876543210

result = RSAAttacks.small_e_attack(c, n, e=3)
if result:
    print(f"攻击成功: {result.decode()}")

🔄 场景5:共模攻击

from rsa_attacks import RSAAttacks

# 相同n,不同e,加密相同消息
n = 12345...
e1, e2 = 3, 65537
c1 = ...  # 用e1加密的密文
c2 = ...  # 用e2加密的密文

result = RSAAttacks.common_modulus_attack(c1, c2, e1, e2, n)
if result:
    print(f"共模攻击成功: {result.decode()}")

📜 场景6:批量处理

# 处理多个文件
for i in {1..10}; do
    echo "处理第$i个文件..."
    python3 quick_rsa.py key$i.pub flag$i.b64
done

🔍 场景7:Wiener攻击

# 当d相对较小时
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener

# 或在Python中
from rsa_attacks import RSAAttacks
d, p, q = RSAAttacks.wiener_attack(n, e)
if d:
    print(f"Wiener攻击成功: d={d}")

📦 安装说明

方法1:一键安装 (推荐)

# 使用一键启动脚本,自动处理虚拟环境和依赖
./run.sh

方法2:作为Python包安装

# 从源码安装
pip install -e .

# 或者安装开发版本
pip install -e ".[dev]"

# 安装后可以在任意位置使用命令
rsa-quick key.pub flag.b64
rsa-factor 123456789
rsa-ctf -k key.pub -c flag.b64

方法3:手动安装

# 1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate     # Windows

# 2. 使用requirements.txt安装依赖 (推荐)
pip install -r requirements.txt

# 或者手动安装单个包
pip install pycryptodome gmpy2 rsa requests

# 3. 验证安装
python3 test_rsa.py

方法4:全局安装

# 使用requirements.txt安装到系统 Python 环境 (推荐)
pip3 install -r requirements.txt

# 或者直接安装单个包
pip3 install pycryptodome gmpy2 rsa requests

📁 依赖文件说明

项目提供了多个依赖文件用于不同场景:

文件 用途 使用场景
requirements.txt 基础运行依赖 生产环境、CTF比赛
requirements-dev.txt 开发环境依赖 代码开发、测试、调试
requirements-lock.txt 精确版本锁定 重现环境、CI/CD
# 基础使用
pip install -r requirements.txt

# 开发环境 (包含测试、格式化等工具)
pip install -r requirements-dev.txt

# 精确重现环境 (用于生产部署)
pip install -r requirements-lock.txt

依赖说明

依赖包 版本要求 用途
pycryptodome ≥ 3.0 RSA加密解密、密钥处理
gmpy2 ≥ 2.0 大整数运算、数学函数
rsa ≥ 4.0 RSA密钥操作
requests ≥ 2.20 在线分解查询

常见安装问题

Q: gmpy2安装失败

# macOS
brew install gmp mpfr libmpc
pip install gmpy2

# Ubuntu/Debian
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
pip install gmpy2

# CentOS/RHEL
sudo yum install gmp-devel mpfr-devel libmpc-devel
pip install gmpy2

Q: pycrypto vs pycryptodome

# 如果遇到pycrypto兼容性问题,卸载并安装pycryptodome
pip uninstall pycrypto -y
pip install pycryptodome

测试工具

运行测试脚本验证工具是否正常工作:

python3 test_rsa.py

这会生成测试用的公钥、密文文件,并验证解密过程。

❓ 常见问题

🌐 网络相关

Q: FactorDB查询失败

# 检查网络连接
curl -I http://factordb.com

# 或者手动访问
open http://factordb.com

# 如果网络不可用,使用本地分解方法
python3 factor_tool.py <n>  # 会自动尝试本地算法

🔐 解密相关

Q: 解密失败

# 1. 检查密文格式
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f base64
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f hex
python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f int

# 2. 检查公钥格式
file key.pub  # 查看文件类型
openssl rsa -pubin -in key.pub -text -noout  # 解析公钥

Q: 编码错误

# 解密后的消息可能不是标准文本,检查十六进制输出
python3 -c "print(bytes.fromhex('hex_string').decode('utf-8'))"

# 或者尝试不同编码
python3 -c "print(data.decode('latin-1'))"  # 尝试其他编码

🔢 因数分解相关

Q: 无法分解n

# 1. n可能使用了强质数,尝试其他攻击方法
python3 rsa_ctf_tool.py -n <n> -e <e> --wiener

# 2. 尝试小指数攻击
if [ $e -eq 3 ]; then
    python3 -c "from rsa_attacks import RSAAttacks; RSAAttacks.small_e_attack(c, n, 3)"
fi

# 3. 检查是否有其他线索(如dp, dq, hint等)

🛠️ 工具使用相关

Q: 权限错误

# 给启动脚本添加执行权限
chmod +x run.sh

# 或者直接使用bash
bash run.sh

Q: Python版本不兼容

# 检查Python版本
python3 --version  # 需要Python 3.7+

# 如果版本过低,使用pyenv或conda安装新版本

Q: 模块导入错误

# 检查是否在正确的目录
pwd  # 应该在RSA工具集目录

# 检查模块是否存在
ls -la *.py

# 添加当前目录到Python路径
export PYTHONPATH="$PWD:$PYTHONPATH"

🏆 CTF技巧

🚀 速战策略

  1. 优先级攻击顺序

    在线分解 > 小指数攻击 > Wiener攻击 > 费马分解 > 本地分解
    
  2. 快速检查清单

    • ✅ 检查 e 的大小 (e=3 尝试小指数攻击)
    • ✅ 检查 n 的位数 (低于 512 位可能可以暴力分解)
    • ✅ 检查是否有多个密文 (尝试共模攻击)
    • ✅ 检查是否有 dp/dq 等提示

📊 效率优化

  1. 批量处理

    # 处理多个相似的题目
    find . -name "*.pub" | while read key; do
        flag="${key%.pub}.b64"
        if [ -f "$flag" ]; then
            echo "处理: $key -> $flag"
            python3 quick_rsa.py "$key" "$flag"
        fi
    done
  2. 保存中间结果

    # 分解结果保存到文件
    python3 factor_tool.py $n | tee factors.txt
    
    # 重复使用分解结果
    p=$(grep "p =" factors.txt | cut -d' ' -f3)
    q=$(grep "q =" factors.txt | cut -d' ' -f3)
    python3 quick_rsa.py key.pub flag.b64 $p $q

🔍 进阶技巧

  1. 组合攻击

    # Python 脚本示例
    from rsa_ctf_tool import RSACTFTool
    from rsa_attacks import RSAAttacks
    
    tool = RSACTFTool()
    tool.load_public_key('key.pub')
    
    # 尝试多种攻击方法
    for attack in ['online', 'wiener', 'fermat', 'small_e']:
        result = tool.try_attack(attack, ciphertext)
        if result:
            print(f"{attack} 攻击成功: {result}")
            break
  2. 文件格式识别

    # 自动识别密文格式
    if file flag.txt | grep -q "ASCII text"; then
        # 可能是base64或hex
        if [[ $(cat flag.txt) =~ ^[A-Za-z0-9+/]*={0,2}$ ]]; then
            echo "检测到Base64格式"
            python3 quick_rsa.py key.pub flag.txt
        elif [[ $(cat flag.txt) =~ ^[0-9a-fA-F]+$ ]]; then
            echo "检测到Hex格式"
            python3 rsa_ctf_tool.py -k key.pub -c flag.txt -f hex
        fi
    fi

📝 调试技巧

  1. 详细输出

    # 开启详细模式
    python3 rsa_ctf_tool.py -k key.pub -c flag.b64 --info --factor --wiener
  2. 手动验证

    # 手动验证结果
    from Crypto.PublicKey import RSA
    import base64
    
    # 加载公钥
    with open('key.pub', 'rb') as f:
        pub_key = RSA.importKey(f.read())
    
    # 检查参数
    print(f"n = {pub_key.n}")
    print(f"e = {pub_key.e}")
    print(f"n的位数: {pub_key.n.bit_length()}")
    
    # 验证 p * q = n
    if p * q == pub_key.n:
        print("✅ p * q = n 验证正确")

📦 工具链搭配

  1. 与其他工具结合

    # 与RsaCtfTool结合使用
    if ! python3 quick_rsa.py key.pub flag.b64; then
        echo "尝试RsaCtfTool..."
        python2 RsaCtfTool.py --publickey key.pub --uncipherfile flag.b64
    fi
    
    # 与sage结合
    if command -v sage &> /dev/null; then
        echo "使用Sage进行高级攻击..."
        sage advanced_attacks.sage
    fi
  2. 性能监控

    # 监控运行时间
    time python3 factor_tool.py $large_n
    
    # 设置超时
    timeout 300 python3 factor_tool.py $large_n || echo "超时,尝试其他方法"

👥 贡献

欢迎提交Issues和Pull Requests来改进这个工具集!

贡献指南

  1. 报告Bug

    • 提供详细的错误信息
    • 包含复现步骤
    • 附上相关文件(去除敏感信息)
  2. 新增功能

    • 描述功能需求
    • 说明使用场景
    • 提供测试用例
  3. 代码贡献

    • 遵循PEP 8代码规范
    • 添加适当的注释
    • 包含单元测试

📚 相关资源

🔍 版本控制

项目已配置完整的Git忽略文件:

# 初始化Git仓库
git init
git add .
git commit -m "Initial commit: RSA CTF工具集"

# 忽略的文件类型:
# - 虚拟环境 (venv/)
# - Python字节码 (__pycache__/)
# - macOS系统文件 (.DS_Store)
# - IDE配置文件 (.vscode/, .idea/)
# - 日志和临时文件
# - 敏感的密钥文件

学习资料

工具推荐

CTF平台

📄 更新日志

v1.0.0 (2024-08-22)

  • ✨ 初始版本发布
  • ✨ 集成多种RSA攻击方法
  • ✨ 自动在线分解功能
  • ✨ 多格式密文支持
  • ✨ 一键启动脚本
  • ✨ 完整的测试用例
  • ✨ 详细的使用文档

⚠️ 免责声明

此工具仅供学习和合法的CTF比赛使用,请勿用于非法目的。

使用许可

  • ✅ 教育和学习目的
  • ✅ CTF比赛和练习
  • ✅ 安全研究和测试
  • ❌ 非法攻击他人系统
  • ❌ 未经授权的安全测试

如果这个工具对您有帮助,请给个⭐️!

制作于 2024 • 专为 CTF 爱好者设计

About

CTF RSA

Resources

Stars

Watchers

Forks

Packages

No packages published