PR 本記事には広告(Amazonアソシエイト・もしもアフィリエイト・A8.net等)が含まれます。掲載情報の正確性には努めていますが、商品の詳細は必ずリンク先で最新情報をご確認ください。

【楕円曲線・近代暗号編】ECDH・ECDSA・Smart’s Attackの世界|CTF思考フレームワーク #57

【楕円曲線・近代暗号編】ECDH・ECDSA・SmartAttackの世界|CTF思考フレームワーク #57 アイキャッチ画像
安全に生きたい編集部

広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

楕円曲線暗号って、最近の流行なの?RSAとどう違う?📈

楕円曲線暗号(ECC)は、RSAと同等の安全性をより短い鍵長で実現できる、現代暗号の主流。HTTPS、Bitcoin、SSH、署名アルゴリズムの多くで採用されています。CTFではECDH・ECDSAの実装ミスを突く問題が頻出。

楕円曲線暗号(Elliptic Curve Cryptography)は、楕円曲線上の点の演算困難性に依存する暗号。同等の安全性でRSAより鍵が短く(256bitで RSA 3072bit 相当)、高速。Bitcoin の署名アルゴリズム、HTTPSのECDHE鍵交換、SSHキーで広く採用。CTFではNonce再利用・Smart攻撃 (Smart’s attack)・無効曲線攻撃が出題。

Bitcoin もこれで動いてるんだ…現代暗号の主役なのね。

この記事は、CTF思考フレームワーク第57回。楕円曲線暗号(ECDH・ECDSA)の基本、CTFで頻出の攻撃(Nonce再利用・Smart攻撃 (Smart’s attack)・無効曲線・サイドチャネル)、Sage/Python での実装を整理します。

📖 この記事はシリーズの一部です
CTF思考フレームワーク#57 / 全86記事 → シリーズ一覧を見る →

🌐 楕円曲線暗号は「同じ強度を短い鍵で実現」する近代Cryptoの主役。ECDH・ECDSA・Curve25519。CTFでは弱い曲線・nonce再利用・Smart攻撃 (Smart’s attack)など、運用ミス系が主役です。

楕円曲線は数学的に美しいですが、実装では「曲線パラメータの選択」「乱数源」「点の検証」が地雷原。nonce再利用は秘密鍵を即座に漏らし、特殊曲線(Anomalous)はSmart攻撃 (Smart’s attack)で一発復号。

難易度:★★★(上級)

ECDH・ECDSA・Smart攻撃などの楕円曲線暗号の世界へ🌀

楕円曲線(ECC)は短い鍵で強い暗号を実現する現代の主役。でも誤用すると即崩壊🌀

この記事で出てくる言葉

先に意味を押さえておくと読みやすい用語です。

  • CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
  • 脆弱性: ソフトや仕組みにある弱点。攻撃者に悪用されると不正アクセスにつながります。
  • 暗号: 情報を第三者に読まれにくい形へ変換する技術です。

👀 観察フェーズ:まず何を見る?

使われている曲線が標準曲線(P-256, P-384, secp256k1, Curve25519)かを観察🔍

使用曲線・実装ライブラリ・nonce生成方法・点の妥当性検証の有無を確認。NISTカーブのP-256でも実装ミスれば脆弱。安心は「Curve25519/Ed25519」を高水準APIで使うこと。

  • 曲線種別(NIST P-256/384、Curve25519、secp256k1等)
  • パラメータ(a, b, p, G, n, h)の正規性
  • nonce生成方法(RFC 6979 deterministic推奨)
  • 受信した点の曲線上検証
  • 副入力曲線攻撃への耐性
  • タイミング・SPA / DPA耐性

ECDSAのnonce(k)が小さい・固定・予測可能だと秘密鍵が即漏洩。SonyのPS3鍵流出事件で有名👀

ECDSAって「nonce再利用で秘密鍵が出る」のが怖いんだね😨

🤔 仮説フェーズ:攻撃者は何を考える?

楕円曲線攻撃の典型は4方向

🕶️ 攻撃者は「nonce再利用=秘密鍵漏洩」を必ず狙います。Sony PS3のECDSA秘密鍵漏洩事件(2010)は同一nonce再利用が原因。曲線が異常曲線(Anomalous)ならSmart攻撃 (Smart’s attack)、低位数曲線ならPohlig-Hellman、Twist Attackも視野。

🎯 仮説①:ECDSA nonce再利用

同じkで2つの署名を作ると秘密鍵が代数的に復元可能。Sonyの実例。

🌀 仮説②:Smart攻撃 (Smart’s attack)

曲線位数=p(基底体の標数)のアノマラスカーブでは離散対数が多項式時間で解ける。CTFの定石。

🪞 仮説③:Invalid Curve Attack

相手が送ってきた点が本来の曲線上にあるか検証しないと、別曲線の弱い点で計算させて鍵漏洩。

⚙️ 仮説④:MOV/Pohlig-Hellman

埋込み次数が小さい曲線や合成数位数では離散対数が部分問題に分解可能。

楕円曲線は「曲線選び」「点の検証」「nonce管理」の3軸が事故源💡

🔬 検証フェーズ:どうやって確かめる?

SageMathでEllipticCurveを作って実演。cryptohack.orgのECCチャレンジが教材として最高🧪

実装の検証は「nonceがランダム or RFC 6979 deterministicか」「点の検証コードがあるか」「使用ライブラリが新しいか」が要点。ECDSA署名なら同一nonceの検出スクリプトを書く。

# ECDSA nonce再利用検出
# 同一署名者の2署名 (r, s1, h1), (r, s2, h2) で r一致なら
# k = (h1 - h2) / (s1 - s2) mod n
# d = (s*k - h) / r mod n  → 秘密鍵復元

# Sage: 曲線上判定
E = EllipticCurve(GF(p), [a, b])
P = E(x, y)  # 例外なら曲線外

CTFで「曲線パラメータが与えられて、明らかに変」って時はSmart/Invalidを疑うんだね💡

⚔️ 攻撃フェーズ:実際の手口

楕円曲線攻撃の代表トップ3

近代Crypto代表攻撃:①ECDSA nonce再利用→秘密鍵復元、②Anomalous曲線でSmart攻撃 (Smart’s attack)(ECDLP多項式時間)、③Twist Attack(Curve25519 X25519の不正点送信)、④Invalid Curve Attack。

# Smart攻撃 (Smart's attack)(Anomalous曲線:#E(F_p) = p)
# 加法群構造を p-adic logで線形化、ECDLP多項式時間

# nonce再利用での秘密鍵復元(ECDSA)
from sage.all import inverse_mod
k = ((h1 - h2) * inverse_mod(s1 - s2, n)) % n
d = ((s1 * k - h1) * inverse_mod(r, n)) % n

BitcoinのRFC 6979 deterministic nonceは「nonce再利用バグを実装ミスから物理的に消す」優れた工夫。ECDSAを使うなら必ず RFC 6979 を採用するのが現代の正解✨

① ECDSA nonce再利用

k再利用→秘密鍵直接計算。SonyのECDSA実装でPS3マスター鍵が漏洩した実例(2010年)。

② Smart攻撃 (Smart’s attack) on Anomalous

CTFでよく出る。曲線位数とpが等しいと対数を線形に解ける

③ Invalid Curve Attack

相手の点を弱い曲線の点に差し替えて送り、相手が検証なしに使うと鍵情報がリーク。

🛡️ 防御フェーズ:どう守る?

楕円曲線安全運用の3鉄則!🛡️

近代Crypto運用は「枯れた高水準API」「曲線は標準化済みのみ」「point validationを必ず行う」が三本柱。Curve25519 / Ed25519系は誤用しにくい設計で安心。

  • libsodium / Tink等の高水準APIを使用
  • ECDSA採用時は RFC 6979 deterministic nonce
  • 可能なら Ed25519 / Curve25519 X25519
  • 受信した点を必ず曲線上検証
  • 副入力曲線・twistへの耐性確認(Cofactor等)
  • PQC移行(Kyber + ECDH のハイブリッド)への準備
✅ 標準曲線&検証済みライブラリ

Curve25519(X25519/Ed25519)P-256以上。libsodium等の枯れたライブラリを使う。

🎲 nonceはRFC 6979 deterministicへ

ECDSAのnonceはRFC 6979(deterministic ECDSA)で生成すれば再利用も低品質乱数も問題ゼロ。

🛡️ 受信点の検証必須

受信した点が本来の曲線上にあるか必ず検証。座標がOk・位数がOkまでチェック。

「Ed25519一択」って言える時代、迷ったらCurve25519系💪

⚠️ よくある落とし穴

  1. ECDSA で乱数源が悪く、nonceが衝突して秘密鍵漏洩
  2. 曲線パラメータを自前で選び、Anomalous / 低位数を採用
  3. 受信点の妥当性検証を省略しInvalid Curve Attackに脆弱
  4. TLS 1.2のNamedCurve交渉でTwist対象curveを許可
  5. Ed25519とECDSAを「どちらも楕円曲線だから同じ」と誤認
  6. PQC移行を後回しにし、長期機密が”Harvest now, decrypt later”対象

🧰 ツール早見表

ツール用途備考
SageMath曲線解析・ECDLPSmart攻撃 (Smart’s attack)実装も可
libsodium安全な高水準暗号APICurve25519 / Ed25519
Tink (Google)誤用しにくいAPIJCA代替推奨
cryptography (Python)幅広い実装Ed25519/X25519対応
ecdsa-private-key-recoverynonce再利用検出ビットコイントランザクション分析にも

🎓 本気で学びたい人へ

暗号技術を「趣味」から「仕事」に変えたい方へ。🎓 ササエルはセキュリティ・インフラを体系的に学べるスクールです。

PR / 広告

ササエル

📚 もっと深く学びたい人へ

体系的に攻撃と防御の両面を学びたいなら『ホワイトハッカー入門 第2版』が分かりやすい入口です📚

📚 次に読みたい

✍️ 学んだことを発信する

学んだことをWordPressブログでアウトプットしたい方は、ConoHa WINGから始めるのが手軽です。

PR / 広告

ConoHa WING

⚖️ 大事なお約束

必ず守ってね

この記事の手法は、必ず自分の環境か、許可されたCTF・脆弱性報奨金プログラム(HackerOne、Bugcrowd等)で試してください。他人のサービスに無断で攻撃を仕掛けるのは不正アクセス禁止法違反、立派な犯罪です。学んだ知識は守る側で活かしましょう🤝

この記事は合法な学習・防御目的での解説です。許可のないシステムへの攻撃は犯罪になります(不正アクセス禁止法ほか)。検証は必ず自分が管理する環境・CTF・公式ハンズオンで行ってください🙏

記事URLをコピーしました