楕円曲線ディフィー・ヘルマン鍵共有(Elliptic Curve Diffie-Hellman key exchange, ECDH)は、事前に秘密の共有なしに、
盗聴の可能性がある通信路を介して
暗号鍵を共有するための
公開鍵[[暗号]]プロトコルです。これは、
ディフィー・ヘルマン鍵共有を
楕円曲線暗号上で実行するように変更したものです。共有された秘密の値は、
共通鍵[[暗号]]の鍵として使用できます。
プロトコルの仕組み
アリスとボブが共通鍵を確立したいとします。ただし、彼らの間の通信路は
盗聴される可能性があります。まず、二人は使用する
楕円曲線のパラメータ(有限体K、曲線を定義する3次式、ベースポイントG、位数nなど)に同意します。
次に、
アリスとボブはそれぞれ秘密鍵d([1, n-1]からランダムに選ばれた整数)と公開鍵Q(Q = dG、
楕円曲線上のスカラー倍算)からなる鍵ペアを生成します。アリスの鍵ペアを(dA, QA)、ボブの鍵ペアを(dB, QB)とします。その後、彼らは互いに公開鍵を交換します。
アリスは (xk, yk) = dA
QB を計算し、ボブは (xk, yk) = dB QA を計算します。ここで、dA
QB = dA dB
G = dB dA
G = dB QA であるため、
アリスとボブは同じ xk(
楕円曲線上のx座標)を得ることができます。この xk が共有秘密となります。実際には、ほとんどの規格化プロトコルでは、この秘密をハッシュ関数などで処理して共通鍵を生成します。
安全性
鍵交換中にアリスが通信路上に公開するのは自身の公開鍵のみです。したがって、
楕円曲線上の離散対数問題を解けない限り、アリスの秘密鍵を第三者が知ることはできません。同様に、ボブの秘密鍵も保護されます。また、
楕円曲線上のディフィー・ヘルマン問題を解くことができない限り、通信を
盗聴している第三者が共有秘密 xk を計算することもできません。
公開鍵は静的なものでも、一時的なものでも構いません。一時的な鍵を使用する場合(特に ECDHE と略記される)、認証されていない可能性があるので、認証が必要な場合は別の方法で認証を行う必要があります。認証がなければ、通常の
ディフィー・ヘルマン鍵共有と同様、
中間者攻撃に脆弱になります。どちらかの鍵が静的な場合、
中間者攻撃は防げますが、
Forward secrecy のような高度なセキュリティは実現できません。静的な鍵を持つ側は、自身の秘密鍵漏洩を防ぐため、相手の公開鍵を確認し、安全な共通鍵生成関数を利用することが重要です。
共有された秘密をそのまま鍵として使用することも可能ですが、
ディフィー・ヘルマン鍵共有によって生成された結果生じる弱いビットの影響を除くため、秘密をハッシュ関数に通すことが推奨されます。
まとめ
ECDHは、安全な鍵交換のための強力なツールであり、現代の
暗号プロトコルで広く使用されています。その安全性は、
楕円曲線暗号の数学的な難解さに依存しています。適切に使用することで、安全な通信を確立するための基盤となります。