一种基于SM2的协同签名计算方法及装置制造方法及图纸

技术编号:28036479 阅读:20 留言:0更新日期:2021-04-09 23:18
本发明专利技术公开了一种基于SM2的协同签名计算方法及装置,用以解决现有技术中存在的协同签名计算方法过于复杂,签名计算时间较长、效率较低的问题。第一参与方实施的协同签名计算方法,包括:接收第二参与方发送的第二参与方的第二子公钥;采用第一算法生成第一随机数;根据第一随机数以及第二子公钥,生成椭圆曲线第一随机点;将椭圆曲线第一随机点发送给第二参与方,并接收第二参与方发送的根据椭圆曲线第一随机点生成的待签名消息的第一部分签名以及中间签名;根据第一参与方的第一子私钥、第一随机数、第一部分签名以及中间签名,生成待签名消息的第二部分签名,以确定由第一部分签名及第二部分签名构成的签名消息的完整签名。

【技术实现步骤摘要】
一种基于SM2的协同签名计算方法及装置
本专利技术涉及信息安全与密码学领域,尤其涉及一种基于SM2的协同签名计算方法及装置。
技术介绍
在传统互联网中,为了保护用户网上业务的安全,往往采用基于PKI(PublicKeyInfrastructure,公钥基础设施)的数字签名和加解密等密码技术,来验证用户身份的真实性,保证信息的机密性、完整性和签名者的不可否认性等。基于PKI的应用,私钥的保护安全性问题至关重要。传统模式通常给用户配备USBKey、SmartCard等安全硬件外设,来保障私钥的安全。而随着移动互联网、云计算的快速发展和应用,移动智能终端在生活、学习、工作等方面给人们带来方便快捷的同时,对信息安全提出了更高的要求。在移动智能终端或云环境下,由于成本或没有合适的密码硬件等原因,用户不能再依赖密码硬件来使用私钥进行加解密和签名验签等密码运算。针对这些场景,目前常用的方法是以软件的形式存储和使用私钥,但很容易被攻击者窃取,从而导致安全事故。为了在移动智能终端或云环境中不泄露完整的私钥,目前出现了通信双方协同签名的技术方案,即签名计算需由移动端和服务端共同计算协作产生,任何一方都无法单独产生完整的签名结果。而现有的协同签名计算方法过于复杂,签名计算时间较长、效率较低。鉴于此,如何提高协同签名计算方法的效率成为一个亟待解决的技术问题。
技术实现思路
本申请实施例提供了一种基于SM2的协同签名计算方法及装置,用以解决现有技术中存在的协同签名计算方法过于复杂,签名计算时间较长、效率较低的问题。第一方面,为解决上述技术问题,本申请实施例提供一种基于SM2的协同签名计算方法,应用于第一参与方,包括:接收第二参与方发送的所述第二参与方的第二子公钥;采用第一算法生成第一随机数;根据所述第一随机数以及所述第二子公钥,生成椭圆曲线第一随机点,其中,所述椭圆曲线第一随机点为指定椭圆曲线的加法群上的一个元素;将所述椭圆曲线第一随机点发送给所述第二参与方,并接收所述第二参与方发送的根据所述椭圆曲线第一随机点生成的待签名消息的第一部分签名以及中间签名,其中,所述中间签名为所述第二参与方的第二子私钥被混淆后的值;根据所述第一参与方的第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。在本申请实施例中,可以通过接收第二参与方发送的第二参与方的第二子公钥,采用第一算法生成第一随机数,然后根据第一随机数以及第二子公钥,生成椭圆曲线第一随机点,其中,椭圆曲线第一随机点为指定椭圆曲线的加法群上的一个元素,将椭圆曲线第一随机点发送给第二参与方,并接收第二参与方发送的根据椭圆曲线第一随机点生成的待签名消息的第一部分签名以及中间签名,其中,中间签名为第二参与方的第二子私钥被混淆后的值,根据第一参与方的第一子私钥、第一随机数、第一部分签名以及中间签名,生成待签名消息的第二部分签名,以确定由第一部分签名及第二部分签名构成的待签名消息的完整签名,从而使得完整签名需由第一参与方和第二参与方共同计算协作产生,任何一方都无法单独产生完整签名,提高安全性,进一步地,第一参与方与第二参与方只需要二次通信,便可得到待签名消息的完整签名,所以,在本申请实施例中可以使用较少的通信次数,便能获得待签名消息的完整签名,减少了在签名数据在网络中传输的总时间,能够满足无线移动通信或云计算环境中低延迟、少交互的应用需求。结合第一方面,在第一方面的第一种可选实施方式中,根据所述第一随机数以及所述第二子公钥,生成椭圆曲线第一随机点,包括:采用第一公式对所述第一随机数以及所述第二子公钥进行点乘运算,生成所述椭圆曲线第一随机点;所述第一公式用于将所述椭圆曲线第一随机点约束在所述指定椭圆曲线的加法群上;所述第一公式,具体为:Q1=(x1,y1)=k1[*]P2其中,Q1为所述椭圆曲线第一随机点,x1和y1分别为所述椭圆曲线第一随机点的横纵坐标,k1为所述第一随机数,且k1∈[1,n-1]范围内的整数,P2为所述第二子公钥,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算。结合第一方面,在第一方面的第二种可选实施方式中,根据所述第一参与方的第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名,生成所述待签名消息的第二部分签名,包括:采用第二公式对所述第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名进行模运算,生成所述第二部分签名;所述第二公式,具体为:s=[(hd1)-1×(k1+s1)-r]modn其中,s为所述第二部分签名,(hd1)-1为所述第一子私钥hd1在有限素域Fq上的逆元,k1为所述第一随机数,且k1∈[1,n-1]范围内的整数,s1为所述中间签名,r为所述第一部分签名,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,mod表示求模运算。结合第一方面,在第一方面的第三种可选实施方式中,接收第二参与方发送的所述第二参与方的第二子公钥之后,还包括:将所述第一参与方的第一子公钥发送给所述第二参与方;采用第三公式对所述第一子私钥、所述第二子公钥及所述指定椭圆曲线的基点进行运算,获得所述第一参与方与所述第二参与方的共同公钥;所述第三公式,具体为:PA=hd1[*]P2[-]G其中,PA为所述共同公钥,hd1为所述第一子私钥,且hd1∈[1,n-1]范围内的整数,P2为所述第二子公钥,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。第二方面,提供一种基于SM2的协同签名计算方法,应用于第二参与方,包括:将所述第二参与方的第二子公钥发送给第一参与方,并接收所述第一参与方发送的椭圆曲线第一随机点,其中,所述椭圆曲线第一随机点为所述第一参与方根据选取的第一随机数确定的指定椭圆曲线的加法群上的一个元素;采用第二算法生成第二随机数;根据所述第二随机数、所述指定椭圆曲线的基点及所述椭圆曲线第一随机点,生成所述指定椭圆曲线上的椭圆曲线第二随机点;对待签名消息进行哈希计算,获得待签名消息的消息摘要;根据所述消息摘要以及所述椭圆曲线第二随机点的横坐标,生成所述待签名消息的第一部分签名;根据所述第二子私钥、所述第二随机数及所述第一部分签名,生成所述待签名消息的中间签名,其中,所述中间签名为所述第二参与方所持有的第二子私钥被混淆后的值;将所述第一部分签名以及所述中间签名发送给所述第一参与方。结合第二方面,在第二方面的第一种可选实施方式中,根据所述第二随机数、所述指定椭圆曲线的本文档来自技高网...

