6. Diffie-Hellman
6. Diffie-Hellman
6.1. Curve25519
X25519関数は, 楕円曲線Diffie-Hellman (ECDH, Elliptic Curve Diffie-Hellman) プロトコルで以下のように使用できます:
Aliceはa[0]からa[31]に32個のランダムバイトを生成し, K_A = X25519(a, 9) をBobに送信します。ここで, 9は基点のu座標であり, 値9のバイトとして, 続いて31個のゼロバイトとしてエンコードされます。
Bobも同様にb[0]からb[31]に32個のランダムバイトを生成し, K_B = X25519(b, 9) を計算してAliceに送信します。
生成された値と受信した入力を使用して, AliceはX25519(a, K_B)を計算し, BobはX25519(b, K_A)を計算します。
両者は現在, K = X25519(a, X25519(b, 9)) = X25519(b, X25519(a, 9)) を共有秘密鍵として共有しています。両者は, Kの値に関する追加情報を漏らすことなく, Kが全ゼロ値であるかどうかを確認し, そうである場合は中止してもかまいません (以下を参照)。その後, AliceとBobは, K, K_A, およびK_Bを含む鍵導出関数を使用して対称鍵を導出できます。
全ゼロ値のチェックは, X25519関数が小さい位数の点に対応する入力で動作する場合にその値を生成するという事実に起因します。ここで, 位数は曲線の補因子を割り切ります (セクション7を参照)。このチェックは, すべてのバイトをORで結合し, 結果がゼロであるかどうかを確認することで実行できます。これにより, ソフトウェア実装における標準的なサイドチャネルが排除されます。
テストベクトル:
Aliceの秘密鍵, a:
77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a
Aliceの公開鍵, X25519(a, 9):
8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a
Bobの秘密鍵, b:
5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb
Bobの公開鍵, X25519(b, 9):
de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
共有秘密鍵, K:
4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742
6.2. Curve448
X448関数は, X25519関数と非常に似た方法でECDHプロトコルで使用できます。
X448を使用する場合, 唯一の違いは, AliceとBobが56個のランダムバイト (32個ではなく) を生成し, K_A = X448(a, 5) またはK_B = X448(b, 5) を計算することです。ここで, 5は基点のu座標であり, 値5のバイトとして, 続いて55個のゼロバイトとしてエンコードされます。
X25519と同様に, 両側は, Kの値に関する追加情報を漏らすことなく, 結果の共有Kが全ゼロ値であるかどうかを確認し, そうである場合は中止してもかまいません。
テストベクトル:
Aliceの秘密鍵, a:
9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b
Aliceの公開鍵, X448(a, 5):
9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0
Bobの秘密鍵, b:
1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d
Bobの公開鍵, X448(b, 5):
3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609
共有秘密鍵, K:
07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d