楕円曲線ディフィー・ヘルマン鍵共有
それから、公開鍵を互いに交換する。
次に、アリスは ( 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を元にしたほとんどの規格化プロトコルでは、この秘密を元に、ハッシュ関数などを利用して共通鍵を生成する。
アリスがボブとの間に共通鍵を構築したいが、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})} とする。