暗号系のライブラリを見ていると、良くecdh
というフォルダが出てくる。
何だろうと常日頃思っていたが、ECDSAを調べていたら説明が出てきた。
どういうもの?
ECDH
は、Elliptic-Curve Diffie–Hellman
の頭字語で、
共有鍵暗号で、2者間で鍵を共有するために使う。
交換方法
以下の形で、$A$ と $B$ が鍵を交換する。以下、出てくる数字は全て整数。
下準備
$A$ と $B$ が以下を共有する:
- 有限体 $\mathbb{F}_p$ の位数 $p$
- 楕円曲線の係数。以下の $a, b$
$$
y^2 = x^3 + ax + b\ (a, b \in \mathbb{F}_p, \triangle = 4a^3 + 27b^2 \ne 0)
$$ - ジェネレーターとなる元 $g \in \mathbb{F}_p$
手順
- $A$ が乱数 $r$ を作って、$P_1 = r \times G$ を計算して $B$ に送る。
- $B$ が乱数 $s$ を作って、$P_2 = s \times G$ を計算して $A$ に送る。
- $A$ が $P_2 \times r$を計算して鍵にする。
- $B$ が $P_1 \times s$を計算して鍵にする。
$A$ と $B$ のどちらの鍵も、$r \times s \times G$なので、同じ鍵を共有することになる。