一种SM2协同签名方法与流程

文档序号:29627549发布日期:2022-04-13 14:54阅读:647来源:国知局
一种SM2协同签名方法与流程
一种sm2协同签名方法
技术领域
1.本发明属于信息安全的技术领域,特别涉及一种sm2协同签名方法。


背景技术:

2.数字签名算法由签名者对数据产生数字签名,由验证者验证签名的可靠性。每个签名者拥有一对密钥对,包含一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。在签名的生成过程之前,要用密码杂凑函数对待签名消息和用户身份信息等进行压缩;在验证过程之前,要用密码杂凑函数对待验证消息和用户身份信息等进行压缩。数字签名能够保证信息传输的完整性,验证信息发送者的身份并防止交易中抵赖事件的发生。
3.sm2算法是国家密码管理局于2010年12月发布的椭圆曲线公钥密码算法,并已成为《gm/t 0003-2012sm2椭圆曲线公钥密码算法》标准。sm2椭圆曲线公钥密码算法包括数字签名算法、密钥交换协议以及公钥加密算法,其安全性基于求解有限域上椭圆曲线离散对数问题的困难性。sm2算法在国内电子商务、身份认证等应用中发挥了重要的安全保障作用。
4.diffie-hellman密钥交换协议是由whitfield diffie和martin hellman于1976年提出的一种密钥交换算法。这种密钥交换协议可让双方在没有对方任何信息的前提条件下,在非受信信道建立一个共享密钥,此密钥可用于对后续通讯信息进行加密或者进行进一步密钥管理等。diffie-hellman密钥交换算法的安全性依赖于计算离散对数问题的困难性。
5.现有技术中也存在着适用于云计算的基于sm2算法的签名及解密方法和系统,但是存在着明显的不足,首先,在sm2标准算法的使用过程中,若私钥只由一方保管,往往存在着一定的泄露风险。一旦攻击者入侵私钥拥有者成功,则攻击者可随意伪造签名。因此,在许多应用场景中,私钥需要被互不信任的双方分别保存,且只有在双方合作的情况下才能生成签名,任何一方都无法独立生成数字签名。其次,在交互签名过程中,具有较大运算量和通信数据量,降低了签名生成效率。
6.就sm2签名算法而言,其签名私钥da和验证公钥pa之间的关系为:pa=[da]g,这里g为sm2签名标准中的椭圆曲线群的生成元,它的阶为n,[da]g表示椭圆曲线上的点乘运算,即[da]g表示da个g相加。把签名私钥da拆分为若干份密钥片这是一件容易的事情,困难之处在于如何利用拆分后的密钥片来生成有效的sm2签名。如果把私钥da拆分为两份子密钥片,目前已有专用的方法来生成sm2签名。但是这种专用的方法仅能对私钥拆分为两份子密钥片的情形进行签名生成,其应用不灵活,这限制了sm2签名算法的应用范围,在一些应用环境中需要把密钥拆成三份或者更多份子密钥片,目前对于这种密钥拆分为多份子密钥片的情形,尚未有高效的方法来生成sm2签名。


技术实现要素:

[0007]
鉴于以上现有技术的缺点,本发明提供一种sm2协同签名方法,该方法保证只要一方不参与协同签名,其它参与方都不能生成有效的数字签名,且任意一方都不能获取其它方的部分私钥,最大程度地保护了签名私钥的安全性。
[0008]
基于此,本发明是这样实现的:
[0009]
一种sm2协同签名方法,设sm2标准签名私钥da已经按照满足等式1+da=(d1×
d2×…×dm
)-1
的要求拆分为m份子密钥片,它们分别是d1,d2,

,dm,这里m为大于等于2的自然数;签名由两个m轮迭代生成,用a1,a2,

,am分别表示第1轮,第2轮,

,第m轮迭代;每一轮迭代ai(i=1,2,

,m)拥有签名私钥的子密钥片di,h表示一个杂凑函数;接下来,a1,a2,

,am按照迭代过程分别执行基于轮函数fr的r-迭代和基于轮函数fs的s-迭代来生成对消息m的数字签名。
[0010]
其中,轮函数fr为:
[0011]
轮函数fr的输入是一个四元组(w’,r’,k,d),其输出是一个二元组(w,r),输入与输入之间的关系为:r=r’+[k]w’,w=[d]w’。即
[0012]fr
(w’,r’,k,d)=(w,r)=([d]w’,r’+[k]w’),
[0013]
这里k、d为整数,r、r’、w、w’为sm2标准中椭圆曲线群上的元素。
[0014]
轮函数fs为:
[0015]
轮函数fs的输入是一个四元组(k,d,r’,s’),其输出是一个二元组(r,s),输入与输入之间的关系为:r=r’,s=k+d
×
s’。即
[0016]fs
(k,d,r’,s’)=(r,s)=(r’,k+d
×
s’)
[0017]
这里k、d、r、s、r’、s’为整数。
[0018]
然后进行迭代,迭代过程包含两个迭代,分别是基于轮函数fr的r-迭代和基于轮函数fs的s-迭代。其中r-迭代按照第1轮,第2轮,

