X25519 暗号化 & 復号

無料オンライン X25519 暗号化 & 復号 ツール。100% ローカル処理 — データは端末の外に出ません。

National Standards
Other
出力

結果がここに表示されます...

入力 暗号化

Usage Guide

X25519(Curve25519 ECDH)について

X25519はCurve25519上に構築されたDiffie-Hellman鍵交換関数で、RFC 7748で標準化されています。世界で最も広く展開されている楕円曲線鍵交換アルゴリズムであり、TLS 1.3、WireGuard VPN、Signal Protocol、Noise Protocol Frameworkのデフォルト鍵交換として使用されています。X25519は32バイトの鍵で約128ビットのセキュリティを提供し、サイドチャネル攻撃への耐性を持つよう設計されており、Daniel J. Bernsteinによって作成されました。

鍵交換 — 暗号化ではありません: X25519は鍵合意のみを実行します。両者が独立して計算できる共有秘密を生成しますが、それ自体ではデータの暗号化・復号は行いません。機密性を実現するには、生成された共有秘密を ChaCha20-Poly1305 AES-256-GCM などの共通鍵暗号の鍵として使用する必要があります。

使用手順

このツールは、あなたの秘密鍵と相手の公開鍵からX25519 Diffie-Hellman共有秘密を計算します:

1. 鍵ペアの生成「鍵ペアを生成」をクリックして新しいX25519鍵ペアを作成します。秘密鍵(64桁の16進数)が「私の秘密鍵」フィールドに入力されます。対応する公開鍵は内部に保存されます — コピーして別の方法で相手と共有してください。
2. 公開鍵の交換自分の公開鍵(64桁の16進数)を通信相手に送ります。相手の公開鍵を受け取り、「相手の公開鍵(Hex)」フィールドに貼り付けます。この交換はどのチャネルでも行えます — 公開鍵は秘密ではありません。
3. 共有秘密の計算「暗号化」をクリックします。ツールがDH(あなたの秘密鍵、相手の公開鍵)を実行し、64文字の16進数共有秘密(32バイト)を出力します。相手が逆の操作を行うと、同一の共有秘密が得られます。
4. 共有秘密を暗号化に使用共有秘密(またはKDF派生鍵)をAES-256-GCMやChaCha20-Poly1305などの共通鍵暗号に入力します。本番システムでは、共有秘密を鍵導出(HKDF等)なしに直接暗号鍵として使用すべきではありません。
ブラウザのみで動作: すべての鍵生成およびDH計算は、WebCrypto APIを使用してブラウザ内で完全に実行されます。鍵がサーバーに送信されることはありません。

鍵の形式

このツールのX25519鍵はコンパクトな16進数形式を使用します:

秘密鍵64桁の16進数 = 32バイト。ランダムなスカラー値。秘密にしてください。例:a3f1e2d4c5b6a7f8e9d0c1b2a3f4e5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2
公開鍵64桁の16進数 = 32バイト。Curve25519の基点を秘密スカラーで乗算した結果。公開共有可能。例:5b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8
共有秘密64桁の16進数 = 32バイト。DH(私の秘密鍵、相手の公開鍵)= DH(相手の秘密鍵、私の公開鍵)として計算されます。この等式がDiffie-Hellman鍵交換の数学的基盤です。
鍵の互換性なしX25519とEd25519の鍵は見た目が同じ(64桁の16進数、32バイト)ですが、内部表現が異なりINTERCHANGEABLEではありません。Ed25519の秘密鍵をX25519の秘密鍵として、またはその逆に使用しないでください。

X25519 vs EdDSA(Ed25519)

X25519とEd25519はどちらもCurve25519をベースにしていますが、全く異なる暗号目的に使われます:

用途X25519:鍵交換(Diffie-Hellman)。Ed25519:デジタル署名(認証)。互いに代替することはできません。
数学的形式X25519は効率的なスカラー乗算のためにCurve25519のMontgomery形式を使用します。Ed25519はtwistedエドワーズ形式を使用します。双有理同値ですが、鍵エンコーディングは異なります。
鍵の互換性なし同じバイト長にもかかわらず、鍵は互換性がありません。Ed25519鍵ペアをX25519 DHに使用することは暗号学的な誤用であり、セキュリティを損なう可能性があります。
組み合わせ使用実際には、Signalなどのプロトコルは両方を組み合わせて使用します:X25519は鍵合意(セッション鍵の確立)に、Ed25519は認証(MITM攻撃を防ぐための鍵交換への署名)に使用されます。
関連ツール: デジタル署名には EdDSA(Ed25519) ツールをご使用ください。共有秘密を使った共通鍵暗号には ChaCha20-Poly1305 または AES-256-GCM をご使用ください。

