一种椭圆曲线密码系统及实现方法

文档序号:7626371阅读:263来源:国知局
专利名称:一种椭圆曲线密码系统及实现方法
技术领域
本发明涉及电子设备的数字内容保护系统,特别是涉及一种椭圆曲线密码系统及实现方法。
背景技术
随着信息技术的不断发展和应用,电子信息的安全性问题变得越来越重要。而密码学作为信息安全的核心,在信息安全中扮演着极为重要的角色。密码学的发展中有两个重要的里程碑1949年Shanon的“保密通信中的数学理论”和1976年Diffie和Hellman的“密码学的新方向”。Shanon的理论是对密码学的研究变成具有一定理论系统的科学;“密码学的新方向”一文提出了公开密钥密码的思想,开创了公钥密码学的新纪元。公钥密码提出后,立刻受到了人们的普遍关注。从1976年以来,人们提出了大量公钥密码体制的实现方案。所有这些方案的安全性都是基于求解某个数学难题的,截至目前为止,有如下三类既具有一定安全性又易于实现的数学难题1.基于大数分解问题(IFP)的公钥密码系统,其中包括RSA体制和Rabin体制;2.基于有限域上离散对数问题(DLP)的公钥密码体制,其中主要包括ElGamal类加密体制和签名方案,Diffie-Hellman密钥交换方案,Schnorr签名方案和Nyberg-Ruppel签名方案等;3.基于椭圆曲线离散对数问题(ECDLP)的公钥密码体制,其中主要包括椭圆曲线型的Diffie-Hellman密钥交换方案,椭圆曲线型的MQV密钥交换方案;椭圆曲线型的数字签名算法。
将椭圆曲线用于密码算法,于1985年由Koblitz和Victor Miller分别独立地提出。它问世以来一直是密码分析学的研究对象。现在,在商业和政府的用途中,椭圆曲线密码系统(ECC)都被认为是安全的。根据已知的密码分析学知识,椭圆曲线密码系统相比于传统的密码系统来说提供了更高的安全性。例如,相比基于RSA和ELGamal的加密与数字签名算法和基于Diffie-Hellman密钥协商算法来说,椭圆曲线密码系统具有更短的密钥和更有效的算法。而这两方面的优势使得椭圆曲线密码系统比起传统的密码系统来说更实用,且能广泛用于存储量和计算量受限的环境下,如移动电话和个人数字助理。同样的原因使得椭圆曲线密码系统也倍受高要求系统的青睐,如安全网络设备(这些设备经常用到公钥运算)。
椭圆曲线密码系统(ECC)相对于RSA和DSA等系统吸引人的最主要原因是其安全性是基于有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,ECDLP是比因子分解问题更难的问题,许多密码专家认为它是指数级的难度,即解决其数学问题--椭圆曲线离散对数问题(ECDLP)的已知最好的算法也要用完全指数时间。与之相比,RSA和DSA等其它公钥密码系统所基于的数学问题--因数分解问题(IFP)和离散对数问题(DLP)都是亚指数时间算法,与RSA和DSA等系统相比,椭圆曲线密码系统具有如下更好的优势1.安全性更高密码算法的安全性能通过该算法的抗攻击强度来反映。表1.1描述了椭圆曲线密码系统和其它几种公钥密码算法抗攻击强度的比较。我们可以看到,与其他公钥算法相比,椭圆曲线密码系统抗攻击性具有绝对的优势。如160bit的椭圆曲线密码系统可提供与1024bit的RSA、DSA相当的安全强度,而210bit的椭圆曲线密码系统则与2048bit RSA、DSA具有相同的安全强度。
表1.1 ECC与RSA/DSA抗攻击性能比较

其中MIPS年表示每秒钟能运行一百万次指令的计算机运行一年的工作量
2.计算量小,处理速度快虽然在RSA中可以通过选取较小的公钥(如3)的方法提高公钥处理的速度,既提高加密和签名验证的速度,使其在加密和签名验证上与椭圆曲线密码系统有可比性,但在私钥的处理速度上(解密和签名)椭圆曲线密码系统比RSA、DSA要快。表1.2描述了椭圆曲线密码系统与RSA、DSA在密钥生成,签名和验证速度的比较。
表1.2 ECC与RSA/DSA计算速度比较

其中,ECC算法为191bit,RSA/DSA为1024bit。随着安全强度的增加,ECC比RSA/DSA运算的速度提高的更快。
3.存储空间少椭圆曲线密码系统的密钥尺寸和系统参数与RSA/DSA相比要小得多,意味着它所占的存储空间要少得多。这对于密码算法在IC卡和无线环境中的应用具有特别重要的意义。
4.带宽要求低当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时,椭圆曲线密码系统带宽要求要低得多。带宽要求低使椭圆曲线密码系统在无线网络中具有广阔的应用前景。
由上面的优点我们可以看到,随着计算能力的提高需要密钥长度的增加,椭圆曲线密码系统相对其它公钥密码系统更吸引我们的关注。其每比特更高的安全性所带来的优点包括更高的速度,更低的能量消耗,节约带宽,提高存储效率。这些优点在一些对于带宽、处理器能力或存储有限制的应用中显得尤为重要。

发明内容
本发明的目的在于提供一种椭圆曲线密码系统及实现方法,为高层认证协议的实现提供底层模块。
为实现本发明的目的而提供的一种椭圆曲线密码系统,包括(一)有限域算法模块,用于利用Montgomery算术实现大素数域中的运算。
所述的有限域算法模块包括模加运算模块、模减运算模块、模乘运算模块、模平方运算模块、模归约运算模块、求逆运算模块。
所述的模乘运算模块为CIOS-Montgomery乘法算法模块。
所述的模平方运算模块为SRCIL-Montgomery平方算法模块。
所述的求逆运算模块为指数求逆算法模块。
本发明的椭圆曲线密码系统还包括(二)点加与倍点算法模块,用于在利用Montgomery算术实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,其调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
所述点加运算与倍点运算为优化点加与倍点算法运算。
(三)标量乘算法模块,用于实现所述椭圆曲线密码系统的核心运算标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
所述标量乘运算采用NAF随机标量乘算法。
(四)DH密钥协商算法模块,用于调用标量乘算法模块,完成密钥协商,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
(五)数字签名与验证模块,用于调用标量乘算法模块,完成对消息的数字签名与验证过程,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
本发明还提供一种椭圆曲线密码系统的实现方法,包括下列步骤(一)利用Montgomery算数实现椭圆曲线密码系统中的大素数域中的运算。
所述运算包括模加运算、模减运算、模乘运算、模平方运算、模归约运算、求逆运算。
所述模乘运算模块为CIOS-Montgomery乘法算法。
所述的模平方运算为SRCIL-Montgomery平方算法。
所述的求逆运算模块为指数求逆算法模块。
本发明的椭圆曲线密码系统实现方法,还包括下列步骤(二)在利用Montgomery算数实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,其调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
所述点加运算与倍点运算为优化点加与倍点算法运算。
(三)标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
所述标量乘运算采用NAF随机标量乘算法。
(四)调用DH密钥协商算法模块,通过标量乘算法模块,完成密钥协商,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
(五)调用数字签名与验证模块,通过标量乘算法模块,完成对消息的数字签名与验证过程,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
本发明的有益效果是本发明提供了一种适合硬件实现的椭圆曲线密码系统及实现方法,其采用了Montgomery算数来实现大素数域中的各种运算,实现椭圆曲线密码系统的所需所有算数运算能够在Montgomery域中进行模加/模减、模乘以及求逆运算,无需显式执行耗时的模归约运算,使其同时适合软件与硬件实现。


