ECC

ECC椭圆加密曲线

椭圆曲线的定义

Zp(p>3)上的椭圆曲线指满足以下条件的所有对(x,y) ∈ Zp 的集合:

​ y2 ≡ x3 + a*x + b mod p

以及一个无穷大的虚数点此处记为G,其中(a,b)∈ Zp

且满足条件4*a3 + 27*b2 ≠ 0 mod p。

image-20210331001025785.png

椭圆曲线上的群操作

可以用加法符号”+“来表示群操作,两点相“加”得到第三点

P + Q =R

即(x1 , y1 ) + (x2 , y2) = (x3 , y3)

两点相“加”的方式与这两点是否是相同点有关

相异点连线的交点并关于X轴对称的点即为得到的点:

image-20210331001246350.png

相同点切线的交点取对称:

image-20210331001501795.png

其坐标点的关系:

$$
x_3 = s^2 - x_1 - x_2;mod;p\
y_3 = s(x_1 - x_3) - y_1;mod;p\
;\
其中s的值会因情况不同而变化\
;\
s=\left{
\begin{array}{c}
\frac {y_2 - y_1}{x_2 - x_1};mod;p;;P≠Q\
\frac{3x^2_1 + a}{2y_1};mod;p;;P=Q
\end{array}
\right.
$$
注意:P + G =P P + (-P) = G

P(xp , yp)的逆元为-P(xp , -yp),若在素数域上,则-P(xp , P-yp)

对于椭圆加密曲线的群操作,相当于把以前的群的数字变成了坐标点,群操作也只是变得稍微抽象了一些。

所以同样的,曲线上的点可以与G一起构成循环子群

假如一个群的阶数为X,那么X*P = G,(X+1)* P = P

相当于把之前的群的知识类比过来。

自然而然我们就可以构建出基于椭圆曲线的离散对数问题:

P + P + … +P = d*P =T

有了基于椭圆曲线的离散对数问题,我们自然也可以得到基于椭圆曲线的密钥交换:

基于椭圆加密曲线的密钥交换

ECDH域参数选取:

1.素数p和椭圆曲线:

​ y2 ≡ x3 + a*x + b mod p

2.本原元P = (xp , yp) (此点可循环生成所有点)

椭圆曲线 Diffie-Hellman 密钥交换(ECDH):

Alice: Bob:

选择kprA = a ∈ {2,3,…,#E-1} 选择kprB = b ∈ {2,3,…,#E-1}

计算kpubA =aP =A = (xA , yA) 计算kpubB = bP =B ∈(xB , yB)

​ A———–>

​ <————B

而后两人分别计算aB = TAB , bA = TAB

就得到了联合密钥:T(xAB , yAB

(为了方便,图片都是从《深入浅出密码学》这本书上拍的,不过也推荐一下这本书。)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!