椭圆曲线

DeeLMind大约 7 分钟

椭圆曲线

历史背景

椭圆曲线的概念最早可以追溯到18世纪。它起源于代数几何中的一类特殊曲线,最初被数学家用于研究整数解的问题。椭圆曲线的几何性质与代数方程的结合为后来的密码学应用奠定了基础。

椭圆曲线密码学的诞生

椭圆曲线在密码学中的应用最早出现在20世纪80年代。1970年代末期到1980年代初,随着计算机科学和密码学的发展,数学家开始研究如何将椭圆曲线应用于公钥加密系统。

发明者

  • 维尔纳·斯图姆(Werner Storn)爱德华·阿贝尔(Edward Abel):提出了椭圆曲线加密方法的初步构想,最终使得椭圆曲线在密码学中的应用成为可能。
  • 尼尔·克利夫兰(Neal Koblitz)维基·肖(Victor Miller):在1985年,Koblitz和Miller分别独立提出了基于椭圆曲线的公钥加密方法,标志着椭圆曲线密码学(ECC)的诞生。这个新算法具有较小的密钥尺寸和更高的安全性,迅速引起了密码学界的关注。

椭圆曲线密码学的应用

椭圆曲线密码学由于其高效性和安全性,广泛应用于现代加密协议,如:

  • 椭圆曲线数字签名算法(ECDSA)
  • 椭圆曲线 Diffie-Hellman 密钥交换(ECDH)
  • 椭圆曲线加密(ECC)
  • ECC的主要优势是它相比RSA加密算法使用较小的密钥长度并提供相当等级的安全性。

这些应用已被广泛应用于区块链、加密货币、TLS/SSL协议等安全通信系统中。

数学公式open in new window

魏尔斯特拉斯椭圆函数方程:open in new window

y2=x3+ax+b y^2 = x^3 + ax + b

R=P+Q加法open in new window

验证点是否在曲线上

首先,验证给定的点是否在椭圆曲线 y2=x37x+10y^2 = x^3 - 7x + 10 上。

验证点 P=(1,2)P = (1, 2)

代入 x=1x = 1y=2y = 2 到曲线方程:

y2=x37x+1022=137(1)+10 y^2 = x^3 - 7x + 10 \quad \Rightarrow \quad 2^2 = 1^3 - 7(1) + 10

4=17+104=4 4 = 1 - 7 + 10 \quad \Rightarrow \quad 4 = 4

所以 P=(1,2)P = (1, 2) 在曲线上。

验证点 Q=(3,4)Q = (3, 4)

代入 x=3x = 3y=4y = 4 到曲线方程:

y2=x37x+1042=337(3)+10 y^2 = x^3 - 7x + 10 \quad \Rightarrow \quad 4^2 = 3^3 - 7(3) + 10

16=2721+1016=16 16 = 27 - 21 + 10 \quad \Rightarrow \quad 16 = 16

所以 Q=(3,4)Q = (3, 4) 也在曲线上。

验证点 R=(3,2)R = (-3, 2)

代入 x=3x = -3y=2y = 2 到曲线方程:

y2=x37x+1022=(3)37(3)+10 y^2 = x^3 - 7x + 10 \quad \Rightarrow \quad 2^2 = (-3)^3 - 7(-3) + 10

4=27+21+104=4 4 = -27 + 21 + 10 \quad \Rightarrow \quad 4 = 4

所以 R=(3,2)R = (-3, 2) 也在曲线上。

  • 计算直线斜率 mm

m=y2y1x2x1=4231=22=1 m = \frac{y_2 - y_1}{x_2 - x_1} = \frac{4 - 2}{3 - 1} = \frac{2}{2} = 1

直线的方程是:

y2=1(x1)y=x+1 y - 2 = 1(x - 1) \quad \Rightarrow \quad y = x + 1

  • 将直线方程 y=x+1y = x + 1 代入曲线方程 y2=x37x+10y^2 = x^3 - 7x + 10

