CN109309569B - 基于sm2算法的协同签名的方法、装置及存储介质 - Google Patents

基于sm2算法的协同签名的方法、装置及存储介质 Download PDF

Info

Publication number
CN109309569B
CN109309569B CN201811147472.4A CN201811147472A CN109309569B CN 109309569 B CN109309569 B CN 109309569B CN 201811147472 A CN201811147472 A CN 201811147472A CN 109309569 B CN109309569 B CN 109309569B
Authority
CN
China
Prior art keywords
signature
elliptic curve
private key
sub
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
Application number
CN201811147472.4A
Other languages
English (en)
Other versions
CN109309569A (zh
Inventor
刘婷
汪宗斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Infosec Technologies Co Ltd
Original Assignee
Beijing Infosec Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Infosec Technologies Co Ltd filed Critical Beijing Infosec Technologies Co Ltd
Priority to CN201811147472.4A priority Critical patent/CN109309569B/zh
Publication of CN109309569A publication Critical patent/CN109309569A/zh
Application granted granted Critical
Publication of CN109309569B publication Critical patent/CN109309569B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0863Generation of secret information including derivation or calculation of cryptographic keys or passwords involving passwords or one-time passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3066Public 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic 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/3247Cryptographic 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

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)

Abstract

本发明公开了基于SM2算法的协同签名的方法、装置及存储介质,用以解决现有技术中存在的签名消息易被伪造的技术问题。第一参与方实施的签名方法包括:接收第二参与方发送的由第二随机数确定的第二椭圆曲线随机点及混淆所持有的第二子私钥所产生的第二中间签名;根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;在确定第一部分签名为非零值时,基于所持有的第一子私钥、第一部分签名及第二中间签名生成第一中间签名;将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能够基于第二子私钥及第一中间签名生成待签名消息的第二部分签名,以由第一部分签名及第二部分签名构成待签名消息的完整签名。

Description