【技术保护点】
1.一种基于SM2的协同签名计算方法,应用于第一参与方,其特征在于,包括:/n接收第二参与方发送的所述第二参与方的第二子公钥;/n采用第一算法生成第一随机数;/n根据所述第一随机数以及所述第二子公钥,生成椭圆曲线第一随机点,其中,所述椭圆曲线第一随机点为指定椭圆曲线的加法群上的一个元素;/n将所述椭圆曲线第一随机点发送给所述第二参与方,并接收所述第二参与方发送的根据所述椭圆曲线第一随机点生成的待签名消息的第一部分签名以及中间签名,其中,所述中间签名为所述第二参与方的第二子私钥被混淆后的值;/n根据所述第一参与方的第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。/n

【技术特征摘要】
1.一种基于SM2的协同签名计算方法,应用于第一参与方,其特征在于,包括:
接收第二参与方发送的所述第二参与方的第二子公钥;
采用第一算法生成第一随机数;
根据所述第一随机数以及所述第二子公钥,生成椭圆曲线第一随机点,其中,所述椭圆曲线第一随机点为指定椭圆曲线的加法群上的一个元素;
将所述椭圆曲线第一随机点发送给所述第二参与方,并接收所述第二参与方发送的根据所述椭圆曲线第一随机点生成的待签名消息的第一部分签名以及中间签名,其中,所述中间签名为所述第二参与方的第二子私钥被混淆后的值;
根据所述第一参与方的第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。