(x+1)2=x37x+10 (x + 1)^2 = x^3 - 7x + 10

展开:

x2+2x+1=x37x+10 x^2 + 2x + 1 = x^3 - 7x + 10

整理得到:

x3x29x+9=0 x^3 - x^2 - 9x + 9 = 0

解这个方程得到根 x=1x = 1x=3x = -3x=3x = 3,所以 P+Q=(3,2)P + Q = (3, -2)

Q=nP标量乘法open in new window

椭圆曲线计算:nP=2PnP = 2P

已知椭圆曲线:

y2=x37x+10 y^2 = x^3 - 7x + 10

P=(1,2)P = (1, 2),计算 2P=P+P2P = P + P


1. 验证 P=(1,2)P = (1, 2) 是否在曲线上

x=1,y=2x = 1, y = 2 代入椭圆曲线方程:

y2=x37x+10 y^2 = x^3 - 7x + 10

22=1371+10 2^2 = 1^3 - 7 \cdot 1 + 10

4=17+10=4 4 = 1 - 7 + 10 = 4

验证成立,因此 P=(1,2)P = (1, 2) 是椭圆曲线上的点。


2. 计算 2P=P+P2P = P + P

(1)切线的斜率

当计算 2P2P 时,需要用切线法。在点 P=(1,2)P = (1, 2) 处,椭圆曲线的导数为:

dydx=3x272y \frac{dy}{dx} = \frac{3x^2 - 7}{2y}

P=(1,2)P = (1, 2) 处,斜率为:

m=3x272y=312722=374=1 m = \frac{3x^2 - 7}{2y} = \frac{3 \cdot 1^2 - 7}{2 \cdot 2} = \frac{3 - 7}{4} = -1

(2)切线方程

切线的方程为:

yy1=m(xx1) y - y_1 = m(x - x_1)

代入 P=(1,2)P = (1, 2)m=1m = -1

y2=1(x1)    y=x+3 y - 2 = -1(x - 1) \implies y = -x + 3

(3)切线与椭圆曲线的交点

将切线方程 y=x+3y = -x + 3 代入椭圆曲线方程 y2=x37x+10y^2 = x^3 - 7x + 10

(x+3)2=x37x+10 (-x + 3)^2 = x^3 - 7x + 10

展开并整理:

x26x+9=x37x+10 x^2 - 6x + 9 = x^3 - 7x + 10

x3x2x+1=0 x^3 - x^2 - x + 1 = 0

已知 x=1x = 1 是根(对应点 P=(1,2)P = (1, 2)),对多项式进行因式分解:

x3x2x+1=(x1)(x21)=(x1)(x1)(x+1) x^3 - x^2 - x + 1 = (x - 1)(x^2 - 1) = (x - 1)(x - 1)(x + 1)

因此,切线与椭圆曲线的交点为 x=1x = 1x=1x = -1。其中:

  • x=1x = 1PP 自身的点。
  • x=1x = -1 对应另一个交点。

(4)计算点 RR' 的坐标

x=1x = -1 时,代入椭圆曲线方程 y2=x37x+10y^2 = x^3 - 7x + 10 计算 yy

y2=(1)37(1)+10=1+7+10=16 y^2 = (-1)^3 - 7(-1) + 10 = -1 + 7 + 10 = 16

y=±4 y = \pm 4

因此,交点为 R=(1,4)R' = (-1, 4)(1,4)(-1, -4)。由于加法规则需要取对称点:

2P=(1,4) 2P = (-1, -4)

P=(1,2)P = (1, 2) 在椭圆曲线 y2=x37x+10y^2 = x^3 - 7x + 10 上,计算得:

2P=(1,4) 2P = (-1, -4)

y2=x37x+10y^2 = x^3 - 7x + 10 进行求导

我们将 y2=x37x+10y^2 = x^3 - 7x + 10 进行求导,目的是找到 dydx\frac{dy}{dx}。这是一个隐函数,需使用 隐函数求导法

