椭圆曲线加密算法(ECC - Elliptic curve encryption algorithm)是基于椭圆曲线数学的一种公钥加密算法。随着计算机计算能力的不断提升,RSA的使用率越来越高。但是为了安全,其密钥的长度一直饱受诟病,于是ECC这种新算法使用率和重要性都在逐年上升。
现在就来介绍一下椭圆曲线加密算法。
椭圆曲线是这样一个齐次方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 在直角坐标系上确定的一条平面曲线,其中,系数 ai(i=1,2,3,4,6) 定义在某个有理数域、或者无理数域、复数域,或者有限域 GF(pr) 。如果在计算机中应用,则使用有限域 GF(pr) 。
另外,曲线上每个点都必须是非奇异的,或者叫做“光滑”的,即数学上的“任意一点都存在切线”。
群,是一种代数结构,由一个集合及一个二元运算组成。如果一个集合或者运算是群的话,就必须满足如下的条件:
阿贝尔群,就是定义了加法交换律操作的群。阿贝尔群的加法定义如下:
如果一个群 G ,对于群 G 中的任意两个元素 ,a,b ,以及定义的二元操作 ∗ ,满足 a∗b=b∗a ,则该群 G 就可以称为阿贝尔群,也叫加法群。
在椭圆曲线中,中任意取两点 P 和 Q ,做直线交于椭圆曲线上的一点 A ,过点 A 做 y 轴的平行线交于点 B ,则定义椭圆曲线的任意两点的二元加法元算逻辑为:
P+Q=B
这样,该加法的结果也在此椭圆曲线上,满足了交换律和结合律。
有了加法,自然就会想到“乘法”,表示多个相同的数相加。一般就是这样的一个概念:
mP=m个(P+P+P+...+P)=Q
即: m 个 P 相加,得到另一个数 Q 。在椭圆曲线的加法里,可以表示成:已知一个数 m 和一个点 P ,如果 m 个相同点 P 相加,就得到一个新点 Q 。
反过来,已知点 Q ,和另一个点 P ,能否求出是经过多少个点 P 相加得来的呢?这个问题就非常难求解了。
椭圆曲线密码体制,就是利用这个困难来设计的。
椭圆曲线是连续的,假设某一条椭圆曲线的值域为 Fq ,那么 Fq 域里的数值也是连续的。如果采用计算机来计算椭圆曲线上点的值,那么可能由于精度问题,求得的值无法落在 Fq 域内。如果采用连续的椭圆曲线来做加密算法,就可能无法解密了。因此,需要定义一个有限的域 Fq 。
有限域 Fq 的描述及其元素的表示: q 是一个奇数,或者是 2 的次幂方。当 q 是奇素数 p 时,要求 p>2191 ;当 q 是 2 的方幂 2m 时,要求 m>192 且为素数。于是有:
y2=x3+ax+b,a,b∈Fp
且
(4a^3+27b^2) mod p=0
椭圆曲线 E(Fp) 的定义为:
E(Fp)=(x,y)|x,y∈Fp ,且满足: (1)∪O
其中, O 表示无穷远点。
描述一条 Fp 上的椭圆曲线,常用到的六个参量: T=(p,a,b,n,x,y) 。其中,
以上六个量就可以描述一条椭圆曲线,有时候还会用到 h (椭圆曲线上所有点的个数 p 与 n 相除的整数部分)。
加解密过程:
得到 M 后,再进行解密就可以得到明文。
这个加密通信过程中,如果有一个偷窥者 H ,他只能看到 Ep(a,b)、K、G、C1、C2 ,而通过 、K、G 求 k 或通过 、C2、G 求 r 都是相当困难的。因此, H 无法得到A、B间传送的明文信息。