2.如权利要求1所述的方法,其特征在于,根据所述第一随机数以及所述第二子公钥,生成椭圆曲线第一随机点,包括:
采用第一公式对所述第一随机数以及所述第二子公钥进行点乘运算,生成所述椭圆曲线第一随机点;所述第一公式用于将所述椭圆曲线第一随机点约束在所述指定椭圆曲线的加法群上;
所述第一公式,具体为:
Q1=(x1,y1)=k1[*]P2
其中,Q1为所述椭圆曲线第一随机点,x1和y1分别为所述椭圆曲线第一随机点的横纵坐标,k1为所述第一随机数,且k1∈[1,n-1]范围内的整数,P2为所述第二子公钥,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算。


3.如权利要求1所述的方法,其特征在于,根据所述第一参与方的第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名,生成所述待签名消息的第二部分签名,包括:
采用第二公式对所述第一子私钥、所述第一随机数、所述第一部分签名以及所述中间签名进行模运算,生成所述第二部分签名;
所述第二公式,具体为:
s=[(hd1)-1×(k1+s1)-r]modn
其中,s为所述第二部分签名,(hd1)-1为所述第一子私钥hd1在有限素域Fq上的逆元,k1为所述第一随机数,且k1∈[1,n-1]范围内的整数,s1为所述中间签名,r为所述第一部分签名,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,mod表示求模运算。


4.如权利要求1所述的方法,其特征在于,接收第二参与方发送的所述第二参与方的第二子公钥之后,还包括:
将所述第一参与方的第一子公钥发送给所述第二参与方;
采用第三公式对所述第一子私钥、所述第二子公钥及所述指定椭圆曲线的基点进行运算,获得所述第一参与方与所述第二参与方的共同公钥;
所述第三公式,具体为:
PA=hd1[*]P2[-]G
其中,PA为所述共同公钥,hd1为所述第一子私钥,且hd1∈[1,n-1]范围内的整数,P2为所述第二子公钥,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。


5.一种基于SM2的协同签名计算方法,应用于第二参与方,其特征在于,包括:
将所述第二参与方的第二子公钥发送给第一参与方,并接收所述第一参与方发送的椭圆曲线第一随机点,其中,所述椭圆曲线第一随机点为所述第一参与方根据选取的第一随机数确定的指定椭圆曲线的加法群上的一个元素;
采用第二算法生成第二随机数;
根据所述第二随机数、所述指定椭圆曲线的基点及所述椭圆曲线第一随机点,生成所述指定椭圆曲线上的椭圆曲线第二随机点;
对待签名消息进行哈希计算,获得待签名消息的消息摘要;
根据所述消息摘要以及所述椭圆曲线第二随机点的横坐标,生成所述待签名消息的第一部分签名;
根据所述第二子私钥、所述第二随机数及所述第一部分签名,生成所述待签名消息的中间签名,其中,所述中间签名为所述第二参与方所持有的第二子私钥被混淆后的值;
将所述第一部分签名以及所述中间签名发送给所述第一参与方。


6.如权利要求5所述的方法,其特征在于,根据所述第二随机数、所述指定椭圆曲线的基点及所述椭圆曲线第一随机点,生成所述指定椭圆曲线上的椭圆曲线第二随机点,包括:
采用第五公式对所述第二随机数、所述指定椭圆曲线的基点及所述椭圆曲线第一随机点进行点乘运算,生成所述指定椭圆曲线上的椭圆曲线第二随机点;所述第五公式用于将所述椭圆曲线第二随机点约束在所述指定椭圆曲线的加法群上;
所述第五公式,具体为:
Q2=(x2,y2)=k2[*]G[+]Q1
其中,Q2为所述椭圆曲线第二随机点,x2和y2分别为所述椭圆曲线第二随机点的横纵坐...

【专利技术属性】
技术研发人员:宁红宙王启刚危学艳龚征马昌社
申请(专利权)人:航天信息股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1