步骤 1:对等式两边同时对 xx 求导

对等式 y2=x37x+10y^2 = x^3 - 7x + 10 两边求导:

ddx(y2)=ddx(x37x+10) \frac{d}{dx}(y^2) = \frac{d}{dx}(x^3 - 7x + 10)

步骤 2:分别求导

  • 左边:根据链式法则,ddx(y2)=2ydydx\frac{d}{dx}(y^2) = 2y \frac{dy}{dx}
  • 右边:ddx(x37x+10)=3x27\frac{d}{dx}(x^3 - 7x + 10) = 3x^2 - 7

将结果代入:

2ydydx=3x27 2y \frac{dy}{dx} = 3x^2 - 7

步骤 3:解出 dydx\frac{dy}{dx}

dydx\frac{dy}{dx} 单独表示:

dydx=3x272y \frac{dy}{dx} = \frac{3x^2 - 7}{2y}

最终结果:

dydx=3x272y \frac{dy}{dx} = \frac{3x^2 - 7}{2y}

椭圆曲线计算:nP=3PnP = 3P

椭圆曲线方程

已知椭圆曲线:

y2=x37x+10 y^2 = x^3 - 7x + 10

P=(1,2)P = (1, 2),计算 3P=P+P+P3P = P + P + P


1. 计算 2P2P

根据之前的计算,已知:

2P=(1,4) 2P = (-1, -4)


2. 计算 3P=2P+P3P = 2P + P

2P=(1,4)2P = (-1, -4),点 P=(1,2)P = (1, 2)。根据椭圆曲线加法规则,需要计算直线经过 2P2PPP 的斜率,然后求交点。

(1)斜率

斜率公式为:

m=y2y1x2x1 m = \frac{y_2 - y_1}{x_2 - x_1}

其中,2P=(1,4)2P = (-1, -4)P=(1,2)P = (1, 2),则:

m=2(4)1(1)=2+41+1=62=3 m = \frac{2 - (-4)}{1 - (-1)} = \frac{2 + 4}{1 + 1} = \frac{6}{2} = 3

(2)直线方程

直线经过点 P=(1,2)P = (1, 2),斜率为 m=3m = 3,其方程为:

yy1=m(xx1) y - y_1 = m(x - x_1)

y2=3(x1)    y=3x3+2    y=3x1 y - 2 = 3(x - 1) \implies y = 3x - 3 + 2 \implies y = 3x - 1

(3)直线与椭圆曲线的交点

将直线方程 y=3x1y = 3x - 1 代入椭圆曲线方程 y2=x37x+10y^2 = x^3 - 7x + 10

(3x1)2=x37x+10 (3x - 1)^2 = x^3 - 7x + 10

展开并整理:

9x26x+1=x37x+10 9x^2 - 6x + 1 = x^3 - 7x + 10

x39x2x+9=0 x^3 - 9x^2 - x + 9 = 0

(4)因式分解

已知 x=1x = 1 是根(对应点 PP),对多项式进行因式分解:

x39x2x+9=(x1)(x28x9) x^3 - 9x^2 - x + 9 = (x - 1)(x^2 - 8x - 9)

x28x9=0x^2 - 8x - 9 = 0,使用求根公式:

x=b±b24ac2a=(8)±(8)24(1)(9)2(1) x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} = \frac{-(-8) \pm \sqrt{(-8)^2 - 4(1)(-9)}}{2(1)}

x=8±64+362=8±102 x = \frac{8 \pm \sqrt{64 + 36}}{2} = \frac{8 \pm 10}{2}

x=9x=1 x = 9 \quad \text{或} \quad x = -1

因此,交点的 xx 坐标为 x=1x = 1x=1x = -1x=9x = 9。排除 x=1x = 1(点 PP)和 x=1x = -1(点 2P2P),取 x=9x = 9

(5)计算 3P3Pyy 坐标

