# 椭圆曲线公钥密码体制

5 min read
Table of Contents

视频

椭圆曲线群

定义

  1. FF 是一个域,a1,a2,a3,a4,a5Fa_1, a_2, a_3, a_4, a_5 \in F,则(基)域 FF 上的椭圆曲线是由(Weierstrass 方程) Ω={(x,y)F×F:y2+a1xy+a2y=x3+a3x2+a4x+a5}\Omega = \{ (x, y) \in F \times F: y^2 + a_1 x y + a_2 y = x^3 + a_3 x^2 + a_4 x + a_5 \}

和另一个点(无穷远点) OO 构成的集合,即

E={O}ΩE = \{ O \} \cup \Omega

其中,Weierstrass 方程也可以用其他椭圆曲线方程取代,例如蒙哥马利方程。



  1. FF 是一个域,a1,a2,a3,a4,a5Fa_1, a_2, a_3, a_4, a_5 \in F,则域 FF 上的椭圆曲线 y2=x3+ax+by^2 = x^3 + a x + b 是由满足 FF 上的方程 y2=x3+ax+by^2 = x^3 + a x + b 的所有点 G={(x,y)F×F:y2=x3+ax+b}G = \{ (x, y ) \in F \times F: y^2 = x^3 + a x + b \}

和另一个点 OO 构成的集合

E={O}{(x,y)F×F:y2=x3+ax+b}E = \{ O \} \cup \{ (x, y ) \in F \times F: y^2 = x^3 + a x + b \}

该椭圆曲线的判别式为 Δ=4a3+27b2\Delta = 4 a^3 + 27 b^2(一般要求 0\neq 0)。



  1. P=(x,y)P = (x, y) 是曲线 EE 上的一点,若: EX(x,y)=EY(x,y)=0\frac{\partial E}{\partial X} (x, y) = \frac{\partial E}{\partial Y} (x, y) = 0

则称点 PP 在曲线 EE 上是奇异的。如果曲线上至少有一个奇异点,就是奇异曲线。

由定义 1 定义的椭圆曲线奇异 Δ=0\Leftrightarrow \Delta = 0



  1. EE 是有限域 FF 上的椭圆曲线, PE(F)P \in E(F),若 n=min{kk>0,kP=O}n = \min\{ k | k > 0, k P = O \}

则称 nn 为点 PP 的阶,记为 n=ord(P)n = ord(P)

由阶为 nn 的点 PP 在加法定义下生成的循环群 <p><p> 是椭圆曲线群 (E(F),+)(E(F), +) 的一个 nn 阶子群。

  1. 椭圆曲线群上的离散对数问题

EE 是有限域 FF 上的椭圆曲线,GGEE 的一个循环子群,点 aaGG 的一个生成元,即 G={ka:k0},bGG = \{ k a: k \ge 0 \}, b \in G,在已知 a,ba, b 的条件下,求解整数 kk 使 ka=bk a = b

加法(弦切法)

已知曲线上的点 P,QE(F)P, Q \in E(F),且都不是无穷远点,令 P=(x1,y1),Q=(x2,y2),P+Q=RP = (x_1, y_1), Q = (x_2, y_2), P + Q = R,则 R=?R = ?

定义:

  1. PEP \in E,定义 P+O=O+P=PP + O = O + P = P

  2. P=(x1,y1),Q=(x2,y2)EP = (x_1, y_1), Q = (x_2, y_2) \in E,定义

    P+Q={O, 若x1=x2y1=y2(x3,y3),其它P + Q = \left\{ \begin{array}{l} O, \qquad \qquad \ 若 x_1 = x_2 且 y_1 = -y_2 \\ (x_3, y_3), \qquad 其它 \end{array} \right.

其中

{x3=λ2x1x2y3=λ(x1x3)y1λ={y2y1x2x1,PQ3x12+a2y1,P=Q\left\{ \begin{array}{l} x_3 = \lambda^2 - x_1 - x_2 \\ y_3 = \lambda (x_1 - x_3) - y_1 \end{array} \right. 且 \lambda = \left\{ \begin{array}{l} \frac{y_2 - y_1}{x_2 - x_1}, 若 P \ne Q \\ \frac{3 x_1^2 + a}{2 y_1}, 若 P = Q \end{array} \right.

计算点乘运算可以拆分成点加和倍乘运算。

定理:椭圆曲线按定义的加法运算构成交换群 (E,+)(E, +)OO 就是该群的零元。

当有限域特征为 22 时,可将椭圆曲线化为标准型:

y2+xy=x3+ax+b,a,bFy^2 + x y = x^3 + a x + b, \qquad a, b \in F

当有限域特征 3\ge 3 时,可将椭圆曲线化为标准型:

y2=x3+ax+b,a,bFy^2 = x^3 + a x + b, \qquad a, b \in F

密码学中一般使用以上标准型。

除法当作乘除数逆元即可。

ECC 椭圆曲线公钥密码

利用椭圆曲线群一个阶很大的循环子群代替有限域的乘法群进行构造,并将阶作为本原元。

参数设定

  1. 构造有限域 FF

  2. 生成域 FF 上的椭圆曲线 EE

  3. 取椭圆曲线中的一个点 PP (阶足够大,且生成循环群 G=<P>G = <P> 中的离散对数问题难解)。

  4. 选择加密密钥 QQ 和 解密密钥 dd,使 Q=dPQ = d P。(类似与 Elgamal 的 β=ad\beta = a^d

公开 F,E,P,QF, E, P, Q

加密

选择随机 kk

已知明文 m=(m1,m2)F×Fm = (m_1, m_2) \in F^* \times F^*

计算密文 c=(c0,c1,c2)E×F×Fc = (c_0, c_1, c_2) \in E \times F^* \times F^*

  • c0=kP;(k1,k2)=kQc_0 = k P; (k_1, k_2) = k Q

  • c1=k1m1c_1 = k_1 m_1

  • c2=k2m2c_2 = k_2 m_2

将 Elgamal 有限域中的数化为群中的点。

脱密

  • (k1,k2)=dc0(k_1, k_2) = d c_0

  • m1=(k1)1c1m_1 = (k_1)^{-1} c_1

  • m2=(k2)1c2m_2 = (k_2)^{-1} c_2

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments