椭圆曲线公钥在网络安全密码体系中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
椭圆曲线公钥在网络安全密码体系中的应用作者:高建明
来源:《计算机时代》2013年第08期
摘要:移动设备和无线设备的大量使用需要一种新的公钥密码方案,来适应这些设备在计算能力和带宽方面的限制,同时要满足安全性级别的要求。椭圆曲线密码体制作为一种新兴的加密及身份认证技术,以其自身的多项特点,已从学术理论研究阶段逐步走向实际应用阶段,成为目前最有前途的一种公钥密码体系,极有可能成为现存公钥密码体系RSA的替代者。椭圆曲线密码算法具有高安全性、低消耗、运算速度快的特点,具有良好的应用前景。文章对椭圆曲线方程、算法的原理、加密算法、安全性进行了分析,实现了椭圆曲线公钥在网络Diffie-Hellman密钥交换中的应用。
关键词:椭圆曲线;密码学;编码;密钥;安全性
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2013)08-25-03
0 引言
目前,大多数使用公钥密码学进行加密和数字签名的产品和标准都使用RSA算法。为了保证RSA在使用中的安全性,最近这些年来密钥设置的位数一直在增加,这对使用RSA的应用是一个很重的负担,近年来,出现了一种具有较强竞争力的椭圆曲线密码学(ECC),它对RSA提出了挑战[1]。ECC突出的优点是可以使用比RSA短得多的密钥,但却能得到相同的安全性,因此在应用上可以大大减少运行负荷。
1 椭圆曲线方程概述
1.1 椭圆曲线方程
一般地说,椭圆曲线是由方程y2+dxy+ey=x3+ax2+bx+c定义的曲线,其中定义a,b,c,d,e为系数,从数学上讲,椭圆曲线的形状并非椭圆,之所以被称为椭圆曲线,是因为该方程右边的多项式x3+ax2+bx+c与椭圆曲线的积分有关。
现分析以下椭圆曲线类方程:
令K(b,c)为式⑴的椭圆曲线上所有(x,y)的不同点组成的集合。
这类椭圆曲线的特征是曲线上的点具有加法性质,一般可用于构造交换群,交换群(M,+)满足以下5个性质的代数结构,其中M为集合,集合上元素的加法运算用符号“+”表示。
⑴对任意x,y∈M,x+y∈M,则满足集合上的封闭性。
⑵对任意x,y,z∈M,x+(y+z)=(x+y)+z),则满足集合上的结合性。
⑶单位元:存在0∈M,使得对任意x∈M,则x+0=0+x=0。
⑷逆元素:对任x∈M,显然存在元素x'∈M使x+x'=x'+x。将x'记为-x,并将x+(-y)记为x-y。
⑸对任意x,y∈M,x+y=y+x,则满足集合上交换性。
在交换群中单位元称为零元。现令X,Y为椭圆曲线上的任意一点,则有以下两种情形:
⑴当X≠Y时,可令L为连接这两个点的直线。若L不垂直,则可以推出L一定与曲线上第三点相交,并且惟一。
⑵当X=Y时,可令L为曲线在点X的切线。若L不垂直,则L一定与曲线上的另一个点相交,且惟一。
在上面两种情形中,如果当L为垂直线时,则L和曲线不相交。引进一个虚拟点P,假设它在无穷远处与L线相交。虚拟点P设定为单位元的角色,称为零点,定义K'(b,c)=K (b,c)∪{0}[2]。对集合K'(b,c)上的点可以定义一个加法运算“+”如下:
⑴对任意的K'(b,c),令X+0=X。
⑵对任意的X,Y∈K(b,c),如果X≠Y,若它们的X坐标相同,则根据椭圆曲线的性质,则X和Y与X轴互为映像,即X=(x,y),Y=(x,-y)。令X+Y=0,因此,-X=(x,y)。
⑶对任意X,Y∈K(b,c),如果X坐标不相同,定义L为经过这两个点的直线,若L 不是曲线的切线,则L必定与K(b,c)上的惟一的第三点Z相交,设X+Y=-Z,则X+Y是Z 在X轴上的映像。如果L为点X上的切线,可令X+Y=-X。如果L为在点Y上的切线,则可令X+Y=-Y。
⑷对任意X∈K(b,c),令Lx为曲线在点X上的切线,令Y为LX与曲线相交的另一点,令X+X=-Y。
可以证明(K'(b,c),+)是一个交换群。为便于将传送的明文编码,通常只考虑K (b,c)上的格点(x,y),通常也称为整数点,即X、Y都是整数。
1.2 离散椭圆曲线
2 椭圆曲线的编码定义
用椭圆曲线将明文进行加密首先需要将明文M编码,使它成为椭圆曲线上的一个整数点,从这个点上可惟一推算出明文M[5]。但到目前为止仍不知道这种编码能否被多项式时间算法所产生。不过,这种编码可以用概率算法产生,且速度较快,尽管概率算法不一定能保证总能生成一个编码,但可以证明这种情况发生的几率是很小的[6]。
假设N是比P小的多的正整数。先令x=N,然后检查N3+bN+c是否等于模P下的整数平方[7]。如果不是,在N的末尾加入和修改一些数字而得到一个新的整数N',并且检查
N3+BN+C是否为模P下的整数平方,下面是一个概率编码的算法。
令¢>0为一个非常小的数,使得(N+1)£
因为对于每个J,x3+bx+c不是整数平方的概率约为1/2。因此,可以知道算法失败的概率为ε,给定Pm=(x,y),容易看出N=[x/£],并称Y为椭圆曲线编码参数。
如令p=179,b=3,c=34,£=15,则(4b3+27c2)mod p=174≠0。
从(M+1)£
所以y=9,即P10=(150,9)是N=10在集合K'179(3,34)上的编码(这里设
£=15),因为[150/15]=10,所以从点(150,9)可推算出N=10[9]。
3 椭圆曲线加密算法的应用
3.1 椭圆曲线加密算法
通常将椭圆曲线加密和解密算法分别简称为ECC加密和ECC解密。
令K为任意大于1的整数。对任意X∈K'(b,c),令kX=X+(k-1)X,椭圆曲线对数问题指的就是从给定k×X和X∈K'(b,c)求K的值,通常认为椭圆曲线对数问题没有快速算法,这个问题就是研究椭圆曲线公钥体系的基础。
与Diffie-Hellman密钥交换体系类似,椭圆曲线公钥体系要求用户共享同一参数,首先选取参数B,C,P并构造模P下的离散椭圆曲线Kp(b,c),然后在Kp(b,c)上选取一个G并选取编码参数£,共享参数是(Kp(b,c),G,£)[10]。
假设甲方拟设立椭圆曲线公钥体系的公钥和私钥,则甲方首先随机选取一个正整数KA作为私钥,然后计算PA=kAG作为公钥,假设乙方需要将明文M用ECC加密后送给甲方,这里的M是满足(M+1)£