CN109245903B - 双方协同生成sm2算法的签名方法、装置及存储介质 - Google Patents
双方协同生成sm2算法的签名方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109245903B CN109245903B CN201811148390.1A CN201811148390A CN109245903B CN 109245903 B CN109245903 B CN 109245903B CN 201811148390 A CN201811148390 A CN 201811148390A CN 109245903 B CN109245903 B CN 109245903B
- Authority
- CN
- China
- Prior art keywords
- signature
- elliptic curve
- sub
- private key
- message
- 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
-
- 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/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3066—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Algebra (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了双方协同生成SM2算法的签名方法、装置及存储介质,解决在不采用密码硬件的情况下,现有技术中存在的用户私钥易被盗取的问题。在第一参与方实施的签名方法包括:接收第二参与方根据签名输出方标识确定的中间信息;并基于签名输出方标识确定输出待签名消息的完整签名的参与方;若由第一参与方输出完整签名,则用第一子私钥及中间信息生成待签名消息的第二部分签名,并输出由中间信息中携带的第一部分签名及第二部分签名构成的完整签名;若由第二参与方输出完整签名,则用第一子私钥及中间信息生成并发送第一中间签名给第二参与方,使第二参与方能用第二子私钥及第一中间签名生成待签名消息的第二部分签名,以确定完整签名。
Description
技术领域
本发明涉及信息安全与密码学领域,尤其是涉及双方协同生成SM2算法的签名方法、装置及存储介质。
背景技术
在传统互联网中,为了保护用户网上业务的安全,往往采用基于PKI(Public KeyInfrastructure,公钥基础设施)的数字签名和加解密等密码技术,来验证用户身份的真实性,保证信息的机密性、完整性和签名者的不可否认性等。基于PKI的应用,私钥的保护安全性问题至关重要。传统模式通常给用户配备USBKey、SmartCard等安全硬件外设,来保障私钥的安全。
而随着移动互联网、云计算的快速发展和应用,移动智能终端和“瘦客户端”在生活、学习、工作等方面给人们带来方便快捷的同时,对信息安全提出了更高的要求。在移动智能终端或云环境下,由于成本或没有合适的密码硬件等原因,用户不能再依赖密码硬件来使用私钥进行加解密和签名验签等密码运算。
针对这些场景,目前常用的方法是以软件的形式存储和使用私钥,安全防护能力较差。如果私钥完整的存储在本地文件中,攻击者可通过权限提升等方式获取私钥;如果私钥完整的出现在每次的签名过程中,攻击者可通过多种方式将其从内存中导出。
鉴于此,如何在不采用密码硬件的情况下,确保用户的私钥不被盗取成为一个亟待解决的技术问题。
发明内容
本发明提供双方协同生成SM2算法的签名方法、装置及存储介质,用以解决现有技术中存在的在不采用密码硬件的情况下,用户的私钥易被盗取的技术问题。
第一方面,为解决上述技术问题,本发明实施例提供的双方协同生成SM2算法的签名方法,应用于第一参与方,该方法的技术方案如下:
接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,所述中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;
基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方;
若确定由所述第一参与方输出所述完整签名,则基于所述第一参与方持有的第一子私钥及所述中间信息生成所述待签名消息的第二部分签名;其中,所述中间信息中还携带有所述第二参与方生成的所述待签名消息的第一部分签名;在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述第一部分签名。
可选的,接收第二参与方发送的根据签名输出方标识确定的中间信息之前,还包括:
按照第一公式对选取的第一随机数及所述第一参与方的第一子公钥、所述第二参与方的第二子公钥以及指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,所述第一随机数为至少三个随机数,所述第一椭圆曲线随机点为所述指定椭圆曲线的加法群上的至少三个元素,所述第一随机数与所述第一椭圆曲线随机点的数量相同,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方,使所述第二参与方能够基于所述消息摘要及所述第一椭圆曲线随机点生成所述第一部分签名。
可选的,将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方之前,还包括:
对所述待签名消息及指定特征数据进行哈希计算,获得所述待签名消息的消息摘要;其中,所述指定特征数据至少包括与所述指定椭圆曲线相关的参数,及由所述第一子公钥与所述第二子公钥所构成的完整签名公钥被混淆后的值。
可选的,所述第一公式,具体为:
其中,R1至R3为所述第一椭圆曲线随机点,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为所述基点G的阶,P1、P2分别为所述第一子公钥及所述第二子公钥,P1是由所述第一参与方用所述第一子私钥与所述基点G计算得到的,P2是由所述第二参与方用所述第二子私钥与所述基点G计算得到的,d1为所述第一子私钥。
可选的,所述中间信息,具体为:
若所述签名输出方标识表明应在所述第一参与方输出所述完整签名,则所述中间信息由所述第一部分签名及第二中间签名构成;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥所产生的四个值;
若所述签名输出方标识表明应在所述第二参与方输出所述完整签名,则所述中间信息为第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值。
可选的,基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方之后,还包括:
若确定由所述第二参与方输出所述完整签名,则用第二公式对所述第一子私钥及所述中间信息进行计算,生成第一中间签名;其中,所述第一中间签名为所述第一参与方混淆所述第一子私钥产生的三个值,所述第二公式用于约束所述第一中间签名的取值范围;
发送所述第一中间签名给所述第二参与方,使所述第二参与方能够根据所述第二子私钥、所述第一中间签名及所述待签名消息的第一部分签名生成所述待签名消息的第二部分签名,以确定所述待签名消息的完整签名。
可选的,所述第二公式具体为:
其中,s3至s5为所述第一中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
可选的,基于所述第一参与方持有的第一子私钥及所述中间信息生成所述第二部分签名,包括:
采用第三公式对所述第一子私钥、所述第一部分签名及所述第二中间签名进行计算,生成所述待签名消息的第二部分签名;其中,所述第二中间签名是混淆所述第二子私钥后产生的四个值,所述第三公式用于约束所述第二部分签名的取值范围。
可选的,所述第三公式具体为:
其中,s为所述待签名消息的第二部分签名,s11至s14为所述第二中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1mod n,mod为求模运算。
第二方面,为解决上述技术问题,本发明实施例提供的双方协同生成SM2算法的签名方法,应用于第二参与方,该方法的技术方案如下:
接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名;其中,所述签名输出方标识用于标识输出所述待签名消息的完整签名的参与方,所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;
在确定所述第一部分签名为非零值时,根据所述签名输出方标识确定输出所述完整签名的参与方;
若确定由所述第一参与方输出所述完整签名,则基于所述第二参与方所持有的第二子私钥及所述第一部分签名生成第二中间签名;并发送由所述第一部分签名及所述第二中间签名组成的中间信息给所述第一参与方,使所述第一参与方能够根据所述中间信息生成所述待签名消息的第二部分签名,以确定所述完整签名;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥产生的四个值。
可选的,接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名,包括:
接收所述签名输出方标识、所述消息摘要及所述第一椭圆曲线随机点;
采用指定算法生成第二随机数;其中,所述第二随机数的数量比接收的所述第一圆曲线随机点的数量多一个;
采用第四公式对所述第二随机数及所述第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点;
采用第五公式对所述第二椭圆曲线随机点的横坐标以及所述消息摘要转化成的整数进行模运算,获得所述第一部分签名。
可选的,所述第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第二椭圆曲线随机点,x1和y1分别为所述第二椭圆曲线随机点的横纵坐标,R1至R3为所述第一椭圆曲线随机点,G为所述指定椭圆曲线的基点,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为所述第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算。
可选的,所述第五公式,具体为:
r=(x1+e)mod n
其中,r为所述第一部分签名,x1为所述第二椭圆曲线随机点的横坐标,e为所述消息摘要由字节串转化成的整数,n为所述指定椭圆曲线的基点G的阶,mod为求模运算。
可选的,根据所述签名输出方标识确定输出所述待签名消息的完整签名的参与方之后,还包括:
若确定由所述第二参与方输出所述完整签名,则基于所述第二子私钥及所述第一部分签名生成第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
发送由所述第三中间签名构成的中间信息给所述第一参与方,使所述第一参与方能够根据所述第一子私钥及所述中间信息生成第一中间签名;其中,所述第一中间签名为所述第一参与方基于所述第一子私钥及所述第三中间签名产生的三个值;
接收所述第一参与方发送的所述第一中间签名,并基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,基于所持有的第二子私钥及所述第一部分签名生成第三中间签名,包括:
若确定由所述第二参与方输出所述完整签名,则采用第七公式,对所述第二子私钥及所述第一部分签名进行计算,生成第三中间签名;
具体的,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,生成所述待签名消息的第二部分签名,包括:
采用第八公式,对第二随机数中的部分随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二部分签名;
具体的,所述第八公式为:
其中,s为所述第二部分签名,s3至s5为所述第三中间签名,k5和k6为所述第二随机数中的部分随机数,且k5和k6∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2为所述第二子私钥,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,基于所持有的第二子私钥及所述第一部分签名生成第二中间签名,包括:
采用第六公式,对所述第二随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二中间签名;
具体的,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
第三方面,本发明实施例提供了一种用于双方协同生成SM2算法的签名装置,应用于第一参与方,该装置包括:
接收单元,用于接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,所述中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;
确定单元,用于基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方;
计算单元,用于若确定由所述第一参与方输出所述完整签名,则基于所述第一参与方持有的第一子私钥及所述中间信息生成所述待签名消息的第二部分签名;其中,所述中间信息中还携带有所述第二参与方生成的所述待签名消息的第一部分签名;在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述第一部分签名。
可选的,接收第二参与方发送的根据签名输出方标识确定的中间信息之前,所述计算单元还用于:
按照第一公式对选取的第一随机数及所述第一参与方的第一子公钥、所述第二参与方的第二子公钥以及指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,所述第一随机数为至少为三个随机数,所述第一椭圆曲线随机点为所述指定椭圆曲线的加法群上的至少三个元素,所述第一随机数与所述第一椭圆曲线随机点的数量相同,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方,使所述第二参与方能够基于所述消息摘要及所述第一椭圆曲线随机点生成所述第一部分签名。
可选的,将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方之前,所述计算单元还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述待签名消息的消息摘要;其中,所述指定特征数据至少包括与所述指定椭圆曲线相关的参数,及由所述第一子公钥与所述第二子公钥所构成的完整签名公钥被混淆后的值。
可选的,所述第一公式,具体为:
其中,R1至R3为所述第一椭圆曲线随机点,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为所述基点G的阶,P1、P2分别为所述第一子公钥及所述第二子公钥,P1是由所述第一参与方用所述第一子私钥与所述基点G计算得到的,P2是由所述第二参与方用所述第二子私钥与所述基点G计算得到的,d1为所述第一子私钥。
可选的,所述中间信息,具体为:
若所述签名输出方标识表明应在所述第一参与方输出所述完整签名,则所述中间信息由所述第一部分签名及第二中间签名构成;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥所产生的四个值;
若所述签名输出方标识表明应在所述第二参与方输出所述完整签名,则所述中间信息为第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值。
可选的,基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方之后,所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则用第二公式对所述第一子私钥及所述中间信息进行计算,生成第一中间签名;其中,所述第一中间签名为所述第一参与方混淆所述第一子私钥产生的三个值,所述第二公式用于约束所述第一中间签名的取值范围;
发送所述第一中间签名给所述第二参与方,使所述第二参与方能够根据所述第二子私钥、所述第一中间签名及所述待签名消息的第一部分签名生成所述待签名消息的第二部分签名,以确定所述待签名消息的完整签名。
可选的,所述第二公式具体为:
其中,s3至s5为所述第一中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
可选的,基于所述第一参与方持有的第一子私钥及所述中间信息生成所述第二部分签名,包括:
采用第三公式对所述第一子私钥、所述第一部分签名及所述第二中间签名进行计算,生成所述待签名消息的第二部分签名;其中,所述第二中间签名是混淆所述第二子私钥后产生的四个值,所述第三公式用于约束所述第二部分签名的取值范围。
可选的,所述第三公式具体为:
其中,s为所述待签名消息的第二部分签名,s11至s14为所述第二中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1mod n,mod为求模运算。
第四方面,本发明实施例提供了一种用于双方协同生成SM2算法的签名装置,应用于第二参与方,该装置包括:
接收单元,用于接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名;其中,所述签名输出方标识用于标识输出所述待签名消息的完整签名的参与方,所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;
确定单元,用于在确定所述第一部分签名为非零值时,根据所述签名输出方标识确定输出所述完整签名的参与方;
计算单元,用于若确定由所述第一参与方输出所述完整签名,则基于所述第二参与方所持有的第二子私钥及所述第一部分签名生成第二中间签名;并发送由所述第一部分签名及所述第二中间签名组成的中间信息给所述第一参与方,使所述第一参与方能够根据所述中间信息生成所述待签名消息的第二部分签名,以确定所述完整签名;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥产生的四个值。
可选的,所述接收单元具体用于:
接收所述签名输出方标识、所述消息摘要及所述第一椭圆曲线随机点;
采用指定算法生成第二随机数;其中,所述第二随机数的数量比接收的所述第一圆曲线随机点的数量多一个;
采用第四公式对所述第二随机数及所述第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点;
采用第五公式对所述第二椭圆曲线随机点的横坐标以及所述消息摘要转化成的整数进行模运算,获得所述第一部分签名。
可选的,所述第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第二椭圆曲线随机点,x1和y1分别为所述第二椭圆曲线随机点的横纵坐标,R1至R3为所述第一椭圆曲线随机点,G为所述指定椭圆曲线的基点,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为所述第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算。
可选的,所述第五公式,具体为:
r=(x1+e)mod n
其中,r为所述第一部分签名,x1为所述第二椭圆曲线随机点的横坐标,e为所述消息摘要由字节串转化成的整数,n为所述指定椭圆曲线的基点G的阶,mod为求模运算。
可选的,根据所述签名输出方标识确定输出所述待签名消息的完整签名的参与方之后,所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则基于所述第二子私钥及所述第一部分签名生成第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
发送由所述第三中间签名构成的中间信息给所述第一参与方,使所述第一参与方能够根据所述第一子私钥及所述中间信息生成第一中间签名;其中,所述第一中间签名为所述第一参与方基于所述第一子私钥及所述第三中间签名产生的三个值;
接收所述第一参与方发送的所述第一中间签名,并基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则采用第七公式,对所述第二子私钥及所述第一部分签名进行计算,生成第三中间签名;
具体的,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,所述计算单元具体用于:
采用第八公式,对第二随机数中的部分随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二部分签名;
具体的,所述第八公式为:
其中,s为所述第二部分签名,s3至s5为所述第三中间签名,k5和k6为所述第二随机数中的部分随机数,且k5和k6∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2为所述第二子私钥,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,所述计算单元还用于:
采用第六公式,对所述第二随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二中间签名;
具体的,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
第五方面,本发明实施例还提供一种用于双方协同生成SM2算法的签名装置,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上述第一方面和/或第二方面所述的方法。
第六方面,本发明实施例还提供一种计算机可读存储介质,包括:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第一方面和/或第二方面所述的方法。
通过本发明实施例的上述一个或多个实施例中的技术方案,本发明实施例至少具有如下技术效果:
在本发明提供的实施例中,通信双方(第一参与方和第二参与方)持有各自的签名子私钥进行协同签名,在第一参与方接收到第二参与方发送的根据签名输出方标识确定的中间信息之后;其中,中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;基于第一参与方发送给第二参与方的签名输出方标识,确定输出待签名消息的完整签名的参与方为第一参与方后,第一参与方用持有的第一子私钥及中间信息生成待签名消息的第二部分签名;其中,中间信息中还携带有第二参与方生成的待签名消息的第一部分签名;并在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为第一部分签名。使得第一参与方与第二参与方能通过这种交互联合的方式完成协同签名。攻击者获取其中任何一方的签名子私钥,都无法计算完整的签名私钥。从而使得使用本发明实施例中的方法,在不采用密码硬件的情况下,也能确保用户的私钥不被盗,提高安全性。
进一步的,由于通信双方分别选取多个随机数,其中任何一方均不能确定对方生成的随机数,从而不能推导出对方的签名子私钥,也就使得任何一方都不能得到待签名消息的完整签名私钥,从而能够有效的防止因签名私钥被盗而引发的一系列安全隐患。
进一步的,在本发明提供的实施例中,在生成的待签名消息的第一部分签名时,由于生成的第一部分签名中含有通信双方分别选取的多个随机数及双方各自持有的签名子私钥,这样不但可以使第一部分签名的值具有更好的混淆效果,而且还使第一部分签名也具有签名的作用。
进一步的,在本发明提供的实施例中,通让第一参与方用签名输出方标识告知第二参与方,具体在哪一方输出待签名消息的完整签名。从而可以根据实际需要让待签名消息的完整签名在第一参与方或第二参与方生成,进而提高生成完整签名的不确定性,进一步增加攻击者盗取完整签名的难度、提高安全性,且通过这种方式还可以让使用了本发明实施例的应用更加灵活可控。
进一步的,若待签名消息的完整签名在第一参与方输出,则第一参与方与第二参与方只需要两次通信,便可得到待签名消息的完整签名;若待签名消息的完整签名在第二参与方输出,则第一参与方与第二参与方只需要三次通信,便可得到待签名消息的完整签名。所以,通过本发明提供的实施例可以使用较少的通信次数,便能获得待签名消息的完整签名,从而减少了在签名数据在网络中传输的总时间,进而能够满足无线移动通信或云计算环境中低延迟、少交互的应用需求。
附图说明
图1为本发明实施例提供的双方协同生成SM2算法的签名方法,应用于第一参与方的流程图;
图2为本发明实施例提供的双方协同生成SM2算法的签名方法,应用于第二参与方的流程图;
图3为本发明实施例提供的第二参与方生成第一部分签名的流程图;
图4为本发明实施例提供的双方协同生成SM2算法的签名方法,完整签名在第一参与方生成的流程图;
图5为本发明实施例提供的双方协同生成SM2算法的签名方法,完整签名在第二参与方生成的流程图;
图6为本发明实施例提供的双方协同生成SM2算法的签名装置,应用于第一参与方的结构示意图;
图7为本发明实施例提供的双方协同生成SM2算法的签名装置,应用于第二参与方的结构示意图。
具体实施方式
本发明实施例提供双方协同生成SM2算法的签名方法、装置及存储介质,以解决现有技术中存在的在不采用密码硬件的情况下,用户的私钥易被盗取的技术问题。
本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:
提供双方协同生成SM2算法的签名方法,包括:接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;基于签名输出方标识,确定输出待签名消息的完整签名的参与方;若确定由第一参与方输出完整签名,则基于第一参与方持有的第一子私钥及中间信息生成待签名消息的第二部分签名;其中,中间信息中还携带有第二参与方生成的待签名消息的第一部分签名;在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为第一部分签名。
由于在上述方案中,通信双方(第一参与方和第二参与方)持有各自的签名子私钥进行协同签名的过程中,在第一参与方接收到第二参与方发送的根据签名输出方标识确定的中间信息之后;其中,中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;基于第一参与方发送给第二参与方的签名输出方标识,确定输出待签名消息的完整签名的参与方为第一参与方后,第一参与方用持有的第一子私钥及中间信息生成待签名消息的第二部分签名;其中,中间信息中还携带有第二参与方生成的待签名消息的第一部分签名;并在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为第一部分签名。使得第一参与方与第二参与方能通过这种交互联合的方式完成协同签名。当攻击者获取其中任何一方的签名子私钥,都无法计算完整的签名私钥。从而使得在使用本发明实施例中的方法后,在不采用密码硬件的情况下,也能确保用户的私钥不被盗,提高安全性。
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细地说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
以下,将分别从第一参与方、第二参与方的角度对双方协同生成SM2算法的签名方法进行描述。
请参考图1,本发明实施例提供双方协同生成SM2算法的签名方法,应用于第一参与方,该方法的处理过程如下。
步骤101:接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息。
需要说明的是,在使用SM2算法进行协同签名之前,通信双方即第一参与方和第二参与方需要满足:共享指定椭圆曲线E(Fp)的参数;通信双方生成并持有各自的签名私钥;通信双方生成并持有各自的签名公钥及完整的签名公钥。
第一参与方和第二参与方共享指定椭圆曲线E(Fp)参数,包括有限域Fp的素数p、指定椭圆曲线方程的系数a,b∈Fp、指定椭圆曲线E(Fp)上的基点G=(xG,yG)(G≠O,xG∈Fp,yG∈Fp)和基点G的阶n。指定椭圆曲线E(Fp)参数的具体取值,见中华人民共和国密码行业标准GM/T 0003.5-2012《SM2椭圆曲线公钥密码算法第5部分:参数定义》。在双方共享了指定椭圆曲线E(Fp)的上述参数之后,第一参与方和第二参与方分别生成并持有各自的签名私钥。第一参与方的签名私钥称之为第一子私钥(可用d1表示),第二参与方的签名私钥称之为第二子私钥(可用d2表示),d1和d2均随机取为[1,n-1]内的整数。完整的签名私钥定义为dA=(d1×d2-1)mod n,通信双方均不知对方的签名私钥,也不知完整的签名私钥dA。其中,mod表示求模运算。
在双方生成各自的签名私钥(即第一子私钥和第二子私钥)之后,便需要生成它们各自的签名公钥,进而确定完整的签名公钥(可用PA表示)。第一参与方的签名公钥称之为第一子公钥(可用P1表示),第二参与方的签名公钥称之为第二子公钥(可用P2表示)。具体地,第一参与方用第一子私钥d1计算第一子公钥P1=d1[*]G,并将第一子公钥P1发送给第二参与方;第二参与方接收并保存第一子公钥P1,用第二子私钥d2计算第二子公钥P2=d2[*]G和完整的签名公钥PA=d2[*]P1[-]G=(xA,yA),并将第二子公钥P2发送给第一参与方;第一参与方根据第二子公钥P2计算完整的签名公钥PA=d1[*]P2[-]G。这样就使得第一参与方与第二参与方双方均拥有完整的签名公钥。其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。
在第一参与方和第二参与方均拥有完整的签名公钥之后,对位于第一参与方的待签名消息进行签名操作时,第一参与方需要首先对待签名消息及指定特征数据进行哈希计算,获得待签名消息的消息摘要;其中,指定特征数据至少包括与指定椭圆曲线相关的参数及由第一参与方与第二参与方完整的签名公钥被混淆后的值。
例如,假设待签名消息为info,指定特征数据为与指定椭圆曲线及签名公钥PA=(xA,yA)相关的特征,记为Z=Hash(ENTLa||IDA||a||b||xG||yG||xA||yA),其中,ENTLa为由IDA的字节长度转化成的两字节长比特串,IDA为第一参与方的可辩别标识,a、b为指定椭圆曲线方程的系数,xG、yG分别为指定椭圆曲线的基点G的横纵坐标,xA、yA分别为完整的签名公钥的横纵坐标。将待签名消息为info与指定特征数据Z进行拼接得到M,即M=info||Z。那么待签名消息info的消息摘要e的计算公式为:
e=Hash(M) (1)
其中,Hash()函数可以是SM3密码杂凑算法。
然后,第一参与方需要先按照第一公式对选取的第一随机数及第一参与方的第一子公钥、第二参与方的第二子公钥以及指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,第一随机数为至少三个随机数,第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素,第一随机数与第一椭圆曲线随机点的数量相同,第一公式用于将第一椭圆曲线随机点约束在指定椭圆曲线的加法群上。
具体的,第一公式为:
其中,R1至R3为第一椭圆曲线随机点,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为指定椭圆曲线的基点,n为基点G的阶,P1、P2分别为第一子公钥及第二子公钥,P1是由第一参与方用第一子私钥与基点G计算得到的,P2是由第二参与方用第二子私钥与基点G计算得到的,d1为第一子私钥。
需要说明的是,第一参与方选取的第一随机数为至少三个随机数。若数量是三个,表示为k1,k2,k3,则基于这三个随机数确定的第一椭圆曲线随机点的数量也是三个,表示为R1,R2,R3。它们的计算公式具体请参见第一公式(即公式(2))。
其中,“至少”的意思是指第一参与方可以选取多于三个的随机数,比如除了k1,k2,k3,还选取k8,k9,k10。由于第一参与方持有第一子公钥P1、第二子公钥P2和指定椭圆曲线的基点G这三个基础的指定椭圆曲线的加法群元素,因此,若基于六个随机数k1,k2,k3,k8,k9,k10生成六个指定椭圆曲线上的随机点R′1至R′6,它们的计算公式可为:
则R’1至R’6可以分别合并为指定椭圆曲线上的三个随机点R1-R3,即:
而k1+k8,k2+k9和k3+k10的结果也是随机数,直接由三个随机数表示即可。所以,第一参与方若选取多于三个的随机数,并产生多于三个的指定椭圆曲线上的随机点,第一参与方可以按照前述方法将多于三个的随机点合并为指定椭圆曲线上的三个随机点。
需要说明的是,具体待签名消息的完整签名由第一参与方生成还是第二参与方生成,由第一参与方根据应用场景确定。在第一参与方与第二参与方通信的过程中,使用签名输出方标识来标识由第一参与方还是第二参与方生成待签名消息的完整签名。
最后,将签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点发送给第二参与方,使第二参与方能根据消息摘要及第一随机点生成待签名消息的第一部分签名。
在第一参与方将签名输出方标识、消息摘要及第一椭圆曲线随机点发送给第二参与方之后,第二参与方首先会根据消息摘要及第一椭圆曲线随机点计算第一部分签名;并根据签名输出方标识确定待签名消息的完整签名,当签名输出方标识表明需要在第一参与方生成时,生成第二中间签名,将第一部分签名和第二中间签名作为中间信息发送给第一参与方;当签名输出方标识表明需要在第二参与方生成时,生成第三中间签名,仅将第三中间签名作为中间信息发送给第一参与方。
其中,中间信息,具体为:
若签名输出方标识表明应在第一参与方输出完整签名,则中间信息由第一部分签名及第二中间签名构成;第二中间签名为第二参与方混淆第二子私钥所产生的四个值;若签名输出方标识表明应在第二参与方输出完整签名,则中间信息为第三中间签名;其中,第三中间签名为第二参与方混淆第二子私钥产生的两个值。
之后,第一参与方在接收到第二参与方发送的中间信息之后,便执行步骤102-步骤103。
步骤102:基于签名输出方标识,确定输出待签名消息的完整签名的参与方。
步骤103:若确定由第一参与方输出完整签名,则基于第一参与方持有的第一子私钥及中间信息生成待签名消息的第二部分签名;其中,中间信息中还携带有第二参与方生成的待签名消息的第一部分签名;在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为第一部分签名。待签名消息具体的,基于第一参与方持有的第一子私钥及中间信息生成待签名消息的第二部分签名,需要采用第三公式对第一子私钥、第一部分签名及第二中间签名进行计算,生成待签名消息的第二部分签名;其中,第二中间签名是混淆第二子私钥后产生的四个值,第三公式用于约束第二部分签名的取值范围。
其中,第三公式具体为:
其中,s为待签名消息的第二部分签名,s11至s14为第二中间签名,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为指定椭圆曲线的基点G的阶,d1 -1为第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
在执行步骤102,基于签名输出方标识,确定输出待签名消息的完整签名的参与方之后,若根据签名输出方标识确定由第二参与方输出待签名消息的完整签名,则:
第一参与方用第二公式对第一子私钥及中间信息进行计算,生成第一中间签名;其中,第一中间签名为第一参与方混淆第一子私钥产生的三个值,第二公式用于约束第一中间签名的取值范围;并发送第一中间签名给第二参与方,使第二参与方能够根据第二子私钥、第一中间签名及待签名消息的第一部分签名生成待签名消息的第二部分签名,以确定待签名消息的完整签名。
其中,第二公式具体为:
s3至s5为第一中间签名,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为指定椭圆曲线的基点G的阶,d1 -1为第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
以上,从第一参与方的角度介绍了本发明的第一参与方在基于SM2算法进行协同签名时,第一参与方所执行的操作;下面,将从第二参与方的角度,对第二参与方在进行协同签名时,所执行的操作进行详细介绍。
请参考图2,本发明实施例提供双方协同生成SM2算法的签名方法,应用于第二参与方,该方法的处理过程如下。
步骤201:接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于消息摘要及第一椭圆曲线随机点生成待签名消息的第一部分签名;其中,签名输出方标识用于标识输出待签名消息的完整签名的参与方,第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素。
具体的,请参见图3,第二参与方可以通过以下步骤生成待签名消息的第一部分签名:
步骤301:接收签名输出方标识、消息摘要及第一椭圆曲线随机点。
步骤302:采用指定算法生成第二随机数;其中,第二随机数的数量比接收的第一圆曲线随机点的数量多一个。
步骤303:采用第四公式对第二随机数及第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点。
步骤304:采用第五公式对第二椭圆曲线随机点的横坐标以及消息摘要转化成的整数进行模运算,获得第一部分签名。
其中,第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G (7)
其中,(x1,y1)为第二椭圆曲线随机点,x1和y1分别为第二椭圆曲线随机点的横纵坐标,R1至R3为第一椭圆曲线随机点,G为指定椭圆曲线的基点,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算。
第五公式,具体为:
r=(x1+e)mod n (8)
其中,r为第一部分签名,x1为第二椭圆曲线随机点的横坐标,e为消息摘要由字节串转化成的整数,n为指定椭圆曲线的基点G的阶,mod为求模运算。
在计算出第一部分签名之后,便可判断第一部分签名是否为非零值,若第一部分签名为零,则重新执行步骤302-步骤304直到第一部分签名为非零值为止;若第一部分签名为非零值,则执行步骤202-步骤203。
步骤202:在确定第一部分签名为非零值时,根据签名输出方标识确定输出完整签名的参与方。
步骤203:若确定由第一参与方输出完整签名,则基于第二参与方所持有的第二子私钥及第一部分签名生成第二中间签名;并发送由第一部分签名及第二中间签名组成的中间信息给第一参与方,使第一参与方能够根据中间信息生成待签名消息的第二部分签名,以确定待签名消息的完整签名;其中,第二中间签名为第二参与方混淆第二子私钥产生的四个值。
具体的,基于第二参与方所持有的第二子私钥及第一部分签名生成第二中间签名,包括:
采用第六公式对第二随机数、第二子私钥及第一部分签名进行计算,生成第二中间签名。
具体的,第六公式为:
其中,s11至s14为第二中间签名,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为第一部分签名,n为指定椭圆曲线的基点G的阶,d2 -1为第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
在生成第二中间签名之后,将第二中间签名及第一部分签名作为中间信息发送给第一参与方,让第一参与方根据第二中间签名生成第二部分签名,并由第一部分签名及第二部分签名生成待签名消息的完整签名。
若在执行步骤202之后,第二参与方根据签名输出方标识确定由第二参与方输出待签名消息的完整签名,则:
基于第二子私钥及第一部分签名生成第三中间签名;其中,第三中间签名为第二参与方混淆第二子私钥产生的两个值;并将第三中间签名作为中间信息发送给第一参与方,使第一参与方能够根据第一子私钥及中间信息生成第一中间签名;其中,第一中间签名为第一参与方基于第一子私钥及第三中间签名产生的三个值。
具体的,基于第二子私钥及第一部分签名生成第三中间签名,是在确定由第二参与方输出完整签名时,采用第七公式,对第二子私钥及第一部分签名进行计算,生成第三中间签名。
具体的,第七公式为:
其中,s1至s2为第三中间签名,k4和k7为第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为待签名消息的第一部分签名,n为指定椭圆曲线的基点G的阶,d2 -1为第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
在计算出第三中间签名之后,便可将第三中间签名作为中间信息发送给第一参与方,使第一参与方根据中间信息计算第一中间签名,并发送给第二参与方。其中,第一中间签名的计算方法可参见第一参与方中的第二公式,具体不再赘述。
第二参与方接收第一参与方发送的第一中间签名,并基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名;并在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为待签名消息的第一部分签名。
具体的,第二参与方生成待签名消息的第二部分签名,采用第八公式,对第二随机数中的部分随机数、第二子私钥及第一部分签名进行计算,生成第二部分签名。
其中,第八公式为:
其中,s为第二部分签名,s3至s5为第三中间签名,k5和k6为第二随机数中的部分随机数,且k5和k6∈[1,n-1]范围内的整数,r为第一部分签名,n为指定椭圆曲线的基点G的阶,d2为第二子私钥,d2 -1为第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
为了使本领域的技术人员能更加清楚的理解上述协同签名过程,下面将从第一参与方和第二参与方进行交互的过程进行详细的描述。
请参见图4和图5,对待签名消息进行签名的操作过程为:
步骤401:第一参与方生成签名输出方标识、待签名消息的消息摘要以及第一椭圆曲线随机点。
第一参与方用随机数生成器生成第一随机数k1-k3,k1-k3∈[1,n-1]范围内的整数。
并用前述的公式(2)生成第一椭圆曲线随机点R1-R3,用公式(1)生成待签名消息的消息摘要e。
步骤402:第一参与方将签名输出方标识、消息摘要e和第一椭圆曲线随机点R1-R3发送给第二参与方。
步骤403:第二参与方根据消息摘要e和第一椭圆曲线随机点R1-R3生成第一部分签名r。
第二参与方在接收到消息摘要e和第一椭圆曲线随机点R1-R3之后,便用随机数生成器生成第二随机数k4-k7,k4-k7∈[1,n-1]范围内的整数,第二随机数的个数需比第一随机数的个数多一个。用公式(7)和(8)生成第一部分签名r。
步骤404:第二参与方判断第一部分签名r是否为非零值。
若第一部分签名r为0,则重新执行步骤403,直到第一部分签名r不为0为止。
若第一部分签名r不为0,则执行步骤405。
第二参与方根据签名输出方标识确定待签名消息的完整签名是在第一参与方生成还是在第二参与方生成。若根据签名输出方标识确定待签名消息的完整签名是在第一参与方生成,则执行步骤405-步骤409;若根据签名输出方标识确定待签名消息的完整签名是在第二参与方生成,则执行步骤410-步骤416。具体如下:
若根据签名输出方标识确定待签名消息的完整签名是在第一参与方生成则:
步骤405:签名输出方标识表明在第一参与方生成待签名消息的完整签名,则第二参与方根据第二子私钥及第一部分签名r生成第二中间签名s11至s14。
具体的,第二参与方用公式(9)生成第二中间签名s11至s14。
步骤406:第二参与方发送中间信息(由第一部分签名r和第二中间签名s11至s14组成)给第一参与方。
步骤407:第一参与方根据签名输出方标识确定待签名消息的完整签名在第一参与方生成,则根据接收的中间信息生成第二部分签名s。
具体的,第一参与方用公式(5)生成第二部分签名s。
步骤408:第一参与方判断第二部分签名s是否不为0,且不等于n-r。
若第二部分签名s不为0,且不等于n-r,则执行步骤409。
若第二部分签名s为0或等于n-r,则重新从步骤401开始执行,直到第二部分签名s不为0,且不等于n-r。
步骤409:第一参与方根据第一部分签名r和第二部分签名s,生成待签名消息的完整签名(r,s)。
若根据签名输出方标识确定待签名消息的完整签名是在第二参与方生成则:
步骤410:签名输出方标识表明在第二参与方生成待签名消息的完整签名,则第二参与方根据第二子私钥及第一部分签名生成第三中间签名s1至s2。
具体的,第二参与方用公式(10)生成第三中间签名s1至s2。
步骤411:第二参与方发送中间信息(由第三中间签名s1至s2组成)给第一参与方。
步骤412:第一参与方根据签名输出方标识确定待签名消息的完整签名在第二参与方生成,则根据接收的中间信息生成第一中间签名s3至s5。
具体的,第一参与方用公式(6)生成第一中间签名s3至s5。
步骤413:第一参与方将第一中间签名s3至s5发送给第二参与方。
步骤414:第二参与方基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名s。
具体的,第二部分签名s的计算公式请参见公式(11)。
步骤415:第二参与方判断第二部分签名s是否不为0,且不等于n-r。
若第二部分签名s不为0,且不等于n-r,则执行步骤416。
若第二部分签名s为0或等于n-r,则重新从步骤401开始执行,直到第二部分签名s不为0,且不等于n-r。
步骤416:第二参与方根据第一部分签名r和第二部分签名s,生成待签名消息的完整签名(r,s)。
基于同一发明构思,本发明一实施例中提供用于双方协同生成SM2算法的签名装置,该装置的协同签名方法的具体实施方式可参见第一参与方角度的协同签名方法实施例部分的描述,重复之处不再赘述,请参见图6,该装置包括:
接收单元601,用于接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,所述中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;
确定单元602,用于基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方;
计算单元603,用于若确定由所述第一参与方输出所述完整签名,则基于所述第一参与方持有的第一子私钥及所述中间信息生成所述待签名消息的第二部分签名;其中,所述中间信息中还携带有所述第二参与方生成的所述待签名消息的第一部分签名;在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述第一部分签名。
可选的,接收第二参与方发送的根据签名输出方标识确定的中间信息之前,所述计算单元603还用于:
按照第一公式对选取的第一随机数及所述第一参与方的第一子公钥、所述第二参与方的第二子公钥以及指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,所述第一随机数为至少三个随机数,所述第一椭圆曲线随机点为所述指定椭圆曲线的加法群上的至少三个元素,所述第一随机数与所述第一椭圆曲线随机点的数量相同,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方,使所述第二参与方能够基于所述消息摘要及所述第一椭圆曲线随机点生成所述第一部分签名。
可选的,将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方之前,所述计算单元603还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述待签名消息的消息摘要;其中,所述指定特征数据至少包括与所述指定椭圆曲线相关的参数,及由所述第一子公钥与所述第二子公钥所构成的完整签名公钥被混淆后的值。
可选的,所述第一公式,具体为:
其中,R1至R3为所述第一椭圆曲线随机点,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为所述基点G的阶,P1、P2分别为所述第一子公钥及所述第二子公钥,P1是由所述第一参与方用所述第一子私钥与所述基点G计算得到的,P2是由所述第二参与方用所述第二子私钥与所述基点G计算得到的,d1为所述第一子私钥。
可选的,所述中间信息,具体为:
若所述签名输出方标识表明应在所述第一参与方输出所述完整签名,则所述中间信息由所述第一部分签名及第二中间签名构成;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥所产生的四个值;
若所述签名输出方标识表明应在所述第二参与方输出所述完整签名,则所述中间信息为第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值。
可选的,基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方之后,所述计算单元603还用于:
若确定由所述第二参与方输出所述完整签名,则用第二公式对所述第一子私钥及所述中间信息进行计算,生成第一中间签名;其中,所述第一中间签名为所述第一参与方混淆所述第一子私钥产生的三个值,所述第二公式用于约束所述第一中间签名的取值范围;
发送所述第一中间签名给所述第二参与方,使所述第二参与方能够根据所述第二子私钥、所述第一中间签名及所述待签名消息的第一部分签名生成所述待签名消息的第二部分签名,以确定所述待签名消息的完整签名。
可选的,所述第二公式具体为:
其中,s3至s5为所述第一中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
可选的,基于所述第一参与方持有的第一子私钥及所述中间信息生成所述第二部分签名,包括:
采用第三公式对所述第一子私钥、所述第一部分签名及所述第二中间签名进行计算,生成所述待签名消息的第二部分签名;其中,所述第二中间签名是混淆所述第二子私钥后产生的四个值,所述第三公式用于约束所述第二部分签名的取值范围。
可选的,所述第三公式具体为:
其中,s为所述待签名消息的第二部分签名,s11-s14为所述第二中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1mod n,mod为求模运算。
基于同一发明构思,本发明一实施例中提供用于双方协同生成SM2算法的签名装置,该装置的协同签名方法的具体实施方式可参见第二参与方角度的协同签名方法实施例部分的描述,重复之处不再赘述,请参见图7,该装置包括:
接收单元701,用于接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名;其中,所述签名输出方标识用于标识输出所述待签名消息的完整签名的参与方,所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;
确定单元702,用于在确定所述第一部分签名为非零值时,根据所述签名输出方标识确定输出所述完整签名的参与方;
计算单元703,用于若确定由所述第一参与方输出所述完整签名,则基于所述第二参与方所持有的第二子私钥及所述第一部分签名生成第二中间签名;并发送由所述第一部分签名及所述第二中间签名组成的中间信息给所述第一参与方,使所述第一参与方能够根据所述中间信息生成所述待签名消息的第二部分签名,以确定所述完整签名;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥产生的四个值。
可选的,所述接收单元701具体用于:
接收所述签名输出方标识、所述消息摘要及所述第一椭圆曲线随机点;
采用指定算法生成第二随机数;其中,所述第二随机数的数量比接收的所述第一圆曲线随机点的数量多一个;
采用第四公式对所述第二随机数及所述第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点;
采用第五公式对所述第二椭圆曲线随机点的横坐标以及所述消息摘要转化成的整数进行模运算,获得所述第一部分签名。
可选的,所述第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第二椭圆曲线随机点,x1和y1分别为所述第二椭圆曲线随机点的横纵坐标,R1至R3为所述第一椭圆曲线随机点,G为所述指定椭圆曲线的基点,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为所述第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算。
可选的,所述第五公式,具体为:
r=(x1+e)mod n
其中,r为所述第一部分签名,x1为所述第二椭圆曲线随机点的横坐标,e为所述消息摘要由字节串转化成的整数,n为所述指定椭圆曲线的基点G的阶,mod为求模运算。
可选的,根据所述签名输出方标识确定输出所述待签名消息的完整签名的参与方之后,所述计算单元703还用于:
若确定由所述第二参与方输出所述完整签名,则基于所述第二子私钥及所述第一部分签名生成第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
发送由所述第三中间签名构成的中间信息给所述第一参与方,使所述第一参与方能够根据所述第一子私钥及所述中间信息生成第一中间签名;其中,所述第一中间签名为所述第一参与方基于所述第一子私钥及所述第三中间签名产生的三个值;
接收所述第一参与方发送的所述第一中间签名,并基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,所述计算单元703还用于:
若确定由所述第二参与方输出所述完整签名,则采用第七公式,对所述第二子私钥及所述第一部分签名进行计算,生成第三中间签名;
具体的,所述第七公式为:
其中,s1至s2为所述第三中间签名,k 4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,所述计算单元703具体用于:
采用第八公式,对第二随机数中的部分随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二部分签名;
具体的,所述第八公式为:
其中,s为所述第二部分签名,s3至s5为所述第三中间签名,k5和k6为所述第二随机数中的部分随机数,且k5和k6∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2为所述第二子私钥,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
可选的,所述计算单元703还用于:
采用第六公式,对所述第二随机数、所述第二子私钥及所述第一部分签名进行计算,生成所述第二中间签名;
具体的,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
基于同一发明构思,本发明实施例中提供了用于双方协同生成SM2算法的签名装置,包括:至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上所述的第一参与方和/或第二参与方的协同签名方法。
基于同一发明构思,本发明实施例还提一种计算机可读存储介质,包括:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上所述的第一参与方和/或第二参与方的协同签名方法。
在本发明提供的实施例中,通信双方(第一参与方和第二参与方)使用各自的签名子私钥进行协同签名的过程中,在第一参与方接收到第二参与方发送的根据签名输出方标识确定的中间信息之后;基于第一参与方发送给第二参与方的签名输出方标识,确定输出待签名消息的完整签名的参与方为第一参与方后,第一参与方用持有的第一子私钥及中间信息生成待签名消息的第二部分签名;其中,中间信息中还携带有第二参与方生成的待签名消息的第一部分签名;并在确定第二部分签名为非零值,且不等于n-r时,获得由第一部分签名及第二部分签名构成的完整签名;其中,n为指定椭圆曲线的基点的阶,r为第一部分签名,中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息。使得第一参与方与第二参与方能通过这种交互联合的方式完成协同签名。当攻击者获取其中任何一方的签名子私钥,都无法计算完整的签名私钥。从而使得在使用本发明实施例中的方法后,在不采用密码硬件的情况下,也能确保用户的私钥不被盗,提高安全性。
本领域内的技术人员应明白,本发明实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (22)
1.双方协同生成SM2算法的签名方法,应用于第一参与方,其特征在于,包括:
接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,所述中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;
基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方;
若确定由所述第一参与方输出所述完整签名,则基于所述第一参与方持有的第一子私钥及所述中间信息生成所述待签名消息的第二部分签名;其中,所述中间信息中还携带有所述第二参与方生成的所述待签名消息的第一部分签名;在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为指定椭圆曲线的基点的阶,r为所述第一部分签名;
其中,接收第二参与方发送的根据签名输出方标识确定的中间信息之前,还包括:
按照第一公式对选取的第一随机数及所述第一参与方的第一子公钥、所述第二参与方的第二子公钥以及所述指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,所述第一随机数为至少三个随机数,所述第一椭圆曲线随机点为所述指定椭圆曲线的加法群上的至少三个元素,所述第一随机数与所述第一椭圆曲线随机点的数量相同,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方,使所述第二参与方能够基于所述消息摘要及所述第一椭圆曲线随机点生成所述第一部分签名;
其中,所述第一公式,具体为:
其中,R1至R3为所述第一椭圆曲线随机点,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为所述基点G的阶,P1、P2分别为所述第一子公钥及所述第二子公钥,P1是由所述第一参与方用所述第一子私钥与所述基点G计算得到的,P2是由所述第二参与方用所述第二子私钥与所述基点G计算得到的,d1为所述第一子私钥。
2.如权利要求1所述的方法,其特征在于,将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方之前,还包括:
对所述待签名消息及指定特征数据进行哈希计算,获得所述待签名消息的消息摘要;其中,所述指定特征数据至少包括与所述指定椭圆曲线相关的参数,及由所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
3.如权利要求1或2所述的方法,其特征在于,所述中间信息,具体为:
若所述签名输出方标识表明应在所述第一参与方输出所述完整签名,则所述中间信息由所述第一部分签名及第二中间签名构成;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥所产生的四个值;
若所述签名输出方标识表明应在所述第二参与方输出所述完整签名,则所述中间信息为第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
其中,所述第二中间签名采用第六公式生成,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算;
所述第三中间签名采用第七公式生成,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
4.如权利要求3所述的方法,其特征在于,基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方之后,还包括:
若确定由所述第二参与方输出所述完整签名,则用第二公式对所述第一子私钥及所述中间信息进行计算,生成第一中间签名;其中,所述第一中间签名为所述第一参与方混淆所述第一子私钥产生的三个值,所述第二公式用于约束所述第一中间签名的取值范围;
发送所述第一中间签名给所述第二参与方,使所述第二参与方能够根据所述第二子私钥、所述第一中间签名及所述待签名消息的第一部分签名生成所述待签名消息的第二部分签名,以确定所述待签名消息的完整签名;
其中,所述第二公式具体为:
其中,s3至s5为所述第一中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
5.如权利要求3所述的方法,其特征在于,基于所述第一参与方持有的第一子私钥及所述中间信息生成所述第二部分签名,包括:
采用第三公式对所述第一子私钥、所述第一部分签名及所述第二中间签名进行计算,生成所述待签名消息的第二部分签名;其中,所述第二中间签名是混淆所述第二子私钥后产生的四个值,所述第三公式用于约束所述第二部分签名的取值范围;
其中,所述第三公式具体为:
其中,s为所述待签名消息的第二部分签名,s11至s14为所述第二中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1mod n,mod为求模运算。
6.双方协同生成SM2算法的签名方法,应用于第二参与方,其特征在于,包括:
接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名;其中,所述签名输出方标识用于标识输出所述待签名消息的完整签名的参与方,所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;
在确定所述第一部分签名为非零值时,根据所述签名输出方标识确定输出所述完整签名的参与方;
若确定由所述第一参与方输出所述完整签名,则基于所述第二参与方所持有的第二子私钥及所述第一部分签名生成第二中间签名;并发送由所述第一部分签名及所述第二中间签名组成的中间信息给所述第一参与方,使所述第一参与方能够根据所述中间信息生成所述待签名消息的第二部分签名,以确定所述完整签名;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥产生的四个值;
其中,所述第一椭圆曲线随机点是采用第一公式生成的,所述第一公式为:
其中,R1至R3为第一椭圆曲线随机点,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为基点G的阶,P1、P2分别为第一子公钥及第二子公钥,P1是由第一参与方用第一子私钥与基点G计算得到的,P2是由第二参与方用第二子私钥与基点G计算得到的,d1为第一子私钥;
所述第二中间签名是采用第六公式生成的,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
7.如权利要求6所述的方法,其特征在于,接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名,包括:
接收所述签名输出方标识、所述消息摘要及所述第一椭圆曲线随机点;
采用指定算法生成所述第二随机数;其中,所述第二随机数的数量比接收的所述第一椭圆曲线随机点的数量多一个;
采用第四公式对所述第二随机数及所述第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点;
采用第五公式对所述第二椭圆曲线随机点的横坐标以及所述消息摘要转化成的整数进行模运算,获得所述第一部分签名;
其中,所述第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第二椭圆曲线随机点,x1和y1分别为所述第二椭圆曲线随机点的横纵坐标,R1至R3为所述第一椭圆曲线随机点,G为所述指定椭圆曲线的基点,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为所述第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第五公式,具体为:
r=(x1+e)modn
其中,r为所述第一部分签名,x1为所述第二椭圆曲线随机点的横坐标,e为所述消息摘要由字节串转化成的整数,n为所述指定椭圆曲线的基点G的阶,mod为求模运算。
8.如权利要求6或7所述的方法,其特征在于,根据所述签名输出方标识确定输出所述待签名消息的完整签名的参与方之后,还包括:
若确定由所述第二参与方输出所述完整签名,则基于所述第二子私钥及所述第一部分签名生成第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
发送由所述第三中间签名构成的中间信息给所述第一参与方,使所述第一参与方能够根据所述第一子私钥及所述中间信息生成第一中间签名;其中,所述第一中间签名为所述第一参与方基于所述第一子私钥及所述第三中间签名产生的三个值;
接收所述第一参与方发送的所述第一中间签名,并基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名;
其中,基于所持有的第二子私钥及所述第一部分签名生成第三中间签名,包括:
若确定由所述第二参与方输出所述完整签名,则采用第七公式,对所述第二子私钥及所述第一部分签名进行计算,生成第三中间签名;
具体的,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算;
所述第一中间签名是采用第二公式确定的,所述第二公式为:
s3至s5为第一中间签名,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为指定椭圆曲线的基点G的阶,d1 -1为第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
10.双方协同生成SM2算法的签名装置,应用于第一参与方,其特征在于,包括:
接收单元,用于接收第二参与方发送的根据签名输出方标识确定的中间信息;其中,所述中间信息中至少携带有与生成待签名消息的第二部分签名相关的部分信息;
确定单元,用于基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方;
计算单元,用于若确定由所述第一参与方输出所述完整签名,则基于所述第一参与方持有的第一子私钥及所述中间信息生成所述待签名消息的第二部分签名;其中,所述中间信息中还携带有所述第二参与方生成的所述待签名消息的第一部分签名;在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为指定椭圆曲线的基点的阶,r为所述第一部分签名;
所述计算单元还用于:接收第二参与方发送的根据签名输出方标识确定的中间信息之前,按照第一公式对选取的第一随机数及所述第一参与方的第一子公钥、所述第二参与方的第二子公钥以及所述指定椭圆曲线的基点进行计算,获得第一椭圆曲线随机点;其中,所述第一随机数为至少三个随机数,所述第一椭圆曲线随机点为所述指定椭圆曲线的加法群上的至少三个元素,所述第一随机数与所述第一椭圆曲线随机点的数量相同,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方,使所述第二参与方能够基于所述消息摘要及所述第一椭圆曲线随机点生成所述第一部分签名;
其中,所述第一公式,具体为:
其中,R1至R3为所述第一椭圆曲线随机点,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为所述基点G的阶,P1、P2分别为所述第一子公钥及所述第二子公钥,P1是由所述第一参与方用所述第一子私钥与所述基点G计算得到的,P2是由所述第二参与方用所述第二子私钥与所述基点G计算得到的,d1为所述第一子私钥。
11.如权利要求10所述的装置,其特征在于,将所述签名输出方标识、所述待签名消息的消息摘要及所述第一椭圆曲线随机点发送给所述第二参与方之前,所述计算单元还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述待签名消息的消息摘要;其中,所述指定特征数据至少包括与所述指定椭圆曲线相关的参数,及由所述第一子公钥与所述第二子公钥所构成的完整签名公钥被混淆后的值。
12.如权利要求10或11所述的装置,其特征在于,所述中间信息,具体为:
若所述签名输出方标识表明应在所述第一参与方输出所述完整签名,则所述中间信息由所述第一部分签名及第二中间签名构成;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥所产生的四个值;
若所述签名输出方标识表明应在所述第二参与方输出所述完整签名,则所述中间信息为第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
其中,所述第二中间签名采用第六公式生成,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算;
所述第三中间签名采用第七公式生成,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
13.如权利要求12所述的装置,其特征在于,基于所述签名输出方标识,确定输出所述待签名消息的完整签名的参与方之后,所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则用第二公式对所述第一子私钥及所述中间信息进行计算,生成第一中间签名;其中,所述第一中间签名为所述第一参与方混淆所述第一子私钥产生的三个值,所述第二公式用于约束所述第一中间签名的取值范围;
发送所述第一中间签名给所述第二参与方,使所述第二参与方能够根据所述第二子私钥、所述第一中间签名及所述待签名消息的第一部分签名生成所述待签名消息的第二部分签名,以确定所述待签名消息的完整签名;
其中,所述第二公式具体为:
其中,s3至s5为所述第一中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
14.如权利要求12所述的装置,其特征在于,基于所述第一参与方持有的第一子私钥及所述中间信息生成所述第二部分签名,包括:
采用第三公式对所述第一子私钥、所述第一部分签名及所述第二中间签名进行计算,生成所述待签名消息的第二部分签名;其中,所述第二中间签名是混淆所述第二子私钥后产生的四个值,所述第三公式用于约束所述第二部分签名的取值范围;
其中,所述第三公式具体为:
其中,s为所述待签名消息的第二部分签名,s11-s14为所述第二中间签名,k1至k3为所述第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,d1 -1为所述第一子私钥d1在有限素域Fp上的逆元d1 -1mod n,mod为求模运算。
15.双方协同生成SM2算法的签名装置,应用于第二参与方,其特征在于,包括:
接收单元,用于接收第一参与方发送的签名输出方标识、待签名消息的消息摘要及第一椭圆曲线随机点,基于所述消息摘要及所述第一椭圆曲线随机点生成所述待签名消息的第一部分签名;其中,所述签名输出方标识用于标识输出所述待签名消息的完整签名的参与方,所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;
确定单元,用于在确定所述第一部分签名为非零值时,根据所述签名输出方标识确定输出所述完整签名的参与方;
计算单元,用于若确定由所述第一参与方输出所述完整签名,则基于所述第二参与方所持有的第二子私钥及所述第一部分签名生成第二中间签名;并发送由所述第一部分签名及所述第二中间签名组成的中间信息给所述第一参与方,使所述第一参与方能够根据所述中间信息生成所述待签名消息的第二部分签名,以确定所述完整签名;其中,所述第二中间签名为所述第二参与方混淆所述第二子私钥产生的四个值;
其中,所述第一椭圆曲线随机点是采用第一公式生成的,所述第一公式为:
其中,R1至R3为第一椭圆曲线随机点,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,G为所述指定椭圆曲线的基点,n为基点G的阶,P1、P2分别为第一子公钥及第二子公钥,P1是由第一参与方用第一子私钥与基点G计算得到的,P2是由第二参与方用第二子私钥与基点G计算得到的,d1为第一子私钥;
所述第二中间签名是采用第六公式生成的,所述第六公式为:
其中,s11至s14为所述第二中间签名,k4至k7为第二随机数,且k4至k7∈[1,n-1]范围内的整数,r为所述第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第一子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算。
16.如权利要求15所述的装置,其特征在于,所述接收单元具体用于:
接收所述签名输出方标识、所述消息摘要及所述第一椭圆曲线随机点;
采用指定算法生成所述第二随机数;其中,所述第二随机数的数量比接收的所述第一椭圆曲线随机点的数量多一个;
采用第四公式对所述第二随机数及所述第一椭圆曲线随机点进行计算,生成第二椭圆曲线随机点;
采用第五公式对所述第二椭圆曲线随机点的横坐标以及所述消息摘要转化成的整数进行模运算,获得所述第一部分签名;
其中,所述第四公式,具体为:
(x1,y1)=k4[*]R1[+](k5×d2)[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第二椭圆曲线随机点,x1和y1分别为所述第二椭圆曲线随机点的横纵坐标,R1至R3为所述第一椭圆曲线随机点,G为所述指定椭圆曲线的基点,k4至k7为所述第二随机数,且k4至k7∈[1,n-1]范围内的整数,d2为所述第二子私钥,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第五公式,具体为:
r=(x1+e)mod n
其中,r为所述第一部分签名,x1为所述第二椭圆曲线随机点的横坐标,e为所述消息摘要由字节串转化成的整数,n为所述指定椭圆曲线的基点G的阶,mod为求模运算。
17.如权利要求15或16所述的装置,其特征在于,根据所述签名输出方标识确定输出所述待签名消息的完整签名的参与方之后,所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则基于所述第二子私钥及所述第一部分签名生成第三中间签名;其中,所述第三中间签名为所述第二参与方混淆所述第二子私钥产生的两个值;
发送由所述第三中间签名构成的中间信息给所述第一参与方,使所述第一参与方能够根据所述第一子私钥及所述中间信息生成第一中间签名;其中,所述第一中间签名为所述第一参与方基于所述第一子私钥及所述第三中间签名产生的三个值;
接收所述第一参与方发送的所述第一中间签名,并基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,获得由所述第一部分签名及所述第二部分签名构成的所述完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名;
所述计算单元还用于:
若确定由所述第二参与方输出所述完整签名,则采用第七公式,对所述第二子私钥及所述第一部分签名进行计算,生成第三中间签名;
具体的,所述第七公式为:
其中,s1至s2为所述第三中间签名,k4和k7为所述第二随机数中的部分随机数,且k4和k7∈[1,n-1]范围内的整数,r为所述待签名消息的第一部分签名,n为所述指定椭圆曲线的基点G的阶,d2 -1为所述第二子私钥d2在有限素域Fp上的逆元d2 -1 mod n,mod为求模运算;
其中,所述第一中间签名是采用第二公式确定的,所述第二公式为:
s3至s5为第一中间签名,k1至k3为第一随机数,且k1至k3∈[1,n-1]范围内的整数,n为指定椭圆曲线的基点G的阶,d1 -1为第一子私钥d1在有限素域Fp上的逆元d1 -1 mod n,mod为求模运算。
19.双方协同生成SM2算法的签名装置,其特征在于,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求1-5任一项所述的方法。
20.双方协同生成SM2算法的签名装置,其特征在于,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求6-9任一项所述的方法。
21.一种计算机可读存储介质,其特征在于:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-5中任一项所述的方法。
22.一种计算机可读存储介质,其特征在于:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求6-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811148390.1A CN109245903B (zh) | 2018-09-29 | 2018-09-29 | 双方协同生成sm2算法的签名方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811148390.1A CN109245903B (zh) | 2018-09-29 | 2018-09-29 | 双方协同生成sm2算法的签名方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109245903A CN109245903A (zh) | 2019-01-18 |
CN109245903B true CN109245903B (zh) | 2021-10-01 |
Family
ID=65054662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811148390.1A Active CN109245903B (zh) | 2018-09-29 | 2018-09-29 | 双方协同生成sm2算法的签名方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109245903B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110535635B (zh) * | 2019-07-19 | 2022-06-17 | 北京向芯力科技有限公司 | 一种支持信息隐藏的协同签名方法与系统 |
CN110324357B (zh) * | 2019-07-25 | 2021-09-24 | 郑州师范学院 | 数据发送方法及装置、数据接收方法及装置 |
CN112632630A (zh) * | 2019-10-08 | 2021-04-09 | 航天信息股份有限公司 | 一种基于sm2的协同签名计算方法及装置 |
CN112887097A (zh) * | 2019-11-29 | 2021-06-01 | 航天信息股份有限公司 | 基于sm2椭圆曲线的签名方法、相关装置、及存储介质 |
CN112311549A (zh) * | 2020-03-26 | 2021-02-02 | 神州融安科技(北京)有限公司 | 生成或协助签名方法、装置、系统、电子设备及存储介质 |
CN112653554B (zh) * | 2020-12-30 | 2023-03-31 | 成都卫士通信息产业股份有限公司 | 一种签名方法、系统、设备及可读存储介质 |
CN114567448B (zh) * | 2022-04-29 | 2022-08-02 | 华南师范大学 | 一种协同签名方法以及协同签名系统 |
CN116961925B (zh) * | 2023-09-18 | 2023-12-19 | 北京信安世纪科技股份有限公司 | 签名方法、系统、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103546288A (zh) * | 2013-09-25 | 2014-01-29 | 中国科学院数据与通信保护研究教育中心 | Sm2数字签名生成算法的实现方法及装置 |
WO2014120121A1 (en) * | 2013-01-29 | 2014-08-07 | Certicom Corp. | Modified sm2 elliptic curve signature algorithm supporting message recovery |
CN104243456A (zh) * | 2014-08-29 | 2014-12-24 | 中国科学院信息工程研究所 | 适用于云计算的基于sm2算法的签名及解密方法和系统 |
CN106685651A (zh) * | 2016-12-22 | 2017-05-17 | 北京信安世纪科技有限公司 | 一种客户端和服务端协作生成数字签名的方法 |
CN107017993A (zh) * | 2017-04-01 | 2017-08-04 | 北京江南天安科技有限公司 | 一种多方联合密钥产生和数字签名方法及系统 |
CN107196763A (zh) * | 2017-07-06 | 2017-09-22 | 数安时代科技股份有限公司 | Sm2算法协同签名及解密方法、装置与系统 |
CN107634836A (zh) * | 2017-09-05 | 2018-01-26 | 何德彪 | 一种sm2数字签名生成方法及系统 |
-
2018
- 2018-09-29 CN CN201811148390.1A patent/CN109245903B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014120121A1 (en) * | 2013-01-29 | 2014-08-07 | Certicom Corp. | Modified sm2 elliptic curve signature algorithm supporting message recovery |
CN103546288A (zh) * | 2013-09-25 | 2014-01-29 | 中国科学院数据与通信保护研究教育中心 | Sm2数字签名生成算法的实现方法及装置 |
CN104243456A (zh) * | 2014-08-29 | 2014-12-24 | 中国科学院信息工程研究所 | 适用于云计算的基于sm2算法的签名及解密方法和系统 |
CN106685651A (zh) * | 2016-12-22 | 2017-05-17 | 北京信安世纪科技有限公司 | 一种客户端和服务端协作生成数字签名的方法 |
CN107017993A (zh) * | 2017-04-01 | 2017-08-04 | 北京江南天安科技有限公司 | 一种多方联合密钥产生和数字签名方法及系统 |
CN107196763A (zh) * | 2017-07-06 | 2017-09-22 | 数安时代科技股份有限公司 | Sm2算法协同签名及解密方法、装置与系统 |
CN107634836A (zh) * | 2017-09-05 | 2018-01-26 | 何德彪 | 一种sm2数字签名生成方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109245903A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109245903B (zh) | 双方协同生成sm2算法的签名方法、装置及存储介质 | |
CN109309569B (zh) | 基于sm2算法的协同签名的方法、装置及存储介质 | |
CN107196763B (zh) | Sm2算法协同签名及解密方法、装置与系统 | |
CN107579819B (zh) | 一种sm9数字签名生成方法及系统 | |
CN107634836B (zh) | 一种sm2数字签名生成方法及系统 | |
CN107707358B (zh) | 一种ec-kcdsa数字签名生成方法及系统 | |
Liu et al. | A Survey of Public Auditing for Shared Data Storage with User Revocation in Cloud Computing. | |
CN113259329B (zh) | 一种数据不经意传输方法、装置、电子设备及存储介质 | |
CN109150897B (zh) | 一种端到端的通信加密方法及装置 | |
CN107425971B (zh) | 无证书的数据加/解密方法和装置、终端 | |
CN112822014A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN109818741B (zh) | 一种基于椭圆曲线的解密计算方法及装置 | |
CN109767218B (zh) | 区块链证书处理方法及系统 | |
CN108833095B (zh) | 区块链中的行为验证方法、节点、系统及电子设备 | |
CN112632630A (zh) | 一种基于sm2的协同签名计算方法及装置 | |
CN112564907A (zh) | 密钥生成方法及装置、加密方法及装置、解密方法及装置 | |
CN112241527B (zh) | 物联网终端设备的密钥生成方法、系统及电子设备 | |
CN111342955A (zh) | 一种通信方法及其设备、计算机存储介质 | |
CN107104788B (zh) | 终端及其不可抵赖的加密签名方法和装置 | |
CN105530089B (zh) | 属性基加密方法和装置 | |
CN108055134B (zh) | 椭圆曲线点数乘及配对运算的协同计算方法及系统 | |
CN106453253A (zh) | 一种高效的基于身份的匿签密方法 | |
CN111565108B (zh) | 签名处理方法、装置及系统 | |
CN112737783B (zh) | 一种基于sm2椭圆曲线的解密方法及设备 | |
CN111245594B (zh) | 一种基于同态运算的协同签名方法及系统 |
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 |