ECC
ECC
椭圆曲线是什么
满足 Weierstrass 方程的点集,形如: Y2 = X3 + AX + B 这样的等式称为椭圆曲线(elliptic curve)

当这个方程表示的曲线是一条连续的曲线时,需要满足条件 4A3 + 27B2 ≠ 0 这时称为非奇异椭圆曲线,反之称为奇异椭圆曲线
奇异椭圆曲线都是形状有点尖或者有交叉


这些情况下的点加法会出现问题
下面来介绍一下点加法
我们在椭圆曲线上定义加的运算,我在曲线上找到两点P,Q,现在想要计算出P ⊕ Q
首先我们连接P,Q两点,与椭圆曲线E相交于一点
相交的点关x的对称的点就是P ⊕ Q的点R

这里我考虑一个情况如果当P=Q的时候也就是P ⊕ P,该如何运算呢
其实还是一样的,只不过这次我们取过椭圆曲线E上的点P的切线,再与曲线相交后做关于x轴的对称点即可

现在还有种情况就是如果是无穷远点呢,也就是当P,Q关于x轴对称

也就是P ⊕ P′ = 𝒪
这时候会发现 P ⊕ 𝒪 = P 𝒪也就是加法运算中的单位元
这个精妙的几何定义使得椭圆曲线上的点构成了一个阿贝尔群
也就是满足了封闭性,有单位元,有逆元,交换律的群
有限域上的椭圆曲线
安全领域说的椭圆曲线通常是说通过椭圆曲线定义出来的群,其范围定义在某个有限域,也就是所有的运算是在模p下进行的
sagemath 可以在有限域上建立椭圆曲线,并枚举所有点
1 | E = EllipticCurve(GF(13), [3, 8]) E.points() |
也可以进行其它的运算
1 | E = EllipticCurve(GF(13), [3, 8]) |
椭圆曲线离散对数问题
也就是给定了点P和nP,要推出n
1 | E = EllipticCurve(GF(73), [8, 7]) |
椭圆曲线加密算法的过程
公私钥生成:
1、首先构造一条椭圆曲线E,在曲线上选择一点G作为生成元,并求G的阶为n,要求n必须为质数
2、选择一个私钥d(k<n),生成公钥P=dG
3、将公钥组E、P、G发出
加密过程:
这里选择一个随机整数k,计算出Q=kG,C=M+kP
解密过程: 使用私钥计算出M=C-dQ,得到明文M
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 yskm!
