椭圆曲线签名和验证签名方法和装置的制作方法

文档序号:7943252阅读:343来源:国知局
专利名称:椭圆曲线签名和验证签名方法和装置的制作方法
技术领域
本发明涉及数据签名和验证签名,是利用椭圆曲线离散对数问题的签名和验证签名方法。
背景技术
密码系统分为对称密码系统和非对称密码系统。
对称密码有时也叫传统密码算法,就是加密密钥能够从解密密要中推算出来,反之也成立。在大多数算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,协商一个密钥。对称密码的安全性依赖于密钥,泄密密钥就意味着任何人都能对消息进行加/解密。所以,虽然对称密码的速度很快,但是如何将密钥安全分发给合法使用者却是一个问题。
在专利“密码设备和方法”(“CRYPTOGRAPHIC APPARATUS METHOD”,专利号US4200770)中给出了一个可以在公开信道中交换密钥的方法和设备,这个方法称为公开密钥交换或称为Diffie-Hellman密钥交换方法。该专利使得通信双方使用一个模幂函数协商和传递他们的秘密信息。攻击者要想获得传递的秘密信息,必须解决离散对数问题。如果使用的参数足够大,解离散对数问题是个难解的问题。
公钥密码,又称非对称密码,则可以有效的解决上述身份验证的问题。公钥密码与只使用一个密钥的对称密码不同,公钥密码学是非对称的,它使用两个独立但有着某种数学联系的密钥公钥和私钥。这样通信中的接收者保密其私钥,公开其公钥。公钥密码中的最重要的进展就是数字签名,通过公钥密码实现数字签名可以有效的解决上述身份验证的问题。用户A在向B发送信息之前,使用自己的私钥对该信息进行数字签名,用户B在接收到A发送的信息后,使用A公开的公钥验证A的签名,因为只有A拥有其私钥,这就保证了B所收到的信息确实来自于A,并且没有被篡改过,同时也证实了A的身份。
专利“密码通信系统和方法”(“CRYPTOGRAPHIC COMMUNICATIONSSYSTEM AND METHOD”,专利号US4405829)提出了Rivest,Shamir和Adleman发明的一种公钥密码方法——RSA。RSA公钥密码方法的安全性基于大整数因子分解问题的难解性。但随着目前对安全性要求的不断提高,对RSA密钥长度的要求也越来也高。
Taher ElGamal提出了一种基于欧拉算法的公钥数字签名机制。在这个机制中,发送方A使用模幂函数隐藏私钥x,计算y=gxmod p,并将公钥y公开。接收方B利用私钥进行签名,而B利用A的公钥来验证签名,具体算法如下1、预处理过程获得签名所需要的各项参数1.1确定有限域GF(p),即确定素数p;1.2确定生成元g;1.3选取随机数XA,使得1≤XA≤p-1,将XA作为签名密钥,即私钥;1.4计算yA=gxA,yA作为公钥,用来验证签名;1.6公开参数g,p,和公钥yA。
2、签名过程2.1发送方公开参数g,p,和公钥yA;2.2生成随机数k,其中1≤k≤p-1,利用模幂函数计算得到r=gk;2.3对于明文m计算s=k-1(m-xr)mod p;2.4上述获得的(r,s)即为发送方对明文m的签名,发送方将(r,s)以及明文m发送给接收方。
3、验证过程3.1接收方B接收到明文m以及其签名(r,s);3.2根据已知参数p,g和A的公钥yA,判断yArrsmod p是否等于gmmod p,如果是,则验证通过,否则,验证失败4、结束。
此方法随后被称之为数字签名算法(DSA)。
与E1Gama1数字签名机制相关的数学基础相当复杂,且签名长度相当长。美国专利“在数据交换系统中生成和验证电子签名以及识别签名的方法”(“Method for Identifying Subscribers and for Generatingand Verifying Electronic Signatures in a Data Exchange System”专利号US4,995,082)中,提出了一种安全的生成较短数字签名的方法,其基础是其它具有较低复杂度的数学方法。
在美国专利“数字签名算法”(“Digital Signature Algorithm”专利号US5,231,668)中,在保持相同数学复杂度的情况下,缩短了E1Gama1数字签名的长度。
随后,瑞士的Rueppel和澳大利亚的Nyberg在美国获得了专利“数字签名方法和密钥交换方法”(“Digital Signature Method and KeyAgreement Method”专利号US5,600,725),该专利中的签名方法具有签名、验证速度快和消息恢复的功能。其具体的签名验证过程如下1、预处理过程获得签名所需要的各项参数1.1确定有限域GF(p);1.2确定生成元g;1.3选取随机数XA,使得1≤XA≤p-1,将XA作为用户私钥;1.4计算yA=gxAmod p,yA作为用户公钥;1.6公开g,p和公钥yA。
2、签名过程2.1获取签名消息m;2.2签名者生成随机数k,其中1≤k≤p-1,利用模幂函数计算r=mg-kmod p;
2.3计算s=k-xr mod p;2.4签名者将消息m和其签名(r,s)发送给接收方。
3、验证过程3.1接收方接收到消息m和其签名(r,s);3.2根据已知参数p,g,yA,判断gsyArmod p是否等于m(modp),如果相等,则验证通过,否则,验证失败;4、结束。
1985年Neal Koblitz和Victor Miller分别提出将椭圆曲线用于公钥密码系统,并用椭圆曲线实现了已存在的公钥密码算法。基于椭圆曲线离散对数问题难解性的密码算法被称为椭圆曲线密码算法(Elliptic Curve Cryptography简称ECC),成为被国际密码界所广泛接受的公钥密码算法。
随后,上文提及的DSA签名机制和NR签名机制陆续被移植到椭圆曲线上,成为ECDSA签名算法和ECNR签名算法,使得签名机制所基于的数学难题,从离散对数问题难解性提升为基于椭圆曲线离散对数问题难解性。