基于SM2算法的协同签名的方法、装置及存储介质
技术领域
本发明涉及信息安全与密码学领域,尤其是涉及基于SM2算法的协同签名的方法、装置及存储介质。
背景技术
在信息安全与密码学领域中,PKI(Public Key Infrastructure,公钥基础设施)技术自20世纪80年代出现以来,已经成为越来越广泛使用的通用安全技术。作为一种技术体系,以公钥密码体制为基础的PKI系统,对网络传输层和应用层的数据进行加密、解密、签名、验证,有效保证了用户身份的真实性、信息的机密性、完整性和签名者的不可否认性等。
基于PKI的应用,实体的私钥保护问题至关重要。实体所拥有的私钥,只有实体自己才能访问,其他任何实体(包括CA)都不能访问。比如,在桌面应用场景中,通常给用户配备智能密码钥匙、智能卡等安全硬件外设来存储用户私钥,客户端软件通过调用这类安全外设中的私钥,并在其中独立进行加解密或数字签名操作,来保障交易数据的安全。
随着最近几年新技术的应用越来越成熟,特别是移动智能终端的普及与云计算的部署,信息安全面临着新的挑战。比如,对于智能手机来说,当用户使用手机支付时,增加额外的安全硬件外设,这会给用户带来很大地不便,也与智能手机的方便易用这一设计目标相违背。另一方面,与大多数智能手机配套的Android操作系统是开源的,针对它的安全攻击层出不穷。在移动端若以软件形式存储完整的私钥,很容易被攻击者窃取,从而导致安全事故。
为了在移动智能终端或云环境中不泄露完整的私钥,在身份认证、信息防篡改和服务的不可抵赖性等方面,目前出现了通信双方协同签名的技术方案。即双方各自产生部分私钥,双方都不知道完整的签名私钥,通过交互联合完成整个签名过程。协同签名解决了完整的签名私钥在“瘦终端”环境下容易被窃取的问题。但是,现有的协同签名方案,通信一方在将消息摘要发送给另一方的过程中,消息摘要可能被攻击者替换,导致攻击者可以伪造签名。
鉴于此,如何防止伪造签名成为一个亟待解决的技术问题。
发明内容
本发明提供一种基于SM2算法的协同签名的方法、装置及存储介质,用以解决现有技术中存在的签名消息易被伪造的技术问题。
第一方面,为解决上述技术问题,本发明实施例提供的一种基于SM2算法的协同签名的方法,应用于进行协同签名的第一参与方,该方法的技术方案如下:
接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点是由所述第二参与方根据选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名;
在确定所述第一部分签名为非零值时,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成所述待签名消息的第一中间签名;其中,所述第一中间签名为所述第一子私钥被混淆后的三个值;
将所述第一部分签名及所述第一中间签名发送给所述第二参与方,使所述第二参与方能够基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。
由于第一参与方与第二参与方分别持有第一子私钥与第二子私钥,为了确定位于第一参与方的待签名消息的完整签名,需要第一参与方在接收到第二参与方发送的第二椭圆曲线随机点及第二中间签名之后,根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;基于所持有的第一子私钥、第一部分签名及第二中间签名,生成第一中间签名;并在确定第一部分签名为非零值时,将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名,以确定待签名消息的完整签名。由上述整个协同签名过程表明,即使是参与了协同签名的第二参与方也不知道第一参与方签署了什么消息,所以本发明的签名方案对于第二参与方来说具有盲签名的效果,在产生数字签名的过程中不会泄露第一参与方的隐私;并且由于通信双方持有各自的签名子私钥,使得攻击者即使获取到任何一方的签名子私钥,都无法伪造待签名消息的完整签名,从而实现了保护完整的签名私钥的技术效果。
可选的,接收所述第二参与方发送的第二椭圆曲线随机点及第二中间签名之前,还包括:
发送所述待签名消息的签名通知给所述第二参与方,使所述第二参与方收到所述签名通知后生成并发送所述第二椭圆曲线随机点及所述第二中间签名给所述第一参与方。
可选的,根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名之前,还包括:
对所述待签名消息及指定特征数据进行哈希计算,获得所述消息摘要;其中,所述指定特征数据至少包括所述指定椭圆曲线的相关参数及所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
可选的,根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名,包括:
采用指定算法生成第一随机数;其中,所述第一随机数的数量比接收的所述第二椭圆曲线随机点的数量多一个;
采用第一公式对所述第一随机数及所述第二椭圆曲线随机点进行运算,获得指定椭圆曲线上的第一椭圆曲线随机点;所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第二公式对所述第一椭圆曲线随机点的横坐标与所述消息摘要进行运算,获得所述第一部分签名。
可选的,所述第一公式具体为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第一椭圆曲线随机点,x1和y1分别为所述第一椭圆曲线随机点的横纵坐标,k4至k7为所述第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为所述第二椭圆曲线随机点,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第二公式具体为:
r=(x1+e)modn;
其中,r为所述待签名消息的第一部分签名,x1为所述第一椭圆曲线随机点的横坐标,e为所述消息摘要转换而成的整数,n为所述指定椭圆曲线的基点的阶,mod表示求模运算。
可选的,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成第一中间签名,具体包括:
采用第三公式对所述第一随机数、所述第一部分签名及所述第一参与方的第一子私钥进行模运算,获得所述第一中间签名;其中,所述第三公式用于约束所述第一中间签名的取值范围;所述第三公式具体为:
Figure BDA0001817128590000041
其中,s3至s5为所述第一中间签名,k4至k7为所述第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,r为所述待签名消息的第一部分签名,s1至s2为所述第二中间签名,
Figure BDA0001817128590000051
为所述第一子私钥d1在有限素域Fp上的逆元
Figure BDA0001817128590000052
mod为求模运算。
第二方面,为解决上述技术问题,本发明实施例提供的一种基于SM2算法的协同签名的方法,应用于进行协同签名的第二参与方,该方法的技术方案如下:
在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点为所述第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
将所述第二椭圆曲线随机点及所述第二中间签名发送给所述第一参与方,使所述第一参与方能够生成所述待签名消息的第一部分签名及第一中间签名;其中,所述第一中间签名是所述第一参与方所持有的第一子私钥被混淆后的三个值;
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,计算第二椭圆曲线随机点及第二中间签名,包括:
采用指定算法生成第二随机数;其中,所述第二随机数为至少三个随机数;
采用第四公式将第二随机数分别作用于所述第一参与方的第一子公钥、所述第二参与方的第二子公钥及所述指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,所述第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;所述第四公式用于将所述第二椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第五公式对第二随机数中的部分随机数及所述第二子私钥进行模运算,获得第二中间签名。
可选的,所述第四公式具体为:
Figure BDA0001817128590000061
其中,R1至R3为所述第二椭圆曲线随机点,k1至k3为所述第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为所述指定椭圆曲线的基点,P1、P2分别为所述第一参与方及所述第二参与方的所述第一子公钥及第二子公钥,P1为所述第一参与方所述第一子私钥与所述基点G计算得到的,P2为所述第二参与方用所述第二子私钥与所述基点G计算得到的,d2为所述第二子私钥。
可选的,所述第五公式具体为:
Figure BDA0001817128590000062
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,
Figure BDA0001817128590000063
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000064
mod为求模运算。
可选的,接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名,包括:
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名;
采用第六公式,根据所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名。
可选的,所述第六公式具体为:
Figure BDA0001817128590000065
其中,s为所述待签名消息的第二部分签名,s3至s5为所述第一中间签名,k2为所述第二随机数中的部分随机数,且k2的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,
Figure BDA0001817128590000071
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000072
mod为求模运算。
第三方面,本发明实施例提供了一种用于基于SM2算法的协同签名的装置,应用于进行协同签名的第一参与方,该装置包括:
接收单元,用于接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点是由所述第二参与方根据选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
生成单元,用于根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名;
所述生成单元,还用于在确定所述第一部分签名为非零值时,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成所述待签名消息的第一中间签名;其中,所述第一中间签名为所述第一子私钥被混淆后的三个值;
发送单元,用于将所述第一部分签名及所述第一中间签名发送给所述第二参与方,使所述第二参与方能够基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。
可选的,在接收所述第二参与方发送的第二椭圆曲线随机点及第二中间签名之前,所述发送单元还用于:
发送所述待签名消息的签名通知给所述第二参与方,使所述第二参与方收到所述签名通知后生成并发送所述第二椭圆曲线随机点及所述第二中间签名给所述第一参与方。
可选的,所述生成单元还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述消息摘要;其中,所述指定特征数据至少包括所述指定椭圆曲线的相关参数及所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
可选的,所述生成单元具体用于:
采用指定算法生成第一随机数;其中,所述第一随机数的数量比接收的所述第二椭圆曲线随机点的数量多一个;
采用第一公式对所述第一随机数及所述第二椭圆曲线随机点进行运算,获得指定椭圆曲线上的第一椭圆曲线随机点;所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上。
采用第二公式对所述第一椭圆曲线随机点的横坐标与所述消息摘要进行运算,获得所述第一部分签名。
可选的,所述第一公式具体为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第一椭圆曲线随机点,x1和y1分别为所述第一椭圆曲线随机点的横纵坐标,k4至k7为所述第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为所述第二椭圆曲线随机点,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第二公式具体为:
r=(x1+e)modn;
其中,r为所述待签名消息的第一部分签名,x1为所述第一椭圆曲线随机点的横坐标,e为所述消息摘要转换而成的整数,n为所述指定椭圆曲线的基点的阶,mod表示求模运算。
可选的,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成第一中间签名,具体包括:
采用第三公式对所述第一随机数、所述第一部分签名及所述第一参与方的第一子私钥进行模运算,获得所述第一中间签名;其中,所述第三公式用于约束所述第一中间签名的取值范围;所述第三公式具体为:
Figure BDA0001817128590000091
其中,s3至s5为所述第一中间签名,k4至k7为所述第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,n为所述指定椭圆曲线基点G的阶,r为所述待签名消息的第一部分签名,s1至s2为所述第二中间签名,
Figure BDA0001817128590000092
为所述第一子私钥d1在有限素域Fp上的逆元
Figure BDA0001817128590000093
mod为求模运算。
第四方面,本发明实施例提供了一种用于基于SM2算法的协同签名的装置,应用于进行协同签名的第二参与方,该装置包括:
接收单元,用于在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点为所述第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
发送单元,用于将所述第二椭圆曲线随机点及所述第二中间签名发送给所述第一参与方,使所述第一参与方能够生成所述待签名消息的第一部分签名及第一中间签名;其中,所述第一中间签名是所述第一参与方所持有的第一子私钥被混淆后的三个值;
接收单元,用于接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名;
所述生成单元,还用于在确定所述第二部分签名为非零值,且不等于n-r时,确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,所述接收单元具体用于:
采用指定算法生成第二随机数;其中,所述第二随机数为至少三个随机数;
采用第四公式将第二随机数分别作用于所述第一参与方的第一子公钥、所述第二参与方的第二子公钥及所述指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,所述第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;所述第四公式用于将所述第二椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第五公式对第二随机数中的部分随机数及所述第二子私钥进行模运算,获得第二中间签名。
可选的,所述第四公式具体为:
Figure BDA0001817128590000101
其中,R1至R3为所述第二椭圆曲线随机点,k1至k3为所述第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为所述指定椭圆曲线的基点,P1、P2分别为所述第一参与方及所述第二参与方的所述第一子公钥及第二子公钥,P1为所述第一参与方所述第一子私钥与所述基点G计算得到的,P2为所述第二参与方用所述第二子私钥与所述基点G计算得到的,d2为所述第二子私钥。
可选的,所述第五公式具体为:
Figure BDA0001817128590000102
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,
Figure BDA0001817128590000103
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000104
mod为求模运算。
可选的,所述接收单元具体用于:
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名;
采用第六公式,根据所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名。
可选的,所述第六公式具体为:
Figure BDA0001817128590000113
其中,s为所述待签名消息的第二部分签名,s3至s5为所述第一中间签名,k2为所述第二随机数中的部分随机数,且k2的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,
Figure BDA0001817128590000111
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000112
mod为求模运算。
第五方面,本发明实施例还提供一种用于基于SM2算法的协同签名的装置,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上述第一方面所述的方法。
第六方面,本发明实施例还提供一种用于基于SM2算法的协同签名的装置,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上述第二方面所述的方法。
第七方面,本发明实施例还提供一种计算机可读存储介质,包括:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第一方面所述的方法。
第八方面,本发明实施例还提供一种计算机可读存储介质,包括:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上述第二方面所述的方法。
通过本发明实施例的上述一个或多个实施例中的技术方案,本发明实施例至少具有如下技术效果:
在本发明提供的实施例中,由于第一参与方与第二参与方分别持有第一子私钥与第二子私钥,为了确定位于第一参与方的待签名消息的完整签名,需要第一参与方在接收到第二参与方发送的第二椭圆曲线随机点及第二中间签名之后,根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;基于所持有的第一子私钥、第一部分签名及第二中间签名,生成第一中间签名;并在确定第一部分签名为非零值时,将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名,以确定待签名消息的完整签名。由上述整个协同签名过程表明,即使是参与了协同签名的第二参与方也不知道第一参与方签署了什么消息,所以本发明的签名方案对于第二参与方来说具有盲签名的效果,在产生数字签名的过程中不会泄露第一参与方的隐私;并且由于通信双方持有各自的签名子私钥,使得攻击者即使获取到任何一方的签名子私钥,都无法伪造待签名消息的完整签名,从而实现了保护完整的签名私钥的技术效果。
进一步的,由于待签名消息的消息摘要不需要在第一参与方和第二参与方进行数据传输的信道中传送,从而使得攻击者不能在双方通信过程中以截取和替换消息摘要的方式达到伪造签名的目的。
进一步的,由于通信双方分别选取多个随机数,其中任何一方不能确定对方所使用的随机数,从而不能推导出完整的签名私钥,进而进一步的保护了完整的签名私钥,提高了签名的安全性。
进一步的,在本发明提供的实施例中,通过让待签名消息的第一部分签名,含有协同签名双方分别选取的多个随机数及双方各自持有的子私钥因子,不但使第一部分签名具有更好的混淆效果,而且也使第一部分签名具有签名的作用,从而提高了协同签名双方进行签名的安全性。
进一步的,由于在协同签名的过程中,第一参与方与第二参与方通过两次通信便完成了对待签名消息的签名,从而减少了签名数据在网络中传输的总时间,进而能够满足无线移动通信或云计算环境中低延迟、少交互的应用需求。
附图说明
图1为本发明实施例提供的一种基于SM2算法的协同签名方法,应用于第一参与方的流程图;
图2为本发明实施例提供的一种基于SM2算法的协同签名方法,应用于第二参与方的流程图;
图3为本发明实施例提供的基于SM2算法的协同签名方法双方交互的流程图;
图4为本发明实施例提供的一种基于SM2算法的协同签名装置,应用于第一参与方的结构示意图;
图5为本发明实施例提供的一种基于SM2算法的协同签名装置,应用于第二参与方的结构示意图。
具体实施方式
本发明实施例提供一种基于SM2算法的协同签名的方法、装置及存储介质,以解决现有技术中存在的签名消息易被伪造的技术问题。
本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:
提供一种基于SM2算法的协同签名的方法,包括:接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,第二椭圆曲线随机点是由第二参与方根据第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,第二中间签名是第二参与方所持有的第二子私钥被混淆后的两个值;根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;在确定第一部分签名为非零值时,基于所持有的第一子私钥、第一部分签名及第二中间签名,生成第一中间签名;其中,第一中间签名为第一子私钥被混淆后的三个值;将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能基于第一中间签名及第二子私钥,生成待签名消息的第二部分签名,以确定由第一部分签名及第二部分签名构成的待签名消息的完整签名。
在上述方案中,由于第一参与方与第二参与方分别持有第一子私钥与第二子私钥,为了确定位于第一参与方的待签名消息的完整签名,需要第一参与方在接收到第二参与方发送的第二椭圆曲线随机点及第二中间签名之后,根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;并在确定第一部分签名为非零值时,基于所持有的第一子私钥、第一部分签名及第二中间签名,生成第一中间签名;将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名,以确定待签名消息的完整签名。这就使得攻击者获取任何一方的签名子私钥,都无法伪造待签名消息的完整签名。
为了更好地理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细地说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
以下,将分别从第一参与方、第二参与方的角度对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)modn,通信双方均不知对方的签名私钥,也不知完整的签名私钥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。这样就使得第一参与方与第二参与方双方均拥有完整的签名公钥。其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。
在第一参与方和第二参与方均拥有完整的签名公钥之后,当需要对位于第一参与方的待签名消息进行签名操作时,第一参与方需要发送待签名消息的签名通知给第二参与方,使第二参与方在得到签名通知后,生成并发送第二椭圆曲线随机点及第二中间签名给第一参与方。使第二参与方能够将其生成的第二随机数作用于第一子公钥、第二子公钥和指定椭圆曲线的基点G获得指定椭圆曲线E(Fp)的加法群上的第二椭圆曲线随机点,及混淆第二子私钥产生的第二中间签名。
第一参与方在接收到第二参与方发送的第二椭圆曲线随机点及第二中间签名之后,才能执行步骤102。
步骤102:根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名。
在生成第一部分签名之前,还需要对待签名消息及指定特征数据进行哈希计算,获得消息摘要;其中,指定特征数据至少包括指定椭圆曲线的相关参数及第一参与方与第二参与方完整的签名公钥被混淆后的值。
例如,假设待签名消息为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密码杂凑算法。
具体地,根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名的步骤是:先采用指定算法生成第一随机数;其中,第一随机数的数量比第二椭圆曲线随机点的数量多一个;再采用第一公式对第一随机数及第二椭圆曲线随机点进行计算,获得指定椭圆曲线上的第一椭圆曲线随机点;其中,第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,第一公式用于将第一椭圆曲线随机点约束在指定椭圆曲线的加法群上;最后,采用第二公式对第一椭圆曲线随机点的横坐标与消息摘要之和进行模运算,获得第一部分签名。
需要说明的是,第一随机数可以通过随机数生成器(即指定算法)随机生成,其取值范围为[1,n-1]的整数,n为指定椭圆曲线的基点G的阶。其中,第一参与方与第二参与方可以采用相同的随机数生成器,也可以采用不同的随机数生成器。
具体的,第一公式为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G (2)
其中,(x1,y1)为第一椭圆曲线随机点,x1和y1分别为第一椭圆曲线随机点的横纵坐标,k4至k7的为第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为第二椭圆曲线随机点,指定椭圆曲线E(Fq)定义在有限素域Fq上,G为指定椭圆曲线E(Fq)的基点,n为基点G的阶,[*]为椭圆曲线点乘运算,[+]为椭圆曲线点加运算。
第二公式具体为:
r=(x1+e)mod n (3)
其中,r为待签名消息的第一部分签名,x1为第一椭圆曲线随机点的横坐标,e为消息摘要转换而成的整数,n为指定椭圆曲线的基点的阶,mod表示求模运算。
在得到第一部分签名之后,便可执行步骤103。
步骤103:在确定第一部分签名为非零值时,基于所持有的第一子私钥、第一部分签名及第二中间签名,生成待签名消息的第一中间签名;其中,第一中间签名为第一子私钥被混淆后的三个值。
在获得第一部分签名之后,还需要进一步的判断第一部分签名是否为0,若为0则第一参与方重新生成第一随机数,并重新计算第一部分签名,直到第一部分签名不为0为止。
在确定第一部分签名不为0之后,才能基于所持有的第一子私钥、第一部分签名及第二中间签名,生成待签名消息的第一中间签名。
具体的,采用第三公式对第一随机数、第一部分签名及第一参与方的第一子私钥进行模运算,获得第一中间签名;其中,第三公式用于约束第一中间签名的取值范围;
其中,第三公式具体为:
Figure BDA0001817128590000181
其中,s3至s5为第一中间签名,k4至k7为第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,n为指定椭圆曲线的基点G的阶,r为待签名消息的第一部分签名,s1至s2为第二中间签名,
Figure BDA0001817128590000182
为第一子私钥d1在有限素域Fp上的逆元
Figure BDA0001817128590000183
mod为求模运算。
在第一参与方生成待签名消息的第一中间值之后,便可执行步骤104。
步骤104:将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能够基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名,以确定由第一部分签名及第二部分签名构成的待签名消息的完整签名。
下面将从第二参与方的角度进行描述上述协同签名方法。
请参考图2,本发明实施例提供一种基于SM2算法的协同签名方法,应用于第二参与方,该方法的处理过程如下。
步骤201:在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,第二椭圆曲线随机点为第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,第二中间签名为第二参与方所持有的第二子私钥被混淆后的两个值。
具体地,第二参与方计算第二椭圆曲线随机点及第二中间签名,需要先采用指定算法生成第二随机数;其中,第二随机数为至少三个随机数;然后再采用第四公式将第二随机数分别作用于第一参与方的第一子公钥、第二参与方的第二子公钥及指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;第四公式用于将第二椭圆曲线随机点约束在指定椭圆曲线的加法群上;最后采用第五公式对第二子随机数中的部分随机数及第二子私钥分量进模n运算,获得第二中间签名。
具体的,第四公式为:
Figure BDA0001817128590000191
其中,R1至R3为第二椭圆曲线随机点,k1至k3为第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为指定椭圆曲线的基点,P1、P2分别为第一参与方及第二参与方的第一子公钥及第二子公钥,P1为第一参与方用第一子私钥与基点计算得到的,P2为第二参与方用第二子私钥与基点计算得到的,d2为第二子私钥。
进一步的,第五公式具体为:
Figure BDA0001817128590000192
其中,s1和s2为第二中间签名,k1和k3为第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,d2为第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000201
mod为求模运算。
在获得第二椭圆曲线随机点及第二中间签名之后,便可执行步骤202。
步骤202:将第二椭圆曲线随机点及第二中间签名发送给第一参与方,使第一参与方能够生成待签名消息的第一部分签名及第一中间签名;其中,第一中间签名是第一参与方所持有的第一子私钥被混淆后的三个值。
在第二参与方将第二椭圆曲线随机点及第二中间签名发送给第一参与方之后,第二参与方将返回待签名消息的第一部分签名及第一中间签名,进而使第二参与方能接着执行步骤203-204。
步骤203:接收第一参与方发送的待签名消息的第一部分签名及第一中间签名,根据第二子私钥及第一中间签名,生成待签名消息的第二部分签名。
在第二参与方接收到第一部分签名及第一中间签名时,便可根据第六公式计算第二部分签名,具体的第六公式为:
Figure BDA0001817128590000204
其中,s为第二部分签名,s3至s5为第一中间签名,k2为第二随机数中的部分随机数,且k2的取值范围为[1,n-1]内的整数,d2为第二子私钥,
Figure BDA0001817128590000202
为d2在有限素域Fp上的逆元
Figure BDA0001817128590000203
mod为求模运算。
在获得第二部分签名之后,便可执行步骤204。
步骤204:在确定第二部分签名为非零值,且不等于n-r时,确定由第一部分签名及第二部分签名构成的待签名消息的完整签名;其中,n为指定椭圆曲线的基点的阶,r为待签名消息的第一部分签名。
在获得第二部分签名之后,还需要先判断第二部分签名是否等于0,若不等于0还需要进一步判断是否等于n-r。若判断结果为第二部分签名为0或n-r中的任一值,将返回到步骤201重新生成第二随机数,让第二参与方重新生成第二部分签名,直到第二部分签名既不等于0也不等于n-r。
在确定第二部分签名既不等于0也不等于n-r时,便可根据获得的第一部分签名r和第二部分签名s,获得待签名消息的完整签名(r,s)。
为了使本领域的技术人员能更加清楚的理解上述协同签名过程,下面将从第一参与方和第二参与方进行交互的过程进行详细的描述。
假设第一参与方需要对待签名消息info进行签名操作,请参见图3,待签名消息info的签名操作过程为:
步骤301:第一参与方发送待签名消息的签名通知给第二参与方。
步骤302:第二参与方在接收到签名通知后,生成第二椭圆曲线随机点及第二中间签名。
具体地,生成第二椭圆曲线随机点的步骤为:第二参与方使用随机数生成器生成第二随机数,然后将第二随机数分别作用于双方的子公钥及指定椭圆曲线的基点生成第二椭圆曲线随机点;生成第二中间签名的公式具体请参见前述的第五公式,在此不再赘述。
需要说明的是,第二参与方选取的第二随机数的数量为至少三个。若数量是三个,表示为k1,k2,k3,则基于这三个随机数确定的第二椭圆曲线随机点的数量也是三个,表示为R1,R2,R3。它们的计算公式具体请参见第四公式(即公式(5))。
其中,“至少”的意思是指第二参与方可以选取多于三个的随机数,比如除了k1,k2,k3,还选取k8,k9,k10。由于第二参与方持有第一子公钥P1、第二子公钥P2和指定椭圆曲线的基点G这三个基础的指定椭圆曲线的加法群元素,因此,若基于六个随机数k1,k2,k3,k8,k9,k10生成六个指定椭圆曲线上的随机点R′1至R′6,它们的计算公式可为:
Figure BDA0001817128590000211
则R’1至R’6可以分别合并为指定椭圆曲线上的三个随机点R1-R3,即:
Figure BDA0001817128590000221
而k1+k8,k2+k9和k3+k10的结果也是随机数,直接由三个随机数表示即可。所以,第二参与方若选取多于三个的随机数,并产生多于三个的指定椭圆曲线上的随机点,第二参与方可以按照前述方法将多于三个的随机点合并为指定椭圆曲线上的三个随机点。
步骤303:第二参与方将第二椭圆曲线随机点及第二中间签名发送给第一参与方。
步骤304:第一参与方根据接收到的第二椭圆曲线随机点及第二中间签名,生成待签名消息的第一部分签名。
在第一参与方接收到第二椭圆曲线随机点及第二中间签名之后,用随机数生成器生成第一随机数,第一随机数的数量要比第二随机数的数量多一个。
然后,采用第一公式对第一随机数及第二椭圆曲线随机点进行计算,获得第一椭圆曲线随机点,具体的计算方式请参见之前的公式。
并且,第一参与方还根据待签名消息info及指定特征数据Z计算出待签名消息的消息摘要e,并对消息摘要与坐标点的横坐标求和之后的值进行模运算,获得第一部分签名r。具体的计算方式请参见前述第二公式,在此不再赘述。
步骤305:第一参与方判断第一部分签名是否为非零值,若为零则重新执行步骤304,若为非零值,则计算第一中间签名(s3-s5)。具体的计算方式请参见前述第三公式,在此不再赘述。
步骤306:第一参与方将第一部分签名r及第一中间签名(s3-s5)发送给第二参与方。
步骤307:第二参与方根据第一部分签名r及第一中间签名(s3-s5),计算第二部分签名s。具体的第二部分签名的公式请见前述第六公式,在此不再赘述。
步骤308:判断第二部分s是否不为0且不为n-r,若为是则获得待签名消息的完整签名(r,s),否则重新从步骤302开始执行,直到第二部分s不为0且不为n-r为止。
通过使用本发明的上述协同签名方案,让待签名消息的消息摘要由第一参与方计算得到,并基于通信双方选取的多个随机数确定第一椭圆曲线随机点,第一参与方使用第一椭圆曲线随机点的横坐标混淆消息摘要,从而生成待签名消息的第一部分签名。由于第一参与方通过上述方式对消息摘要进行混淆后得到第一部分签名,所以第一参与方只需要将第一部分签名发送给第二参与方而不需要将消息摘要传送给第二参与方。所以,一方面,第二参与方并不知道第一参与方签署了什么消息,使得本发明的协同签名方案对于第二参与方来说具有盲签名的效果;另一方面,由于消息摘要不需要在通信过程中传送,使得攻击者不能在通信过程中以替换消息摘要的方式达到伪造签名的目的。
通过本发明实施例的上述协同签名方案得到的待签名消息的完整签名(r,s),由第一参与方产生的至少四个随机数、第二参与方产生的至少三个随机数以及双方的签名子私钥确定。因此,一方面,通信双方的任何一方不能确定对方选取的随机数和对方的签名子私钥,从而不能推导出完整的签名私钥dA,这有效保护了完整的签名私钥的安全性;另一方面,待签名消息的第一部分签名r含有私钥因子和多个随机因子,与SM2算法输出的待签名消息的第一部分签名相比,不但使消息摘要具有更好的混淆效果,而且更具有签名的意义。
本发明实施例公开的协同签名方案,首先由第二参与方将产生的第二椭圆曲线随机点及第二中间签名发送给第一参与方,供第一参与方生成待签名消息的第一部分签名;然后第一参与方将生成的第一部分签名及第一中间签名发送给第二参与方,供第二参与方生成待签名消息的第二部分签名,从而确定由第一部分签名及第二部分签名构成的待签名消息的完整签名。可见,本发明实施例中的协同签名方案,第一参与方与第二参与方只需要进行两次通信便可获得待签名消息的完整签名,从而可满足无线移动通信或云计算环境中低延迟、少交互的应用需求,减少交互过程中存在的风险。
上述协同签名方案的签名验证方法,遵循SM2签名验证的方法,在此不再赘述。验签公钥,就是完整的签名公钥PA
基于同一发明构思,本发明一实施例中提供一种用于SM2算法的协同签名的装置,应用于第一参与方,该装置的协同签名方法的具体实施方式可参见第一参与方的方法实施例部分的描述,重复之处不再赘述,请参见图4,该装置包括:
接收单元401,用于接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点是由所述第二参与方根据选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
生成单元402,用于根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名;
所述生成单元402,还用于在确定所述第一部分签名为非零值时,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成所述待签名消息的第一中间签名;其中,所述第一中间签名为所述第一子私钥被混淆后的三个值;
发送单元403,用于将所述第一部分签名及所述第一中间签名发送给所述第二参与方,使所述第二参与方能够基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名。
可选的,在接收所述第二参与方发送的第二椭圆曲线随机点及第二中间签名之前,所述发送单元403还用于:
发送所述待签名消息的签名通知给所述第二参与方,使所述第二参与方收到所述签名通知后生成并发送所述第二椭圆曲线随机点及所述第二中间签名给所述第一参与方。
可选的,所述生成单元402还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述消息摘要;其中,所述指定特征数据至少包括所述指定椭圆曲线的相关参数及所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
可选的,所述生成单元402具体用于:
采用指定算法生成第一随机数;其中,所述第一随机数的数量比接收的所述第二椭圆曲线随机点的数量多一个;
采用第一公式对所述第一随机数及所述第二椭圆曲线随机点进行运算,获得指定椭圆曲线上的第一椭圆曲线随机点;所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第二公式对所述第一椭圆曲线随机点的横坐标与所述消息摘要进行运算,获得所述第一部分签名。
可选的,所述第一公式具体为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第一椭圆曲线随机点,x1和y1分别为所述第一椭圆曲线随机点的横纵坐标,k4至k7为所述第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为所述第二椭圆曲线随机点,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第二公式具体为:
r=(x1+e)modn;
其中,r为所述待签名消息的第一部分签名,x1为所述第一椭圆曲线随机点的横坐标,e为所述消息摘要转换而成的整数,n为所述指定椭圆曲线的基点的阶,mod表示求模运算。
可选的,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成第一中间签名,具体包括:
采用第三公式对所述第一随机数、所述第一部分签名及所述第一参与方的第一子私钥进行模运算,获得所述第一中间签名;其中,所述第三公式用于约束所述第一中间签名的取值范围;所述第三公式具体为:
Figure BDA0001817128590000261
其中,s3至s5为所述第一中间签名,k4至k7为所述第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,n为所述指定椭圆曲线的基点G的阶,r为所述待签名消息的第一部分签名,s1至s2为所述第二中间签名,
Figure BDA0001817128590000262
为所述第一子私钥d1在有限素域Fp上的逆元
Figure BDA0001817128590000263
mod为求模运算。
基于同一发明构思,本发明一实施例中提供一种用于SM2算法的协同签名的装置,应用于第二参与方,该装置的协同签名方法的具体实施方式可参见第二参与方的方法实施例部分的描述,重复之处不再赘述,请参见图5,该装置包括:
接收单元501,用于在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点为所述第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
发送单元502,用于将所述第二椭圆曲线随机点及所述第二中间签名发送给所述第一参与方,使所述第一参与方能够生成所述待签名消息的第一部分签名及第一中间签名;其中,所述第一中间签名是所述第一参与方所持有的第一子私钥被混淆后的三个值;
接收单元501,用于接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名;
生成单元503,还用于在确定所述第二部分签名为非零值,且不等于n-r时,确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名。
可选的,所述接收单元501具体用于:
采用指定算法生成第二随机数;其中,所述第二随机数为至少三个随机数;
采用第四公式将第二随机数分别作用于所述第一参与方的第一子公钥、所述第二参与方的第二子公钥及所述指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,所述第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;所述第四公式用于将所述第二椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第五公式对第二随机数中的部分随机数及所述第二子私钥进行模运算,获得第二中间签名。
可选的,所述第四公式具体为:
Figure BDA0001817128590000271
其中,R1至R3为所述第二椭圆曲线随机点,k1至k3为所述第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为所述指定椭圆曲线的基点,P1、P2分别为所述第一参与方及所述第二参与方的所述第一子公钥及第二子公钥,P1为所述第一参与方所述第一子私钥与所述基点G计算得到的,P2为所述第二参与方用所述第二子私钥与所述基点G计算得到的,d2为所述第二子私钥。
可选的,所述第五公式具体为:
Figure BDA0001817128590000272
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,
Figure BDA0001817128590000273
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000274
mod为求模运算。
可选的,所述接收单元501具体用于:
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名;
采用第六公式,根据所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名。
可选的,所述第六公式具体为:
Figure BDA0001817128590000283
其中,s为所述待签名消息的第二部分签名,s3至s5为所述第一中间签名,k2为所述第二随机数中的部分随机数,且k2的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,
Figure BDA0001817128590000281
为所述第二子私钥d2在有限素域Fp上的逆元
Figure BDA0001817128590000282
mod为求模运算。
基于同一发明构思,本发明实施例中提供了一种用于SM2算法的协同签名的装置,包括:至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如上所述的第一参与方和第二参与方进行协同签名的方法。
基于同一发明构思,本发明实施例还提一种计算机可读存储介质,包括:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如上所述的第一参与方和第二参与方进行协同签名的方法。
在本发明提供的实施例中,由于第一参与方与第二参与方分别持有第一子私钥与第二子私钥,为了确定位于第一参与方的待签名消息的完整签名,需要第一参与方在接收到第二参与方发送的第二椭圆曲线随机点及第二中间签名之后,根据待签名消息的消息摘要及第二椭圆曲线随机点,生成待签名消息的第一部分签名;并在确定第一部分签名为非零值时,将第一部分签名及第一中间签名发送给第二参与方,使第二参与方能基于第二子私钥及第一中间签名,生成待签名消息的第二部分签名,以确定待签名消息的完整签名。从而使得既使是参与了协同签名的第二参与方也不知道第一参与方签署了什么消息,进而使本发明的签名方案对于第二参与方来说具有盲签名的效果,在产生数字签名的过程中不会泄露第一参与方的隐私,并且由于通信双方持有各自的签名子私钥,使得攻击者即使获取到任何一方的签名子私钥,都无法伪造待签名消息的完整签名,从而实现了保护完整的签名私钥的技术效果。
本领域内的技术人员应明白,本发明实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (24)

