CN107040385B - 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 - Google Patents
一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 Download PDFInfo
- Publication number
- CN107040385B CN107040385B CN201710368280.5A CN201710368280A CN107040385B CN 107040385 B CN107040385 B CN 107040385B CN 201710368280 A CN201710368280 A CN 201710368280A CN 107040385 B CN107040385 B CN 107040385B
- Authority
- CN
- China
- Prior art keywords
- module
- calculating
- signature
- value
- algorithm
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
- H04L9/3252—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures using DSA or related signature schemes, e.g. elliptic based signatures, ElGamal or Schnorr schemes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种基于SM2椭圆曲线的签名验证算法的实现方法及系统。该系统在SM2控制模块的控制下,通过与签名生成控制模块和签名验证控制模块进行通信,并调用随机数生成模块、密码杂凑模块、点乘运算模块、点加运算模块、模加运算模块、模减运算模块、模乘运算模块、模逆运算模块来实现数字签名的生成和验证。在数字签名生成和验证过程中,点乘运算采用一种改进的部分使用一补数减法形式的点乘算法(PCS算法),在签名生成过程中,模乘运算采用一种改进的Blakley模乘算法,并且采用并行运算的方法,同时进行模逆运算和模乘运算,从而大大加快了运算的速度,减少了运算时间。
Description
技术领域
本发明涉及信息安全领域中的数字签名和认证技术,特别是涉及一种基于SM2椭圆曲线的签名验证算法的实现方法及系统。
背景技术
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,与传统的公钥密码体制(例如RSA密码体制)相比,椭圆曲线密码体制使用相对比较短的密钥就可以达到相同的安全程度。因此,更短的密钥使得椭圆曲线密码体制的应用范围更加广泛。
计算速度是研究与应用椭圆曲线密码体制中最关心的问题之一,在椭圆曲线密码体制算法中,最耗时的运算就是点乘运算,其占据了椭圆曲线算法总计算量的80%。研究者们通过各种各样的改进来提高点乘运算的计算效率,取得的成果显著,大多数的改进都集中在标量的表示形式上,如单基数表示、双基数表示、多基数表示等等,在本发明中采用一种改进的部分使用一补数减法形式的点乘算法。
二进制表示转换成一补数减法形式简单、快速,但是在减少二进制表示的汉明权(整数转换为二进制表示中非零元的个数)的效果上并不是对所有的标量都有效。本发明采用的这种改进的部分使用一补数减法形式的点乘算法基于二进制表示转换成一补数减法形式简单和快速的特点,但不是对标量中的整个二进制表示进行一补数减法形式转换,而是选取二进制表示中满足转换条件的部分进行一补数减法形式转换,减少了点加运算的次数,同时与其他点乘算法相比,该算法只需要位减法运算,不需要除运算、取模运算,从而大大加快了运算的速度,减少了运算时间。
SM3密码杂凑算法是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
发明内容
本发明的目的在于克服现有技术的缺点与不足,通过改进点乘算法、模乘算法及采用并行运算的方法,提供一种运算速度更快、所用运算时间更少的SM2椭圆曲线数字签名生成和签名验证算法的实现方法及系统。
计算速度是研究与应用椭圆曲线密码体制中最关心的问题之一,在椭圆曲线密码体制算法中,最耗时的运算就是点乘运算,其占据了椭圆曲线算法总计算量的80%。本发明中点乘运算采用一种改进的部分使用一补数减法形式的点乘算法,该算法减少了点加运算的次数,同时与其他点乘算法相比,该算法只需要位减法运算,不需要除运算、取模运算,从而大大加快了运算的速度,减少了运算时间。本发明中模乘运算采用改进的Blakley算法,该算法的基本运算只包括加法,不包括乘法和除法,运算操作简单,执行速度快,节省了运算的时间。并且采用并行运算的方法,同时进行模逆运算和模乘运算,从而运算速度更快,所用的运算时间更少。
本发明所要解决的技术问题是提供一种基于SM2椭圆曲线的签名验证算法的实现方法及系统,通过改进点乘算法、模乘算法及采用并行运算的方式,提供一种运算速度更快、所用运算时间更少的SM2椭圆曲线数字签名生成和签名验证算法的实现方法及系统。
为解决上述技术问题,本发明提供一种基于SM2椭圆曲线的签名验证算法的实现方法及系统,数字签名为签名段r和s。该实现方法及系统用到的模块有:SM2控制模块、签名生成控制模块、签名验证控制模块、随机数生成模块、密码杂凑模块、点乘运算模块、点加运算模块、模加运算模块、模减运算模块、模乘运算模块、模逆运算模块。
SM2控制模块:用于与签名生成控制模块和签名验证控制模块进行通信,向签名生成控制模块发送签名生成命令,向签名验证模块发送签名验证命令,同时接收签名生成控制模块返回的数字签名,接收签名验证模块返回的签名验证是否通过的消息。
签名生成控制模块:用于在收到SM2控制模块发送的进行签名生成的命令后,与随机数生成模块、密码杂凑模块、点乘运算模块、模加运算模块、模逆运算模块、模乘运算模块、模减运算模块进行通信:拼接用户杂凑值ZA和待签名的消息M,得到签名方拼接消息ME;通过密码杂凑模块对ME进行杂凑运算,得到签名方拼接消息杂凑值e;通过随机数生成模块产生随机数k;通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法对椭圆曲线的基点G和k进行点乘运算,得坐标(x1,y1);通过模加运算模块计算r=(e+x1)modn,得到r的值;检验r=0或r+k=n是否成立;若r=0或r+k=n成立,则通知随机数生成模块重新产生随机数k;若r=0或r+k=n不成立,则通过模加运算模块计算a1=(1+dA)mod n,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1 -1mod n,a3=(r*dA)mod n,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)mod n,得到a4的值;通过模乘运算模块计算s=(a2*a4)mod n,得到s的值;检验s=0是否成立,若成立则通知随机数生成模块重新产生随机数k,若不成立则输出消息M及其数字签名(r,s)。
签名验证控制模块:用于在收到SM2控制模块发送的进行签名验证的命令后,与密码杂凑模块、模加运算模块、点乘运算模块、点加运算模块进行通信:从发送方接收(r’,s’),即接收待验证消息M’的待验证的签名;检验r’是否在1到(n-1)的范围内;检验s’是否在1到(n-1)的范围内;若r’和s’中至少有一个不在1到(n-1)的范围内,则验证不通过;若r’和s’都在1到(n-1)的范围内,则拼接用户杂凑值ZA和待验证的消息M’,得到验证方拼接消息ME’;通过密码杂凑模块对ME’进行杂凑运算,得到验证方拼接消息杂凑值e’;通过模加运算模块计算t=(r’+s’)mod n,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’G+tpA,得其坐标(x1’,y1’);通过模加运算模块计算R=(e’+x1’)mod n,得到R的值;检验R是否等于r,若R等于r,则验证通过,若R不等于r,则验证不通过。
随机数生成模块:用于生成1到(n-1)范围内的随机数k。
密码杂凑模块:用于通过使用SM3密码杂凑算法,求得用户的杂凑值ZA,求得签名方拼接消息杂凑值e和验证方拼接消息杂凑值e’。
点乘运算模块:用于计算kG,得到其坐标(x1,y1);计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2)。点乘运算采用一种改进的部分使用一补数减法形式的点乘算法。
点加运算模块:用于计算s’G+tpA,得其坐标(x1’,y1’)。
模加运算模块:用于计算r=(e+x1)mod n,得到r的值;计算a1=(1+dA)mod n,得到的a1值;计算t=(r’+s’)mod n,得到t的值;计算R=(e’+x1’)mod n,得到R的值。
模减运算模块:用于计算a4=(k-a3)mod n,得到a4的值。
模乘运算模块:用于计算a3=(r*dA)mod n,得到a3的值。模乘运算采用一种改进的Blakley算法
模逆运算模块:用于计算计算a2=a1 -1mod n,得到a2的值。模逆运算采用Fp上二进制求逆算法。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明在签名验证和签名生成的过程中,点乘运算模块在计算kG、s’G和tpA时,采用一种改进的部分使用一补数减法形式的点乘算法,减少了点加运算的次数,同时与其他点乘算法相比,该算法只需要位减法运算,不需要除运算、取模运算,从而大大加快了运算的速度,减少了运算时间。
(2)本发明在签名生成过程中,模乘运算采用改进的Blakley算法,该算法的基本运算只包括加法,不包括乘法和除法,运算操作简单,执行速度快,节省了运算的时间。
(3)本发明在签名生成过程中,采用并行运算的方法,通过模逆运算模块和模乘运算模块并行运算a2=a1 -1mod n,a3=(r*dA)mod n,得到a2和a3的值,这种并行运算的方法也大大加快了运算的速度,减少了运算时间。
附图说明
图1为本发明提供的一种基于SM2椭圆曲线的签名验证算法的实现方法及系统的整体结构图;
图2为在国家密码管理局公布的SM2椭圆曲线公钥密码算法的基础上改进的数字签名生成算法的流程图;
图3为在国家密码管理局公布的SM2椭圆曲线公钥密码算法的基础上改进的数字签名验证算法的流程图;
图4为计算k的PCS形式k’算法的流程图;
图5为计算kG=(x1,y1)的流程图;
图6为采用改进的Blakley算法进行模乘运算的流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例
本发明提供一种基于SM2椭圆曲线的签名验证算法的实现方法及系统,该发明中所涉及到的SM2椭圆曲线和算法均是定义在素域Fp上的,其中p是大于3的素数。椭圆曲线的方程为y2=x3+ax+b,其中a∈Fp,b∈Fp,且(4a3+27b2)mod p≠0。椭圆曲线E(Fp)定义为:E(Fp)={(x,y)|x,y∈Fp,且满足方程y2=x3+ax+b}∪{O},其中O为无穷远点。
图1为本发明提供的一种基于SM2椭圆曲线的签名验证算法的实现方法及系统的整体结构图,该系统既可以进行数字签名的生成,又可以进行数字签名的验证,从而可以对消息的来源进行可靠的确认,保证签名者不可抵赖。从图中可以看出,该系统包括:SM2控制模块、签名生成控制模块、签名验证控制模块、随机数生成模块、密码杂凑模块、点乘运算模块、点加运算模块、模加运算模块、模减运算模块、模乘运算模块、模逆运算模块。
SM2控制模块:用于与签名生成控制模块和签名验证控制模块进行通信,向签名生成控制模块发送签名生成命令,向签名验证模块发送签名验证命令,同时接收签名生成控制模块返回的数字签名,接收签名验证模块返回的签名验证是否通过的消息。
签名生成控制模块:用于在收到SM2控制模块发送的进行签名生成的命令后,与随机数生成模块、密码杂凑模块、点乘运算模块、模加运算模块、模逆运算模块、模乘运算模块、模减运算模块进行通信:拼接用户杂凑值ZA和待签名的消息M,得到签名方拼接消息ME;通过密码杂凑模块对ME进行杂凑运算,得到签名方拼接消息杂凑值e;通过随机数生成模块产生随机数k;通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法对椭圆曲线的基点G和k进行点乘运算,得坐标(x1,y1);通过模加运算模块计算r=(e+x1)modn,得到r的值;检验r=0或r+k=n是否成立;若r=0或r+k=n成立,则通知随机数生成模块重新产生随机数k;若r=0或r+k=n不成立,则通过模加运算模块计算a1=(1+dA)mod n,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1 -1mod n,a3=(r*dA)mod n,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)mod n,得到a4的值;通过模乘运算模块计算s=(a2*a4)mod n,得到s的值;检验s=0是否成立,若成立则通知随机数生成模块重新产生随机数k,若不成立则输出消息M及其数字签名(r,s)。
签名验证控制模块:用于在收到SM2控制模块发送的进行签名验证的命令后,与密码杂凑模块、模加运算模块、点乘运算模块、点加运算模块进行通信:从发送方接收(r’,s’),即接收待验证消息M’的待验证的签名;检验r’是否在1到(n-1)的范围内;检验s’是否在1到(n-1)的范围内;若r’和s’中至少有一个不在1到(n-1)的范围内,则验证不通过;若r’和s’都在1到(n-1)的范围内,则拼接用户杂凑值ZA和待验证的消息M’,得到验证方拼接消息ME’;通过密码杂凑模块对ME’进行杂凑运算,得到验证方拼接消息杂凑值e’;通过模加运算模块计算t=(r’+s’)mod n,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’G+tpA,得其坐标(x1’,y1’);通过模加运算模块计算R=(e’+x1’)mod n,得到R的值;检验R是否等于r,若R等于r,则验证通过,若R不等于r,则验证不通过。
随机数生成模块:用于生成1到(n-1)范围内的随机数k。
密码杂凑模块:用于通过使用SM3密码杂凑算法,求得用户的杂凑值ZA,求得签名方拼接消息杂凑值e和验证方拼接消息杂凑值e’。
点乘运算模块:用于计算kG,得到其坐标(x1,y1);计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2)。点乘运算采用一种改进的部分使用一补数减法形式的点乘算法。
点加运算模块:用于计算s’G+tpA,得其坐标(x1’,y1’)。
模加运算模块:用于计算r=(e+x1)mod n,得到r的值;计算a1=(1+dA)mod n,得到的a1值;计算t=(r’+s’)mod n,得到t的值;计算R=(e’+x1’)mod n,得到R的值。
模减运算模块:用于计算a4=(k-a3)mod n,得到a4的值。
模乘运算模块:用于计算a3=(r*dA)mod n,得到a3的值。模乘运算采用一种改进的Blakley算法
模逆运算模块:用于计算计算a2=a1 -1mod n,得到a2的值。模逆运算采用Fp上二进制求逆算法。
图2为在国家密码管理局公布的SM2椭圆曲线公钥密码算法的基础上改进的数字签名生成算法的流程图。为了加快算法的运算速度,减少系统的运行时间,在数字签名生成的过程中,点乘运算采用一种改进的部分使用一补数减法形式的点乘算法对椭圆曲线的基点G和k进行点乘运算,模乘运算运算采用一种改进的Blakley算法,并且采用并行运算的方法,同时进行模乘运算和模逆运算,从而节省了时间,提高了效率。如图2所示,该数字签名生成算法由以下步骤组成:
步骤一:输入椭圆曲线的基点G、签名方公钥pA和私钥dA、用户的杂凑值ZA、基点G的阶n、待签名的消息M;
步骤二:拼接用户的杂凑值ZA和待签名的消息M,得到签名方拼接消息ME;
步骤三:用密码杂凑模块对签名方拼接消息ME进行密码杂凑运算,得到签名方拼接消息杂凑值e;
步骤四:通过随机数生成模块产生1到(n-1)范围内的随机数k;
步骤五:通过点乘运算模块计算kG,得到其坐标(x1,y1);
步骤六:通过模加运算模块计算r=(e+x1)mod n,得到r的值;
步骤七:检验r=0或r+k=n是否成立,若成立则返回步骤四,若不成立则执行步骤八;
步骤八:通过模加运算模块计算a1=(1+dA)mod n,得到的a1值;
步骤九:通过模逆运算模块和模乘运算模块并行计算a2=a1 -1mod n,a3=(r*dA)mod n,得到a2和a3的值;
步骤十:通过模减运算模块计算a4=(k-a3)mod n,得到a4的值;
步骤十一:通过模乘运算模块计算s=(a2*a4)mod n,得到s的值;
步骤十二:检验s=0是否成立,若成立则返回步骤四,若不成立则执行步骤十三;
步骤十三:输出消息M及其数字签名(r,s)。
图3为在国家密码管理局公布的SM2椭圆曲线公钥密码算法的基础上改进的的数字签名验证算法的流程图。为了加快算法的运算速度,减少系统的运行时间,在数字签名验证的过程中,采用了一种改进的部分使用一补数减法形式的点乘算法计算s’G和tpA,从而节省了时间,提高了效率。如图3所示,该数字签名验证算法由以下步骤组成:
步骤一:输入椭圆曲线的基点G、签名方公钥pA、用户杂凑值ZA、基点G的阶n、待验证的消息M’、待验证的签名(r’,s’);
步骤二:检验r’在1到(n-1)的范围内是否成立,若成立则执行步骤三,若不成立则输出验证不通过;
步骤三:检验s’是否在1到(n-1)的范围内是否成立,若成立则执行步骤四,若不成立则输出验证不通过;
步骤四:拼接用户杂凑值ZA和待验证的消息M’,得到验证方拼接消息ME’;
步骤五:用密码杂凑模块对验证方拼接消息ME’进行密码杂凑运算,得到验证方拼接消息杂凑值e’;
步骤六:通过模加运算模块计算t=(r’+s’)mod n,得到t的值;
步骤七:检验t=0是否成立,若成立则输出验证不通过,若不成立则执行步骤八;
步骤八:通过点乘运算模块计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2);
步骤九:通过点加运算模块计算s’G+tpA,得其坐标(x1’,y1’);
步骤十:通过模加运算模块计算R=(e’+x1’)mod n,得到R的值;
步骤十一:检验R=r是否成立,若成立则输出验证通过,若不成立,则输出验证不通过。
图4为计算k的PCS形式k’算法的流程图。一补数减法形式:假设正整数k的二进制形式为(kl-1,…k1,k0),将二进制形式转化为一补数减法形式(1′s ComplementSubtraction form)公式为其中为k的一补数形式,即l为k的二进制表示的长度。
与其他计算点乘的算法如非相邻表示型NAF方法相比,使用一补数减法形式的方法计算时间更快,因为该算法不需要进行除法运算、模运算,只需要位减法运算。但是由于绝大多数整数在使用一补数减法形式时有更大的汉明权(整数转换为二进制表示中非零元的个数)。为了进一步提升计算效率,本发明在使用一补数减法形式来表示整数的基础上做了改进,对整数的二进制形式采用部分使用一补数减法形式(Partly use 1′s ComplementSubtraction form)来表示,简称为“PCS”形式。
k的PCS形式算法:
图5为计算kG=(x1,y1)的流程图。将PCS形式算法用于点乘计算,就可以得到一种改进的部分使用一补数减法形式的点乘算法(PCS算法)。如图5所示,该点乘算法由以下步骤组成:
步骤一:输入k=(kl-1,…k1,k0)2,P∈E(Fp);
步骤二:用图4所示k的PCS形式算法计算k的PCS形式k’;
步骤三:令Q=∞;
步骤四:从i=length(k’)-1到i=0,循环:
步骤五:Q=2Q;
步骤六:若ki=1,则Q=Q+P,若ki=-1,则Q=Q-P;
步骤七:i=i-1;
步骤八:循环结束后,输出点Q,点Q的值就等于所求的kG的值。
数字签名验证中s’G和tpA的求法与kG的求法完全相同,在这里就不一一赘述了。
图6为采用改进的Blakley算法进行模乘运算的流程图。模乘运算采用改进的Blakley算法,该算法的基本运算只包括加法,不包括乘法和除法,运算操作简单,执行速度快,节省了运算的时间。设A、B和N是三个k比特位的大整数,且满足A,B<N,其中如图6所示,该模乘算法由以下步骤组成:
步骤一:输入A、B和N;
步骤二:令P=0;
步骤三:从i=k-1到i=0,循环:
步骤四:P=2P;
步骤五:若P≥N,则P=P-N;
步骤六:P=P+A*bi
步骤七:若P≥N,则P=P-N;
步骤八:返回P的值。
除点乘算法和模乘算法外,本发明所用到的其他算法的详细说明如下:
模加运算:模加运算是定义在素域Fp上的,域Fp的元素是从0到p-1的整数。m为p的二进制长度,t=(m/W)是表示该域元素所用的W位字的个数,A=(A[t-1],…,A[1],A[0])为将域元素a以二进制形式存储在一个t个W位字的数组A中。模加运算的具体流程如下:
模减运算:模减运算是定义在素域Fp上的,域Fp的元素是从0到p-1的整数。m为p的二进制长度,t=(m/W)是表示该域元素所用的W位字的个数,A=(A[t-1],…,A[1],A[0])为将域元素a以二进制形式存储在一个t个W位字的数组A中。模减运算的具体流程如下:
模逆运算:模逆运算采用Fp上二进制求逆算法:通过寻找满足ax+py=1的整数x来计算a-1mod p。算法保持以下关系式不变:ax1+py1=u,ax2+py2=v,其中y1和y2不被计算。当u=1或v=1时,算法终止。对于前一种情况,ax1+py1=1,因此a-1=x1mod p。对于后一种情况,ax2+py2=1,因此a-1=x2mod p。具体算法流程如下:
点加运算:已知椭圆曲线上的两个点P1和P2满足P1=(x1,y1),P2=(x2,y2),且x1≠x2。设P3=(x3,y3)=P1+P2,则x3=λ2-x1-x2,y3=λ(x1-x3)-y1,其中λ=(y2-y1)/(x2-x1)。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (1)
1.一种基于SM2椭圆曲线的签名验证算法的实现系统,该系统包括:SM2控制模块、签名生成控制模块、签名验证控制模块、随机数生成模块、密码杂凑模块、点乘运算模块、点加运算模块、模加运算模块、模减运算模块、模乘运算模块、模逆运算模块;
SM2控制模块:用于与签名生成控制模块和签名验证控制模块进行通信,向签名生成控制模块发送签名生成命令,向签名验证模块发送签名验证命令,同时接收签名生成控制模块返回的数字签名,接收签名验证模块返回的签名验证是否通过的消息;
签名生成控制模块:用于在收到SM2控制模块发送的进行签名生成的命令后,与随机数生成模块、密码杂凑模块、点乘运算模块、模加运算模块、模逆运算模块、模乘运算模块、模减运算模块进行通信:拼接用户杂凑值ZA和待签名的消息M,得到签名方拼接消息ME;通过密码杂凑模块对ME进行杂凑运算,得到签名方拼接消息杂凑值e;通过随机数生成模块产生随机数k;通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法对椭圆曲线的基点G和k进行点乘运算,得坐标(x1,y1);通过模加运算模块计算r=(e+x1)mod n,得到r的值;检验r=0或r+k=n是否成立;若r=0或r+k=n成立,则通知随机数生成模块重新产生随机数k;若r=0或r+k=n不成立,则通过模加运算模块计算a1=(1+dA)mod n,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1 -1mod n,a3=(r*dA)mod n,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)mod n,得到a4的值;通过模乘运算模块计算s=(a2*a4)mod n,得到s的值;检验s=0是否成立,若成立则通知随机数生成模块重新产生随机数k,若不成立则输出消息M及其数字签名(r,s);
签名验证控制模块:用于在收到SM2控制模块发送的进行签名验证的命令后,与密码杂凑模块、模加运算模块、点乘运算模块、点加运算模块进行通信:从发送方接收(r’,s’),即接收待验证消息M’的待验证的签名;检验r’是否在1到(n-1)的范围内;检验s’是否在1到(n-1)的范围内;若r’和s’中至少有一个不在1到(n-1)的范围内,则验证不通过;若r’和s’都在1到(n-1)的范围内,则拼接用户杂凑值ZA和待验证的消息M’,得到验证方拼接消息ME’;通过密码杂凑模块对ME’进行杂凑运算,得到验证方拼接消息杂凑值e’;通过模加运算模块计算t=(r’+s’)mod n,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’G+tpA,得其坐标(x1’,y1’);通过模加运算模块计算R=(e’+x1’)mod n,得到R的值;检验R是否等于r’,若R等于r’,则验证通过,若R不等于r’,则验证不通过;
随机数生成模块:用于生成1到(n-1)范围内的随机数k;
密码杂凑模块:用于通过使用SM3密码杂凑算法,求得用户的杂凑值ZA,求得签名方拼接消息杂凑值e和验证方拼接消息杂凑值e’;
点乘运算模块:用于计算kG,得到其坐标(x1,y1);计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2),点乘运算采用一种改进的部分使用一补数减法形式的点乘算法;
点加运算模块:用于计算s’G+tpA,得其坐标(x1’,y1’);
模加运算模块:用于计算r=(e+x1)mod n,得到r的值;计算a1=(1+dA)mod n,得到的a1值;计算t=(r’+s’)mod n,得到t的值;计算R=(e’+x1’)mod n,得到R的值;
模减运算模块:用于计算a4=(k-a3)mod n,得到a4的值;
模乘运算模块:用于计算a3=(r*dA)mod n,得到a3的值,模乘运算采用一种改进的Blakley算法;
模逆运算模块:用于计算计算a2=a1 -1mod n,得到a2的值,模逆运算采用Fp上二进制求逆算法;
其中,dA为签名方私钥,n为椭圆曲线基点G的阶,pA为签名方公钥,tpA为将t与pA进行点乘运算,s’G为将s’与G进行点乘运算,kG为将k与G进行点乘运算;
所述点乘运算采用一种改进的部分使用一补数减法形式的点乘算法,具体包括以下步骤:
步骤一:输入k=(kl-1,…k1,k0)2,P∈E(Fp);
步骤二:用k的PCS形式算法计算k的PCS形式k’;
步骤三:令Q=∞;
步骤四:从i=length(k’)-1到i=0,循环:
步骤五:Q=2Q;
步骤六:若ki=1,则Q=Q+P,若ki=-1,则Q=Q-P;
步骤七:i=i-1;
步骤八:循环结束后,输出点Q,点Q的值就等于所求的kG的值;
其中,length(k’)为k’的二进制表示的长度;
所述模乘运算采用一种改进的Blakley算法,具体包括以下步骤:
步骤一:输入A、B和N;
步骤二:令P=0;
步骤三:从i=k-1到i=0,循环:
步骤四:P=2P;
步骤五:若P≥N,则P=P-N;
步骤六:P=P+A*bi
步骤七:若P≥N,则P=P-N;
步骤八:返回P的值;
所述用k的PCS形式算法计算k的PCS形式k’包括以下步骤:
输入:k=(kl-1,…k1,k0)2
输出:k的PCS形式k’
1.i=0
2.如果l≤l-3,重复执行
2.1如果ki=ki+1=1,则
2.1.1 j=i+2
2.1.2如果j≥0,重复执行
2.1.2.1如果kj=0,则
2.1.2.1.1如果j≤l-3且kj+1=kj+2=1则j=j+3,
否则退出循环2.1.2
2.1.2.2否则j=j+1
2.1.3如果l=((j-1)-i+1)>2,则
2.1.3.1m=(kj-1,…,ki)2,
2.1.3.2对于n从j-i到0,重复执行kn+i=mn
2.1.3.3 i=j
2.1.4否则i=j+2
2.2否则i=i+1
3.返回k的PCS形式k’。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710368280.5A CN107040385B (zh) | 2017-05-23 | 2017-05-23 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710368280.5A CN107040385B (zh) | 2017-05-23 | 2017-05-23 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107040385A CN107040385A (zh) | 2017-08-11 |
CN107040385B true CN107040385B (zh) | 2020-10-27 |
Family
ID=59539584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710368280.5A Active CN107040385B (zh) | 2017-05-23 | 2017-05-23 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107040385B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109214195A (zh) * | 2018-07-26 | 2019-01-15 | 广东工业大学 | 一种抗差分功耗攻击的sm2椭圆曲线签名验签硬件系统及方法 |
CN109586912B (zh) * | 2018-11-09 | 2020-04-07 | 天津海泰方圆科技有限公司 | 一种sm2数字签名的生成方法、系统、设备及介质 |
CN109698751A (zh) * | 2018-11-09 | 2019-04-30 | 北京中宇万通科技股份有限公司 | 数字签名生成及验签方法、计算机设备和存储介质 |
CN110336674B (zh) * | 2019-06-21 | 2022-06-24 | 矩阵元技术(深圳)有限公司 | 范围证明方法、装置、计算机设备和存储介质 |
CN111147250B (zh) * | 2019-12-18 | 2022-08-02 | 北京江南天安科技有限公司 | 一种数字签名方法、装置、发送端、接收端及系统 |
CN112202568B (zh) * | 2020-10-09 | 2022-05-20 | 天津大学 | 软硬件协同设计sm9数字签名通信方法和系统 |
CN112799637B (zh) * | 2021-01-22 | 2023-03-14 | 西安电子科技大学 | 一种并行环境下高吞吐量的模逆计算方法及系统 |
CN113010142B (zh) * | 2021-03-23 | 2023-07-28 | 广州万协通信息技术有限公司 | 一种新型脉动结点式标量点乘的双域实现系统及方法 |
CN113193962B (zh) * | 2021-04-30 | 2022-08-30 | 安徽师范大学 | 基于轻量级模乘的sm2数字签名生成与验证器 |
CN113794572A (zh) * | 2021-09-28 | 2021-12-14 | 南京宁麒智能计算芯片研究院有限公司 | 一种高性能椭圆曲线数字签名与验签的硬件实现系统和方法 |
CN113783702A (zh) * | 2021-09-28 | 2021-12-10 | 南京宁麒智能计算芯片研究院有限公司 | 一种椭圆曲线数字签名与验签的硬件实现方法和系统 |
CN114879934B (zh) * | 2021-12-14 | 2023-01-10 | 中国科学院深圳先进技术研究院 | 一种高效的零知识证明加速器及方法 |
CN114844650B (zh) * | 2022-05-24 | 2023-12-01 | 北京宏思电子技术有限责任公司 | 一种设备签名方法及系统 |
CN116032490B (zh) * | 2023-01-09 | 2023-10-03 | 郑州轻工业大学 | 一种基于改进SM2算法的Fabric区块链构建方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103427997A (zh) * | 2013-08-16 | 2013-12-04 | 西安西电捷通无线网络通信股份有限公司 | 一种生成数字签名的方法及装置 |
CN103475473A (zh) * | 2013-08-26 | 2013-12-25 | 广东数字证书认证中心有限公司 | 数字签名方法和设备、数字签名中密码运算方法和服务器 |
CN104579656A (zh) * | 2014-12-31 | 2015-04-29 | 北京时代民芯科技有限公司 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
CN106549769A (zh) * | 2016-12-08 | 2017-03-29 | 广东工业大学 | 一种素域Fp下SM2椭圆曲线签名系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103188081A (zh) * | 2006-11-07 | 2013-07-03 | 安全第一公司 | 用于分发数据和保护数据安全的系统和方法 |
-
2017
- 2017-05-23 CN CN201710368280.5A patent/CN107040385B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103427997A (zh) * | 2013-08-16 | 2013-12-04 | 西安西电捷通无线网络通信股份有限公司 | 一种生成数字签名的方法及装置 |
CN103475473A (zh) * | 2013-08-26 | 2013-12-25 | 广东数字证书认证中心有限公司 | 数字签名方法和设备、数字签名中密码运算方法和服务器 |
CN104579656A (zh) * | 2014-12-31 | 2015-04-29 | 北京时代民芯科技有限公司 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
CN106549769A (zh) * | 2016-12-08 | 2017-03-29 | 广东工业大学 | 一种素域Fp下SM2椭圆曲线签名系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107040385A (zh) | 2017-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107040385B (zh) | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 | |
CN102761415B (zh) | p元域SM2椭圆曲线的数字签名生成、验证及混合系统 | |
CN103427997B (zh) | 一种生成数字签名的方法及装置 | |
CN109145616B (zh) | 基于高效模乘的sm2加密、签名和密钥交换的实现方法及系统 | |
CN101753306B (zh) | 运用Montgomery型椭圆曲线的数字签名认证方法 | |
CN109039640B (zh) | 一种基于rsa密码算法的加解密硬件系统及方法 | |
CN109450640B (zh) | 基于sm2的两方签名方法及系统 | |
CN113628094B (zh) | 一种基于gpu的高吞吐量sm2数字签名计算系统及方法 | |
CN104243456A (zh) | 适用于云计算的基于sm2算法的签名及解密方法和系统 | |
JP2012014203A5 (zh) | ||
CN110535636B (zh) | 一种轻量级的基于sm2算法的协同签名方法与装置 | |
CN110896351B (zh) | 基于全域哈希的身份基数字签名方法 | |
CN112446052B (zh) | 一种适用于涉密信息系统的聚合签名方法及系统 | |
CN109743166B (zh) | 多方签名生成方法及安全信息验证系统 | |
KR20060104823A (ko) | 빠른 집합 검증 방법 및 그 장치 | |
JP2004501385A (ja) | 楕円曲線暗号化方法 | |
CN114117547B (zh) | 一种基于预计算表的sm9数字签名加速生成方法以及数字签名加速验证方法 | |
CN112491560A (zh) | 一种支持批验证的sm2数字签名方法及介质 | |
EP4109814A1 (en) | Method and system for digital signatures utilizing multiplicative semigroups | |
CN110932866B (zh) | 一种基于sm2数字签名算法的环签名生成方法 | |
WO2009115824A1 (en) | Encryption method | |
CN112350827B (zh) | 一种基于Koblitz曲线的加速标量乘计算的椭圆曲线加解密方法和系统 | |
Panjwani et al. | Hardware-software co-design of elliptic curve digital signature algorithm over binary fields | |
CN112800482A (zh) | 基于身份的在线/离线安全云存储审计方法 | |
CN111897578A (zh) | 一种特征为2的椭圆曲线上标量乘的并行处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |