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。
椭圆曲线上的群操作
可以用加法符号”+“来表示群操作,两点相“加”得到第三点
P + Q =R
即(x1 , y1 ) + (x2 , y2) = (x3 , y3)
两点相“加”的方式与这两点是否是相同点有关
相异点连线的交点并关于X轴对称的点即为得到的点:
相同点切线的交点取对称:
其坐标点的关系:
x
3
=
s
2
−
x
1
−
x
2
m
o
d
p
y
3
=
s
(
x
1
−
x
3
)
−
y
1
m
o
d
p
其
中
s
的
值
会
因
情
况
不
同
而
变
化
s
=
{
y
2
−
y
1
x
2
−
x
1
m
o
d
p
;
P
≠
Q
3
x
1
2
+
a
2
y
1
m
o
d
p
;
P
=
Q
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.
x3=s2−x1−x2modpy3=s(x1−x3)−y1modp其中s的值会因情况不同而变化s={x2−x1y2−y1modp;P=Q2y13x12+amodp;P=Q
注意: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:
选择kprA = a ∈ {2,3,…,#E-1}
计算kpubA =aP =A = (xA , yA)
最后将A发送给Bob
Bob:
选择kprB = b ∈ {2,3,…,#E-1}
计算kpubB = bP =B ∈(xB , yB)
再将B发送给Alice
而后两人分别计算aB = TAB , bA = TAB
就得到了联合密钥:T(xAB , yAB)