ECC加密算法的数学原理

ECC算法

椭圆曲线

ECC是椭圆曲线加密算法,Wolfram MathWorld(线上数学百科全书,http://mathworld.wolfram.com) 给出了非常精准的定义:一条椭圆曲线就是一组被 y 2 = x 3 + a x + b y^2 = x^3 + ax + b y2=x3+ax+b定义的且满足 4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 ≠ 0 4a3+27b2=0 的点集。 4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 ≠ 0 4a3+27b2=0 这个限定条件是为了保证曲线不包含奇点(在数学中是指曲线上任意一点都存在切线)。椭圆曲线示例图:

不同的椭圆曲线对应不同的形状(b=1,a从2到-3)

左(带锐点): y 2 = x 3 y^2 = x^3 y2=x3
右(曲线自交): y 2 = x 3 − 3 x + 2 y^2 = x^3 -3x + 2 y2=x33x+2
都不是有效的椭圆曲线

椭圆曲线的二元运算

(1)加法

(2)乘法

以2A为例:

3A:

因此,在ECC算法中,Q(公钥)=kP很好算,但是根据Q和P求出k(私钥)很难。

关于阿贝尔群(abelian group)

阿贝尔群的概念是抽象代数的基本概念之一,是一种代数结构,由一个集合以及一个二元运算所组成。如果一个集合或者运算是群的话,就必须满足以下条件(+ 表示二元运算):

  1. 封闭性(closure),如果a和b被包含于群,那么a+b也一定是群的元素;
  2. 结合律(associativity);
  3. 存在一个单位元(identity element)0,0与任意元素运算不改变其值的元素,即 a+0 = 0+a = a;
  4. 每个元素都存在一个逆元(inverse);
  5. 交换律(commutativity),即 a+b = b+a;
椭圆曲线中的阿贝尔群

我们可以在椭圆曲线上定义一个群:

  1. 群中的元素就是椭圆曲线上的点;
  2. 单位元就是无穷处的点0;
  3. 相反数P,是关于X轴对称的另一边的点;
  4. 二元运算规则定义如下:取一条直线上的三点(这条直线和椭圆曲线相交的三点),P, Q, R(皆非零),他们的总和等于0,P+Q+R=0。

如果P, Q, R在一条直线上的话,他们满足:
P + ( Q + R ) = Q + ( P + R ) = R + ( P + Q ) = ⋯ = 0 。 P+(Q+R)=Q+(P+R)=R+(P+Q)=⋯=0。 P+(Q+R)=Q+(P+R)=R+(P+Q)==0
当P,Q点为同一点时,P=Q,满足:

这样,我们可以直观的证明:+运算符是符合交换律和结合律的,这是一个阿贝尔群。

因为阿贝尔群满足交换律和结合律,所以点P和点-R的二元运算结果必会在曲线上,即P+P+P的结果必会在曲线上的另一点Q,

以此类推,可以得出得出:
Q = k P ( k 个相同的点 P 进行二元运算(数乘) , 记做 k P ) Q=kP(k个相同的点P进行二元运算(数乘),记做kP) Q=kP(k个相同的点P进行二元运算(数乘),记做kP)

椭圆曲线加密算法原理

描述一条Fp上的椭圆曲线,常用到六个参量:T=(p,a,b,n,x,y)。(p 、a 、b) 用来确定一条椭圆曲线,p为素数域内点的个数,a和b是其内的两个大数;

x,y为G基点的坐标,也是两个大数;n为点G基点的阶;

以上六个量就可以描述一条椭圆曲线,有时候我们还会用到h(椭圆曲线上所有点的个数p与n相除的整数部分)。

现在我们描述一个利用椭圆曲线进行加密通信的过程:

  1. 选定一条椭圆曲线 Ep(a,b) 并取椭圆曲线上一点,作为基点P(比如(0,1));

  2. 选择一个大数k作为私钥,并生成公钥 Q=kP;

  3. 将 Ep(a,b) 和点Q、P传给用户;

  4. 用户接到信息后 ,选择一个随机数r,将消息M生成密文C,C是一个点对,C=(rP,M+rQ),并发送;

  5. 私钥解密(M + rQ - k(rP) ,解密结果就是点M),公式如下:
    M + r Q − k ( r P ) = M + r ( k P ) − k ( r P ) = M M + rQ - k(rP) = M + r(kP) - k(rP) = M M+rQk(rP)=M+r(kP)k(rP)=M

  6. 对点M进行解码就可以得到明文

    假设在加密过程中,有一个第三者H,H只能知道椭圆曲线 Ep(a,b)、公钥Q、基点P、密文点C,而通过公钥Q、基点P求私钥k或者通过密文点C、基点P求随机数r都是非常困难的,因此得以保证数据传输的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值