CN107124274B - 基于sm2的数字签名方法和装置 - Google Patents
基于sm2的数字签名方法和装置 Download PDFInfo
- Publication number
- CN107124274B CN107124274B CN201710353571.7A CN201710353571A CN107124274B CN 107124274 B CN107124274 B CN 107124274B CN 201710353571 A CN201710353571 A CN 201710353571A CN 107124274 B CN107124274 B CN 107124274B
- Authority
- CN
- China
- Prior art keywords
- signature
- key
- sub
- service end
- digital signature
- 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
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
-
- 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/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0825—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using asymmetric-key encryption or public key infrastructure [PKI], e.g. key signature or public key certificates
-
- 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
-
- 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
Abstract
本发明揭示了一种基于SM2的数字签名方法和装置,签名私钥被分割为两个部分,分别存放到签名客户端和签名服务端,双方联合才能对消息进行签名,任意一方的私钥丢失,均不会影响私钥整体的安全性,在使用本发明的方法和系统中一方的密钥使用PIN码等弱安全机制保护,依然保持较高的安全水平。
Description
技术领域
本发明涉及到数字签名领域,特别是涉及到到一种基于SM2的数字签名方法和装置。
背景技术
非对称密码的一个重要应用是数字签名。数字签名机制允许签名方使用签名私钥对消息进行数字签名操作。验证方使用签名方的公钥验证数字签名的有效性,进而确定消息的真实性。签名私钥的丢失会造成用户身份的伪冒。因此标识私钥需要进行严格保护。在移动设备等不安全环境下进行私钥的有效保护面临重大挑战。
发明内容
本发明的主要目的为提供一种安全性高的基于SM2的数字签名方法和装置。
为了实现上述发明目的,本发明提出一种基于SM2的数字签名方法,包括:
签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a);对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
计算待签名消息m的杂凑值e,利用所述第一签名子密钥u或其变换值u'生成e或其变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名∏_c生成过程中使用随机数x;
通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述Π_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性;
如果验证成功,则通过所述签名服务端使用所述预签名∏_c,生成新的预签名∏_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
进一步地,所述第一签名子密钥u、第一签名子公钥U、第二签名子公钥V、完整签名公钥Y的生成方法,其中,所述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;所述生成方法包括:
如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
进一步地,所述第二签名子密钥v的生成方法,包括:
通过所述签名服务端随机生成1<v<q;或者,
通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C;
进一步地,所述e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
对杂凑值e的签名(r_c,s_c)生成方法包括:
随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);
r_c=(e+x_1)mod q;
s_c=(x+r_c)/(u+1)-r_c mod q;
对杂凑值e'的签名(r_c,s_c)生成方法包括:
e'=H(e);
u'=u-1;
随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);
r_c=(e'+x_1)mod q;
s_c=(x+r_c)/(u'+1)-r_c mod q;
所述利用加密公钥A将包含所述s_c的数据B加密形成密文O的方法,包括:
O=ENC(A,s_c),其中ENC是使用加密公钥A对s_c进行的加密运算。
进一步地,所述通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性的步骤,包括:
如果(r_c,s_c)是签名私钥u对杂凑值e的签名,则通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e;
如果(r_c,s_c)是变换值u'对所述变换值e'的签名,则通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端计算U'=U-G;通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息杂凑值为e'。
进一步地,所述∏_s,r_s和(s_1,s_2)的获取方法,包括:
通过所述签名服务端随机生成1<y<q和1<z<q,计算∏_s=[y]∏_c-[z]G,点∏_s表达(x_2,y_2);
通过所述签名服务端计算r_s=(e+x_2)mod q;
通过所述签名服务端计算s_1=y/v mod q;
通过所述签名服务端计算s_2=(r_s-z)/v mod q。
进一步地,所述有效签名(r,s)的生成方法,包括:
计算r=r_s;
计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;
计算s=(s'/u-r_s)mod q。
进一步地,所述数据B包含随机生成的对称加密密钥sk;所述第二部分的组合因子(s_1,s_2)的获取方法,包括:
通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;
使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
本发明还提供一种基于SM2的数字签名装置,包括:
第一生成单元,用于签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a);对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
发送单元,用于计算待签名消息m的杂凑值e,利用所述第一签名子密钥u或其变换值u'生成e或其变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名П_c生成过程中使用随机数x;
还原验证单元,用于通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述П_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性;
第二生成单元,用于如果所述还原验证单元验证成功,则通过所述签名服务端使用所述预签名П_c,生成新的预签名П_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
签名单元,用于使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
进一步地,所述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;所述所述第一生成单元,包括:
第一计算模块,用于如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
第二计算模块,用于如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
进一步地,所述第一生成单元,还包括:
生成模块,用于通过所述签名服务端随机生成1<v<q;或者,
派生模块,用于通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C;
进一步地,所述发送单元包括:
杂凑值e的计算模块,用于计算e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
第一签名模块,用于生成对杂凑值e的签名(r_c,s_c),其中,随机生成1<x<q,计算Π_c=[x]G,点Π_c表达(x_1,y_1);r_c=(e+x_1)mod q;s_c=(x+r_c)/(u+1)-r_c modq;
第二签名模块,用于生成对杂凑值e'的签名(r_c,s_c),其中,计算e'=H(e);u'=u-1;随机生成1<x<q,计算Π_c=[x]G,点Π_c表达(x_1,y_1);计算r_c=(e'+x_1)mod q;s_c=(x+r_c)/(u'+1)-r_c mod q;
加密模块,用于利用加密公钥A将包含所述s_c的数据B加密形成密文O,其中,计算O=ENC(A,s_c),ENC是使用加密公钥A对s_c进行的加密运算。
进一步地,所述还原验证单元,包括:
第一还原验证模块,用于如果(r_c,s_c)是签名私钥u对杂凑值e的签名,则通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点Π_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e;
第二还原验证模块,用于如果(r_c,s_c)是变换值u'对所述变换值e'的签名,则通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点Π_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端计算U'=U-G;通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息杂凑值为e'。
进一步地,所述第二生成单元,包括:
П_s计算模块,用于通过所述签名服务端随机生成1<y<q和1<z<q,计算П_s=[y]∏_c-[z]G,点П_s表达(x_2,y_2);
r_s计算模块,用于通过所述签名服务端计算r_s=(e+x_2)mod q;
s_1计算模块,用于通过所述签名服务端计算s_1=y/v mod q;
s_2计算模块,用于通过所述签名服务端计算s_2=(r_s-z)/v mod q。
进一步地,所述签名单元,包括:
第一签名计算模块,用于计算r=r_s;
第二签名计算模块,用于计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;
第三签名计算模块,用于计算s=(s'/u-r_s)mod q。
进一步地,所述数据B包含随机生成的对称加密密钥sk;所述第第二生成单元,包括:
对称加密模块,用于通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;
解密模块,用于使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
本发明的基于SM2的数字签名方法和装置,私钥被分割为两个部分,分别存放到签名客户端和签名服务端,双方联合才能对消息进行签名,任意一方的密钥丢失,均不会影响私钥整体的安全性,在使用本发明的方法和系统中一方的密钥使用PIN码等弱安全机制保护,依然保持较高的安全水平。
附图说明
图1为本发明第一实施例的基于SM2的数字签名方法的流程示意图;
图2为本发明第一实施例的基于SM2的数字签名方法的签名过程示意图;
图3为本发明第二实施例的基于SM2的数字签名方法的流程示意图;
图4为本发明第二实施例的基于SM2的数字签名方法的签名过程示意图;
图5为本发明一实施例的基于SM2的数字签名装置的结构示意框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1和图2,本发明第一实施例提供一种基于SM2的数字签名方法,包括步骤:
S1、签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V,其中,所述签名服务端具有加密公私密钥对(A,a);对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
S2、利用所述第一签名子密钥u生成待签名消息m的杂凑值e的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名∏_c生成过程中使用随机数x;
S3、通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U验证对所述杂凑值e的签名(r_c,s_c)的正确性;
S4、如果验证成功,则通过所述签名服务端使用所述预签名∏_c,生成新的预签名∏_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
S5、使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
如上述步骤S1所述,在签名客户端生成第一签名子密钥u,第一签名子公钥U,在签名服务端生成第二签名子密钥v的第二签名子公钥V,即生成两份相对应的签名私钥。上述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;其中第一签名子密钥u、第一签名子公钥U、第二签名子公钥V、完整签名公钥Y的生成方法,其如下:
S11、如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
S12、如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
上述第二签名子密钥v的获取方法,一般包括两种,一种为:通过所述签名服务端随机生成1<v<q;另一种为:通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数。
如上述步骤S2所述,生成待签名消息m的杂凑值e的签名(r_c,s_c),并形成密文O等,即进行数字签名的中间的数据处理过程,在此过程中,上述杂凑值e,预签名П_c、签名(r_c,s_c)和密文O的生成方法,包括:
S21、e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
S22、随机生成1<x<q,计算П_c=[x]G,点П_c表达(x_1,y_1);
S23、r_c=(e+x_1)mod q;
S24、s_c=(x+r_c)/(u+1)-r_c mod q;
S25、O=ENC(A,s_c),其中ENC是使用加密公钥A对s_c进行的加密运算。
如上述步骤S3所述,是一个解密还原和验证的过程,通过所述签名服务端利用所述第一签名子公钥U验证对所述杂凑值e的签名(r_c,s_c)的正确性,如果验证失败,则终止。上述还原签名(r_c,s_c)和验证通过以下方式进行,包括:
S31、通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点П_c的x轴;
S32、通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;
S33、通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e。
如上述步骤S4所述,是得到杂凑值e的签名的第一部分r_s和签名第二部分的组合因子(s_1,s_2)的过程,其中上述Π_s,r_s和(s_1,s_2)的获取方法,包括:
S41、通过所述签名服务端随机生成1<y<q和1<z<q,计算Π_s=[y]∏_c-[z]G,点∏_s表达(x_2,y_2);
S42、通过所述签名服务端计算r_s=(e+x_2)mod q;
S43、通过所述签名服务端计算s_1=y/v mod q;
S44、通过所述签名服务端计算s_2=(r_s-z)/v mod q。
上述数据B包含随机生成的对称加密密钥sk;所述第二部分的组合因子(s_1,s_2)的获取方法,包括:通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
如上述步骤S5所述,即为完成数字签名的过程,其有效签名(r,s)的生成方法,包括:
S51、计算r=r_s;
S52、计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;该“(r_s,s'-r_s mod q)是(v-1)对e的有效签名”可以满足“通过x,s_1,s_2可形成使用所述签名子密钥v的变换(v-1)对杂凑值e的签名的完整第二部分”
S53、计算s=(s'/u-r_s)mod q。参照图3和图4,本发明提供第二实施例中,基于SM2的数字签名方法,包括:
S1',签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a);对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
S2',计算待签名消息m的杂凑值e,利用所述第一签名子密钥u的变换值u'生成e的变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名∏_c生成过程中使用随机数x;
S3',通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U的变换值U'验证对所述变换值e'的签名(r_c,s_c)的正确性;
S4',如果验证成功,则通过所述签名服务端使用所述预签名∏_c,生成新的预签名П_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
S5',使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
如上述步骤S1',在签名客户端生成第一签名子密钥u,第一签名子公钥U,在签名服务端生成第二签名子密钥v的第二签名子公钥V,即生成两份相对应的签名私钥。上述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;其中第一签名子密钥u、第一签名子公钥U、第二签名子公钥V、完整签名公钥Y的生成方法,其如下:
S11、如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
S12、如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
上述第二签名子密钥v的获取方法,一般包括两种,一种为:通过所述签名服务端随机生成1<v<q;另一种为:通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数。
如上述步骤S2'所述,生成待签名消息m的杂凑值e的变换值e'的签名(r_c,s_c),并形成密文O等,即进行数字签名的中间的数据处理过程,在此过程中,上述杂凑值e,预签名П_c、签名(r_c,s_c)和密文O的生成方法,包括:
S21'、e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
S22'、e'=H(e);
S23'、u'=u-1;
S24'、随机生成1<x<q,计算Π_c=[x]G,点Π_c表达(x_1,y_1);
S25'、r_c=(e'+x_1)mod q;
S26'、s_c=(x+r_c)/(u'+1)-r_c mod q;
S25'、O=ENC(A,s_c),其中ENC是使用加密公钥A对s_c进行的加密运算。
如上述如上述步骤S3'所述,是一个解密还原和验证的过程,通过所述签名服务端利用所述第一签名子公钥U的变换值U'验证对所述杂凑值e的变换值e'的签名(r_c,s_c)的正确性,如果验证失败,则终止。上述还原签名(r_c,s_c)和验证通过以下方式进行,包括:
S31'、通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点Π_c的x轴;
S32'、通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;
S33'、通过所述签名服务端计算U'=U-G;
S34'、通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e。
如上述如上述步骤S4'所述,是得到杂凑值e的签名的第一部分r_s和签名第二部分的组合因子(s_1,s_2)的过程,其中上述Π_s,r_s和(s_1,s_2)的获取方法,包括:
S41'、通过所述签名服务端随机生成1<y<q和1<z<q,计算Π_s=[y]Π_c-[z]G,点Π_s表达(x_2,y_2);
S42'、通过所述签名服务端计算r_s=(e+x_2)mod q;
S43'、通过所述签名服务端计算s_1=y/v mod q;
S44'、通过所述签名服务端计算s_2=(r_s-z)/v mod q。
上述数据B包含随机生成的对称加密密钥sk;所述第二部分的组合因子(s_1,s_2)的获取方法,包括:通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
如上述步骤S5'所述,即为完成数字签名的过程,其有效签名(r,s)的生成方法,包括:
S51'、计算r=r_s;
S52'、计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;该“(r_s,s'-r_s mod q)是(v-1)对e的有效签名”可以满足“通过x,s_1,s_2可形成使用所述签名子密钥v的变换(v-1)对杂凑值e的签名的完整第二部分”
S53'、计算s=(s'/u-r_s)mod q。
本第二实施例中,使用(u-1)进行签名时,客户端只需要计算1/u,这样便于保护第一签名子密钥u;客户端发送加密密钥sk,服务端使用sk加密s_1,s_2,只有合法客户端可以获得s_1,s_2,进一步保护第二签名子密钥v。
本发明实施例的基于SM2的数字签名方法,私钥被分割为两个部分,分别存放到签名客户端和签名服务端,双方联合才能对消息进行签名,任意一方的密钥丢失,均不会影响私钥整体的安全性,在使用本发明的方法和系统中一方的密钥使用PIN码等弱安全机制保护,依然保持较高的安全水平。
参照图5,本发明实施例还提供一种基于SM2的数字签名装置,包括:
第一生成单元10,用于用于签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a);对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
发送单元20,用于计算待签名消息m的杂凑值e,利用所述第一签名子密钥u或其变换值u'生成e或其变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名П_c和所述密文O发送到签名服务端;其中,所述预签名П_c生成过程中使用随机数x;
还原验证单元30,用于通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述П_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性;
第二生成单元40,用于如果所述还原验证单元验证成功,则通过所述签名服务端使用所述预签名Π_c,生成新的预签名Π_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
签名单元50,用于使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
如上述第一生成单元10,在签名客户端生成第一签名子密钥u,第一签名子公钥U,在签名服务端生成第二签名子密钥v的第二签名子公钥V,即生成两份相对应的签名私钥。本实施例中,上述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;上述第一生成单元10,包括:
第一计算模块,用于如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
第二计算模块,用于如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
上述第一生成单元,还包括:生成模块,用于通过所述签名服务端随机生成1<v<q;或者,派生模块,用于通过所述签名服务端生成秘密kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数。
如上述发送单元20,是生成待签名的消息m的签名(r_c,s_c),并形成密文O等的装置,即用于进行数字签名的中间的数据处理过程的装置,该发送单元20,包括:杂凑值e的计算模块,用于计算e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
第一签名模块,用于生成对杂凑值e的签名(r_c,s_c),其中,随机生成1<x<q,计算Π_c=[x]G,点Π_c表达(x_1,y_1);r_c=(e+x_1)mod q;s_c=(x+r_c)/(u+1)-r_c modq。
第二签名模块,用于生成对杂凑值e'的签名(r_c,s_c),其中,计算e'=H(e);u'=u-1;随机生成1<x<q,计算Π_c=[x]G,点Π_c表达(x_1,y_1);计算r_c=(e'+x_1)mod q;s_c=(x+r_c)/(u'+1)-r_c mod q;
加密模块,用于利用加密公钥A将包含所述s_c的数据B加密形成密文O,其中,计算O=ENC(A,s_c),ENC是使用加密公钥A对s_c进行的加密运算。
如上述还原验证单元30,是一个解密还原和验证的装置,通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性,如果验证失败,则终止。该还原验证单元30,包括:
第一还原验证模块,用于如果(r_c,s_c)是签名私钥u对杂凑值e的签名,则通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点Π_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e;
第二还原验证模块,用于如果(r_c,s_c)是变换值u'对所述变换值e'的签名,则通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点Π_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端计算U'=U-G;通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息杂凑值为e'。
如上述第二生成单元40,是得到杂凑值e的签名的第一部分r_s和签名第二部分的组合因子(s_1,s_2)的装置,该第二生成单元40包括:П_s计算模块,用于通过所述签名服务端随机生成1<y<q和1<z<q,计算∏_s=[y]∏_c-[z]G,点∏_s表达(x_2,y_2);r_s计算模块,用于通过所述签名服务端计算r_s=(e+x_2)mod q;s_1计算模块,用于通过所述签名服务端计算s_1=y/v mod q;s_2计算模块,用于通过所述签名服务端计算s_2=(r_s-z)/vmod q。
上述数据B包含随机生成的对称加密密钥sk;所述第第二生成单元20,包括:对称加密模块,用于通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;解密模块,用于使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
如上述签名单元50,即为完成数字签名的装置,其包括:第一签名计算模块,用于计算r=r_s;第二签名计算模块,用于计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;第三签名计算模块,用于计算s=(s'/u-r_s)mod q。
本发明实施例的基于SM2的数字签名装置,私钥被分割为两个部分,分别存放到签名客户端和签名服务端,双方联合才能对消息进行签名,任意一方的密钥丢失,均不会影响私钥整体的安全性,在使用本发明的方法和系统中一方的密钥使用PIN码等弱安全机制保护,依然保持较高的安全水平。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (16)
1.一种基于SM2的数字签名方法,其特征在于,包括:
签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a),且使用公钥加密私钥解密;对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
计算待签名消息m的杂凑值e,利用所述第一签名子密钥u或其变换值u'生成e或其变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名∏_c生成过程中使用随机数x;
通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性;
如果验证成功,则通过所述签名服务端使用所述预签名∏_c,生成新的预签名∏_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
2.根据权利要求1所述的基于SM2的数字签名方法,其特征在于,所述第一签名子密钥u、第一签名子公钥U、第二签名子公钥V、完整签名公钥Y的生成方法,其中,所述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;所述生成方法包括:
如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
3.根据权利要求2所述的基于SM2的数字签名方法,其特征在于,所述第二签名子密钥v的生成方法,包括:
通过所述签名服务端随机生成1<v<q;或者,
通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C 。
4.根据权利要求3所述的基于SM2的数字签名方法,其特征在于,
所述e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
对杂凑值e的签名(r_c,s_c)生成方法包括:
随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);
r_c=(e+x_1)mod q;
s_c=(x+r_c)/(u+1)-r_c mod q;
对杂凑值e'的签名(r_c,s_c)生成方法包括:
e'=H(e);
u'=u-1;
随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);
r_c=(e'+x_1)mod q;
s_c=(x+r_c)/(u'+1)-r_c mod q;
所述利用加密公钥A将包含所述s_c的数据B加密形成密文O的方法,包括:
O=ENC(A,s_c),其中ENC是使用加密公钥A对s_c进行的加密运算。
5.根据权利要求4所述的基于SM2的数字签名方法,其特征在于,所述通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性的步骤,包括:
如果(r_c,s_c)是签名私钥u对杂凑值e的签名,则通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e;
如果(r_c,s_c)是变换值u'对所述变换值e'的签名,则通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端计算U'=U-G;通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息杂凑值为e'。
6.根据权利要求5所述的基于SM2的数字签名方法,其特征在于,所述∏_s,r_s和(s_1,s_2)的获取方法,包括:
通过所述签名服务端随机生成1<y<q和1<z<q,计算∏_s=[y]∏_c-[z]G,点∏_s表达(x_2,y_2);
通过所述签名服务端计算r_s=(e+x_2)mod q;
通过所述签名服务端计算s_1=y/v mod q;
通过所述签名服务端计算s_2=(r_s-z)/v mod q。
7.根据权利要求6所述的基于SM2的数字签名方法,其特征在于,所述有效签名(r,s)的生成方法,包括:
计算r=r_s;
计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;
计算s=(s'/u-r_s)mod q。
8.根据权利要求1所述的基于SM2的数字签名方法,其特征在于,所述数据B包含随机生成的对称加密密钥sk;所述第二部分的组合因子(s_1,s_2)的获取方法,包括:
通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;
使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
9.一种基于SM2的数字签名装置,其特征在于,包括:
第一生成单元,用于签名客户端生成第一签名子密钥u,以及对应所述第一签名子密钥u的第一签名子公钥U,并将所述第一签名子公钥U发送给签名服务端;通过所述签名服务端生成对应所述签名客户端的第二签名子密钥v,以及对应所述第二签名子密钥v的第二签名子公钥V;其中,所述签名服务端具有加密公私密钥对(A,a),且使用公钥加密私钥解密;对应所述第一签名子密钥u和第二签名子密钥v的完整签名公钥为Y;
发送单元,用于计算待签名消息m的杂凑值e,利用所述第一签名子密钥u或其变换值u'生成e或其变换值e'的签名(r_c,s_c),利用加密公钥A将包含所述s_c的数据B加密形成密文O;将所述消息m的杂凑值e,签名过程中生成的预签名∏_c和所述密文O发送到签名服务端;其中,所述预签名∏_c生成过程中使用随机数x;
还原验证单元,用于通过所述签名服务端使用所述解密私钥a解密O还原s_c,并通过所述∏_c、和e计算r_c,然后通过所述签名服务端利用所述第一签名子公钥U或其变换值U'验证对所述杂凑值e或其变换值e'的签名(r_c,s_c)的正确性;
第二生成单元,用于如果所述还原验证单元验证成功,则通过所述签名服务端使用所述预签名∏_c,生成新的预签名∏_s,使用所述第二签名子密钥v的变换(v-1)生成对所述杂凑值e的签名的第一部分r_s和签名的第二部分的组合因子(s_1,s_2),并获取所述r_s和(s_1,s_2);其中,所述签名的第二部分的组合因子(s_1,s_2)不能通过r_s,s_1,s_2恢复所述第二签名子密钥v,以及,所述签名的完整第二部分通过第一签名子密钥u,x,s_1,s_2形成;
签名单元,用于使用所述第一签名子密钥u,x,r_s,(s_1,s_2),形成待签名消息m对应完整签名公钥Y的有效签名(r,s)。
10.根据权利要求9所述的基于SM2的数字签名装置,其特征在于,所述签名客户端和签名服务端使用SM2算法的椭圆曲线E/F_p,点群的生成元为G,阶为q;所述所述第一生成单元,包括:
第一计算模块,用于如果签名客户端已经具有签名私钥w和对应公钥W,则通过签名服务端生成所述第二签名子密钥v,计算第二签名子公钥V=[v]G;获取第二签名子密钥v,计算第一签名子密钥u=(w+1)/v mod q,计算第一签名子公钥U=[u]G;Y=W;
第二计算模块,用于如果签名客户端还无公私密钥对,则随机生成1<u<q;或者,生成密钥kdfc,根据派生函数F派生u=F(kdfc,FC)mod q,其中,FC包括所述签名客户端标识、请求时间t、请求次数C;F是标准的密钥派生函数KDF或者哈希函数、加密函数;计算第一签名子公钥U=[u]G;通过签名服务端生成第二签名子密钥v,计算第二签名子公钥V=[v]G,Y=[v]U-G=[u]V-G。
11.根据权利要求10所述的基于SM2的数字签名装置,其特征在于,所述第一生成单元,还包括:
生成模块,用于通过所述签名服务端随机生成1<v<q;或者,
派生模块,用于通过所述签名服务端生成密钥kdfs,根据派生函数F派生v=F(kdfs,FI)mod q,其中,FI包括所述签名客户端标识、请求时间t、请求次数C 。
12.根据权利要求11所述的基于SM2的数字签名装置,其特征在于,所述发送单元包括:
杂凑值e的计算模块,用于计算e=H(Z||m),其中Z为按照SM2签名算法对包含签名方标识、椭圆曲线参数和G以及完整签名公钥Y数据使用哈希函数H计算的杂凑值;
第一签名模块,用于生成对杂凑值e的签名(r_c,s_c),其中,随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);r_c=(e+x_1)mod q;s_c=(x+r_c)/(u+1)-r_c mod q;
第二签名模块,用于生成对杂凑值e'的签名(r_c,s_c),其中,计算e'=H(e);u'=u-1;随机生成1<x<q,计算∏_c=[x]G,点∏_c表达(x_1,y_1);计算r_c=(e'+x_1)mod q;s_c=(x+r_c)/(u'+1)-r_c mod q;
加密模块,用于利用加密公钥A将包含所述s_c的数据B加密形成密文O,其中,计算O=ENC(A,s_c),ENC是使用加密公钥A对s_c进行的加密运算。
13.根据权利要求12所述的基于SM2的数字签名装置,其特征在于,所述还原验证单元,包括:
第一还原验证模块,用于如果(r_c,s_c)是签名私钥u对杂凑值e的签名,则通过所述签名服务端计算r_c=(e+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端利用所述第一签名子公钥U作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息m的杂凑值直接使用获得的杂凑值e;
第二还原验证模块,用于如果(r_c,s_c)是变换值u'对所述变换值e'的签名,则通过所述签名服务端计算e'=H(e);r_c=(e'+x_1)mod q,其中x_1是点∏_c的x轴;通过所述签名服务端计算s_c=DEC(a,O),其中DEC是使用解密私钥a对O进行的解密运算;通过所述签名服务端计算U'=U-G;通过所述签名服务端利用所述第一签名子公钥U的变换值U'作为公钥,按照SM2的验证签名过程验证(r_c,s_c)的合法性,其中,待签名消息杂凑值为e'。
14.根据权利要求13所述的基于SM2的数字签名装置,其特征在于,所述第二生成单元,包括:
∏_s计算模块,用于通过所述签名服务端随机生成1<y<q和1<z<q,计算∏_s=[y]∏_c-[z]G,点∏_s表达(x_2,y_2);
r_s计算模块,用于通过所述签名服务端计算r_s=(e+x_2)mod q;
s_1计算模块,用于通过所述签名服务端计算s_1=y/v mod q;
s_2计算模块,用于通过所述签名服务端计算s_2=(r_s-z)/v mod q。
15.根据权利要求14所述的基于SM2的数字签名装置,其特征在于,所述签名单元,包括:
第一签名计算模块,用于计算r=r_s;
第二签名计算模块,用于计算s'=x*s_1+s_2,其中(r_s,s'-r_s mod q)是(v-1)对e的有效签名;
第三签名计算模块,用于计算s=(s'/u-r_s)mod q。
16.根据权利要求9所述的基于SM2的数字签名装置,其特征在于,所述数据B包含随机生成的对称加密密钥sk;所述第二生成单元,包括:
对称加密模块,用于通过所述签名服务端使用sk作为密钥采用对称加密算法加密组合因子(s_1,s_2)形成密文SX=SENC(sk,(s_1,s_2)),其中SENC是使用sk作为密钥对(s_1,s_2)进行对称加密的方法;
解密模块,用于使用sk解密SX恢复(s_1,s_2)=SDEC(sk,SX),其中SDEC是使用sk作为密钥对SX进行对称解密的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353571.7A CN107124274B (zh) | 2017-05-18 | 2017-05-18 | 基于sm2的数字签名方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353571.7A CN107124274B (zh) | 2017-05-18 | 2017-05-18 | 基于sm2的数字签名方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107124274A CN107124274A (zh) | 2017-09-01 |
CN107124274B true CN107124274B (zh) | 2019-10-25 |
Family
ID=59728349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710353571.7A Active CN107124274B (zh) | 2017-05-18 | 2017-05-18 | 基于sm2的数字签名方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107124274B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107566128A (zh) * | 2017-10-10 | 2018-01-09 | 武汉大学 | 一种两方分布式sm9数字签名生成方法与系统 |
CN107864037A (zh) * | 2017-10-25 | 2018-03-30 | 深圳奥联信息安全技术有限公司 | Sm9联合数字签名方法和装置 |
CN107733648B (zh) * | 2017-10-30 | 2020-08-07 | 武汉大学 | 一种基于身份的rsa数字签名生成方法及系统 |
CN107682151B (zh) * | 2017-10-30 | 2021-02-02 | 武汉大学 | 一种gost数字签名生成方法及系统 |
CN107872322B (zh) * | 2017-11-02 | 2020-08-04 | 武汉理工大学 | 基于同态加密的数字签名协同生成方法及系统 |
CN108667627B (zh) * | 2018-07-20 | 2021-05-11 | 武汉大学 | 基于两方协同的sm2数字签名方法 |
CN109450640B (zh) * | 2018-10-24 | 2022-05-17 | 成都卫士通信息产业股份有限公司 | 基于sm2的两方签名方法及系统 |
CN109547209B (zh) * | 2018-11-19 | 2020-09-08 | 北京大学 | 一种两方sm2数字签名生成方法 |
CN110035065A (zh) * | 2019-03-12 | 2019-07-19 | 华为技术有限公司 | 数据处理方法、相关装置及计算机存储介质 |
CN110224812B (zh) * | 2019-06-12 | 2023-03-14 | 江苏慧世联网络科技有限公司 | 一种基于多方安全计算的电子签名移动客户端与协同服务器通信的方法以及设备 |
CN113300846B (zh) * | 2020-02-24 | 2022-08-09 | 华为技术有限公司 | 签名方法、终端设备及网络设备 |
CN111130787B (zh) * | 2020-03-26 | 2020-10-30 | 北京信安世纪科技股份有限公司 | 数字签名方法、设备和存储介质 |
CN112887081B (zh) * | 2020-09-04 | 2023-06-16 | 深圳奥联信息安全技术有限公司 | 基于sm2的签名验签方法、装置及系统 |
CN112152807B (zh) * | 2020-09-27 | 2022-11-11 | 成都国泰网信科技有限公司 | 一种基于sm2算法的两方协同数字签名方法 |
CN114978536B (zh) * | 2022-05-16 | 2024-01-30 | 福建凯特信息安全技术有限公司 | 一种基于sm2算法的多方联合签名方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101420300B (zh) * | 2008-05-28 | 2013-05-29 | 北京易恒信认证科技有限公司 | 双因子组合公钥生成和认证方法 |
EP2951949B1 (en) * | 2013-01-29 | 2018-08-15 | Certicom Corp. | Modified sm2 elliptic curve signature algorithm supporting message recovery |
CN103475473B (zh) * | 2013-08-26 | 2016-10-05 | 数安时代科技股份有限公司 | 数字签名方法和设备、数字签名中密码运算方法和服务器 |
CN106161017A (zh) * | 2015-03-20 | 2016-11-23 | 北京虎符科技有限公司 | 标识认证安全管理系统 |
CN106685651A (zh) * | 2016-12-22 | 2017-05-17 | 北京信安世纪科技有限公司 | 一种客户端和服务端协作生成数字签名的方法 |
-
2017
- 2017-05-18 CN CN201710353571.7A patent/CN107124274B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107124274A (zh) | 2017-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107124274B (zh) | 基于sm2的数字签名方法和装置 | |
US11323276B2 (en) | Mutual authentication of confidential communication | |
US8670563B2 (en) | System and method for designing secure client-server communication protocols based on certificateless public key infrastructure | |
CN107733648B (zh) | 一种基于身份的rsa数字签名生成方法及系统 | |
CN104821880B (zh) | 一种无证书广义代理签密方法 | |
US11223486B2 (en) | Digital signature method, device, and system | |
US20210097187A1 (en) | Protecting data from brute force attack | |
CN109274502B (zh) | 公钥加密及密钥签名的创建方法、设备及可读存储介质 | |
CN112104453B (zh) | 一种基于数字证书的抗量子计算数字签名系统及签名方法 | |
CN112087428B (zh) | 一种基于数字证书的抗量子计算身份认证系统及方法 | |
JPWO2019093478A1 (ja) | 鍵交換装置、鍵交換システム、鍵交換方法、及び鍵交換プログラム | |
CN114692218A (zh) | 一种面向个人用户的电子签章方法、设备和系统 | |
CN111355582A (zh) | 基于sm2算法的两方联合签名和解密的方法及系统 | |
JP5324813B2 (ja) | 鍵生成装置、証明書生成装置、サービス提供システム、鍵生成方法、証明書生成方法、サービス提供方法およびプログラム | |
KR20220138648A (ko) | Qrng를 활용한 양자키와 이를 통해 생성된 인증서를 이용한 기기 인증 방법 | |
CN104253692B (zh) | 基于se的密钥管理方法和装置 | |
CN105376221A (zh) | 基于动态密码的游戏消息加密机制及游戏系统 | |
WO2006092909A1 (ja) | シャッフル復号正当性証明装置と方法、シャッフル復号検証装置と方法、プログラムと記録媒体 | |
JP2011091517A (ja) | サインクリプションシステムおよびサインクリプション生成方法 | |
CN110572257B (zh) | 基于身份的数据来源鉴别方法和系统 | |
JPWO2021009860A5 (zh) | ||
CN116886317B (zh) | 一种服务器和终端设备之间分发密钥的方法、系统及设备 | |
CN113141249B (zh) | 一种门限解密方法、系统及可读存储介质 | |
KR100917564B1 (ko) | Id 기반 티켓인증방법 | |
RU2771928C2 (ru) | Безопасный обмен данными, обеспечивающий прямую секретность |
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 |