椭圆曲线加密算法1
1. Diffie-Hellman 秘钥交换
Alice想和Bob建立加密的通信隧道, 需要先生成自己的公私钥并将公钥发送给对方, 如图:
在椭圆曲线上取某个点 P P P(当然也可能不适用椭圆曲线加密算法)
Alice和Bob分别生成自己的私钥 a a a, b b b,再用 a a a, b b b乘上点 P P P得到公钥,并且将公钥发送给对方,最后Alice和Bob分别用自己的私钥乘上公钥就可以得到相同的秘钥 a b P abP abP, 加密通信就会建立在这个共享的秘钥上.
由于已知 P P P和 a P aP aP的值很难破解出 a a a的值,所以这种加密方式相对安全,已知 P P P和 a P aP aP的值也叫离散对数问题,也不是完全不可以解.
余下的篇幅将介绍几个重要的椭圆曲线和已知 P P P求 a P aP aP的算法(即公钥的生成方法).
2. 爱德华曲线
2.1曲线方程
x 2 + y 2 = 1 − d x 2 y 2 x^2+y^2=1-dx^2y^2 x2+y2=1−dx2y2
2.2点的加法
( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 y 2 + y 1 x 2 1 + d x 1 x 2 y 1 y 2 , y 1 y 2 − x 1 x 2 1 − d x 1 x 2 y 1 y 2 ) (x_1,y_1)+(x_2,y_2)=(\frac{x_1y_2+y_1x_2}{1+dx_1x_2y_1y_2},\frac{y_1y_2-x_1x_2}{1-dx_1x_2y_1y_2}) (x1,y1)+(x2,y2)=(1+dx1x2y1y2x1y2+y1x2,1−dx1x2y1y2y1y2−x1x2)
由 ( x 1 , y 1 ) + ( − x 1 , y 1 ) = ( 0 , 1 ) (x_1,y_1)+(-x_1,y_1)=(0,1) (x1,y1)+(−x1,y1)=(0,1)得出单位点是 ( 0 , 1 ) (0,1) (0,1),也有 − ( x , y ) = ( − x , y ) -(x,y)=(-x,y) −(x,y)=(−x,y),而且爱德华曲线上的点满足群的运算性质.(椭圆曲线加密运算基本都是在群上进行)
只要常数 d d d不是完全平方数, 1 ± d x 1 x 2 y 1 y 2 1\pm dx1x_2y_1y_2 1±dx1x2y1y2就不为 0 0 0值,点的加法运算会一直有意义,而不会出现分母为 0 0 0的情况.
2.3 扭曲爱德华曲线
2.3.1 方程
a x 2 + y 2 = 1 + d x 2 y 2 ax^2+y^2=1+dx^2y^2 ax2+y2=1+dx2y2
2.3.2 点的加法
( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 y 2 + y 1 x 2 1 + d x 1 x 2 y 1 y 2 , y 1 y 2 − a x 1 x 2 1 − d x 1 x 2 y 1 y 2 ) (x_1,y_1)+(x_2,y_2)=(\frac{x_1y_2+y_1x_2}{1+dx_1x_2y_1y_2},\frac{y_1y_2-ax_1x_2}{1-dx_1x_2y_1y_2}) (x1,y1)+(x2,y2)=(1+dx1x2y1y2x1y2+y1x2,1−dx1x2y1y2y1