Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

rsa-attack-techniques

RSAパラメータ(n, e, c)が与えられた際に、平文を復元するためのCTFおよび実環境向け暗号解析プレイブック。脆弱な鍵、小さい指数、共通因数、パディングオラクルなどの脆弱性を突いた攻撃手法を体系的に適用できます。

description の原文を見る

>- RSA attack playbook for CTF and real-world cryptanalysis. Use when given RSA parameters (n, e, c) and need to recover plaintext by exploiting weak keys, small exponents, shared factors, or padding oracles.

SKILL.md 本文

SKILL: RSA Attack Techniques — エキスパート暗号解析プレイブック

AI LOAD INSTRUCTION: CTF および認可されたセキュリティ評価のためのエキスパート RSA 攻撃技法。因数分解攻撃、小指数エクスプロイト、格子ベースのアプローチ (Wiener/Boneh-Durfee/Coppersmith)、ブロードキャスト攻撃、共通法数、パディングオラクル、および障害攻撃をカバーします。基本モデルは、与えられたパラメータに合致しない攻撃を提示したり、既知情報に基づいた正しい攻撃選択を見落としたりすることがよくあります。

0. RELATED ROUTING

  • lattice-crypto-attacks - Coppersmith/Boneh-Durfee の背後にある格子理論の詳細版
  • hash-attack-techniques - RSA 署名偽造がハッシュ弱点を含む場合
  • symmetric-cipher-attacks - RSA が対称鍵を保護する場合(ハイブリッド暗号化)

Advanced Reference

次の場合は RSA_ATTACK_CATALOG.md もロードしてください:

  • 各攻撃の詳細な SageMath/Python 実装
  • ステップバイステップの数学的導出
  • 攻撃ごとのエッジケースと失敗条件

攻撃選択クイックガイド

与えられた情報 / 観測攻撃ツール
小さい n (< 512 ビット)直接因数分解factordb, yafu, msieve
e = 3、小さいメッセージキューブルートgmpy2.iroot
複数の (n, c)、同じ小さい eHastad ブロードキャストCRT + iroot
非常に大きい e または非常に小さい dWiener / Boneh-DurfeeSageMath, RsaCtfTool
p の部分的な知識Coppersmith 小根SageMath
同じ n、異なる e共通法数拡張ユークリッド互除法
複数の n 値バッチ GCD(共有因数)Python/SageMath
パディングエラーオラクルBleichenbacherカスタムスクリプト
LSB パリティオラクルLSB オラクル攻撃カスタムスクリプト
CRT 計算における障害RSA-CRT 障害単一障害署名

1. 因数分解攻撃

1.1 直接因数分解(小さい n)

from sympy import factorint

n = 0x...  # 小さい法数
factors = factorint(n)
p, q = list(factors.keys())

使用時: n < 約512 ビット、または factordb に既知の場合。

1.2 フェルマの因数分解

p と q が接近している場合に有効:|p - q| が小さい。

from gmpy2 import isqrt, is_square

def fermat_factor(n):
    a = isqrt(n) + 1
    while True:
        b2 = a * a - n
        if is_square(b2):
            b = isqrt(b2)
            return (a + b, a - b)
        a += 1

1.3 ポラードの p-1 法

p-1 が小さい素因数のみを持つ場合(B-平滑)に有効。

from gmpy2 import gcd

def pollard_p1(n, B=2**20):
    a = 2
    for j in range(2, B):
        a = pow(a, j, n)
    d = gcd(a - 1, n)
    if 1 < d < n:
        return d
    return None

1.4 バッチ GCD(複数の n が因数を共有)

from math import gcd
from functools import reduce