FAQ

Q: X25519とECDHの違いは何ですか?

A: X25519 はECDHです — 具体的にはRFC 7748で定義されたCurve25519上の楕円曲線Diffie-Hellmanです。NISTカーブ(P-256、P-384)上のECDHと比較して、X25519は高速で、実装がシンプルかつ安全(余因子問題なし、一般的な入力に対する点の検証不要)であり、実装攻撃への耐性を持つよう設計されています。人々が"Curve25519を使ったECDH"と言うとき、X25519を意味しています。

Q: X25519とEd25519の鍵は互換性がありますか?

A: いいえ。 X25519とEd25519はどちらもCurve25519をベースにしていますが、異なる数学的表現(Montgomery形式 vs. twistedエドワーズ形式)と異なる鍵エンコーディングを使用します。X25519の秘密鍵は生の32バイトスカラーで、Ed25519の秘密鍵は使用前にハッシュ(SHA-512)される32バイトのシードです。2つの鍵タイプ間の変換式は存在しますが、明示的な変換なしに互換的に使用することは暗号学的に誤りであり、情報漏洩や無効な結果を引き起こす可能性があります。それぞれの目的に別々の鍵ペアを常に生成してください。

Q: 共有秘密でデータを暗号化するにはどうすればいいですか?

A: 32バイトのX25519共有秘密は、暗号鍵として使用する前に鍵導出関数(KDF)を通す必要があります。実際にはHKDF-SHA256が最も一般的な選択です(TLS 1.3、Signalで使用)。生の共有秘密を入力鍵マテリアルとして渡し、プロトコル固有のソルトとinfo文字列を含め、 AES-256-GCM または ChaCha20-Poly1305 用に32バイトを導出します。単純なユースケースでは共有秘密を直接32バイトAES-256鍵として使用できますが、本番環境ではHKDFを強く推奨します。

Q: X25519は前方秘匿性(Forward Secrecy)を提供しますか?

A: はい — 一時鍵ペアと組み合わせて使用した場合。前方秘匿性(Perfect Forward Secrecy、PFS)とは、長期鍵が侵害されても過去のセッション鍵が漏洩しないことを意味します。TLS 1.3では、両者が各ハンドシェイクのために新しいX25519鍵ペアを生成します(一時的DH)。攻撃者が後でサーバーの長期秘密鍵を取得しても、ハンドシェイク後に一時的なX25519鍵は破棄されているため、過去に記録したトラフィックを復号できません。静的(再利用)X25519鍵は前方秘匿性を提供しません

Q: X25519は量子コンピュータ攻撃に耐性がありますか?

A: いいえ — 十分に強力な量子コンピュータに対しては耐性がありません。 Shorのアルゴリズムを実行する量子コンピュータは、楕円曲線離散対数問題を多項式時間で解くことでX25519を破ることができます。これはすべての楕円曲線および有限体Diffie-Hellman方式に同様に適用されます。しかし、必要な量子コンピュータ(何千もの誤り訂正論理量子ビット)はまだ存在しません。ポスト量子鍵交換のため、NISTはML-KEM(旧CRYSTALS-Kyber)を標準化しました。ChromeとFirefoxのTLS 1.3はすでにX25519+ML-KEMハイブリッド鍵交換を展開しています。

Use Cases

推奨:TLS 1.3鍵交換

X25519はTLS 1.3(RFC 8446)の優先鍵交換アルゴリズムであり、すべての主要なブラウザとサーバーでサポートされています。TLS 1.3では、クライアントとサーバーがそれぞれ一時的なX25519鍵ペアを生成し、ClientHello/ServerHelloで公開鍵を交換し、HKDFを使ってハンドシェイク鍵を導出します。これにより前方秘匿性が提供され、1往復で完了します。X25519はTLS 1.3の必須暗号スイートでRSA鍵交換と古いECDHの変種に取って代わりました。

Recommended Configuration:
  • ✅ すべてのサーバーでTLS 1.3を有効化 — X25519は自動的に含まれる
  • ✅ X25519はすべてのTLS 1.3ハンドシェイクで前方秘匿性を提供
  • ✅ OpenSSL、BoringSSL、NSS、主要TLSライブラリでネイティブサポート
  • ❌ TLS 1.2 RSA鍵交換は使用しない — 前方秘匿性がない
推奨:WireGuard VPN

WireGuardはX25519を唯一の鍵交換メカニズムとして使用します。各WireGuardピアは静的X25519鍵ペア(認証用)を持ち、各ハンドシェイクで一時的なX25519鍵ペアを生成します(前方秘匿性のため)。プロトコルは事前共有鍵の混合にもX25519を使用し、Noise Protocol Frameworkを採用しています。WireGuardの最小主義的な設計 — 1つの鍵交換アルゴリズム、1つの共通鍵暗号(ChaCha20-Poly1305)、1つのハッシュ(BLAKE2s)— により、監査しやすく高速です。