1.一种基于SM2算法的协同签名的方法,应用于进行协同签名的第一参与方,其特征在于,包括:
接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点是由所述第二参与方根据选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名;
在确定所述第一部分签名为非零值时,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成所述待签名消息的第一中间签名;其中,所述第一中间签名为所述第一子私钥被混淆后的三个值,所述第一子私钥、所述第二子私钥均为从[1,n-1]内选取的整数,且所述第一参与方和所述第二参与方均不知对方所持有的子私钥和完整的签名私钥,所述完整的签名私钥为(所述第一子私钥×第二子私钥-1)mod n,mod为模运算,n为所述指定椭圆曲线的基点的阶;
将所述第一部分签名及所述第一中间签名发送给所述第二参与方,使所述第二参与方能够基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;
其中:
所述第二中间签名采用下列第五公式确定,所述第五公式为:
Figure FDA0003119213140000011
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,d2 -1为d2在有限素域Fp上的逆元
Figure FDA0003119213140000021
mod n;
所述第一中间签名采用下列公式确定:
Figure FDA0003119213140000022
其中,s3至s5为所述第一中间签名,k4至k7为第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,r为所述第一部分签名,s1至s2为第二中间签名,d1为所述第一子私钥,
Figure FDA0003119213140000023
为d1在有限素域Fp上的逆元
Figure FDA0003119213140000024
mod n。
2.如权利要求1所述的方法,其特征在于,接收所述第二参与方发送的第二椭圆曲线随机点及第二中间签名之前,还包括:
发送所述待签名消息的签名通知给所述第二参与方,使所述第二参与方收到所述签名通知后生成并发送所述第二椭圆曲线随机点及所述第二中间签名给所述第一参与方。
3.如权利要求1所述的方法,其特征在于,根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名之前,还包括:
对所述待签名消息及指定特征数据进行哈希计算,获得所述消息摘要;其中,所述指定特征数据至少包括所述指定椭圆曲线的相关参数及所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
4.如权利要求1所述的方法,其特征在于,根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名,包括:
采用指定算法生成第一随机数;其中,所述第一随机数的数量比接收的所述第二椭圆曲线随机点的数量多一个;
采用第一公式对所述第一随机数及所述第二椭圆曲线随机点进行运算,获得指定椭圆曲线上的第一椭圆曲线随机点;所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第二公式对所述第一椭圆曲线随机点的横坐标与所述消息摘要进行运算,获得所述第一部分签名。
5.如权利要求4所述的方法,其特征在于,
所述第一公式具体为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第一椭圆曲线随机点,x1和y1分别为所述第一椭圆曲线随机点的横纵坐标,k4至k7为所述第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为所述第二椭圆曲线随机点,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第二公式具体为:
r=(x1+e)mod n;
其中,r为所述待签名消息的第一部分签名,x1为所述第一椭圆曲线随机点的横坐标,e为所述消息摘要转换而成的整数,n为所述指定椭圆曲线的基点G的阶,mod表示求模运算。
6.一种基于SM2算法的协同签名的方法,应用于进行协同签名的第二参与方,其特征在于,包括:
在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点为所述第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
将所述第二椭圆曲线随机点及所述第二中间签名发送给所述第一参与方,使所述第一参与方能够生成所述待签名消息的第一部分签名及第一中间签名;其中,所述第一中间签名是所述第一参与方所持有的第一子私钥被混淆后的三个值,所述第一子私钥、所述第二子私钥均为从[1,n-1]内选取的整数,且所述第一参与方和所述第二参与方均不知对方所持有的子私钥和完整的签名私钥,所述完整的签名私钥为(所述第一子私钥×第二子私钥-1)mod n,mod为模运算,n为所述指定椭圆曲线的基点的阶;
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名;
在确定所述第二部分签名为非零值,且不等于n-r时,确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名;
其中:
所述第二中间签名采用下列第五公式确定,所述第五公式为:
Figure FDA0003119213140000041
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,d2 -1为d2在有限素域Fp上的逆元
Figure FDA0003119213140000042
mod n;
所述第一中间签名采用下列公式确定:
Figure FDA0003119213140000043
其中,s3至s5为所述第一中间签名,k4至k7为第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,r为所述第一部分签名,s1至s2为第二中间签名,d1为所述第一子私钥,
Figure FDA0003119213140000044
为d1在有限素域Fp上的逆元
Figure FDA0003119213140000045
mod n。
7.如权利要求6所述的方法,其特征在于,计算第二椭圆曲线随机点及第二中间签名,包括:
采用指定算法生成第二随机数;其中,所述第二随机数为至少三个随机数;
采用第四公式将第二随机数分别作用于所述第一参与方的第一子公钥、所述第二参与方的第二子公钥及所述指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,所述第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;所述第四公式用于将所述第二椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用所述第五公式对第二随机数中的部分随机数及所述第二子私钥进行模运算,获得所述第二中间签名。
8.如权利要求7所述的方法,其特征在于,所述第四公式具体为:
Figure FDA0003119213140000051
其中,R1至R3为所述第二椭圆曲线随机点,k1至k3为所述第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为所述指定椭圆曲线的基点,P1、P2分别为所述第一参与方及所述第二参与方的所述第一子公钥及第二子公钥,P1为所述第一参与方所述第一子私钥与所述基点G计算得到的,P2为所述第二参与方用所述第二子私钥与所述基点G计算得到的,d2为所述第二子私钥。
9.如权利要求6-8任一权项所述的方法,其特征在于,接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名,包括:
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名;
采用第六公式,根据所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名。
10.如权利要求9所述的方法,其特征在于,所述第六公式具体为:
Figure FDA0003119213140000052
其中,s为所述待签名消息的第二部分签名,s3至s5为所述第一中间签名,k2为所述第二随机数中的部分随机数,且k2的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,
Figure FDA0003119213140000061
为所述第二子私钥d2在有限素域Fp上的逆元
Figure FDA0003119213140000062
mod n,mod为求模运算。
11.一种基于SM2算法的协同签名的装置,应用于第一参与方,其特征在于,包括:
接收单元,用于接收第二参与方发送的第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点是由所述第二参与方根据选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
生成单元,用于根据待签名消息的消息摘要及所述第二椭圆曲线随机点,生成所述待签名消息的第一部分签名;
所述生成单元,还用于在确定所述第一部分签名为非零值时,基于所持有的第一子私钥、所述第一部分签名及所述第二中间签名,生成所述待签名消息的第一中间签名;其中,所述第一中间签名为所述第一子私钥被混淆后的三个值,所述第一子私钥、所述第二子私钥均为从[1,n-1]内选取的整数,且所述第一参与方和所述第二参与方均不知对方所持有的子私钥和完整的签名私钥,所述完整的签名私钥为(所述第一子私钥×第二子私钥-1)mod n,mod为模运算,n为所述指定椭圆曲线的基点的阶;
发送单元,用于将所述第一部分签名及所述第一中间签名发送给所述第二参与方,使所述第二参与方能够基于所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名,以确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;
其中:
所述第二中间签名采用下列第五公式确定,所述第五公式为:
Figure FDA0003119213140000071
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,d2 -1为d2在有限素域Fp上的逆元
Figure FDA0003119213140000072
mod n;
所述第一中间签名采用下列公式确定:
Figure FDA0003119213140000073
其中,s3至s5为所述第一中间签名,k4至k7为第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,r为所述第一部分签名,s1至s2为第二中间签名,d1为所述第一子私钥,
Figure FDA0003119213140000074
为d1在有限素域Fp上的逆元
Figure FDA0003119213140000075
mod n。
12.如权利要求11所述的装置,其特征在于,所述发送单元还用于:
发送待签名消息的签名通知给所述第二参与方,使所述第二参与方收到所述签名通知后生成并发送所述第二椭圆曲线随机点及所述第二中间签名给所述第一参与方。
13.如权利要求11所述的装置,其特征在于,所述生成单元还用于:
对所述待签名消息及指定特征数据进行哈希计算,获得所述消息摘要;其中,所述指定特征数据至少包括所述指定椭圆曲线的相关参数及所述第一参与方与所述第二参与方完整的签名公钥被混淆后的值。
14.如权利要求11所述的装置,其特征在于,所述生成单元具体用于:
采用指定算法生成第一随机数;其中,所述第一随机数的数量比接收的所述第二椭圆曲线随机点的数量多一个;
采用第一公式对所述第一随机数及所述第二椭圆曲线随机点进行运算,获得指定椭圆曲线上的第一椭圆曲线随机点;所述第一椭圆曲线随机点为指定椭圆曲线的加法群上的一个元素,所述第一公式用于将所述第一椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第二公式对所述第一椭圆曲线随机点的横坐标与所述消息摘要进行运算,获得所述第一部分签名。
15.如权利要求14所述的装置,其特征在于,
所述第一公式具体为:
(x1,y1)=k4[*]R1[+]k5[*]R2[+]k6[*]R3[+]k7[*]G
其中,(x1,y1)为所述第一椭圆曲线随机点,x1和y1分别为所述第一椭圆曲线随机点的横纵坐标,k4至k7为所述第一随机数,且k4至k7中任一随机数均为[1,n-1]范围内的整数,R1至R3为所述第二椭圆曲线随机点,所述指定椭圆曲线E(Fq)定义在有限素域Fq上,G为所述指定椭圆曲线E(Fq)的基点,n为所述基点G的阶,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算;
所述第二公式具体为:
r=(x1+e)mod n;
其中,r为所述待签名消息的第一部分签名,x1为所述第一椭圆曲线随机点的横坐标,e为所述消息摘要转换而成的整数,n为所述指定椭圆曲线的基点的阶,mod表示求模运算。
16.一种基于SM2算法的协同签名的装置,应用于进行协同签名的第二参与方,其特征在于,包括:
接收单元,用于在接收到第一参与方发送的待签名消息的签名通知时,计算第二椭圆曲线随机点及第二中间签名;其中,所述第二椭圆曲线随机点为所述第二参与方基于选取的第二随机数确定的指定椭圆曲线的加法群上的至少三个元素,所述第二中间签名为所述第二参与方所持有的第二子私钥被混淆后的两个值;
发送单元,用于将所述第二椭圆曲线随机点及所述第二中间签名发送给所述第一参与方,使所述第一参与方能够生成所述待签名消息的第一部分签名及第一中间签名;其中,所述第一中间签名是所述第一参与方所持有的第一子私钥被混淆后的三个值,所述第一子私钥、所述第二子私钥均为从[1,n-1]内选取的整数,且所述第一参与方和所述第二参与方均不知对方所持有的子私钥和完整的签名私钥,所述完整的签名私钥为(所述第一子私钥×第二子私钥-1)mod n,mod为模运算,n为所述指定椭圆曲线的基点的阶;
所述接收单元,还用于接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名,根据所述第二子私钥及所述第一中间签名生成所述待签名消息的第二部分签名;
生成单元,用于在确定所述第二部分签名为非零值,且不等于n-r时,确定由所述第一部分签名及所述第二部分签名构成的所述待签名消息的完整签名;其中,n为所述指定椭圆曲线的基点的阶,r为所述待签名消息的第一部分签名;
其中:
所述第二中间签名采用下列第五公式确定,所述第五公式为:
Figure FDA0003119213140000091
其中,s1和s2为所述第二中间签名,k1和k3为所述第二随机数中的部分随机数,且k1和k3的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,d2 -1为d2在有限素域Fp上的逆元
Figure FDA0003119213140000092
mod n;
所述第一中间签名采用下列公式确定:
Figure FDA0003119213140000093
其中,s3至s5为所述第一中间签名,k4至k7为第一随机数,且k4至k7中任一随机数的取值均是[1,n-1]范围内的整数,r为所述第一部分签名,s1至s2为第二中间签名,d1为所述第一子私钥,
Figure FDA0003119213140000094
为d1在有限素域Fp上的逆元
Figure FDA0003119213140000095
mod n。
17.如权利要求16所述的装置,其特征在于,所述接收单元,具体用于:
采用指定算法生成第二随机数;其中,所述第二随机数为至少三个随机数;
采用第四公式将第二随机数分别作用于所述第一参与方的第一子公钥、所述第二参与方的第二子公钥及所述指定椭圆曲线的基点,获得第二椭圆曲线随机点;其中,所述第二椭圆曲线随机点为指定椭圆曲线的加法群上的至少三个元素;所述第四公式用于将所述第二椭圆曲线随机点约束在所述指定椭圆曲线的加法群上;
采用第五公式对第二随机数中的部分随机数及所述第二子私钥进行模运算,获得第二中间签名。
18.如权利要求17所述的装置,其特征在于,所述第四公式具体为:
Figure FDA0003119213140000101
其中,R1至R3为所述第二椭圆曲线随机点,k1至k3为所述第二随机数,且k1至k3中任一随机数的取值范围均为[1,n-1]内的整数,G为所述指定椭圆曲线的基点,P1、P2分别为所述第一参与方及所述第二参与方的所述第一子公钥及第二子公钥,P1为所述第一参与方所述第一子私钥与所述基点G计算得到的,P2为所述第二参与方用所述第二子私钥与所述基点G计算得到的,d2为所述第二子私钥。
19.如权利要求16-18任一权项所述的装置,其特征在于,所述接收单元具体用于:
接收所述第一参与方发送的所述待签名消息的第一部分签名及所述第一中间签名;
采用第六公式,根据所述第二子私钥及所述第一中间签名,生成所述待签名消息的第二部分签名。
20.如权利要求19所述的装置,其特征在于,所述第六公式具体为:
Figure FDA0003119213140000102
其中,s为所述待签名消息的第二部分签名,s3至s5为所述第一中间签名,k2为所述第二随机数中的部分随机数,且k2的取值范围均为[1,n-1]内的整数,d2为所述第二子私钥,
Figure FDA0003119213140000111
为所述第二子私钥d2在有限素域Fp上的逆元
Figure FDA0003119213140000112
mod n,mod为求模运算。
21.一种基于SM2算法的协同签名的装置,其特征在于,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求1-5任一项所述的方法。
22.一种基于SM2算法的协同签名的装置,其特征在于,包括:
至少一个处理器,以及
与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求6-10任一项所述的方法。
23.一种计算机可读存储介质,其特征在于:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-5中任一项所述的方法。
24.一种计算机可读存储介质,其特征在于:
所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求6-10中任一项所述的方法。
CN201811147472.4A 2018-09-29 2018-09-29 基于sm2算法的协同签名的方法、装置及存储介质 Active CN109309569B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811147472.4A CN109309569B (zh) 2018-09-29 2018-09-29 基于sm2算法的协同签名的方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811147472.4A CN109309569B (zh) 2018-09-29 2018-09-29 基于sm2算法的协同签名的方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN109309569A CN109309569A (zh) 2019-02-05
CN109309569B true CN109309569B (zh) 2021-10-01

