鍵交換に ECDH を使う
ECDH(楕円曲線 Diffie-Hellman)は楕円曲線を使って共有秘密を確立します。より小さい鍵で DH と同等の安全性を得られます。
- 1
ECDH:Alice は秘密鍵 a と公開鍵 A = a*G を持ちます。Bob は秘密鍵 b と公開鍵 B = b*G を持ちます。両者は公開鍵を交換します。Alice は shared = a*B = a*b*G を計算します。Bob は shared = b*A = b*a*G を計算します。両者は同じ点を得ます。その x 座標が共有シークレットです。ECDH には Curve25519 を使ってください。高速で、一定時間で、安全です。
- 2 ランダムバイトジェネレーター →
秘密鍵を生成します。曲線の位数を n として [1, n-1] のランダムな整数です。Curve25519 の場合、秘密鍵は特定のビットクランピングを施した 32 ランダムバイトです。CSPRNG を使ってください。秘密鍵は予測不可能でなければなりません。
- 3 ハッシュ計算ツール →
共有シークレットをハッシュして対称鍵を導出します。共有点の生の x 座標は一様分布していません。SHA-256 でハッシュして一様ランダムな鍵を得てください。鍵導出には HKDF を使います:K = HKDF(shared_secret, info="encryption key")。
よくある質問
- ECDH と DH の違いは?
- ECDH は楕円曲線群を使います。同等のセキュリティでより小さな鍵です(256 ビット ECDH ≈ 3072 ビット DH)。ECDH はより高速で帯域も少なくて済みます。新しいシステムには Curve25519 の ECDH を使ってください。大きな素数を使う古典的な DH は依然として安全ですが、遅いです。
- X25519 とは何ですか?
- X25519 は、Curve25519 を使った Diffie-Hellman 鍵交換関数です。RFC 7748 で規定され、TLS 1.3、SSH、Signal で使われています。高速で、一定時間(タイミング攻撃に耐性)で、すべてのエッジケースを処理します(無効曲線攻撃なし)。新しいシステムの ECDH には X25519 を使ってください。
このタスクを解決するワークフロー
コンテンツのハッシュと Base64 エンコード
入力のハッシュを計算し、コンパクトな転送のためにハッシュダイジェストを Base64 としてエンコードする。 パイプライン
テキストのハッシュと整合性検証
入力テキストのハッシュを計算し、期待されるハッシュと比較して整合性を検証する。 パイプライン
テキストのハッシュと CRC32 チェックサム検証
データ整合性検証のために、暗号学的 SHA-256 ハッシュと CRC32 チェックサムの両方を計算する。 パイプライン
MD5 ハッシュ後に Base58 エンコード
MD5 ハッシュを計算し、コンパクトな表現のために Base58 としてエンコードする。 パイプライン
マルチハッシュ速度比較
入力をハッシュし、複数のハッシュアルゴリズムをベンチマークして速度と出力を比較する。 パイプライン
パスワード生成とハッシュ
ランダムパスワードを生成し、安全な保存のためにハッシュする。 パイプライン
SHA3-256 ハッシュと CRC32 チェックサム
SHA3-256 ハッシュを計算し、二重整合性検証のために CRC32 チェックサムを計算する。 パイプライン
SHA-512 ハッシュ後に Hex エンコード
SHA-512 ハッシュを計算し、可読性のために Hex としてエンコードする。 パイプライン
テキスト反転とハッシュ
テキストを反転し、その後反転結果の SHA-256 ハッシュを計算する。 パイプライン
テキストスクランブルとハッシュ
テキストをスクランブルし、その後スクランブル結果をハッシュする。 パイプライン