图1为椭圆曲线密码系统层次体系结构图;图2为素数域与Montgomery域元素之间的转换关系。
具体实施例方式
下面结合附图1、2进一步详细说明本发明的椭圆曲线密码系统及方法。
椭圆曲线的定义一条椭圆曲线是在射影平面上满足方程Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4X2+a6Z3----------------[3-1]的所有点的集合,且曲线上的每个点都是非奇异或者光滑的。
其中,Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4X2+a6Z3是维尔斯特拉斯方程(Weierstrass,Karl Theodor Wilhelm Weierstrass,1815-1897),是一个齐次方程。
所谓“非奇异”或“光滑”的,在数学中是指曲线上任意一点的偏导数Fx(x,y,z),Fy(x,y,z),Fz(x,y,z)不能同时为0。
设椭圆曲线上有一个无穷远点O∞(0∶1∶0),因为这个点满足方程[3-1],x=X/Z,y=Y/Z代入方程[3-1]得到Y2+a1xy+a3y=x3+a2x2+a4x+a6-------------------------[3-2]其中,(x,y)为普通平面直角坐标系上的坐标。
也就是说满足方程[3-2]的光滑曲线加上一个无穷远点O∞,组成了椭圆曲线。
椭圆曲线是连续的,并不适合用于加密,因此,一般地,要把适合加密的椭圆曲线定义在有限域上。
有限域是一种只由有限个元素组成的域。
给出一个有限域Fp,这个域只有有限个元素,即Fp中只有p(p为素数)个元素0,1,2……p-2,p-1。
定义Fp的加法(a+b)法则是a+b≡c(mod p);即,(a+b)÷p的余数和c÷p的余数相同;Fp的乘法(a×b)法则是a×b≡c(mod p);Fp的除法(a÷b)法则是a/b≡c(mod p);即a×b-1≡c(mod p);(b-1也是一个0到p-1之间的整数,但满足b×b-1≡1(mod p))。
Fp的单位元是1,零元是0。
但是,并不是所有的有限域上的椭圆曲线都适合加密,其中对于定义在大素数域上的椭圆曲线是适合于加密的椭圆曲线,大素数域上的椭圆曲线可通过同构映射将一般的曲线方程变换为特别简单的形式y2=x3+ax+b,其中曲线参数a,b∈Fp并且满足4a3+27b2≠0(mod p)。
因此,满足下列方程的所有点(x,y),再加上无穷远点O∞,构成一条定义在大素数域Fp上的椭圆曲线。
Y2=x3+ax+b(mod p)其中x,y属于0到p-1间的大素数,并将这条椭圆曲线记为Ep(a,b)。
公开密钥算法总是要基于一个数学上的难题。比如RSA密码系统依据的是给定两个大素数p、q很容易相乘得到n,而对n进行因式分解却相对困难。
考虑如下等式K=kG[其中K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数,不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相当困难了。
这就是椭圆曲线密码系统基于的数学难题。把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(private key),K称为公开密钥(publickey)。
本发明是采用了Montgomery算数来实现大素数域中的各种运算,从而实现椭圆曲线密码的系统和方法。
如图2所示Montgomery算数由Peter Montgomery提出,其核心运算是Montgomery乘法,由于Montgomery乘法既不需要计算及其耗时的除法也不需要利用商估值技术,因此它简化了模归约运算。
从数学的角度来看,Montgomery域与素数域GF(p)是同构的,GF(p)中的每一个元素在Montgomery域都有一个唯一与之对应的元素。元素a∈GF(p)在Montgomery域中表示为a′=a·R mod p,其中R称为Montgomery常数(R必须大于p)。Montgomery常数R与大素数域的特征必须互素,即gcd(R,p)=1。通常选取R是2的幂次R=2m,其中m反映了硬件的规模,较佳为R=2192。
利用Montgomery算数完成素数域运算需要将操作数由素数域转化到Montgomery域,转化可利用Montgomery乘法完成a′=MonMul(a,R2)=a·R2/R mod p=a·R mod p。
在系统中通过硬件实现Montgomery乘法算法,则这种转化在硬件实现时不再需要其它的运算,因此也不需要附加的硬件资源,转化时Montgomery常数R=2mmod p已经被预计算,即计算R2需要一些花费,但对于每个模p仅需计算一次。
由Montgomery域转化到素数域也可利用Montgomery乘法完成a=MonMul(a′,1)=a′·1/R mod p=a·R·1/R mod p=a mod p;b与a的运算方式是一样的,即对b有下式成立b=MonMul(b′,1)=b′·1/R mod p=b·R·1/R mod p=b mod p。当在Montgomery域中执行大量算数运算时,这种转化的花费可以忽略,因为只需在所有运算开始和结束时进行一次。本发明中的椭圆曲线密码系统运算开始时所有的操作数被转化到Montgomery域中接着在Montgomery域完成所有椭圆曲线上的点运算,最后运算结果被转化到大素数域。
这样,本发明利用大整数的Montgomery表示可以有效地实现素数域中的模运算,而且在Montgomery域中无需显式执行耗时的模归约运算,实现椭圆曲线密码系统的所需的所有算数运算能够在Montgomery域中进行模加/模减、模乘、求逆运算、模平方运算以及模归约运算。
模加运算a+b mod p=MonAdd(a’,b’)=(a+b)R mod p=a’+b’mod p模乘运算a·bmod p=MonMul(a’,b’)=(a·b)R mod p=a’·b’/R mod p求逆运算a-1mod p=MonInv(a’)=a-1R mod p=a’-1R2 mod p模减运算a-b mod p=MonSub(a’,b’)=(a-b)R mod p=a’-b’mod p模平方运算a2mod p=MonSq(a’2)=(a2)R mod p=a’2/R mod p模归约运算r=cR-1mod p其中,MonMul模乘运算;MonAdd模加运算;MonInv求逆运算;MonSub模减运算;MonSq模平方运算下面结合图1详细说明本发明实施例的椭圆曲线密码系统如图1所示,本实施例的椭圆曲线密码系统包括有限域算法模块,用于利用Montgomery算数实现大素数域中的加法运算、乘法运算、平方运算以及求逆运算。
这里的大素数域就是指的一般的素数域Fp,p是大于2的素数。
所述的有限域算法模块包括模加运算模块、模减运算模块、模乘运算模块、模平方运算模块、模归约运算模块、求逆运算模块。
所述的模乘运算模块为CIOS-Montgomery乘法算法模块(CoarselyIntegrated Operand Scanning),该算法模块占用的资源最少,速度最快。
CIOS-Montgomery乘法算法的原理是该算法集成了乘法与归约步骤。具体地说,此算法并没有直接计算a与b的乘积然后对该乘积进行归约,而是对乘法和归约在外层循环中交替进行,这样做是由于在第i次外层循环中归约步骤所用到的值m仅依赖于s[i]的值,而在乘法的第i次循环中s[i]的值已经计算完毕。
所述的模平方运算模块为SRCIL-Montgomery平方算法模块(SquaringReduction with Inner Loop),该算法速度最快。SRCIL-Montgomery平方算法原理是该算法去除了一般Montgomery平方算法中的冗余部分并最大化算法软件并行的能力,其基本思想是使用了一个单独的循环计算ai×ai、去掉了进位的延迟并且通过改变循环的结构去掉冗余的部分。
所述的求逆运算模块为指数求逆算法模块,用费马小定理实现有限域中的求逆运算,即b=ap-2(mod p),其能够利用硬件电路板上的Montgomery乘法器资源,该算法模块在有Montgomery乘法器的硬件电路板上的执行时间约为二元扩展欧几里得算法执行时间的70%。
本实施例中的椭圆曲线密码系统,还包括点加与倍点算法模块,用于在利用Montgomery算数实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,其采用优化点加与倍点算法实现群运算,调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
标量乘算法模块,用于实现所述椭圆曲线密码系统的核心运算标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。所述标量乘模块中的运算采用NAF随机标量乘算法。
NAF随机点标量乘算法原理是NAF随机点标量乘算法首先对标量进行NAF编码,即标量k的NAF表示为Σi=0lki2i]]>,其中ki∈{0,±1}并且相邻的ki中至少有一个为0。通过这种编码方式可以有效地计算标量乘,NAF标量乘算法期望的运行时间约为(m/3)A+mD,其中m=[log2p],A表示点加运算,D表示倍点运算。
DH密钥协商算法模块,用于调用标量乘算法模块,完成密钥协商。其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
EC-Diffie-Hellman密钥协商是从一个主体的私钥和另一个主体的公钥导出一个共享的秘密值,此处两个主体具有相同的EC域参数。如果双方能够正确的执行完该协议,则他们将得到相同的结果。该算法可被一些方案调用以产生一个共享的秘密钥,其中,所输入的密钥是有效的。
数字签名与验证模块,用于调用标量乘算法模块,完成对消息的数字签名与验证过程。其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
椭圆曲线数字签名与验证算法(Elliptic Curve Digital Signature Algorithm,ECDSA)是类似于DSA(Digital Signature Algorithm)的一种基于椭圆曲线的数字签名与验证算法,其不象一般的离散对数问题和整数分解问题,椭圆曲线离散对数问题没有亚指数算法,正由于这点,使得采用椭圆曲线离散对数的算法的每比特强度在实质上更强了。
ECDSA的主要参数包括定义在有限域GF(p)上的椭圆曲线E,E上的GF(p)-有理点的个数#E(GF(p))可被一个大素数n整除,一个基点G∈E(GF(p)),可记为D=(p,a,b,G,n,h),(d,Q),Hash函数H。
将D=(p,a,b,G,n,h),Hash函数H,Q公开,d保密。
在本实施例的椭圆曲线密码系统中,首先需要实现底层有限域中的各种基本的运算包括加法运算、乘法运算、平方运算以及求逆运算;其次在有限域算法库的基础上实现椭圆曲线上的点加运算与倍点运算;最后实现椭圆曲线密码系统的核心运算标量乘运算;通过调用标量乘算法模块,完成密钥协商;通过调用标量乘算法模块,完成对消息的数字签名与验证过程。
下面结合本发明的椭圆曲线密码系统,进一步详细描述本发明的椭圆曲线密码系统的实现方法,包括下列步骤(一)利用Montgomery算数实现大素数域中的加法运算、乘法运算、平方运算以及求逆运算。
这里的大素数域就是指的一般的素数域Fp,p是大于2的素数。
◆模加运算
modadd算法输入整数a,b∈
,a=(at-1,at-2,…,a1,a0),b=(bt-1,bt-2,…,b1,b0)。
输出c=a+b mod p。
1.c0←Add(a0,b0),//低32比特相加2.For i from 1 to t-1 doci←Add(ai,bi)+carry(ai-1,bi-1).//a与b进行带进位的32比特加法3.If c≥p,then c←c-p.//如果carry(at-1,bt-1)≠0,则最后的运算结果有进位执行减p运算4.Return(c).//返回运算结果其中,Add(ai,bi)=(ai+bi)mod232,carry(ai,bi)=(ai+bi)/232◆模减运算modsub算法减运算和加运算是非常类似的,不同的是它要用到借位。
输入整数a,b∈
,a=(at-1,at-2,…,a1,a0),b=(bt-1,bt-2,…,b1,b0)。
输出c=a-b mod p。
1.borrow←0.//初始化将借位borrow赋予02.For i from 0 to t-1 do//a与b进行带进位的32比特加法2.1. ci←(ai-bi-borrow)mod232//32比特减法运算结果2.2. Ifai-bi-borrow≥0,then borrow←0;otherwise borrow←1.//32比特减法结果为正则借位borrow为0,否则借位borrow为13.If borrow>0,then c←c+p.//如果运算最后还有借位则执行加p运算4.Return(c).//返回运算结果由于在modadd中用到了a-b(a≥b),这只是modsub的一个特殊情况,只须将上面算法中的第3步去掉即可。
◆模乘运算Montgomery乘法有多种实现方式,本实施例采用了最为有效的CIOS-Montgomery乘法算法(Coarsely Integrated Operand Scanning),该算法占用的资源最少,速度最快。
输入整数a,b∈
,a=(at-1,at-2,…,a1,a0),b=(bt-1,bt-2,…,b1,b0)。
输出c=abR-1mod p1.For i from 0 to t-1 dos[i]←0.//初始化存储运算结果的数组s6←0,s7←0 //初始化临时变量2.For i from 0 to t-1 do2.1. C←0.//初始化临时变量2.2. Forj from 0 to t-1 do//a与b进行32比特乘法计算(C,S)=s[j]+ajbi+C,//32比特乘法的中间结果令t[j]←S.//存储32比特进位2.3.(C,S)←s6+C,s6←S,s7←C.//存储最高位的运算结果2.4.C←0,m=s
*p’
mod 232,(C,S)=s
+m*p
.//对最低32比特进行归约2.5.Forj form 1 to t-1 do//逐段归约计算(C,S)=s[j]+m*p[j]+C,//32比特中间结果归约令s[j-1]←S.//存储32比特进位2.6.(C,S)←s6+C,s[t-1]←S,s6←s7+C //存储归约结果3. If s6!=0 //有进位3.1 C=1;//初始化临时变量3.2 For i from 0 to t-1 do//逐段进行进位纠正计算(C,S)=s[i]+~p[i]+C,//进位纠正令s[i]←S.//存储32比特进位4.Return((St-1,…,s1,s0)) //返回运算结果这里C,S都是32比特的字,(C,S)是C,S的连接,它是64比特;p’
=-p
-1mod 232,其中p
是192比特素数p的最低32比特(最低的字)。
◆模平方运算Montgomery平方也有多种实现方式,本实施例采用了最为有效的SRCIL-Montgomery平方算法(Squaring Reduction with Inner Loop),该算法速度最快。
输入整数a,b∈
,a=(at-1,at-2,…,a1,a0)。
输出c=a2R-1mod p1.For i from 0 to t-1 do(s[2i+1],s[2i])←ai×ai;//计算第i段相乘结果2.For i from 0 to t-1 do//对第1步运算结果进行归约2.1 m=s[i]×p′
mod 232;//计算每段归约值2.2 Forj from 0 to i do//逐段归约(C,s[i+j])=s[i+j]+m×p[j]+C;//32比特中间结果归约2.3 C1=0;C2=0;//初始化临时变量2.4 Forj from i+1 to t-1 do//计算ai与aj的乘积并进行归约2.4.1 slong=2×C1+C+s[i+j] //存储中间结果2.4.2 (C1,S)=ai×aj;//计算ai与aj的乘积2.4.3 (C,s[i+j]=slong+2×S;//与低段运算结果的进位相加2.4.4 (C2,s[i+j]=m×p[j]+s[i+j]+C2.//32比特中间段归约2.5 (prevcar,s[i+t])=C+2×C1+C2+s[i+t]+prevcar;//存储最高32比特3.s[2t]=s[2t]+prevcar;//存储最高位的进位4.For i from 0 to t-1 dos[i]←s[i+t] //将运算结果移至低t个单元5.If s[2t]!=0//若进位不等于01.1 C=1;//初始化临时变量1.2 For i from 0 to t-1 do//逐段进行进位纠正计算(C,S)=s[i]+~p[i]+C;//进位纠正令s[i]←S.//存储32比特进位6.Return((st-1,…,s1,s0)) //返回运算结果其中,C,C1,C2,S都是32比特的字,(C,S)是C,S的连接,它是64比特;p’
=-p
-1mod 232,其中p
是192比特素数p的最低32比特(最低的字)。
◆Montgomery模归约算法输入c=(c2t-1,…,c1,c0)输出r=cR-1mod p.
1.For i from 0 to t-1 do//归约1.1 C=0;//初始化临时变量1.2 m=ci*p’
;//计算每段归约值1.3 Forj from 0 to t-1 do//逐段归约计算(C,S)=ci+j+m*p[j]+C;//32比特中间结果归约1.4 (prevcar,s[i+t])=C+s[i+t]+prevcar;//存储最高32比特2.For i from 0 to t-1 doc[i]←c[i+t] //将运算结果移至低t个单元3.If prevcar!=0 //若进位不等于03.1 C=1;//初始化临时变量3.2 For i from 0 to t-1 do//逐段进行进位纠正计算(C,S)=c[i]+~p[i]+C;//进位纠正令r[i]←S //存储32比特进位4.Return((rt-1,…,r1,r0)) //返回运算结果◆Montgomery求逆算法考虑到利用硬件电路板上的Montgomery乘法器资源,因此本实施例考虑用费马小定理实现有限域中的求逆运算,即b=ap-2(mod p)。该算法在有Montgomery乘法器的硬件电路板上的执行时间约为二元扩展欧几里得(Euclid)算法执行时间的70%。
输入整数a∈
,a=(at-1,at-2,…,a1,a0)
输出b=a-1mod p.
1.a=a·R mod p;//将a变换到Montgomery域2.x=1·R mod p;//将1变换到Montgomery域3.For i from j-1 down to 0 do//计算模指数3.1 x=MontMult(x,x);//模平方运算3.2 If ei=1 then x=MontMult(x,a);//如果p-2的当前比特是1则执行模乘运算4.Return b=MontMult(x,1).//返回运算结果至素数域◆除法有限域中的除法运算是乘法和求逆的组合,本领域普通技术人员能够根据本实施例中关于乘法与求逆的描述,实现本发明的除法运算,因此,在本实施例中不再详细描述。
(二)在利用Montgomery算数实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,本实施例采用优化的点加与倍点算法实现群运算,调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
对于群运算,本实施例对IEEEP1363标准中的点加以及倍点算法进行了优化,采用了与IEEEP1363标准(IEEEP1363标准的参考文献IEEE std1363-2000Standard specifications for public-key cryptography,2000,standards.ieee.org/catalog/oils/busarch.html)中不同的运算顺序,从而使得算法所需要的临时变量最少,优化算法如下◆点加(elliptic_add)GF(p)上椭圆曲线y2=x3+ax+b的点加公式的Modified-Jacobian坐标形式是P=(X1,Y1,Z1,aZ14),]]>Q=(X2,Y2,Z2,aZ24),]]>且P+Q=(X3,Y3,Z3,aZ34)]]>
这里U1=X1Z22,]]>U2=X2Z12,]]>S1=Y1Z23,]]>S2=Y2Z13,]]>H=U2-U1,T=S2-S1,X3=-H3-2U1H2+T2,Y3=-S1H3+T(U1H2-X3),Z3=Z1Z2H,aZ34=a(Z3)4.]]>其算法如下输入p,a,b,Qin=(X,Y,Z),P=(X2,Y2).
输出Qout=(X,Y,Z,aZ4)=Qin+P.
1.If(P==O) //判断是否点P是无穷远点aZ4=a*Z4if necessary//需要时计算aZ4的值return Qout//返回点加结果2.If(Z==0) //判断是否点Qin是无穷远点Qout=P //点加结果为Preturn Qout//返回点加结果3.aZ4=Z2//计算Z24.T1=X2*aZ4//计算U2=X2Z25.T1=T1-X //计算H=U2-U16.aZ4=Z*aZ4//计算Z37.aZ4=Y2*aZ4//计算Y2=Y2Z38.aZ4=aZ4-Y //计算T=S2-S19.Z=Z*T1//计算Z3=ZH10.If(T1==0) //如果U2=U1If(aZ4==0) //如果P=QinQout=P //初始化QoutDouble(Qout) //此时计算结果为2Preturn Qout//返回点加结果
else //此时P=-QinZ=0 //此时计算结果为无穷远点aZ4=0 //此时计算结果为无穷远点return Qout//返回点加结果11.T2=T12]]>//计算H212.T1=T1*T2//计算H313.Y=T1*Y//计算S1H314.T2=X*T2//计算U1H215.X=(aZ4)2//计算T216.X=X-T1//计算T2-H317.X=X-T2//计算T2-U1H2-H318.X=X-T2//计算X3=T2-2U1H2-H319.T2=T2-X //计算U1H2-X320.T2=aZ4*T2//计算T(U1H2-X3)21.Y=T2-Y //计算Y3=T(U1H2-X3)-S1H322.aZ4=Z2//计算Z223.aZ4=(aZ4)2//计算Z424.If(a==p-3) //如果a=p-3aZ4=0-3aZ4//计算-3Z4elseaZ4=a*aZ4//计算aZ4这个算法需要9次域乘法、5次域平方和2个临时变量。
◆倍点(elliptic_doubl)GF(p)上椭圆曲线y2=x3+ax+b的倍点公式的Modified-Jacobian坐标形式是
Qin=(X1,Y1,Z1,aZ14),]]>Qout=2Qin=(X3,Y3,Z3,aZ34)]]>这里S=4X1Y12,]]>U=8Y14,]]>M=3X12+(aZ14),]]>T=M2-2S,X3=T,Y3=M(S-T)-U,Z3=2Y1Z1,aZ34=2U(aZ1)4]]>其算法如下输入p,a=-3,b,Qin=(X,Y,Z,aZ4).
输出Qout=(X,Y,Z,aZ4)=2 Qin.
1.If(Z==0)return Qout //如果Qin是无穷远点输出结果2.T1=2Y //计算2Y3.Z=T1*Z //计算Z3=2YZ4.Y=Y2 //计算Y25.T1=2X //计算2X6.T1=2T1 //计算4X7.T1=T1*Y //计算S=4XY28.T2=X2 //计算X29. X=2T2//计算2X210.T2=X+T2 //计算3X211.T2=T2+aZ4 //计算M=3X2+aZ412.X=T22]]>//计算M213.X=X-T1 //计算M2-S14.X=X-T1 //计算X3=T=M2-2S15.T1=T1-X//计算S-T16.T2=T2*T1 //计算M(S-T)17.Y=2Y //计算2Y218.Y=Y2 //计算4Y4
19.Y=2Y //计算U=8Y420.T1=2Y //计算2U21.aZ4=T1*aZ4//计算2U(aZ4)22.Y=T2-Y//计算Y3=M(S-T)-U本实施例选取的a=p-3,上面算法仅需4次域乘法以及4次域平方。
(三)实现所述椭圆曲线密码系统的核心运算标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。所述标量乘模块中的运算采用NAF随机标量乘算法。
对于标量乘算法,考虑到硬件实现标量乘算法时是采用有限状态机对标量的状态进行编码的,因此为了减少有限状态机控制逻辑的复杂性以及存储空间的大小本实施例对标量进行了NAF编码并采用了下面的随机点标量乘算法,该算法无需进行预计算。
◆随机点标量乘随机点标量乘算法对标量进行NAF(non-adjacent form)编码,下面将这一算法描述如下输入整数k=Σi=0l-1bi2i,]]>其中bi∈{0,1}且bl=bl+1=0,椭圆曲线上的点P输出椭圆曲线上的点Q,Q=kP/*对标量进行NAF(non-adjacent form)编码 其中ki∈{0,±1}*/1.α←0//初始化临时变量2.For i from 0 to l do//NAF(non-adiacent form)编码 ki←bi+α-2β,//计算NAF编码并存储在ki中α←β,/*由标量的NAF表示计算标量乘*/3.For i from l down to 0 do//计算标量乘3.1.Q←2Q//倍点运算3.2.If ki≠0 then//ki不为零时需要执行点加运算
If ki==1,then Q←Q+P;//ki=1时执行Q+PElse Q←Q-P //ki=-1时执行Q+(-P)Return(Q) //返回标量乘运算结果(四)用于调用标量乘算法模块,完成对消息的数字签名与验证过程。其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
DH密钥协商算法EC-Diffie-Hellman密钥协商是从一个主体的私钥和另一个主体的公钥导出一个共享的秘密值,此处两个主体具有相同的EC域参数。如果双方能够正确的执行完该协议,则他们将得到相同的结果。该算法可被一些方案调用以产生一个共享的秘密钥,其中,所输入的密钥是有效的。
输入——EC基本参数q,a,b,n和G以及相应的密钥s和W′(对于s和W′,基本参数应该一样)——主体自己的私钥s——另一主体的公钥W′其中私钥s,EC基本参数q,a,b,r和G,以及公钥W′是有效的;所有的密钥都和同一基本参数相关。
输出导出的共享秘密值z∈GF(q);或者“error”操作.共享的秘密值z必须按照以下步骤进行1.计算椭圆曲线点P=s W′.
2.如果P=O输出“error”并停止。
3.令z=xP,既点P的x坐标。
4.输出z作为共享的秘密钥。
(五)调用标量乘算法模块,完成对消息的数字签名与验证过程。其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
椭圆曲线数字签名与验证算法(ECDSA)
ECDSA(Elliptic Curve Digital Signature Algorithm)是类似于DSA(DigitalSignature Algorithm)的一种基于椭圆曲线的数字签字与验证算法。不象一般的离散对数问题和整数分解问题,椭圆曲线离散对数问题没有亚指数算法,正由于这点,使得采用椭圆曲线离散对数的算法的每比特强度在实质上更强了。
ECDSA的主要参数包括定义在有限域GF(p)上的椭圆曲线E,E上的GF(p)-有理点的个数#E(GF(p))可被一个大素数n整除,一个基点G∈E(GF(p))。我们可记为D=(p,a,b,G,n,h),(d,Q),Hash函数H。
将D=(p,a,b,G,n,h),Hash函数H,Q公开,d保密。
◆签名生成签名者A利用上面的参数及公私钥对如下对一消息m进行签名1.随机或伪随机地选择一个整数k∈RZn*;]]>2.计算kG=(x1,y1),r=x1mod n,如果r=0,则返回到1;3.计算k-1mod n;4.计算e=H(m);5.计算s=k-1(e+dr)mod n,如果s=0,则返回到1。
其中,(r,s)是A对消息m的签名。
◆签名验证验证者B如下验证(r,s)是A对消息m的签名1.验证r,s是[1,n-1]中的整数;2.计算e=H(m);3.计算w=s-1mod n;4.计算u1=ew mod n,u2=rw mod n;5.计算X=uiG+u2Q=(x1,y1),如果X=O,则拒绝这个签名,否则,计算v=x1mod n,当且仅当v=r时接受这个签名。
本发明提供了一种适合硬件实现的椭圆曲线密码系统及实现方法,其采用了Montgomery算数来实现大素数域中的各种运算,实现椭圆曲线密码系统的所需所有算数运算能够在Montgomery域中进行模加/模减、模乘以及求逆运算,无需显示执行耗时的模归约运算,使其同时适合软件与硬件实现。
本实施例是为了使本领域普通技术人员理解而对本发明所进行的详细描述,但本领域普通技术人员可以想到,在不脱离本发明的权利要求所涵盖的范围内还可以做出其它的变化和修改,其均在本发明的保护范围内。
权利要求
1.一种椭圆曲线密码系统,其特征在于,包括有限域算法模块,用于利用Montgomery算术实现大素数域中的运算。
2.根据权利要求1所述的椭圆曲线密码系统,其特征在于,所述的有限域算法模块包括模加运算模块、模减运算模块、模乘运算模块、模平方运算模块、模归约运算模块、求逆运算模块。
3.根据权利要求2所述的椭圆曲线密码系统,其特征在于,所述的模乘运算模块为CIOS-Montgomery乘法算法模块。
4.根据权利要求3所述的椭圆曲线密码系统,其特征在于,所述的模平方运算模块为SRCIL-Montgomery平方算法模块。
5.根据权利要求4所述的椭圆曲线密码系统,其特征在于,所述的求逆运算模块为指数求逆算法模块。
6.根据权利要求1~5任一项所述的椭圆曲线密码系统,其特征在于,还包括点加与倍点算法模块,用于在利用Montgomery算术实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,其调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
7.根据权利要求6所述的椭圆曲线密码系统,其特征在于,所述点加运算与倍点运算为优化点加与倍点算法运算。
8.根据权利要求7所述的椭圆曲线密码系统,其特征在于,还包括标量乘算法模块,用于实现所述椭圆曲线密码系统的核心运算标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
9.根据权利要求8所述的椭圆曲线密码系统,其特征在于,所述标量乘运算采用NAF随机标量乘算法。
10.根据权利要求9所述的椭圆曲线密码系统,其特征在于,还包括DH密钥协商算法模块,用于调用标量乘算法模块,完成密钥协商,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
11.根据权利要求10所述的椭圆曲线密码系统,其特征在于,还包括数字签名与验证模块,用于调用标量乘算法模块,完成对消息的数字签名与验证过程,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
12.一种椭圆曲线密码系统的实现方法,其特征在于,包括下列步骤利用Montgomery算数实现椭圆曲线密码系统中的大素数域中的运算。
13.根据权利要求12所述的实现方法,其特征在于,所述运算包括模加运算、模减运算、模乘运算、模平方运算、模归约运算、求逆运算。
14.根据权利要求13所述的实现方法,其特征在于,所述模乘运算模块为CIOS-Montgomery乘法算法。
15.根据权利要求14所述的实现方法,其特征在于,所述的模平方运算为SRCIL-Montgomery平方算法。
16.根据权利要求15所述的实现方法,其特征在于,所述的求逆运算模块为指数求逆算法模块。
17.根据权利要求12~16所述的实现方法,其特征在于,还包括下列步骤在利用Montgomery算数实现有限域算法的基础上实现椭圆曲线上的点加运算与倍点运算,其调用有限域算法模块,输入参数为Montgomery域中元素,因而运算结果依然在Montgomery域中。
18.根据权利要求17所述的实现方法,其特征在于,所述点加运算与倍点运算为优化点加与倍点算法运算。
19.根据权利要求18所述的实现方法,其特征在于,还包括下列步骤标量乘运算,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
20.根据权利要求19所述的实现方法,其特征在于,所述标量乘运算采用NAF随机标量乘算法。
21.根据权利要求20所述的实现方法,其特征在于,还包括下列步骤调用DH密钥协商算法模块,通过标量乘算法模块,完成密钥协商,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
22.根据权利要求21所述的实现方法,其特征在于,还包括下列步骤调用数字签名与验证模块,通过标量乘算法模块,完成对消息的数字签名与验证过程,其输入参数为素数域中元素,运算前转化为Montgomery域中,运算结果转化回素数域中。
全文摘要
一种椭圆曲线密码系统及实现方法,包括有限域算法模块,用于利用Montgom ery算术实现大素数域中的运算;点加与倍点算法模块,实现椭圆曲线上的点加运算与倍点运算;标量乘算法模块,用于实现所述椭圆曲线密码系统的标量乘运算;DH密钥协商算法模块,用于调用标量乘算法模块,完成密钥协商;数字签名与验证模块,用于调用标量乘算法模块,完成对消息的数字签名与验证过程。其提供了一种适合硬件实现的椭圆曲线密码系统及实现方法,无需显式执行耗时的模归约运算,使其同时适合软件与硬件实现。
文档编号H04L9/32GK1831754SQ20051011551
公开日2006年9月13日 申请日期2005年11月4日 优先权日2005年11月4日
发明者范欣欣, 王育民, 詹阳, 姜正涛, 谭示崇, 田海博, 袁素春, 于松亮 申请人:北京浦奥得数码技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1