一种基于SM2椭圆曲线的签名验证算法的实现方法及系统与流程

文档序号:11589771阅读:384来源:国知局
一种基于SM2椭圆曲线的签名验证算法的实现方法及系统与流程

本发明涉及信息安全领域中的数字签名和认证技术,特别是涉及一种基于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)modn,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1-1modn,a3=(r*da)modn,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)modn,得到a4的值;通过模乘运算模块计算s=(a2*a4)modn,得到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’)modn,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’g和tpa,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’g+tpa,得其坐标(x1’,y1’);通过模加运算模块计算r=(e’+x1’)modn,得到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)modn,得到r的值;计算a1=(1+da)modn,得到的a1值;计算t=(r’+s’)modn,得到t的值;计算r=(e’+x1’)modn,得到r的值。

模减运算模块:用于计算a4=(k-a3)modn,得到a4的值。

模乘运算模块:用于计算a3=(r*da)modn,得到a3的值。模乘运算采用一种改进的blakley算法

模逆运算模块:用于计算计算a2=a1-1modn,得到a2的值。模逆运算采用fp上二进制求逆算法。

本发明相对于现有技术具有如下的优点及效果:

(1)本发明在签名验证和签名生成的过程中,点乘运算模块在计算kg、s’g和tpa时,采用一种改进的部分使用一补数减法形式的点乘算法,减少了点加运算的次数,同时与其他点乘算法相比,该算法只需要位减法运算,不需要除运算、取模运算,从而大大加快了运算的速度,减少了运算时间。

(2)本发明在签名生成过程中,模乘运算采用改进的blakley算法,该算法的基本运算只包括加法,不包括乘法和除法,运算操作简单,执行速度快,节省了运算的时间。

(3)本发明在签名生成过程中,采用并行运算的方法,通过模逆运算模块和模乘运算模块并行运算a2=a1-1modn,a3=(r*da)modn,得到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)modp≠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)modn,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1-1modn,a3=(r*da)modn,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)modn,得到a4的值;通过模乘运算模块计算s=(a2*a4)modn,得到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’)modn,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’g和tpa,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’g+tpa,得其坐标(x1’,y1’);通过模加运算模块计算r=(e’+x1’)modn,得到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)modn,得到r的值;计算a1=(1+da)modn,得到的a1值;计算t=(r’+s’)modn,得到t的值;计算r=(e’+x1’)modn,得到r的值。

模减运算模块:用于计算a4=(k-a3)modn,得到a4的值。

模乘运算模块:用于计算a3=(r*da)modn,得到a3的值。模乘运算采用一种改进的blakley算法

模逆运算模块:用于计算计算a2=a1-1modn,得到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)modn,得到r的值;

步骤七:检验r=0或r+k=n是否成立,若成立则返回步骤四,若不成立则执行步骤八;

步骤八:通过模加运算模块计算a1=(1+da)modn,得到的a1值;

步骤九:通过模逆运算模块和模乘运算模块并行计算a2=a1-1modn,a3=(r*da)modn,得到a2和a3的值;

步骤十:通过模减运算模块计算a4=(k-a3)modn,得到a4的值;

步骤十一:通过模乘运算模块计算s=(a2*a4)modn,得到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’)modn,得到t的值;

步骤七:检验t=0是否成立,若成立则输出验证不通过,若不成立则执行步骤八;

步骤八:通过点乘运算模块计算s’g和tpa,得到它们的坐标(m1,n1)和(m2,n2);

步骤九:通过点加运算模块计算s’g+tpa,得其坐标(x1’,y1’);

步骤十:通过模加运算模块计算r=(e’+x1’)modn,得到r的值;

步骤十一:检验r=r是否成立,若成立则输出验证通过,若不成立,则输出验证不通过。

图4为计算k的pcs形式k’算法的流程图。一补数减法形式:假设正整数k的二进制形式为(kl-1,…k1,k0),将二进制形式转化为一补数减法形式(1′scomplementsubtractionform)公式为其中为k的一补数形式,即l为k的二进制表示的长度。

与其他计算点乘的算法如非相邻表示型naf方法相比,使用一补数减法形式的方法计算时间更快,因为该算法不需要进行除法运算、模运算,只需要位减法运算。但是由于绝大多数整数在使用一补数减法形式时有更大的汉明权(整数转换为二进制表示中非零元的个数)。为了进一步提升计算效率,本发明在使用一补数减法形式来表示整数的基础上做了改进,对整数的二进制形式采用部分使用一补数减法形式(partlyuse1′scomplementsubtractionform)来表示,简称为“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-1modp。算法保持以下关系式不变:ax1+py1=u,ax2+py2=v,其中y1和y2不被计算。当u=1或v=1时,算法终止。对于前一种情况,ax1+py1=1,因此a-1=x1modp。对于后一种情况,ax2+py2=1,因此a-1=x2modp。具体算法流程如下:

点加运算:已知椭圆曲线上的两个点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)。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1