Recommended Configuration:
  • ✅ X25519はWireGuardの唯一の鍵交換 — 設定不要
  • ✅ 静的鍵ペア生成:wg genkey | tee private.key | wg pubkey > public.key
  • ✅ WireGuardは一時鍵ペアにより自動的に前方秘匿性を提供
  • 💡 WireGuardの組み合わせ:X25519(鍵交換)+ ChaCha20-Poly1305(暗号化)+ BLAKE2s(ハッシュ)
推奨:エンドツーエンド暗号化メッセージング(Signal、WhatsApp)

Signalプロトコル(Signal、WhatsApp、その他多くで使用)は、Double Ratchetアルゴリズムとx3DH(Extended Triple Diffie-Hellman)鍵合意においてX25519を広く使用しています。X3DHは複数のX25519 DH操作を使用して、オフラインになりうる当事者間で初期共有鍵を確立します。Double Ratchetはその後X25519ラチェットから継続的に新しい鍵を導出し、前方秘匿性と侵害後の復旧を提供します。これは安全なメッセージングのゴールドスタンダードとされています。

Recommended Configuration:
  • ✅ X25519はSignalプロトコル鍵合意の基盤
  • ✅ X3DHは非同期鍵確立を可能にする(一方がオフラインでも可)
  • ✅ Double Ratchet + X25519は前方秘匿性と侵害後セキュリティを提供
  • 💡 WhatsApp、Wire、Facebook MessengerのシークレットチャットはすべてSignalプロトコルを使用
推奨:ハイブリッド暗号化(鍵カプセル化)

ハイブリッド暗号化はX25519を使って共有秘密を確立し、実際のデータを共通鍵暗号で暗号化します。このパターン(ECIESまたはHPKE — Hybrid Public Key Encryption、RFC 9180)により、受信者のX25519公開鍵を持つ誰もが、事前共有秘密なしに暗号化データを送信できます。送信者は一時的なX25519鍵ペアを生成し、受信者の公開鍵と共有秘密を計算し、HKDFで共通鍵を導出し、 ChaCha20-Poly1305 でデータを暗号化し、一時公開鍵を暗号文とともに送ります。

Recommended Configuration:
  • ✅ X25519を使った標準化されたハイブリッド暗号化にはHPKE(RFC 9180)を使用
  • ✅ 一時的な送信者鍵ペアがメッセージごとの前方秘匿性を保証
  • ✅ 組み合わせ:X25519(鍵交換)+ HKDF(鍵導出)+ AES-256-GCM(暗号化)
  • 💡 このパターンはage(ファイル暗号化ツール)とTinkライブラリで使用
非推奨:機密性のためにX25519単独使用

X25519は共有秘密を生成するだけです — データを暗号化しません。共有秘密自体は暗号文ではなく、同じDH計算(正しい鍵で)を行う任意の当事者が取得できます。共通鍵暗号を適用しなければ、データはプレーンテキストのままです。これはアルゴリズムの根本的な誤用です。X25519は常に AES-256-GCM または ChaCha20-Poly1305 と組み合わせて使用してください。

Recommended Configuration:
  • ❌ X25519共有秘密を暗号文として扱わない — これは鍵であり暗号化データではない
  • ❌ 鍵導出をスキップしない — 暗号鍵として使用する前にHKDFで共有秘密を処理する
  • ✅ X25519 + HKDF + AES-256-GCMが正しいハイブリッド暗号化パターン
  • 💡 X25519は鍵配送問題を解決し、共通鍵暗号がデータ機密性を解決する

ベストプラクティスのまとめ

  • X25519は鍵交換アルゴリズムです — 共有秘密を生成しますが暗号文ではありません。実際のデータを暗号化するには必ずAES-256-GCMまたはChaCha20-Poly1305と組み合わせてください。
  • 本番システムでは、X25519共有秘密を共通鍵暗号の鍵として使用する前にHKDF-SHA256で処理してください。
  • 前方秘匿性を実現するために一時的なX25519鍵ペア(セッションごとに新しいペアを生成)を使用してください。
  • X25519鍵をEd25519署名鍵として使用しないでください、またその逆も同様です — どちらも32バイトですが内部表現が異なります。
  • X25519はTLS 1.3、WireGuard、Signalプロトコルの標準です — 新しい実装ではNISTカーブを使った古いECDHより優先してください。

ディスカッション&フィードバック

0件のコメント
自分