椭圆曲线 Diffie-Hellman 算法概述
和常规的 Diffie-Hellman 密钥交换算法一样,现在 Alice 和 Bob 想要协商出一个整数,且信道是不安全的,有各种各样的窃听者。
首先,他们需要约定好一个椭圆曲线 $E(\mathbb{F}_p)$,以及一个基点 $P$. 现在 Alice 找一个 $n_A$,Bob 找一个 $n_B$,接下来 Alice 计算 $Q_A = n_A P$,Bob 计算 $Q_B = n_B P$.
完成之后,Alice 与 Bob 交换 $Q_A$ 和 $Q_B$,接下来 Alice 计算 $n_A Q_B$,Bob 计算 $n_BQ_A$,于是他俩算出了相同的点:$$n_A Q_B = (n_An_B)P = n_BQ_A$$
接下来,他们可以拿着这个点的 x 坐标,作为对称加密的密钥了。
一个例子
我们实际操作一个例子。假设 Alice 和 Bob 约定好使用椭圆曲线:$$p=3851, \quad E:Y^2 = X ^ 3 + 324 X + 1287, \quad P=(920, 303)$$
现在 Alice 选取了 $n_A = 1194$,BoB 选取了 $n_B = 1759$,分别计算 $Q_A, Q_B$:E = EllipticCurve(GF(3851), [324, 1287])
P = E(920, 303)
nA = 1194
QA = nA * P
nB = 1759
QB = nB * P
QA.x