,第m轮的顺序进行迭代,每一轮迭代都计算一次轮函数fr;s-迭代按照第m轮,第m-1轮,

,第1轮的顺序进行迭代,每一轮迭代都计算一次轮函数fs。
[0019]
具体描述如下。
[0020]
r-迭代为:
[0021]
首先,每一轮迭代a1、a2、

、am按照轮函数fr迭代方式完成对应部分的计算,然后生成随机椭圆曲线点rm;每一轮迭代的计算如下:
[0022]
rf1)第1轮迭代a1自己产生r0=0和w0=g+pa;然后把(k1,d1)当作轮密钥,以(w0,r0)作为轮函数fr的输入,计算(w1,r1)=fr(w0,r0,k1,d1),即w1=[d1]w0,r1=r0+[k1]w0;然后传递r1、w1给下一轮迭代a2[0023]
rfi)第i轮跌代ai(i=2,

,m)首先接收来自前一轮迭代a
i-1
的消息w
i-1
和r
i-1
,其次通过随机数发生器产生ki∈[1,n],然后把(ki,di)当作轮密钥,以(w
i-1
,r
i-1
)作为轮函数fr的输入,计算(wi,ri)=fr(w
i-1
,r
i-1
,ki,di),即wi=[di]w
i-1
,ri=r
i-1
+[ki]w
i-1
;然后传递ri、wi给下一轮迭代a
i+1
;第m轮迭代am计算出(rm,wm)后不传递消息。
[0024]
s-迭代为:
[0025]
所有迭代a1、a2、

、am按照轮函数fs所示的方式完成对应部分的计算,然后生成数字签名(r,s)。每一轮迭代的计算如下:
[0026]
sfm)第m轮迭代am的输入r和s
m+1
按如下计算公式产生
[0027]
r=s
m+1
=h(m)+x
[0028]
这里的x是椭圆曲线点rm的横坐标。am把(km,dm)当作轮密钥,以(r,s
m+1
)作为轮函数fs的输入,计算(r,sm)=fs(km,dm,r,s
m+1
),即r=r且sm=km+dm×sm+1
;并传递r和sm给下一轮迭代a
m-1

[0029]
sfi)第i轮迭代ai(i=m-1,

,2,1)首先接收来自上一轮迭代a
i+1
的消息r和s
i+1
,然后把(ki,di)当作轮密钥,以(r,s
i+1
)作为轮函数fs的输入,计算(r,si)=fs(ki,di,r,s
i+1
),即r=r且si=ki+di×si+1
;并传递r和si给下一轮迭代a
i-1

[0030]
sfe)最后,第1轮迭代a1计算出(r,s1)后继续进行如下计算:
[0031]
s=s
1-r
[0032]
然后,a1输出对消息m的签名为σ=(r,s)。
[0033]
本发明的有益效果在于:
[0034]
1、提升了签名私钥的安全性。本发明采用多方安全计算的思想,各个参与方只拥有签名私钥的部分密钥片,只有在所有参与方合作的前提下才能生成签名,保证了攻击者在入侵任何一方的情况下,都不能够获得完整的签名私钥,从而提升了攻击者窃取私钥的难度。
[0035]
2、提升了协同签名过程的效率。本发明在每一次协同签名过程中,采用对随机数进行加法拆分,而对签名私钥进行乘法拆分的方法来完成协同签名,这一方法节省协同签名过程中的计算和通信开销,提高了签名方案的效率。
附图说明
[0036]
图1为本发明所实现协同签名方法的流程图。
具体实施方式
[0037]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0038]
图1所示,本发明提供了一种协同迭代式sm2签名方案(cosm2),对于本发明中所有关整数之间的加法和乘法都是模n的加法和乘法,下文中为了表达方便简洁,省略mod n,即对于两个整数a和b:a+b=(a+b)mod n,a
×
b=(a
×
b)mod n。设sm2标准签名私钥da已经按照满足等式1+da=(d1×
d2×…×dm
)-1
的要求拆分为m份子密钥片,它们分别是d1,d2,

,dm,这里m为大于等于2的自然数。对于本发明中的迭代方法,签名由两个m轮迭代生成,用a1,a2,

,am分别表示第1轮,第2轮,