发明内容
本发明的目的在于提出一种新的椭圆曲线签名方法。该签名方法基于椭圆曲线离散对数问题,该问题在数学上具有更高的复杂性,因而具有单位安全强度更高的特点,即可以大大缩短具有相同安全强度的数字签名的长度,加快签名速度,从而更能够满足移动通讯等受限环境的需求;而且该签名算法能够通过参数的选择构造出比DSA数字签名算法在椭圆曲线上的应用ECDSA椭圆曲线数字签名算法更加高效的算法,还能使该算法具有消息恢复的功能,使得用户即使不传递被签名的消息也能进行签名验证。
本发明提供了一种签名和验证签名方法,系统首先确定有限域GF(q),选取椭圆曲线方程E;选取椭圆曲线的基点G,并计算有限域上椭圆曲线点群的阶N。发送方A作为签名者,利用这些系统参数生成自己的私钥XA,其中1≤XA≤N-1,然后利用基点G计算点乘得到椭圆曲线上的点YA=XAG作为公钥。发送者A对于明文m的签名过程步骤以下首先,发送方A公开系统参数及其公钥YA,然后生成随机数k,使得k落在区间[1,N-1]上,将k与曲线的基点G进行椭圆曲线点乘运算,得到曲线上的点kG;使用函数d将得到的点kG和明文m进行运算,其中保证无法从d中获取k的值,得到r=d(m,kG)。函数f0,f1,g0,g1皆为r的函数,使用函数f0,f1,g0,g1和随机数以及私钥XA求解方程f0(r)+f1(r)s=k-XA(g0(r)+g1(r)s)解得s=(k-XAg0(r)-f0(r))(f1(r))-g1(r)-1,这样得到的(r,s)即为A对明文m的签名。发送者A将明文m和其签名(r,s)发送给B。
接收方B接收到明文m和其签名(r,s),首先使用公钥YA、椭圆曲线基点G以及函数f0,f1,g0,g1计算得到P=(f0(r)+f1(r)s)G+(g0(r)+g1(r)s)YA,使用函数d’计算m’=d’(r,P)。将计算得到的m’和接收到的m进行比较,如果相同则签名合法,同时m’是从签名结果中恢复得到的明文,如果不同则签名非法。
其中上述的函数d和函数d’必须具有以下性质设函数d形为D=d(x,y),从函数d可以推得y=d’(x,D),这样得到的函数d可以在上述签名和验证过程中有效的隐藏明文信息和随机数信息;函数d’可以在上述验证过程中恢复得到隐藏的明文信息。
根据本发明的另一个方面,提供一种采用所述椭圆曲线签名和验证签名方法的签名和验证签名的装置,;


