X25519 暗号化 & 復号
無料オンライン X25519 暗号化 & 復号 ツール。100% ローカル処理 — データは端末の外に出ません。
結果がここに表示されます...
入力 → 暗号化
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 Diffie-Hellman共有秘密を計算します:
鍵の形式
このツールのX25519鍵はコンパクトな16進数形式を使用します:
X25519 vs EdDSA(Ed25519)
X25519とEd25519はどちらもCurve25519をベースにしていますが、全く異なる暗号目的に使われます:
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の変種に取って代わりました。
- ✅ すべてのサーバーで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)— により、監査しやすく高速です。
- ✅ 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ラチェットから継続的に新しい鍵を導出し、前方秘匿性と侵害後の復旧を提供します。これは安全なメッセージングのゴールドスタンダードとされています。
- ✅ 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 でデータを暗号化し、一時公開鍵を暗号文とともに送ります。
- ✅ X25519を使った標準化されたハイブリッド暗号化にはHPKE(RFC 9180)を使用
- ✅ 一時的な送信者鍵ペアがメッセージごとの前方秘匿性を保証
- ✅ 組み合わせ:X25519(鍵交換)+ HKDF(鍵導出)+ AES-256-GCM(暗号化)
- 💡 このパターンはage(ファイル暗号化ツール)とTinkライブラリで使用
非推奨:機密性のためにX25519単独使用
X25519は共有秘密を生成するだけです — データを暗号化しません。共有秘密自体は暗号文ではなく、同じDH計算(正しい鍵で)を行う任意の当事者が取得できます。共通鍵暗号を適用しなければ、データはプレーンテキストのままです。これはアルゴリズムの根本的な誤用です。X25519は常に AES-256-GCM または ChaCha20-Poly1305 と組み合わせて使用してください。
- ❌ 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より優先してください。