,第m轮迭代。每一轮迭代ai(i=1,2,

,m)拥有签名私钥的子密钥片di。h表示一个杂凑函数。接下来,a1,a2,

,am按照图1所示的迭代过程分别执行基于轮函数fr的r-迭代和基于轮函数fs的s-迭代来生成对消息m的数字签名。
[0039]
其中,所用轮函数fr为:
[0040]
轮函数fr的输入是一个四元组(w’,r’,k,d),其输出是一个二元组(w,r),输入与输入之间的关系为:r=r’+[k]w’,w=[d]w’。即
[0041]fr
(w’,r’,k,d)=(w,r)=([d]w’,r’+[k]w’)
[0042]
这里k、d为整数,r、r’、w、w’为sm2标准中椭圆曲线群上的元素。
[0043]
轮函数fs为:
[0044]
轮函数fs的输入是一个四元组(k,d,r’,s’),其输出是一个二元组(r,s),输入与输入之间的关系为:r=r’,s=k+d
×
s’。即
[0045]fs
(k,d,r’,s’)=(r,s)=(r’,k+d
×
s’)
[0046]
这里k、d、r、s、r’、s’为整数。
[0047]
迭代过程如下:
[0048]
迭代过程包含两个迭代,分别是基于轮函数fr的r-迭代和基于轮函数fs的s-迭代。其中r-迭代如图1左边所示,其按照第1轮,第2轮,

,第m轮的顺序进行迭代,每一轮迭代都计算一次轮函数fr;s-迭代如图1右边所示,其按照第m轮,第m-1轮,

,第1轮的顺序进行迭代,每一轮迭代都计算一次轮函数fs。具体描述如下。
[0049]
1、r-迭代。
[0050]
首先,每一轮迭代a1、a2、

、am按照如图1左边所示的迭代方式完成对应于自己那部分计算,然后生成随机椭圆曲线点rm。每一轮迭代的计算如下:
[0051]
rf1)第1轮迭代a1自己产生r0=0和w0=g+pa;然后把(k1,d1)当作轮密钥,以(w0,r0)作为轮函数fr的输入,计算(w1,r1)=fr(w0,r0,k1,d1),即w1=[d1]w0,r1=r0+[k1]w0;然后传递r1、w1给下一轮迭代a2[0052]
rfi)第i轮跌代ai(i=2,

,m)首先接收来自前一轮迭代a
i-1
的消息w
i-1
和r
i-1
,其次通过随机数发生器产生ki∈[1,n],然后把(ki,di)当作轮密钥,以(w
i-1
,r
i-1
)作为轮函数fr的输入,计算(wi,ri)=fr(w
i-1
,r
i-1
,ki,di),即wi=[di]w
i-1
,ri=r
i-1
+[ki]w
i-1
;然后传递ri、wi给下一轮迭代a
i+1
;第m轮迭代am计算出(rm,wm)后不传递消息。
[0053]
2、s-迭代。
[0054]
所有迭代a1、a2、

、am按照如图1右边所示的迭代方式完成对应于自己那部分计算,然后生成数字签名(r,s)。每一轮迭代的计算如下:
[0055]
sfm)第m轮迭代am的输入r和s
m+1
按如下计算公式产生:
[0056]
r=s
m+1
=h(m)+x
[0057]
这里的x是椭圆曲线点rm的横坐标。am把(km,dm)当作轮密钥,以(r,s
m+1
)作为轮函数fs的输入,计算(r,sm)=fs(km,dm,r,s
m+1
),即r=r且sm=km+dm×sm+1
;并传递r和sm给下一轮迭代a
m-1

[0058]
sfi)第i轮迭代ai(i=m-1,

,2,1)首先接收来自上一轮迭代a
i+1
的消息r和s
i+1
,然后把(ki,di)当作轮密钥,以(r,s
i+1
)作为轮函数fs的输入,计算(r,si)=fs(ki,di,r,s
i+1
),即r=r且si=ki+di×si+1
;并传递r和si给下一轮迭代a
i-1

[0059]
sfe)最后,第1轮迭代a1计算出(r,s1)后继续进行如下计算:
[0060]
s=s
1-r
[0061]
然后,a1输出对消息m的签名为σ=(r,s)。
[0062]
总之,本发明采用多方安全计算的思想,各个参与方只拥有签名私钥的部分密钥片,只有在所有参与方合作的前提下才能生成签名,保证了攻击者在入侵任何一方的情况下,都不能够获得完整的签名私钥,从而提升了攻击者窃取私钥的难度。
[0063]
而且,在每一次协同签名过程中,采用对随机数进行加法拆分,而对签名私钥进行
乘法拆分的方法来完成协同签名,这一方法节省协同签名过程中的计算和通信开销,提高了签名方案的效率。
[0064]
以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1