图1是本发明签名过程的流程图。
图2是本发明验证签名过程的流程图。
图3是本发明的签名和验证签名装置的方框图。
具体实施例方式
图1示出本发明的签名过程的流程图。
在步骤101,接收方A公开其公钥YA和系统参数曲线E、椭圆曲线点群的基点G、椭圆曲线点群的阶N;
在步骤102,接收方A生成随机数k,其中1≤k≤n-1,其中N为椭圆曲线的点群的阶;在步骤103,将k与基点G作椭圆曲线的点乘运算,得到曲线上的点kG;在步骤104,获取明文m。当实际消息的长度比可以签名的消息长度长时,消息m可以用Hash函数h(m)的结果替换,即使用私钥对消息m的Hash值h(m)进行签名;在验证时,将接收的消息m先Hash得到h(m),再使用h(m)验证签名;在步骤105,使用函数d对步骤104中获取的明文m和kG进行运算,得到r=d(m,kG)。其中函数d必须具有以下性质设d函数形为D=d(x,y),从函数d可以推得函数d’,有y=d’(x,D)这样得到的d函数可以在上述签名和验证过程中有效的隐藏明文信息和随机数信息;d’函数可以在下述验证过程步骤204中恢复得到隐藏的明文信息;在步骤106,使用函数d对步骤104中获取的明文m和P进行运算,得到r=d(m,P)。使用r的函数f0,f1,g0,g1和随机数以及私钥XA求解方程f0(r)+f1(r)s=k-XA(g0(r)+g1(r)s)解得s=(k-XAg0(r)-f0(r))(f1(r))-g1(r))-1;在步骤107,在发送签名结果之前,必须判断得到的签名r和s是否为零,如果为零,则必须跳至步骤102,重新选择随机数k,重新对明文m进行签名;在步骤108,当步骤107中得到的r和s不为零,则得到了A对明文m的签名结果(r,s)。发送者A将明文m和其签名(r,s)发送给B。
至此,签名过程结束。
图2示出本发明的验证签名过程的流程图。
在步骤201,接收方B接收到A发送的明文m和签名(r,s);在步骤202,B获取系统参数和A的公钥YA;在步骤203,B使用公钥YA、椭圆曲线基点G以及函数f0,f1,g0,g1计算得到P=(f0(r)+f1(r)s)G+(g0(r)+g1(r)s)YA;在步骤204,B使用函数d’计算m’=d’(r,P);
在步骤205,B将步骤204中得到的m’和接收到的m进行比较,如果相等,则至步骤206,如果不相等,则至步骤207;在步骤206,m’和接收到的m相等,验证通过,签名合法;在步骤206,m’和接收到的m不相等,签名非法。
至此,验证签名过程结束。
在步骤104,当实际消息的长度比可以签名的消息长度长时,消息m可以用Hash函数h(m)的结果替换,即对消息周的Hash值h(m)进行签名;在验证步骤201中,将接收的消息m先使用Hash函数处理得到h(m),再对h(m)验证签名。
如果在签名的消息m中嵌入填充(Padding)信息,则在发送签名时可以不发送消息m,而只发送签名(r,s);在验证时,利用签名(r,s)恢复出消息m,然后利用填充(Padding)信息验证签名的真实性和完整性。
在步骤105中的函数d和步骤204的函数d’必须具有以下性质设d函数形为D=d(x,y),从函数d可以推得y=d’(x,D),这样得到的d函数可以在上述签名和验证过程中有效的隐藏明文信息和随机数信息;d’函数可以在上述验证过程中恢复得到隐藏的明文信息。d和d’可以包含如下形式a)d(m,kG)可以取值为d(m,kG)=(kG)x=r,则d'(r,P)=rPx-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的横坐标;b)d(m,kG)可以取值为d(m,kG)=m(kG)y=r,则d'(r,P)=rPy-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的纵坐标;c)d(m,kG)可以取值为d(m,kG)=m(kG)x=r,则d’(r,P)=rPx=m,其中运算也可以使用运算来代替;d)d(m,kG)可以取值为d(m,kG)=m(kG)y=r,则d’(r,P)=rPy=m,其中运算也可以使用运算来代替;e)d(m,kG)可以取值为d(m,kG)=(m+(kG)x)mod N=r,则d’(r,P)=(r-Px)mod N=m,其中N为点G在椭圆曲线点群的阶;f)d(m,kG)可以取值为以m为明文,kG为密钥的对称加密函数,而d’(r,P)可以取值为相应的以r为密文,P为密钥的对称解密函数;
g)等等。
步骤106和步骤203中的函数f0,f1,g0,g1均为r的线性函数,为了取得较高的计算效率,可以取如下一些r的简单函数h)函数f0,f1,g0,g1可以分别取值为f0(r)=c0*r、f1(r)=c1、g0(r)=c2、g1(r)=c0*r,其中c0、c1、c2为常数且函数f0,f1,g0,g1可以互换;i)函数f0,f1,g0,g1可以分别取值为f0(r)=c1、f1(r)=c2、g0(r)=c0*r、g1(r)=c3,其中c0、c1、c2、c3为常数且函数f0,f1,g0,g1可以互换;j)等等。
图3示出本发明的签名和验证签名装置。发送方A和接收方B在一个通信信道上通信时,发送方A使用密钥生成装置340生成密钥对公钥YA和私钥XA,公布其公钥和系统参数。A使用签名器320,结合图1说明的签名过程对明文m进行签名,并将明文m和签名结果S发送给B。
接收方B接收到明文m和签名结果S,获取系统参数和A的公钥YA,使用验证签名器350,通过结合图2说明的验证对明文m的签名结果S,得到验证结果。
以上结合本发明的最佳实施例对本发明进行了描述,本领域的普通技术人员可以在不偏离本发明的范围的情况下可对其作各种修改和改变。
权利要求
1.一种椭圆曲线签名和验证签名方法,其中发送方拥有自己的密钥对私钥XA和公钥YA,并公布系统参数和公钥YA,发送方使用自己的私钥XA对明文m实现数字签名,并将明文m和签名发送给接收方,接收方可以使用发送方的公钥YA来验证发送方对明文m的签名是否合法,包含以下步骤发送方公开系统参数及其公钥YA,然后生成随机数k,使得k落在区间[1,n-1]上,其中N为椭圆曲线的点群的阶,将k与曲线的基点G进行椭圆曲线点乘运算,得到曲线上的点kG,使用函数d将得到的点kG和明文m进行运算,其中保证无法从d中获取k的值,得到r=d(m,kG);函数f0,f1,g0,g1皆为r的函数,使用函数f0,f1,g0,g1和随机数以及私钥XA求解方程f0(r)+f1(r)s=k-xA(g0(r)+g1(r)s)解得s=(k-xAg0(r)-f0(r))(f1(r))-g1(r)-1,这样得到的(r,s)即为发送方对明文m的签名;发送方将明文m和其签名(r,s)发送给接收方;接收方接收到明文m和发送方对m的签名(r,s),首先使用发送方的公钥YA、椭圆曲线基点G以及函数f0,f1,g0,g1计算得到P=(f0(r)+f1(r)s)G+(g0(r)+g1(r)s)YA,使用函数d’计算m’=d’(r,P);将计算得到的m’和接收到的m进行比较,如果相同则签名合法,同时m’是从签名结果中恢复得到的明文,如果不同则签名非法;其中上述的函数d和函数d’必须具有以下性质设函数d形为D=d(x,y),从函数d可以推得y=d’(x,D)。
2.如权利要求1的椭圆曲线签名和验证签名方法,其中当实际消息m的长度比可以签名的消息长度长时,消息m可以用Hash函数h(m)的结果替换,即使用私钥对消息m的Hash值h(m)进行签名;在验证时,将接收的消息m先Hash得到h(m),再使用h(m)验证签名。
3.如权利要求1的椭圆曲线签名和验证签名方法,其中,如果在签名的消息m中嵌入填充信息,则在发送签名时可以不发送消息m,而只发送签名(r,s);在验证时,利用签名(r,s)恢复出消息m,然后利用填充信息验证签名的真实性和完整性。
4.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’必须具有以下性质设d函数形为D=d(x,y),从函数d可以推得y=d’(x,D),这样得到的d函数可以在上述签名和验证过程中有效的隐藏明文信息和随机数信息;d’函数可以在上述验证过程中恢复得到隐藏的明文信息。
5.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)x=r时,则d'(r,P)=rPx-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的横坐标。
6.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)y=r时,则d'(r,P)=rPy-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的纵坐标。
7.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)x=r时,则d’(r,P)=rPx=m,其中运算也可以使用运算来代替。
8.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)y=r时,则d’(r,P)=rPy=m,其中运算也可以使用运算来代替。
9.如权利要求1的椭圆曲线签名和验证签名方法,其中函数d和函数d’取为当d(m,kG)取值为以m为明文,kG为密钥的对称加密函数时,而d’(r,P)可以取值为相应的以r为密文,P为密钥的对称解密函数。
10.如权利要求1的椭圆曲线签名和验证签名方法,其中函数f0,f1,g0,g1均为r的线性函数。
11.如权利要求1的椭圆曲线签名和验证签名方法,其中函数f0,f1,g0,g1取为f0(r)=c0*r、f1(r)=c1、g0(r)=c2、g1(r)=c0*r,其中c0、c1、c2为常数且函数f0,f1,g0,g1可以互换。
12.如权利要求1的椭圆曲线签名和验证签名方法,其中函数f0,f1,g0,g1可以分别取值为f0(r)=c1、f1(r)=c2、g0(r)=c0*r、g1(r)=c3,其中c0、c1、c2、c3为常数且函数f0,f1,g0,g1可以互换。
13.一种椭圆曲线签名和验证签名系统,包括密钥生成装置(340),签名装置(320)和验证签名装置(350),其中该系统的发送方使用所述密钥生成装置(340)生成密钥对私钥XA和公钥YA,并公布系统参数和公钥YA,并使用所述签名器(320)利用自己的私钥XA对明文m实现数字签名,其中所述签名器(320)执行公开系统参数及其公钥YA,然后生成随机数k,使得k落在区间[1,N-1]上,其中N为椭圆曲线的点群的阶,将k与曲线的基点G进行椭圆曲线点乘运算,得到曲线上的点kG;使用函数d将得到的点kG和明文m进行运算,其中保证无法从d中获取k的值,得到r=d(m,kG);函数f0,f1,g0,g1皆为r的函数,使用函数f0,f1,g0,g1和随机数以及私钥XA求解方程f0(r)+f1(r)s=k-XA(g0(r)+g1(r)s)解得s=(k-XAg0(r)-f0(r))(f1(r))-g1(r))-1,这样得到的(r,s)即为发送方对明文m的签名;发送方将明文m和其签名(r,s)发送给接收方;所述验证签名器(320)执行接收明文m和发送方对m的签名(r,s),首先使用发送方的公钥YA、椭圆曲线基点G以及函数f0,f1,g0,g1计算得到P=(g0(r)+f1(r)s)G+(g0(r)+g1(r)s)YA,使用函数d’计算m’=d’(r,P);将计算得到的m’和接收到的m进行比较,如果相同则签名合法,同时m’是从签名结果中恢复得到的明文,如果不同则签名非法;其中上述的函数d和函数d’必须具有以下性质设函数d形为D=d(x,y),从函数d可以推得y=d’(x,D)。
14.如权利要求13的椭圆曲线签名和验证签名系统,其中当实际消息m的长度比可以签名的消息长度长时,签名器将消息m替换为Hash函数h(m)的结果,即使用私钥对消息m的Hash值h(m)进行签名;在验证时,验证签名器将接收的消息m先Hash得到h(m),再使用h(m)验证签名。
15.如权利要求13的椭圆曲线签名和验证签名系统,其中,如果在签名的消息m中嵌入填充信息,则在发送签名时可以不发送消息m,而只发送签名(r,s);在验证时,利用签名(r,s)恢复出消息m,然后利用填充信息验证签名的真实性和完整性。
16.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’必须具有以下性质设d函数形为D=d(x,y),从函数d可以推得y=d’(x,D),这样得到的d函数可以在上述签名和验证过程中有效的隐藏明文信息和随机数信息;d’函数可以在上述验证过程中恢复得到隐藏的明文信息。
17.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kg)x=r时,则d'(r,P)=rPx-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的横坐标。
18.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kg)y=r时,则d'(r,P)=rPy-1=m,]]>其中(kG)x和Px分别指的是取点kG和P的纵坐标。
19.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)x=r时,则d’(r,P)=rPx=m,其中运算也可以使用运算来代替。
20.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’取为当d(m,kG)取值为d(m,kG)=m(kG)y=r时,则d’(r,P)=rPy=m,其中运算也可以使用运算来代替。
21.如权利要求13的椭圆曲线签名和验证签名系统,其中函数d和函数d’取为当d(m,kG)取值为以m为明文,kG为密钥的对称加密函数时,而d’(r,P)可以取值为相应的以r为密文,P为密钥的对称解密函数。
22.如权利要求13的椭圆曲线签名和验证签名系统,其中函数f0,f1,g0,g1均为r的线性函数。
23.如权利要求13的椭圆曲线签名和验证签名系统,其中函数f0,f1,g0,g1取为f0(r)=c0*r、f1(r)=c1、g0(r)=c2、g1(r)=c0*r,其中c0、c1、c2为常数且函数f0,f1,g0,g1可以互换。
24.如权利要求13的椭圆曲线签名和验证签名系统,其中函数f0,f1,g0,g1可以分别取值为f0(r)=c1、f1(r)=c2、g0(r)=c0*r、g1(r)=c3,其中c0、c1、c2、c3为常数且函数f0,f1,g0,g1可以互换。
全文摘要
本发明是一种椭圆曲线签名方法。其中发送方公开系统参数及其公钥Y
文档编号H04K1/00GK1505313SQ0215471
公开日2004年6月16日 申请日期2002年11月29日 优先权日2002年11月29日
发明者陈建华, 汪朝辉, 李莉, 涂航, 崔竞松, 彭蓉 申请人:海南信安数据系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1