ECC(EllipticCurvesCryptography)加密算法是一种公钥加密算法,与主流的RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。近年来,人们对ECC的认识已经不再处于研究阶段,开始逐步进入实际应用,如国家密码管理局颁布的SM2算法就是基于ECC算法的。下面我们来认识一下ECC的工作原理。椭圆曲线定义在引入椭圆曲线之前,不得不提到一种新的坐标系-------射影平面坐标系,它是对笛卡尔直角坐标系的扩展,增加了无穷远点的概念。在此坐标系下,两条平行的直线是有交点的,而交点就是无穷远点。两者的变换关系为:笛卡尔坐标系中的点a(x,y),令x=X/Z,y=Y/Z,则射影平面坐标系下的点a的坐标为(X,Y,Z),如点(2,3)就转换为(2Z,3Z,Z)。椭圆曲线定义:一条椭圆曲线在射影平面上满足方程:Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3的所有点的集合,且曲线上每个点都是非奇异的。该方程有名维尔维斯特拉斯方程,椭圆曲线的形状不是椭圆,只是因为其描述的方程类似于计算一个椭圆周长的方程。转换到笛卡尔坐标系下的方程为:y2+a1xy+a3y=x3+a2x2+a4x+a6加法法则运算法则:任意取椭圆曲线上两点P、Q(若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。我们规定P+Q=R。(如图)此处+不是简单的实数相加,是抽象出来的O∞+P=P,O∞为零元曲线上三个点A,B,C处于一条直线上,则A+B+C=O∞下面,我们利用P、Q点的坐标(x1,y1),(x2,y2),求出R=P+Q的坐标(x4,y4)。P,Q,R'共线,设为y=kx+b,若P≠Q,k=(y1-y2)/(x1-x2)若P=Q,k=(3x2+2a2x+a4-a1y)/(2y+a1x+a3)解方程组得到:x4=k2+ka1-a2-x1-x2;y4=k(x1-x4)-y1-a1x4-a3;密码学中的椭圆曲线定义在有限域Fp中定义一个椭圆曲线,常用y2=x3+ax+b1.Fp中只有p个元素,p为素数2.Fp中,a+b≡c(modp),a×b≡c(modp),a/b≡c(modp)3.4a3+27b2≠0(modp)a,b是小于p的非负整数4.x,y属于0到p-1间的证书,曲线标记为Ep(a,b)阶:椭圆曲线上一点P,存在正整数n,使得nP=O∞,则n为P的阶,若n不存在,则P是无限阶的,有限域上定义的椭圆曲线上所有点的阶都存在。椭圆曲线难题K=kG,其中K,G为Ep(a,b)上的点,k为小于n的整数,n是点G的阶,给定k和G,计算K容易,但是给定K和G,求k就很难了!因此,设K为公钥,k为私钥,G为基点。加密过程1.A选定一条椭圆曲线Ep(a,b),并取曲线上一点作为基点G2.A选择一个私钥k,并生成公钥K=kG3.A将Ep(a,b)和k,G发送给B4.B收到后将明文编码到Ep(a,b)上一点M,并产生一个随机数r5.B计算点C1=M+rK,C2=rG6.B将C1,C2传给A7.A计算C1-kC2=M+rkG-krG=M8.A对M解码得到明文攻击者只能得到Ep(a,b),G,K,C1,C2,没有k就无法得到M。签名验签流程1.A选定一条椭圆曲线Ep(a,b),并取曲线上一点作为基点G2.A选择一个私钥k,并生成公钥K=kG3.A产生一个随机数r,计算R(x,y)=rG4.A计算Hash=SHA(M),M‘=M(modp)5.A计算S=(Hash+M'k)/r(modp)6.B获得S和M',Ep(a,b),K,R(x,y)7.B计算Hash=SHA(M),M'=M(modp)8.B计算R'=(Hash*G+M'*K)/S=(Hash*G+M'*kG)*r/(Hash+M'k)=rG=R(x,y),若R'=R,则验签成功。以上加解密和签名验签流程只是一个例子,具体应用时可以利用K=kG这一特性变幻出多种加解密方式。