Family

ID=65224890

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811147472.4A Active CN109309569B (zh) 2018-09-29 2018-09-29 基于sm2算法的协同签名的方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN109309569B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109981592B (zh) * 2019-02-28 2021-07-16 矩阵元技术(深圳)有限公司 多客户端多服务器联合生成密钥的方法和电子设备
CN109818730B (zh) * 2019-03-06 2022-09-30 矩阵元技术(深圳)有限公司 盲签名的获取方法、装置和服务器
CN112632630A (zh) * 2019-10-08 2021-04-09 航天信息股份有限公司 一种基于sm2的协同签名计算方法及装置
CN110943828B (zh) * 2019-11-05 2021-01-08 武汉理工大学 秘密数运算转换方法及系统
CN112887097A (zh) * 2019-11-29 2021-06-01 航天信息股份有限公司 基于sm2椭圆曲线的签名方法、相关装置、及存储介质
WO2021127951A1 (zh) * 2019-12-24 2021-07-01 云图技术有限公司 两方协同的EdDSA数字签名生成方法和装置
CN113300846B (zh) * 2020-02-24 2022-08-09 华为技术有限公司 签名方法、终端设备及网络设备
CN112311549B (zh) * 2020-03-26 2024-09-10 神州融安数字科技(北京)有限公司 生成或协助签名方法、装置、系统、电子设备及存储介质
CN111130787B (zh) * 2020-03-26 2020-10-30 北京信安世纪科技股份有限公司 数字签名方法、设备和存储介质
CN111444541B (zh) * 2020-03-27 2022-09-09 苏州链原信息科技有限公司 用于生成数据均值零知识证明的方法、设备及存储介质
CN111754233B (zh) * 2020-06-29 2023-11-07 兴唐通信科技有限公司 基于多方签名的电子支付方法和系统
CN113343259B (zh) * 2021-06-17 2023-09-29 北京宏思电子技术有限责任公司 基于sm2的联合签名实现方法、装置、电子设备及存储介质
CN114257380A (zh) * 2021-12-20 2022-03-29 湖南国科微电子股份有限公司 一种数字签名方法、系统及设备
CN114710271B (zh) * 2022-03-21 2024-01-30 北京数字认证股份有限公司 一种共享加密数据的方法、装置、存储介质和电子设备
CN116961925B (zh) * 2023-09-18 2023-12-19 北京信安世纪科技股份有限公司 签名方法、系统、电子设备及存储介质
CN117978408B (zh) * 2024-03-28 2024-06-25 鼎铉商用密码测评技术(深圳)有限公司 协同签名算法的检测方法、协同签名设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2842070A1 (en) * 2012-04-27 2015-03-04 Intralinks, Inc. Computerized method and system for managing networked secure collaborative exchange
CN104618116A (zh) * 2015-01-30 2015-05-13 北京数字认证股份有限公司 一种协同数字签名系统及其方法
CN107196763A (zh) * 2017-07-06 2017-09-22 数安时代科技股份有限公司 Sm2算法协同签名及解密方法、装置与系统
CN107360002A (zh) * 2017-08-15 2017-11-17 武汉信安珞珈科技有限公司 一种数字证书的申请方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2716982C (en) * 2010-10-06 2016-07-19 Ibm Canada Limited - Ibm Canada Limitee Digital signatures on composite resource documents

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2842070A1 (en) * 2012-04-27 2015-03-04 Intralinks, Inc. Computerized method and system for managing networked secure collaborative exchange
CN104618116A (zh) * 2015-01-30 2015-05-13 北京数字认证股份有限公司 一种协同数字签名系统及其方法
CN107196763A (zh) * 2017-07-06 2017-09-22 数安时代科技股份有限公司 Sm2算法协同签名及解密方法、装置与系统
CN107360002A (zh) * 2017-08-15 2017-11-17 武汉信安珞珈科技有限公司 一种数字证书的申请方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Security, Privacy, and Access Control in Information-Centric Networking: A Survey";Reza Tourani;《IEEE communications surveys & tutorials》;20171231;全文 *
"SM2椭圆曲线门限密码算法";尚铭;《密码学报》;20140415;全文 *

