
RSA攻撃ツール(主にCTF向け) - 弱い公開鍵から秘密鍵を取得し、および/またはデータを復号する
弱い公開鍵からデータを復号し、秘密鍵を復元するRSAマルチ攻撃ツール。
このツールは、弱い公開鍵からデータを復号し、対応する秘密鍵の復元を試みるために設計されたユーティリティです。RSA暗号を解読するための包括的な攻撃オプションを提供します。
RSAのセキュリティは整数因数分解の複雑さに依存しています。このプロジェクトは複数の因数分解アルゴリズムを組み合わせて復号能力を強化します。
注記: このツールは主に教育目的を意図しています。すべての鍵が妥当な時間内に破れるわけではありません。このツールはRSA教科書型の半素数合成 modulus(マルチプライムではない)のみをサポートします。
高度な因数分解には、msieve、yafu、またはcado-nfsの使用を検討してください。
RsaCtfTool --publickey key.pub --private # Recover private key
RsaCtfTool --publickey key.pub --decryptfile ciphertext # Decrypt file
RsaCtfTool --publickey key.pub --attack wiener # Use specific attack
完全な使用方法については、次を実行してください: RsaCtfTool --help
python3 -m venv venv
source venv/bin/activate
pip install -e .
docker build -t rsactftool/rsactftool .
docker run -it --rm -v $PWD:/data rsactftool/rsactftool <arguments>
--dp または --dq)--fault-sig と --fault-msg または --good-sig を併用)Coppersmithの格子基底縮小法は、剰余多項式の小さな根を求解します(格子LLL基底縮小にはオプションのSageMath依存関係が必要です)。
| 攻撃 | 必要なフラグ | 実行可能性の限界 | コマンド例 |
|---|---|---|---|
stereotyped_message | --sm-len および(--sm-prefix または --sm-suffix) | $e \le 17$、$X < N^{1/e}$ | RsaCtfTool --publickey key.pub --decryptfile cipher.bin --attack stereotyped_message --sm-prefix "FLAG:" --sm-len 16 |
short_pad | --decryptfile c1,c2 | $e \le 5$、$\Delta < N^{1/e^2}$ | RsaCtfTool --publickey key.pub --decryptfile c1.bin,c2.bin --attack short_pad |
partial_p | --p-high および --p-unknown-bits | $\text{unknown_bits} \le \lfloor N/4 \rfloor + 2$($\approx N^{0.25}$) | RsaCtfTool --publickey key.pub --attack partial_p --p-high 0x1234... --p-unknown-bits 212 --private |
partial_d | --key(部分的な秘密鍵)、オプションで --d-known-bits | $d$ の下位ビットが既知 | RsaCtfTool --key key.priv --partial --attack partial_d --d-known-bits 20 |
lattice | --key($p$ の近似値を含む部分的な鍵) | 因数 $p$ の近似値 | RsaCtfTool --key key.priv --partial --attack lattice |
smallfraction | --publickey | $p/q$ が小さな分数 $a/b$ に近い | RsaCtfTool --publickey key.pub --attack smallfraction --private |
テキストパラメータ(
--sm-prefix、--sm-suffix)に関する注意:0xまたは0Xで始まる値は16進バイト文字列として解析され、それ以外の文字列入力はすべてUTF-8 / ASCIIテキストのバイト列として解析されます。
| 手法 | 説明 |
|---|---|
| Fermat | p と q が近い場合 |
| Pollard Rho | 一般的な因数分解 |
| 楕円曲線法(ECM) | 滑らかな数 |
| Pollard p-1 | 滑らかな数 |
| Williams p+1 | 滑らかな数 |
| ROCA | 脆弱な鍵生成 |
| SQUFOF | 平方形式 |
| 二次篩法 | 一般的な因数分解 |
| Dixon | ランダム平方 |
| Factordb | オンライン因数分解データベース |
| 共通因数攻撃 | 因数を共有する鍵 |
| GCD攻撃 | メルセンヌ数、素数階乗、フィボナッチ数など |
RsaCtfTool --publickey key.pub --private
RsaCtfTool --publickey key.pub --decryptfile ciphertext
RsaCtfTool --publickey "*.pub" --private
RsaCtfTool --createpub -n 7828374823761928712873... -e 65537
RsaCtfTool --dumpkey --key key.pub
RsaCtfTool --dumpkey --ext --key key.pub # Include CRT parameters
RsaCtfTool --publickey key.pub --ecmdigits 25 --private
RsaCtfTool --publickey key.pub --attack wiener --private
RsaCtfTool --publickey key.pub --attack factordb --private
RsaCtfTool --publickey "*.pub" --private --sendtofdb
RsaCtfTool --isroca --publickey "examples/*.pub"
RsaCtfTool --convert_idrsa_pub --publickey ~/.ssh/id_rsa.pub
その他の例については、pytest tests/ --collect-only を実行して利用可能なテストを確認してください。
テストは pytest を使用しており、tests/ にあります。
pytest tests/ # Run all tests
pytest tests/ -m "not slow" # Skip slow tests
pytest tests/ -v # Verbose mode
pytest tests/ -k "fermat" # Run tests matching "fermat"
@pytest.mark.slow - 低速な因数分解テスト@pytest.mark.network - ネットワーク(Factordb)を必要とするテスト@pytest.mark.attack - 攻撃の統合テスト| ファイル | 説明 |
|---|---|
test_number_theory.py | 数論関数(gcd、is_prime、phi など) |
test_algos.py | 因数分解アルゴリズム(fermat、brent、pollard_rho など) |
test_keys_wrapper.py | PublicKey/PrivateKey クラス |
test_utils.py | ユーティリティ関数 |
test_pubkey_decode.py | RSA 公開鍵のデコード |
test_attacks.py | 攻撃の統合テスト |
test_regression.py | バグ修正のリグレッションテスト |
test_exceptions.py | カスタム例外 |
conftest.py | pytest の設定とフィクスチャ |
コントリビューションを行う前に、ガイドラインについては CONTRIBUTING.md を、CODE_OF_CONDUCT.md をお読みください。
元のプロジェクトは GPLv3 の下でリリースされていました。このコードは MIT License の下で再ライセンスされています。