x=9x = 9 代入椭圆曲线方程 y2=x37x+10y^2 = x^3 - 7x + 10

y2=9379+10=72963+10=676 y^2 = 9^3 - 7 \cdot 9 + 10 = 729 - 63 + 10 = 676

y=±26 y = \pm 26

由于加法规则需要取对称点,3P3P 的坐标为:

3P=(9,26) 3P = (9, -26)


3. 结果

P=(1,2)P = (1, 2) 在椭圆曲线 y2=x37x+10y^2 = x^3 - 7x + 10 上,计算得:

3P=(9,26) 3P = (9, -26)

椭圆曲线(Fq\mathbb{F}_q)

R=P+Q

计算 R=P+QR = P + Q 详细过程

给定椭圆曲线方程:

y2=x3+2x+3(mod97) y^2 = x^3 + 2x + 3 \pmod{97}

P(x1,y1)=(17,10)P(x_1, y_1) = (17, 10)Q(x2,y2)=(95,31)Q(x_2, y_2) = (95, 31)

步骤 1: 确定斜率 λ\lambda

PQP \neq Q 时,斜率 λ\lambda 的公式为:

λ=y2y1x2x1(mod97) \lambda = \frac{y_2 - y_1}{x_2 - x_1} \pmod{97}

代入 PPQQ 的坐标:

λ=31109517(mod97) \lambda = \frac{31 - 10}{95 - 17} \pmod{97}

计算差值:

λ=2178(mod97) \lambda = \frac{21}{78} \pmod{97}

需要计算 781(mod97)78^{-1} \pmod{97}(即 7878 的模反元素)。

步骤 2: 计算 781(mod97)78^{-1} \pmod{97}

使用扩展欧几里得算法求解 781(mod97)78^{-1} \pmod{97}

  • 97 = 1 × 78 + 19
  • 78 = 4 × 19 + 2
  • 19 = 9 × 2 + 1
  • 2 = 2 × 1 + 0

回代求反元素:

1=199×2=199×(784×19)=37×199×78 1 = 19 - 9 \times 2 = 19 - 9 \times (78 - 4 \times 19) = 37 \times 19 - 9 \times 78

1=37×(9778)9×78=37×9746×78 1 = 37 \times (97 - 78) - 9 \times 78 = 37 \times 97 - 46 \times 78

因此,7814651(mod97)78^{-1} \equiv -46 \equiv 51 \pmod{97}

步骤 3: 计算斜率 λ\lambda

现在可以计算斜率:

λ=21×51(mod97) \lambda = 21 \times 51 \pmod{97}

计算:

21×51=1071 21 \times 51 = 1071

1071(mod97)=107197×11=10711067=4 1071 \pmod{97} = 1071 - 97 \times 11 = 1071 - 1067 = 4

所以,λ=4(mod97)\lambda = 4 \pmod{97}

步骤 4: 计算点 R(x,y)R(x, y)

根据公式计算点 RR 的坐标:

xR=λ2x1x2(mod97) x_R = \lambda^2 - x_1 - x_2 \pmod{97}

xR=421795(mod97)=161795(mod97)=96(mod97) x_R = 4^2 - 17 - 95 \pmod{97} = 16 - 17 - 95 \pmod{97} = -96 \pmod{97}

xR=9796=1(mod97) x_R = 97 - 96 = 1 \pmod{97}

然后计算 yRy_R

yR=λ(x1xR)y1(mod97) y_R = \lambda (x_1 - x_R) - y_1 \pmod{97}

yR=4×(171)10(mod97)=4×1610(mod97)=6410(mod97) y_R = 4 \times (17 - 1) - 10 \pmod{97} = 4 \times 16 - 10 \pmod{97} = 64 - 10 \pmod{97}

yR=54(mod97) y_R = 54 \pmod{97}

结果

因此,R=P+QR = P + Q 的坐标是:

R(1,54) R(1, 54)

R=nP