ECC椭圆曲线加密算法

来源:互联网 发布:matlab for mac 2016 编辑:程序博客网 时间:2024/04/29 07:05

椭圆曲线加密也是一种公钥加密算法,和RSA与离散对数一样,它也是基于一个数学求解的难题,并且它的难度比RSA和离散对数都要大,它基于的数字难题就是求取定义在椭圆曲线上的离散对数的求取难题,对于这个难题的描述比大数分解和离散对数要稍微复杂一些,不过它也还算比较形象,理解起来也不难,如果有公式恐惧的直接看文字也能明白大致的意思。

1、定义在实数域上的椭圆曲线

曲线方程是:y2=x3+ax+b4a3+27b20
曲线形状是:
这里写图片描述
一个椭圆曲线群指的就是由曲线上的点和无穷远点O组成的集合。
这个群是一个加法群,这个加法群是这样定义的:
对于椭圆曲线上不同的两点PQ,则有P+Q=R,它表示为一条通过PQ的直线与椭圆曲线相交于一点R,R关于X轴对称的点即为R,如下图所示:
这里写图片描述
对于曲线上的任意一点P,有P+(P)=OO是无穷远点。如果P点的坐标是(x,y),那么P点的坐标是(x,y),如下图所示(下图也是一种椭圆曲线):
这里写图片描述
对于椭圆曲线上的任意一点P,有P+P=2P=R,相对于在P点做一条切线,切线与曲线相交于一点,然后取椭圆曲线上关于该交点的对称点,如下图所示:
这里写图片描述
特别的,对于点P,如果y=0,那么交点在无穷远点,则有2P=O,如下图所示:
这里写图片描述
上面的几条运算法则定义了椭圆曲线的加法,依据这个加法现在就可以说明一下椭圆曲线加密所利用的数学难题:
对于椭圆曲线上的点P,其中y0,也就是纵坐标不能于0,依据前面定义的加法的计算法则,给定一个整数n,很容易求出Q=nP,也就是nP相加,但是在已知了PQ的条件下求取n则是一个很难的问题。
前面给出了实数域上椭圆曲线的加法的定义,利用一定的平面解析几何的方法就可以得到加法的计算公式:
如果P=(xP,yP)Q=(xQ,yQ)不是互反的,也就是不是横坐标相等,纵坐标相反,那么求取P+Q=R,R=(xR,yR)的算法是:
s=yPyQxPxQ,可以看出s就是直线的斜率
xR=s2xPxQ,yR=yP+s(xPxR)
求取R=2P的公式是(这个是针对P=(xP,yP),且yP0):
s=3xp2+a2yp
xR=s22xP,yR=yP+s(xPxR)

2、定义在FP域和F2m域上的椭圆曲线

FP域指的是对于素数P,由小于P的所有正整数(包括0)组成的集合,在这个集合上定义的加法和乘法都是模P加和模P乘,也就是对加或者是乘法的结果都要模P,最后的是模P的结果。
F2m域指的则是对于所有位长小于等于m的二进制数组成的集合,在这个集合上的加法就是模2加,乘法则是把二进制数对应成一个多项式,然后两个多项式相乘,模上一个m级的本原多项式,结果就是模后的多项式的系数。
域定义好了,依据这两个域的定义,可以看出和实数域不一样的是,定义在这两个域上的二维平面上的这两个域上的点是有限个的,在这两种域上定义的椭圆曲线方程和实数域是一样的,也是:
y2=x3+ax+b4a3+27b20
但是在这两种域上的椭圆曲线的形状就看起来不像是什么曲线了,而是一些离散的点,看起来如下图所示:
这里写图片描述
虽然看起来不像是曲线,但是还是可以看出基于横轴对称的特性。
在个两个域上的加法(针对两个点的加法)的定义和在实数域上也是一样的,只是具体的加和乘是定义在FP或者F2m域上的,即:
FP域上:
P+Q=R
s=yPyQxPxQmodP
xR=s2xPxQmodP
yR=yP+s(xPxR)modP
对于2P=R
s=3xP2+a2yPmodP
xR=s2xPxQmodP
yR=yP+s(xPxR)modP
F2m域上:
P+Q=R
s=yPyQxP+xQ
xR=s2+s+xP+xQ+a
yR=xR+yP+s(xP+xR)
对于2P=R
s=xP+yPxP
xR=s2+s+a
yR=xP2+(s+1)xR
只是所有的乘和加运算是在F2m域上的

3、椭圆曲线上的加密与解密算法

椭圆曲线上的加密与解密一般是运用定义在FP域或者F2m域上的椭圆曲线。
如果Alice想通过FP域上椭圆曲线加解密算法和Bob通信,加解密的过程一般是这样的:
1、首先是关于密钥的问题
这是一个事先的过程,在Alice想给Bob发消息之前这个事情就已经做了。
通过选取合适的参数a,b,P建立椭圆曲线EP(a,b),并选取椭圆曲线上的一点G作为基点,Bob选整数K作为私钥,通过运算H=KG得到椭圆曲线上的另外一个点作为公钥,然后把EP(a,b),G,H传给Alice。
2、加密过程
Alice对于要加密的信息m,通过编码成为椭圆曲线上的一个点M(有编码就有解码,这个是可逆的,所以我们只用关心对于M的加密与解密)。然后Alice选择一个随机的数r,然后在椭圆曲线上计算两个点:
C1=M+rH
C2=rG
然后Alice把C1C2发给Bob,可以看出Alice是用Bob的公钥进行加密。
3、解密过程
Bob收到消息后就用自己的私钥进行解密:
C1KC2=M+rKGKrG=M

2 0
原创粉丝点击