超详细!ECC 椭圆曲线密码算法加密过程详解!

ECC椭圆曲线算法详解

椭圆曲线方程

椭圆曲线 E p ( a , b ) Ep(a,b) Ep(a,b) p p p为质数, x , y ∈ [ 0 , p − 1 ] x,y∈[0,p-1] x,y[0,p1]

y 2 = x 3 + a x + b   ( m o d   p ) y^{2}=x^{3}+ax+b\ (mod \ p) y2=x3+ax+b (mod p)

其中,要求曲线是非奇异的(处处可导),有 4 a 3 + 27 b 2 ≠ 0 4a^{3}+27b^{2}≠0 4a3+27b2=0

椭圆曲线上的运算定义

P + Q = R P + Q = R P+Q=R是椭圆曲线上点的加法运算,任意取椭圆曲线上两点 P P P Q Q Q(若 P P P Q Q Q两点重合,则作 P P P点的切线),作直线交于椭圆曲线的另一点 R ′ R' R,取 R ′ R' R关于 x x x轴的对称点为 R R R,定义 P + Q = R P+Q=R P+Q=R。这样,加法的和也在椭圆曲线上。
在这里插入图片描述

k P kP kP是椭圆曲线上点的倍点运算,以 3 P 3P 3P为例。 3 P = 2 P + P = ( P + P ) + P 3P=2P+P=(P+P)+P 3P=2P+P=(P+P)+P,可以按照椭圆曲线上的加法定义进行运算,如下图所示。
在这里插入图片描述

其他相关概念

  • 两点和的计算

    根据所学的求直线方程、求交点、求对称点的知识,可以求出 P + Q = R P+Q=R P+Q=R R R R的表达式。设 P P P ( x 1 , y 1 ) (x_{1},y_{1}) (x1y1) Q Q Q ( x 2 , y 2 ) (x_{2},y_{2}) (x2y2) R R R ( x 3 , y 3 ) (x_{3},y_{3}) (x3y3),则 R R R的计算公式如下:
    x 3 = ( k 2 − x 1 − x 2 )   ( m o d   p ) x_{3}=(k^{2}-x_{1}-x_{2})\ (mod\ p) x3=(k2x1x2) (mod p)
    y 3 = ( k ( x 1 − x 3 ) − y 1 )   ( m o d   p ) y_{3}=(k(x_{1}-x_{3})-y_{1})\ (mod\ p) y3=(k(x1x3)y1) (mod p)
    P = Q P=Q P=Q,则 k = ( ( 3 x 2 + a ) / 2 y 1 )   ( m o d   p ) k=((3x_2+a)/2y_1)\ (mod\ p) k=((3x2+a)/2y1) (mod p)
    P ≠ Q P≠Q P=Q,则 k = ( y 2 − y 1 ) / ( x 2 − x 1 )   ( m o d   p ) k=(y_2-y_1)/(x_2-x_1) \ (mod\ p) k=(y2y1)/(x2x1) (mod p)
    注意:计算 k k k时的除法,实际上是乘分母的逆元;其他的运算包括模加/减、模乘;即点加运算可以分解为模加/减、模乘和模逆运算。

  • 零元的概念

    设无穷点处是零元,则有 0 ∞ + P = P 0∞+P=P 0+P=P

  • 负元的概念

    一个点和其负元的和应该是零元,则有 P + ( − P ) = 0 ∞ P+(-P)=0∞ P+(P)=0

    那负元的具体表达式是什么呢?负元是 P P P关于 x x x轴的对称点,即 P ( x , y ) P(x,y) P(x,y)的负元是 ( x , − y   m o d   p ) = ( x , p − y ) (x,-y \ mod\ p)= (x,p-y) (x,y mod p)=(x,py)

  • 阶的概念

    如果椭圆曲线上一点 P P P,存在最小的正整数 n n n使得数乘 n P = 0 ∞ nP=0∞ nP=0 ,则将 n n n称为 P P P的阶;若 n n n不存在,则 P P P是无限阶的。

  • 阶的求法

    按照椭圆曲线上加法的定义,依次求 2 P 、 3 P 、 4 P 2P、3P、4P 2P3P4P等,直到求出的点 ( k − 1 ) P (k-1)P k1P P P P关于 x x x轴对称,有 P P P的阶是 k k k。如下图所示,这里的 P ( 3 , 10 ) P(3,10) P3,10在椭圆曲线 y 2 = x 3 + x + 1   ( m o d   23 ) y^{2}=x^{3}+x+1\ (mod\ 23) y2=x3+x+1 (mod 23) 上,求出的 27 P 27P 27P 1 P 1P 1P关于 x x x轴对称,则 P P P的阶为 28 28 28
    在这里插入图片描述

  • 椭圆曲线上离散对数问题的复杂性:

    当椭圆曲线上的素数 p p p选的比较大时,有 k k k P P P,容易求出 Q = k P Q=kP Q=kP。相反,有 Q Q Q P P P,是难以求出 k k k的。

椭圆曲线加密算法的过程

  • 公私钥生成

    1. Alice首先构造一条椭圆曲线 E E E,在曲线上选择一点 G G G作为生成元,并求 G G G的阶为 n n n,要求 n n n必须为质数;

    2. Alice选择一个私钥 k ( k < n ) k (k < n) k(k<n),生成公钥 Q = k G Q = kG Q=kG

    3. Alice将公钥组 E 、 Q 、 G E、Q、G EQG发送给Bob。

  • 加密过程

    1. Bob收到信息后,将明文编码为 M M M M M M为曲线上一点,并选择一个随机数 r r r r < n , n r < n, n r<n,n G G G的阶);

    2. Bob计算点 C i p h e r 1 Cipher1 Cipher1 C i p h e r 2 Cipher2 Cipher2即两段密文,计算方法如下

      C i p h e r 1 = M + r Q Cipher1 = M + rQ Cipher1=M+rQ

      C i p h e r 2 = r G Cipher2 = rG Cipher2=rG

    3. Bob把 C i p h e r 1 Cipher1 Cipher1 C i p h e r 2 Cipher2 Cipher2发给Alice。

  • 解密过程

    1. Alice收到密文后,为了获得 M M M,只需要 C i p h e r 1 − k ⋅ C i p h e r 2 Cipher1 - k · Cipher2 Cipher1kCipher2,因为
      C i p h e r 1 − k ∗ C i p h e r 2 = M + r Q − k r G = M + r k G − k r G = M Cipher1 - k*Cipher2 = M + rQ - krG = M + rkG - krG = M Cipher1kCipher2=M+rQkrG=M+rkGkrG=M
    2. 将M解码即可。
  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值