密钥更短、速度更快--ECC如何重新定义现代加密

在当今的数字世界里,加密算法是保护数据安全的核心。几十年来,RSA(基于大数分解难题)一直是公钥加密的黄金标准。但随着计算能力的提升和量子计算的威胁,RSA 的局限性逐渐显现——它需要很长的密钥(2048位甚至更长)才能保证安全,导致计算开销大、速度慢。

椭圆曲线加密(ECC, Elliptic Curve Cryptography) 的出现,彻底改变了这一局面。它能够在更短的密钥长度下提供同等级甚至更高的安全性,同时计算速度更快、资源消耗更低。

一、椭圆曲线

椭圆曲线有多种表达形式

维尔斯特拉斯通用式: y 2 = x 3 + a x + b y^2 = x^3 + ax + b y2=x3+ax+b

维尔斯特拉斯一般式: y 2 + a y = x 3 + b x 2 + c x + d y^2 + ay= x^3 + bx^2 + cx + d y2+ay=x3+bx2+cx+d

勒让德标准式: y 2 = x ( x − 1 ) ( x − λ ) y^2 = x(x-1)(x-\lambda) y2=x(x1)(xλ)

这些方程的形式多样,但是都可以通过一定的数学变换转化为常见的维尔斯特拉斯通用式。

为了让椭圆曲线没有奇异点,即处处光滑可导,需要满足其判别式不为零,即 Δ = 4 a 2 + 27 b 2 ≠ 0 \Delta = 4a^2 + 27b^2 \neq 0 Δ=4a2+27b2=0

判别式的几何意义:

  • Δ > 0 \Delta > 0 Δ>0:曲线无奇点,且有三个不同的实数根(曲线有两个连通分支)。
  • Δ = 0 \Delta = 0 Δ=0:曲线有奇点(尖点或自交点),不能用于密码学。
  • Δ < 0 \Delta < 0 Δ<0:曲线无奇点,但只有一个实数根(曲线是单连通)。

1.1、椭圆曲线的奇点判别

