楕円曲線ディフィー・ヘルマン鍵共有(だえんきょくせんディフィー・ヘルマンかぎきょうゆう、英: Elliptic curve Diffie–Hellman key exchange, ECDH)は、事前の秘密の共有無しに、盗聴の可能性のある通信路を使って、暗号鍵の共有を可能にする、公開鍵暗号方式の暗号プロトコルである。両者で共有した秘密の値はそのまま、あるいは何かしらの変換をかけて、共通鍵暗号の鍵として用いることができる。 ディフィー・ヘルマン鍵共有を楕円曲線を使うように変更した、楕円曲線暗号の一つである。

プロトコルの内容

アリスとボブとの間に共通鍵を構築したいが、2人の通信には第三者に盗聴される危険がある回線しかないものとする。まず、2人の間で使用する楕円曲線(つまり、有限体K、曲線を決定する3次式、ベースポイント G {\displaystyle G} 、その位数 n {\displaystyle n} などのパラメータ)を決めておく。そして、両者はこの楕円曲線上で、秘密鍵の d {\displaystyle d} [ 1 , n 1 ] {\displaystyle [1,n-1]} からランダムに選んだ整数)と公開鍵の Q {\displaystyle Q} Q = d G {\displaystyle Q=dG} 、つまり楕円曲線上での掛け算を行う)からなる鍵対を生成しておく。ここで、アリスの鍵対を ( d A , Q A ) {\displaystyle (d_{A},Q_{A})} 、ボブのものを ( d B , Q B ) {\displaystyle (d_{B},Q_{B})} とする。それから、公開鍵を互いに交換する。

次に、アリスは ( x k , y k ) = d A Q B {\displaystyle (x_{k},y_{k})=d_{A}Q_{B}} という計算を、ボブは ( x k , y k ) = d B Q A {\displaystyle (x_{k},y_{k})=d_{B}Q_{A}} という計算を行う。 d A Q B = d A d B G = d B d A G = d B Q A {\displaystyle d_{A}Q_{B}=d_{A}d_{B}G=d_{B}d_{A}G=d_{B}Q_{A}} であるので、アリスもボブも同じ x k {\displaystyle x_{k}} (楕円曲線上のx座標)を得ることができるので、これを共有する秘密とする。ECDHを元にしたほとんどの規格化プロトコルでは、この秘密を元に、ハッシュ関数などを利用して共通鍵を生成する。

安全性

鍵交換の過程で通信路上にアリスが流す情報は自身の公開鍵のみなので、(楕円曲線上の離散対数問題を解けない限り)本人以外がアリスの秘密鍵を知ることはできない。ボブについても同じく秘密鍵が第三者に知れることはない。また、楕円曲線上のディフィー・ヘルマン問題が解けない限り、通信路を盗聴している第三者には共有した x k {\displaystyle x_{k}} を計算することはできない。

公開鍵は(何かしらの証明を付けた)静的なものであっても、一時的なもの(ephemeral、この場合特にECDHEと略記される)であってもかまわない。一時的な鍵は、必ずしも認証されているわけではないため、認証が必要な場合は、別な方法で認証を行うこととなる。もし認証がなければ、通常のディフィー・ヘルマン鍵共有と同様、中間者攻撃に対して脆弱となる(ディフィー・ヘルマン鍵共有#中間者攻撃)。どちらか一方の鍵が静的なものであった場合、中間者攻撃を受けることはなくなるが、Forward secrecyのような、その他の高度なセキュリティに与ることはできなくなる。静的な鍵を持つ側では、自身の秘密鍵漏洩を防ぐため、相手の公開鍵を確認して、安全な共通鍵生成関数を利用する必要がある。

共有した秘密をそのまま鍵として使うこともできなくはないが、ディフィー・ヘルマン鍵共有で生成したことによってできる弱いビットの影響を除去するため、秘密をハッシュに通すことが推奨される。

脚注


Category楕円曲線暗号 (page 1) JapaneseClass.jp

ディフィー・ヘルマン鍵共有法とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ディフィー・ヘルマン鍵共有の仕組み 小人さんの妄想

楕円曲線 YouTube

Blog Dev Note