Also Published As

Publication number Publication date
CN109309569A (zh) 2019-02-05

Similar Documents

Publication Publication Date Title
CN109309569B (zh) 基于sm2算法的协同签名的方法、装置及存储介质
CN108667626B (zh) 安全的两方协作sm2签名方法
CN109088726B (zh) 基于sm2算法的通信双方协同签名及解密方法和系统
CN107634836B (zh) 一种sm2数字签名生成方法及系统
CN107579819B (zh) 一种sm9数字签名生成方法及系统
CN108199835B (zh) 一种多方联合私钥解密方法
CN109245903B (zh) 双方协同生成sm2算法的签名方法、装置及存储介质
CN107707358B (zh) 一种ec-kcdsa数字签名生成方法及系统
US10205713B2 (en) Private and mutually authenticated key exchange
CN112740733B (zh) 一种安全接入方法及装置
WO2019101134A1 (zh) 一种多分布式的sm9解密方法与介质及密钥生成方法
CN107248909B (zh) 一种基于sm2算法的无证书安全签名方法
US7716482B2 (en) Conference session key distribution method in an ID-based cryptographic system
CN110120939B (zh) 一种基于异构系统的可否认认证的加密方法和系统
CN109936456B (zh) 基于私钥池的抗量子计算数字签名方法和系统
CN107612934A (zh) 一种基于密钥分割的区块链移动端计算系统和方法
CN109547209B (zh) 一种两方sm2数字签名生成方法
CN107425971B (zh) 无证书的数据加/解密方法和装置、终端
CN112564907B (zh) 密钥生成方法及装置、加密方法及装置、解密方法及装置
CN111342955B (zh) 一种通信方法及其设备、计算机存储介质
CN112632630A (zh) 一种基于sm2的协同签名计算方法及装置
CN109921905B (zh) 基于私钥池的抗量子计算密钥协商方法和系统
CN115499126A (zh) 基于sm2密钥分散存储的密钥对生成方法、协作签名方法、解密方法、装置和介质
CN108055134B (zh) 椭圆曲线点数乘及配对运算的协同计算方法及系统
CN112769539B (zh) 一种生成rsa密钥并协同rsa签名和解密的方法及系统

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