椭圆曲线的奇点是指同时满足以下方程的点 (x,y):
{ F ( x , y ) = y 2 − x 3 − a x − b = 0 ∂ F ( x , y ) ∂ x = − 3 x 2 − a = 0 ∂ F ( x , y ) ∂ y = 2 y = 0 \begin{cases} F(x,y) = y^2 - x^3 - ax - b = 0 \\ \frac{\partial F(x,y)}{\partial x} = -3 x^2 - a = 0\\ \frac{\partial F(x,y)}{\partial y} = 2 y = 0\\ \end{cases} F(x,y)=y2x3axb=0xF(x,y)=3x2a=0yF(x,y)=2y=0
∂ F ( x , y ) ∂ x = − 3 x 2 − a = 0 \frac{\partial F(x,y)}{\partial x} = -3 x^2 - a = 0 xF(x,y)=3x2a=0 可得 x 2 = − a / 3 x^2 = -a/3 x2=a/3

由 $\frac{\partial F(x,y)}{\partial y} = 2 y = 0\$ 可得 y = 0 y = 0 y=0

带入曲线方程 y 2 = x 3 + a x + b y^2 = x^3 + ax + b y2=x3+ax+b,由 y = 0 y=0 y=0 可知
x 3 + a x + b = 0 x^3 +ax + b = 0 x3+ax+b=0
带入 x 2 = − a / 3 x^2 = -a/3 x2=a/3
x ( x 2 + a ) + b = 0 → 2 3 a x + b = 0 → x = − 3 b 2 a x(x^2+a)+b = 0 \rightarrow \frac{2}{3} ax + b = 0\rightarrow x= -\frac{3b}{2a} x(x2+a)+b=032ax+b=0x=2a3b
带入 x 2 = − a 3 x^2 = -\frac{a}{3} x2=3a
( − 3 b 2 a ) 2 = − a 3 → 4 a 2 + 27 b 2 = 0 \left(-\frac{3b}{2a}\right)^2 = -\frac{a}{3} \rightarrow 4a^2 + 27b^2 = 0 (2a3b)2=3a4a2+27b2=0
因此 Δ = 4 a 2 + 27 b 2 = 0 \Delta = 4a^2 + 27b^2 = 0 Δ=4a2+27b2=0 时存在奇点。

1.2、阿贝尔群

阿贝尔群主要有五个性质:

  1. 封闭性,即群内两数 a + b a+b a+b 的结果仍在群内。
  2. 结合律,即 ( a + b ) + c = a + ( b + c ) (a+b)+c=a+(b+c) (a+b)+c=a+(b+c)
  3. 有单位元, a + 0 = 0 + a = a a+0=0+a=a a+0=0+a=a 0 0 0 为单位元
  4. 有相反数, − a -a a 存在
  5. 交换律, a + b = b + a a+b=b+a a+b=b+a

符合这五点,就是阿贝尔群了。

1.3、射影平面

射影平面是欧几里得平面的一种扩展,它通过引入"无穷远点"的概念,解决了平行线在传统欧几里得几何中没有交点的问题。这种扩展源于对欧几里得第五公设(平行公设)的深入思考。

在射影几何中:

  1. 每对平行线都被认为在无穷远处相交于一个唯一的"无穷远点";
  2. 所有无穷远点构成"无穷远直线";
  3. 这个扩展后的平面被称为射影平面,记作 P 2 P^2 P2
  4. 无穷远点通常用符号O(或0)表示,在椭圆曲线密码学中常作为群的单位元。

这种构造使得射影平面具有完美的对称性:任意两条不同的直线必定相交于一点,任意两个不同的点必定确定一条直线。这种性质使得射影几何成为研究曲线和曲面的有力工具,特别是在代数几何和密码学中。

二、椭圆曲线群律

对椭圆曲线群做出如下定义:

  1. 单位元就是上文所说的无穷远点0
  2. 某点的相反数为该点在椭圆曲线上关于X轴对称的点,即点 P P P 有相反数 − P -P P
  3. 随机取椭圆曲线上两点 P P P Q Q Q,经过这两点的直线与椭圆曲线相交于第三点 R R R,这里定义加法规则: P + Q + R = 0 P+Q+R=0 P+Q+R=0

这样的一个椭圆曲线群就是阿贝尔群,因为 P , Q , R P,Q,R P,Q,R 并未规定先后顺序,所以
( P + Q ) + R = P + ( Q + R ) = P + Q + R = P + Q + R + 0 = 0 (P+Q)+R = P+(Q+R) = P+Q+R = P+Q+R+0 = 0 (P+Q)+R=P+(Q+R)=P+Q+R=P+Q+R+0=0
满足交换律结合律和封闭性。故为一个阿贝尔群。(这里只是说明,并不严谨

常见的情况就是这种三个交点的情况:

请添加图片描述

但是会不会出现只有两个交点的情况呢,实际上是会的

请添加图片描述

这种情况下,加法规则依旧是成立的,只不过形式上变成了 P + P + R = 0 P + P + R = 0 P+P+R=0 ,还有一种情况,就是这条线彻底竖起来了,垂直于X轴,这种情况也是只存在两个交点:

请添加图片描述

这种情况就可以理解为 P + ( − P ) + 0 = 0 P+(-P) + 0 = 0 P+(P)+0=0 ,注意:0 也是无穷远点。

以上就是直线与椭圆曲线之间交点的内容,略显抽象。

三、椭圆曲线加法

前面的那些饺子,都是为了现在的这盘醋,现在,醋来了:

请添加图片描述

首先我们选的点是 A,从 A 可以做椭圆曲线的切线,那么就有等式成立
A + A + B = 0 ⇒ 2 A + B = 0 ⇒ 2 A = − B ⇒ 2 A = B ′ A+A+B = 0 \Rightarrow 2A+B = 0 \Rightarrow 2A = -B \Rightarrow 2A = B' A+A+B=02A+B=02A=B2A=B
从 A 到 B’ 还可以连一条线,那么可以得到 C
A + B ′ + C = 0 ⇒ 3 A + C = 0 ⇒ 3 A = C ′ A + B' + C = 0 \Rightarrow 3A + C = 0 \Rightarrow 3A = C' A+B+C=03A+C=03A=C
这样可以一直推导下去,A 和 C’ 之间还可以再连线生成 D。可以发现,最终生成的点(带撇的) 只与最初的点A相关,与过程中的B无关。

那么,我们是不是就可以将最初的点 A 当做生成点,多少次这样的过程 k=3 当做私钥,最终点 C’ 当做公钥

这个例子是比较简单的,给人一种好像知道了起始点 A 和最终点 C’ 就可以知道中间连了多少次线 (k) 的错觉,现在告诉你,终点 C ′ C' C 与 A 的关系如下:
C ′ = 115792089237316195423570985008687907853269984665640564039457584007913129639747 A C' = 115792089237316195423570985008687907853269984665640564039457584007913129639747 A C=115792089237316195423570985008687907853269984665640564039457584007913129639747A
你是不是就傻眼了,你一个个试的话是正向推导,从 A 开始,一步一步的试验每一个数最终是否会与 C 相交,时间复杂度相当高。这种逆推导在加密领域也被求解对数问题,时间复杂度也相当高。

那么以上就是椭圆曲线加密的整体概念了,整个加密的过程就是这样的一个方式。

四、椭圆曲线代数运算

我们要把上述抽象的连线转换成代数运算,方便计算

在椭圆曲线上取 P P P ( X P , Y P ) (X_P,Y_P) (XP,YP),在 P P P 点做椭圆曲线的切线交椭圆曲线上的 R R R ( X R , Y R ) (X_R,Y_R) (XR,YR),切线的斜率为:
k = 3 X P + a Y P k = \frac{3 X_P + a}{Y_P} k=YP3XP+a
设切线
y = k x + c = 3 X P + a Y P x + c y = kx + c = \frac{3 X_P + a}{Y_P} x + c y=kx+c=YP3XP+ax+c
带入椭圆曲线
y 2 = ( k x + c ) 2 = x 3 + a x + b ⇒ x 3 − k 2 x 2 + ( a − 2 k c ) x + b − c 2 = 0 y^2 = \left( kx + c \right)^2 = x^3 + ax + b \Rightarrow x^3 -k^2x^2 + (a-2kc)x+b-c^2 = 0 y2=(kx+c)2=x3+ax+bx3k2x2+(a2kc)x+bc2=0

一元三次方程 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ax3+bx2+cx+d=0 的三个解有如下关系:

  • x 1 + x 2 + x 3 = − b a x_1 + x_2 + x_3 = -\frac{b}{a} x1+x2+x3=ab
  • x 1 x 2 x 3 = − d a x_1 x_2 x_3 = -\frac{d}{a} x1x2x3=ad
  • x 1 x 2 + x 2 x 3 + x 1 x 3 = c a x_1 x_2 + x_2 x_3 + x_1x_3 = \frac{c}{a} x1x2+x2x3+x1x3=ac

X P + X P + X R = − b a X_P+X_P+X_R = -\frac{b}{a} XP+XP+XR=ab 带入可得 X R = k 2 − 2 X p X_R = k^2 - 2 X_p XR=k22Xp Y R = Y P + k ( X R − X P ) Y_R = Y_P + k(X_R-X_P) YR=YP+k(XRXP)

于是可求得 R 点坐标 ( X R , Y R ) (X_R, Y_R) (XR,YR)

一般来说,一个正常的加密过程,肯定是反复弹点连线之后才会产生一个结果点,这样通过简单的形式表示就是 n P = N ’ nP=N’ nP=N。这一形式被称为标量乘法。在最终取到 N ’ N’ N 点时,肯定经过了多次的打点,那么 n n n 就会是一个比较大的数。如果以这样的步骤一个一个的进行点坐标的运算,那和直接破解也没什么区别了。所以这个数就不是可以这么一个一个打点算的,而是使用倍加算法。
N ′ = 151 P = 2 7 P + 2 4 P + 2 2 P + 2 1 P + 2 0 P N' = 151 P = 2 ^ 7 P + 2 ^ 4 P + 2 ^ 2 P + 2 ^ 1 P + 2 ^ 0 P N=151P=27P+24P+22P+21P+20P
这样只需要计算7次并相加,而不是151次。

五、有限域上的加法

上述所有的结论都是在连续点和无限域上的,X轴Y轴可以无限向前向后延伸,某段曲线可以无限的细分下去,这符合数学,但是不符合计算机的计算逻辑,计算机无法表示无限的空间延伸,也无法表示无限细分的小数。所以我们要把本来在无限域和连续点上的方法,转化到有限域和离散点上来。好在这个过程比较简单(但是难以理解…),只需要对所有的数取模,对所有的方程取模即可。

负数取模 a   m o d   m = a − m ⌊ a m ⌋ a \ mod \ m = a - m \lfloor \frac{a}{m} \rfloor a mod m=amma ⌊ ⌋ \lfloor \rfloor 是向下取整的意思,负数就是负无穷方向)

举个例子: − 7   m o d   3 = − 7 − 3 ⌊ − 7 3 ⌋ = − 7 − 3 ( − 3 ) = − 7 + 9 = 2 -7 \ mod \ 3 = - 7 - 3 \lfloor\frac{-7}{3}\rfloor = - 7 - 3(-3) = -7 + 9 = 2 7 mod 3=7337=73(3)=7+9=2

倒数取模:是指对于一个整数 a 和模数 m,找到一个整数 x,使得 a x ≡ 1 ( m o d   m ) a x \equiv 1(mod \ m) ax1(mod m) 此时,x 称为 a 在模 m下的乘法逆元,记作 a − 1   m o d     m a^{−1} \ mod \  m a1 mod m

计算步骤:

  • 计算 gcd⁡(a,m),如果 ≠1,则逆元不存在。
  • 回代求解 x 使得 ax≡1(mod m)。

**示例:**计算 3 − 1   m o d 7 3^{-1} \ mod 7 31 mod7

  • 计算 gcd⁡(3,7)=1,逆元存在。
  • 3 × 5 ≡ 15 ≡ 1 (   m o d   7 ) 3×5 \equiv 15 \equiv 1(\ mod \ 7) 3×5151( mod 7)

matlab代码:

a = 3;
m = 11;
inv_3 = powermod(a, -1, m); % 计算 3^(-1) mod 11
disp(inv_3); % 输出 4

在无限域中的代数运算方程,在有限域中也可以使用,只不过是在计算结果上加个 m o d   p mod \ p mod p

交点的运算坐标可得 X R = ( k 2 − 2 X p )   m o d   p X_R = (k^2 - 2 X_p) \ mod \ p XR=(k22Xp) mod p Y R = ( Y P + k ( X R − X P ) )   m o d   p Y_R = (Y_P + k(X_R-X_P)) \ mod \ p YR=(YP+k(XRXP)) mod p,斜率 k = 3 X P + a Y P   m o d   p k = \frac{3 X_P + a}{Y_P} \ mod \ p k=YP3XP+a mod p

如果你把斜率的模运算(有限域)和非模运算(无限域)对比,会发现它们给出的结果完全不同。

比如曲线 y 2 = x 3 + 7 y^2 = x^3 + 7 y2=x3+7 这条椭圆曲线,在 ( 3 , 34 ) (3, \sqrt{34}) (3,34 ) 点的斜率存在,但是这个点在有限域中的点 ( 3 , 0 ) (3,0) (3,0) 在这点的斜率是无穷大,虽然运算产生的结果不同,但他们各自的结果确实在他们各自的域内能完美的接洽逻辑。当然,上面只是给出了个例子,要真正证明这一群律在不同的域内都适用,需要严格的数学证明,这里不在给出。

六、群阶

在有限域椭圆曲线群中,直接计算所有离散点的坐标在 p 很大时计算量极大。但实际应用中,我们只需通过初始点递推,而无需枚举所有点。关键是要知道椭圆曲线群的阶(即离散点总数,含无穷远点),可通过 Schoof 算法 结合 Hasse 定理 计算。

本文的更多内容可以参考:

https://nicj.net/files/performance_comparison_of_elliptic_curve_and_rsa_digital_signatures.pdf
https://zhuanlan.zhihu.com/p/519091485

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值