def batch_gcd(moduli):
    """複数の RSA 法数間の共有因数を検出します。"""
    product = reduce(lambda a, b: a * b, moduli)
    results = {}
    for i, n in enumerate(moduli):
        remainder = product // n
        g = gcd(n, remainder)
        if g != 1 and g != n:
            results[i] = (g, n // g)
    return results

2. 小指数攻撃

2.1 キューブルート攻撃(e = 3、小さい m)

m^e < n の場合(法による短縮が発生していない)、単に e 乗根を求めます。

from gmpy2 import iroot

c = 0x...  # 暗号文
e = 3
m, exact = iroot(c, e)
if exact:
    print(f"平文: {bytes.fromhex(hex(m)[2:])}")

2.2 Hastad ブロードキャスト攻撃

同じメッセージが同じ小さい e で異なる法数 (n₁, n₂, ..., nₑ) の下で暗号化されている場合。

from sympy.ntheory.modular import crt
from gmpy2 import iroot

# e = 3、3 つの異なる n の下での 3 つの暗号文
n_list = [n1, n2, n3]
c_list = [c1, c2, c3]

# CRT: すべての i に対して x ≡ ci (mod ni) を満たす x を検出
r, M = crt(n_list, c_list)
m, exact = iroot(r, 3)
assert exact

2.3 関連メッセージ攻撃(Franklin-Reiter)

既知の一次関数によって関連するメッセージ:m₂ = a·m₁ + b。同じ n と e。

# SageMath
def franklin_reiter(n, e, c1, c2, a, b):
    R.<x> = PolynomialRing(Zmod(n))
    f1 = x^e - c1
    f2 = (a*x + b)^e - c2
    return Integer(n - gcd(f1, f2).coefficients()[0])

3. 大きい e / 小さい d 攻撃

3.1 Wiener 攻撃(連分数)

d < n^(1/4) / 3 のとき、e/n の連分数展開により d が明らかになります。

def wiener_attack(e, n):
    """d が小さい場合、連分数を経由して d を復号します。"""
    cf = continued_fraction(e, n)
    convergents = get_convergents(cf)

    for k, d in convergents:
        if k == 0:
            continue
        phi_candidate = (e * d - 1) // k
        # phi(n) = n - p - q + 1 → p + q = n - phi + 1
        s = n - phi_candidate + 1
        # p, q は x^2 - s*x + n = 0 の根
        discriminant = s * s - 4 * n
        if discriminant >= 0:
            from gmpy2 import isqrt, is_square
            if is_square(discriminant):
                return d
    return None

def continued_fraction(a, b):
    cf = []
    while b:
        cf.append(a // b)
        a, b = b, a % b
    return cf

def get_convergents(cf):
    convergents = []
    h_prev, h_curr = 0, 1
    k_prev, k_curr = 1, 0
    for a in cf:
        h_prev, h_curr = h_curr, a * h_curr + h_prev
        k_prev, k_curr = k_curr, a * k_curr + k_prev
        convergents.append((h_curr, k_curr))
    return convergents

3.2 Boneh-Durfee 攻撃(格子ベース)

Wiener を拡張:d < n^0.292 のときに機能します。格子簡約化 (LLL/BKZ) を使用。

SageMath 実装を使用 — 理論については lattice-crypto-attacks を参照。


4. Coppersmith 法

4.1 ステレオタイプメッセージ

既知の平文部分、不明な部分は小さい。

# SageMath
n = ...
e = 3
c = ...
known_prefix = b"flag{" + b"\x00" * 27  # 既知プレフィックス、不明なサフィックス
known_int = int.from_bytes(known_prefix, 'big')

R.<x> = PolynomialRing(Zmod(n))
f = (known_int + x)^e - c
roots = f.small_roots(X=2^(27*8), beta=1.0)
if roots:
    m = known_int + int(roots[0])
    print(bytes.fromhex(hex(m)[2:]))

4.2 部分鍵露出

p の既知 MSB または LSB → Coppersmith を経由して完全な p を復号。

# SageMath — p の既知 MSB
p_msb = ...  # p の既知上位ビット
R.<x> = PolynomialRing(Zmod(n))
f = p_msb + x
roots = f.small_roots(X=2^unknown_bits, beta=0.5)
if roots:
    p = p_msb + int(roots[0])
    q = n // p

5. 共通法数攻撃

同じメッセージの 2 つの暗号文、同じ n だが異なる e₁, e₂ で、gcd(e₁, e₂) = 1。

from gmpy2 import gcd, invert

def common_modulus(n, e1, e2, c1, c2):
    """同じ n の下で 2 つの異なる e で暗号化された場合、m を復号します。"""
    assert gcd(e1, e2) == 1
    _, s1, s2 = extended_gcd(e1, e2)  # s1*e1 + s2*e2 = 1

    if s1 < 0:
        c1 = invert(c1, n)
        s1 = -s1
    if s2 < 0:
        c2 = invert(c2, n)
        s2 = -s2

    m = (pow(c1, s1, n) * pow(c2, s2, n)) % n
    return m

def extended_gcd(a, b):
    if a == 0:
        return b, 0, 1
    g, x, y = extended_gcd(b % a, a)
    return g, y - (b // a) * x, x

6. オラクル攻撃

6.1 LSB オラクル(パリティオラクル)

オラクルが復号されたメッセージが偶数か奇数かを明かします。

from gmpy2 import mpz

def lsb_oracle_attack(n, e, c, oracle_func):
    """LSB(パリティ)オラクルを使用して復号します。oracle_func(c) は m%2 を返します。"""
    from fractions import Fraction
    lo, hi = Fraction(0), Fraction(n)

    for _ in range(n.bit_length()):
        c = (c * pow(2, e, n)) % n  # 平文に 2 を掛ける
        if oracle_func(c) == 0:
            hi = (lo + hi) / 2
        else:
            lo = (lo + hi) / 2

    return int(hi)

6.2 Bleichenbacher(PKCS#1 v1.5 パディングオラクル)

パディング有効性オラクル(有効/無効な PKCS#1 v1.5)が与えられたら、反復的に平文範囲を絞り込みます。

複雑さ: 平均で 1 バイトあたり O(2^16) 回のオラクルクエリ。

対象: 異なるエラーを返す TLS 実装(有効/無効なパディング)。

6.3 Manger 攻撃(PKCS#1 OAEP)

Bleichenbacher に似ていますが OAEP パディング用。パディング解除後の最初のバイトが 0x00 かどうかを区別するオラクルを悪用。


7. RSA-CRT 障害攻撃

RSA-CRT 署名が障害署名を生成する場合(CRT の一半で障害が発生):

def rsa_crt_fault(n, e, correct_sig, faulty_sig, msg):
    """1 つの正しい署名と 1 つの障害署名から n を因数分解します。"""
    from math import gcd
    diff = pow(correct_sig, e, n) - pow(faulty_sig, e, n)
    p = gcd(diff % n, n)
    if 1 < p < n:
        q = n // p
        return p, q
    return None

# さらに単純:メッセージが既知の場合、障害署名のみで十分
def rsa_crt_fault_simple(n, e, faulty_sig, msg):
    p = gcd(pow(faulty_sig, e, n) - msg, n)
    if 1 < p < n:
        return p, n // p
    return None

8. 決定木

RSA チャレンジ — どの情報を持っていますか?
│
├─ n があり、小さい(< 512 ビット)?
│  └─ 直接因数分解:factordb.com → yafu → msieve
│
├─ 複数の n 値を持っていますか?
│  └─ バッチ GCD — 共有因数がありますか?
│     ├─ はい → 因数を共有するすべての n を因数分解
│     └─ いいえ → 各 n を個別に分析
│
├─ e を知っていますか?
│  ├─ e = 3(または小さい)?
│  │  ├─ 単一の暗号文、小さいメッセージ → キューブルート
│  │  ├─ 複数の暗号文、異なる n → Hastad ブロードキャスト
│  │  ├─ 2 つの関連メッセージ → Franklin-Reiter
│  │  └─ 部分的な平文が既知 → Coppersmith
│  │
│  ├─ e は非常に大きい?
│  │  └─ d は小さい可能性が高い → Wiener → Boneh-Durfee
│  │
│  └─ 同じ n、2 つの異なる e?
│     └─ 共通法数攻撃(Bezout 係数)
│
├─ 部分的な因数分解情報を知っていますか?
│  ├─ p の数ビットを知っている → Coppersmith 部分鍵
│  ├─ p-1 は B-平滑 → ポラード p-1
│  └─ p ≈ q(接近した素数) → フェルマ因数分解
│
├─ オラクルを持っていますか?
│  ├─ パリティオラクル(LSB) → LSB オラクル攻撃
│  ├─ パディング有効性オラクル(PKCS#1 v1.5) → Bleichenbacher
│  └─ OAEP オラクル → Manger 攻撃
│
├─ 障害署名を持っていますか?
│  └─ RSA-CRT 障害 → 障害署名から n を因数分解
│
├─ e·d 関係を知っていますか?
│  └─ e·d ≡ 1 mod φ(n) → (e,d,n) から n を因数分解
│
└─ 上記のいずれでもない?
   ├─ 既知の因数分解について factordb を確認
   ├─ 中程度のサイズの n に対して Pollard rho を試す
   ├─ 実装の欠陥を探す(鍵生成の弱い PRNG)
   └─ 物理的アクセスがある場合、サイドチャネルを検討

9. ツール

ツール目的使用方法
RsaCtfTool自動化 RSA 攻撃スイートpython3 RsaCtfTool.py --publickey pub.pem --uncipherfile flag.enc
SageMath数学計算Coppersmith、格子攻撃、多項式演算
factordb.comオンライン因数分解データベースn が既に因数分解されているか確認
yafu高速因数分解(SIQS/GNFS)yafu "factor(n)"
msieveGNFS 因数分解大きい n の因数分解
gmpy2高速 Python 整数ライブラリirootinvertgcd
pycryptodomeRSA プリミティブ因数から鍵構築

RsaCtfTool クイックコマンド

# 公開鍵から
python3 RsaCtfTool.py --publickey pub.pem -n --private

# パラメータから
python3 RsaCtfTool.py -n $N -e $E --uncipher $C

# すべての攻撃を試す
python3 RsaCtfTool.py --publickey pub.pem --uncipherfile flag.enc --attack all

因数分解後に復号化

from Crypto.PublicKey import RSA
from gmpy2 import invert

p, q = ...  # 因数分解済み
n = p * q
e = 65537
phi = (p - 1) * (q - 1)
d = int(invert(e, phi))

c = ...  # 整数としての暗号文
m = pow(c, d, n)
plaintext = m.to_bytes((m.bit_length() + 7) // 8, 'big')
print(plaintext)

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT