CN110535636B - 一种轻量级的基于sm2算法的协同签名方法与装置 - Google Patents
一种轻量级的基于sm2算法的协同签名方法与装置 Download PDFInfo
- Publication number
- CN110535636B CN110535636B CN201910657004.XA CN201910657004A CN110535636B CN 110535636 B CN110535636 B CN 110535636B CN 201910657004 A CN201910657004 A CN 201910657004A CN 110535636 B CN110535636 B CN 110535636B
- Authority
- CN
- China
- Prior art keywords
- communication party
- mod
- party
- message
- communication
- 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/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Algebra (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Power Engineering (AREA)
- Computing Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种轻量级的基于SM2算法的协同签名方法与装置,该方法包括以下步骤:1)签名参数初始化,产生整个签名过程中所需的公开参数;2)生成秘钥;3)生成签名。本发明中协同的双方分别产生和存储SM2子私钥部分;双方协同完成消息的签名操作;任何一方无法获取完整的SM2私钥信息,提高了SM2私钥的安全性。相比于已有的SM2算法协同签名方案,本本发明方法中一个协同方仅需要完成一次点乘操作,另一个协同方仅需完成一次点乘和一次点加操作,降低了SM2协同签名的计算开销。
Description
技术领域
本发明涉及密码学技术,尤其涉及一种轻量级的基于SM2算法的协同签名方法与装置。
背景技术
公钥密码算法系统中,拥有私钥的实体能够生成消息的数字签名。为防止攻击者生成合法的数字签名,需要提高私钥的安全性。
目前,已有多种旨在提高私钥安全性的方案。基于门限密码学的方案,将私钥进行拆分由不同实体负责存储,任何一方均无法获取全部的私钥信息;仅当不低于门限数目的实体参与运算,才能完成数字签名的生成。该方案中,各个实体之间交互复杂,通信次数较多,计算开销较大。
针对云环境特点,已有多种协同签名方案,该类方案的主要特点是:由两个协同方分别存储部分私钥,两方联合才能完成消息的签名操作。该类方案中,协同进行数字签名时,一个协同方至少需要完成1次点乘操作;另一个协同方至少需要完成2次点乘和1次点加操作,且其中至少一个点乘操作无法实现通过预计算的方法进行提速。针对同时为多个实体提供协同签名的服务端而言,其性能开销较大。
发明内容
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种轻量级的基于SM2算法的协同签名方法与装置。
本发明解决其技术问题所采用的技术方案是:一种轻量级的基于SM2算法的协同签名方法,协同签名参与方包括第一通信方和第二通信方,包括以下步骤:
1)签名参数初始化
产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();
其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;
2)生成秘钥
2.1)第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D1作为第一通信方的私钥,即有:D1∈[1,n-1];
2.2)第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D2作为第二通信方的私钥,即有:D2∈[1,n-1];
2.3)第一通信方计算D1在Fq上的逆元D1 -1mod n;mod表示求模运算;计算P1=D1 -1[*]G,将计算结果P1发送给第二通信方;其中,[*]表示椭圆曲线点乘运算;
2.4)第二通信方计算D2在Fq上的逆元D2 -1mod n;mod表示求模运算;计算P2=D2 -1[*]G,将计算结果P2发送给第一通信方;其中,[*]表示椭圆曲线点乘运算;
2.5)第一通信方计算W1=D1 -1[*]P2,存储计算结果W1;其中,[*]表示椭圆曲线点乘运算;
2.6)第一通信方计算P=W1[-]G=D1 -1[*]P2[-]G=D1 -1[*]D2 -1[*]G[-]G,将计算结果P作为公钥公开;其中,[-]表示椭圆曲线点减运算;
2.7)第二通信方计算P=D2 -1[*]P1[-]G=D2 -1[*]D1 -1[*]G[-]G,将计算结果P作为公钥进行公开;其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;
3)生成签名
3.1)第一通信方生成待签名消息M的消息摘要e;
3.2)第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1;即有:k1∈[1,n-1];Q1=k1[*]W1;其中,[*]表示椭圆曲线点乘运算;
3.3)第一通信方将e和Q1发送给第二通信方;
3.4)第二通信方根据e和第一部分签名Q1生成第二部分签名r;
3.5)第二通信方计算D2*(r+k2)mod n,将计算结果作为s2;即有:s2=D2*(r+k2)modn;其中,mod表示求模运算;
3.6)第二通信方将r和s2发送给第一通信方;
3.7)第一通信方计算k1+D1*s2-r mod n,得到计算结果s;即有:s=k1+D1*s2-rmodn;若s等于0或等于n-r,则重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤3.8);其中,mod表示求模运算。
3.8)若s不等于0且不等于n-r,则第一通信方将(r,s)作为待签名消息M的完整签名输出,同时,还可输出待签名消息M。
按上述方案,所述步骤3.1)中第一通信方生成待签名消息M的消息摘要e的方法如下:第一通信方将Z和待签名消息M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的用户身份标识,Hash()表示预定的密码杂凑函数;
即有:M'=Z||M,||表示拼接;e=Hash(M')。
按上述方案,所述步骤3.4)中生成第二部分签名r的过程如下:
第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n;
若r不等于0,则转入下一步,若r等于0,则第二通信方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。
一种轻量级的基于SM2算法的协同签名装置,包括:
签名参数初始化模块,用于产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();
其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;
秘钥生成模块,用于第一通信方和第二通信方产生自己的公私密钥,以及用户的公钥;具体过程如下:
1)第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D1作为第一通信方的私钥,即有:D1∈[1,n-1];
2)第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D2作为第二通信方的私钥,即有:D2∈[1,n-1];
3)第一通信方计算D1在Fq上的逆元D1 -1mod n;mod表示求模运算;
4)第二通信方计算D2在Fq上的逆元D2 -1mod n;mod表示求模运算;
5)第一通信方计算P1=D1 -1[*]G,将计算结果P1发送给第二通信方;其中,[*]表示椭圆曲线点乘运算;
6)第二通信方计算P2=D2 -1[*]G,将计算结果P2发送给第一通信方;其中,[*]表示椭圆曲线点乘运算;
7)第一通信方计算W1=D1 -1[*]P2,存储计算结果W1;其中,[*]表示椭圆曲线点乘运算;
8)第一通信方计算:P=W1[-]G=D1 -1[*]P2[-]G,将计算结果P作为公钥公开;其中,[-]表示椭圆曲线点减运算;
9)第二通信方计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥公开;其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;
签名生成模块,用于第一通信方和第二通信方根据待签名消息M生产签名;具体过程如下:
1)第一通信方生成待签名消息M的消息摘要e;
2)第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算Q1=k1[*]W1,将计算结果Q1作为第一部分签名;即有:k1∈[1,n-1];Q1=k1[*]W1;其中,[*]表示椭圆曲线点乘运算;
3)第一通信方将e和第一部分签名Q1发送给第二通信方;
4)第二通信方根据e和第一部分签名Q1生成第二部分签名r;
5)第二通信方计算s2=D2*(r+k2)mod n,将计算结果作为s2;即有:s2=D2*(r+k2)mod n;其中,mod表示求模运算;
6)第二通信方将r和s2发送给第一通信方;
7)第一通信方计算s=k1+D1*s2-r mod n,得到计算结果s;;若s等于0或等于n-r,则重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤8);其中,mod表示求模运算;
8)若s不等于0且不等于n-r,则第一通信方将(r,s)作为待签名消息M的完整签名输出,同时,还可输出待签名消息M。
按上述方案,所述签名生成模块步骤1)中第一通信方生成待签名消息M的消息摘要e的方法如下:第一通信方将Z和待签名消息M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的用户身份标识,Hash()表示预定的密码杂凑函数;
即有:M'=Z||M,||表示拼接;e=Hash(M')。
按上述方案,所述签名生成模块步骤3)中生成第二部分签名r的过程如下:
第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n;
若r不等于0,则转入下一步,若r等于0,则第二通信方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。
本发明产生的有益效果是:本发明中,通信双方分别存储部分私钥信息,双方协同才能完成对消息的签名,任何一方无法获取完整的私钥信息,提高了私钥的安全性。而且,在进行数字签名操作时,第一通信方仅在根据W1生成第一部分签名Q1时需要进行一次点乘操作,且该点乘操作支持预计算;第二通信方仅在生成第三部分签名s2时需要进行一次点乘操作和一次点加操作,且该点乘操作支持预计算。因此,本发明方法中,协同双方在进行数字签名时,所需的计算开销将得到显著下降,能够更好地适用于云计算环境。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的方法流程图;
图2是本发明实施例的第一通信方和第二通信方生成各自的私钥和公钥的过程示意图;
图3是本发明实施例的第一通信方和第二通信方生成待签名消息M的完整签名的过程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,一种轻量级的基于SM2算法的协同签名方法,包括以下步骤:
步骤11:第一通信方生成自身的子私钥D1,第二通信方生成自身的子私钥D2。
步骤12:第一通信方生成待签名消息M的消息摘要e,根据W1生成第一部分签名Q1,并将e和Q1发送给第二通信方。
步骤13:第二通信方根据Q1和e生成第二部分签名r,并根据D2生成第三部分签名s2,将r和s2发送给第一通信方。
步骤14:第一通信方根据D1、r和s2生成完整签名并输出。
通过步骤12~14所示过程,即可生成待签名消息M的完整签名。
为便于表述,分别用第一通信方和第二通信方来表示通信双方,其中,第一通信方可以为客户端或服务器端,相应地,当第一通信方为客户端时,第二通信方则为服务器端,当第一通信方为服务器端时,第二通信方则为客户端。
第一通信方和第二通信方共享SM2算法的椭圆曲线参数E(Fq)、G和n,椭圆曲线E为定义在有限域Fq上的椭圆曲线,G表示椭圆曲线E上n阶的基点,各参数的具体取值等均根据SM2算法预先设定。
第一通信方和第二通信方需要分别生成自身的子私钥D1和D2,另外,还可进一步合作生成公钥P。
相应地,图2为本发明第一通信方和第二通信方生成各自的子私钥和公钥的过程示意图,如图2所示,包括以下步骤21~29。
步骤21:第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数作为D1。即有:D1∈[1,n-1]。
步骤22:第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数作为D2。即有:D2∈[1,n-1]。
步骤23:第一通信方计算D1在Fq上的逆元D1-1mod n。mod表示求模运算。
步骤24:第二通信方计算D2在Fq上的逆元D2-1mod n。mod表示求模运算。
步骤25:第一通信方计算D1-1[*]G,将计算结果P1发送给第二通信方。即有:P1=D1-1[*]G,其中,[*]表示椭圆曲线点乘运算。
步骤26:第二通信方计算D2-1[*]G,将计算结果P2发送给第一通信方。即有:P2=D2-1[*]G,其中,[*]表示椭圆曲线点乘运算。
步骤27:第一通信方计算D1-1[*]P2,存储计算结果W1,即有:W1=D1-1[*]P2。其中,[*]表示椭圆曲线点乘运算。
步骤28:第一通信方计算W1[-]G,将计算结果P作为公钥公开,即有:P=W1[-]G,其中,[-]表示椭圆曲线点减运算。
步骤29:第二通信方计算D2-1[*]P1[-]G,将计算结果P’作为公钥进行公开。即有:P=D2-1[*]P1[-]G。其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。
步骤28中的P和步骤29中的P值相同,以下描述中以P为例说明。步骤28和步骤29为可选步骤,可仅执行步骤28或步骤29,也可同时执行步骤28和步骤29,仅需保证公钥P最终被生成并公开即可。
需要说明的是,上述步骤21~29的表示方式仅为举例说明,并不用于限制各步骤的执行顺序,在实际应用中,可根据实际需要设定各步骤的执行顺序,只要最终能够得到所需的结果即可,后续涉及到的各示意图中同样如此,不再赘述。
图3为本发明第一通信方和第二通信方生成待签名消息M的完整签名的过程示意图,如图3所示,包括以下步骤31~38。
步骤31:第一通信方将Z和M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的身份标识,Hash()表示预定的密码杂凑函数。
即有:M'=Z||M,||表示拼接;e=Hash(M')。
步骤32:第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1。即有:k1∈[1,n-1];Q1=k1[*]W1。其中,[*]表示椭圆曲线点乘运算。
步骤33:第一通信方将e和Q1发送给第二通信方。
步骤34:第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算x1+e mod n,将计算结果作为r。即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n。若r不等于0,则执行步骤35,若r等于0,则第二通信方可重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止。其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。
步骤35:第二通信方计算D2*(r+k2)mod n,将计算结果作为s2。即有:s2=D2*(r+k2)mod n。其中,mod表示求模运算。
步骤36:第二通信方将r和s2发送给第一通信方。
步骤37:第一通信方计算k1+D1*s2-r mod n,得到计算结果s。即有:s=k1+D1*s2-r mod n。若s等于0或等于n-r,则可从重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤38。其中,mod表示求模运算。
步骤38:若s不等于0且不等于n-r,则第一通信方将(r,s)作为完整签名输出,同时,还可输出待签名消息M。
根据上述方法,可以得到一种一种轻量级的基于SM2算法的协同签名装置,包括:
签名参数初始化模块,用于产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();
其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;
秘钥生成模块,用于第一通信方和第二通信方产生自己的公私密钥,以及用户的公钥;具体过程如下:
1)第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D1作为第一通信方的私钥,即有:D1∈[1,n-1];
2)第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D2作为第二通信方的私钥,即有:D2∈[1,n-1];
3)第一通信方计算D1在Fq上的逆元D1 -1mod n;mod表示求模运算;
4)第二通信方计算D2在Fq上的逆元D2 -1mod n;mod表示求模运算;
5)第一通信方计算P1=D1 -1[*]G,将计算结果P1发送给第二通信方;其中,[*]表示椭圆曲线点乘运算;
6)第二通信方计算P2=D2 -1[*]G,将计算结果P2发送给第一通信方;其中,[*]表示椭圆曲线点乘运算;
7)第一通信方计算W1=D1 -1[*]P2,存储计算结果W1;其中,[*]表示椭圆曲线点乘运算;
8)第一通信方计算:P=W1[-]G=D1 -1[*]P2[-]G,将计算结果P作为公钥公开;其中,[-]表示椭圆曲线点减运算;
9)第二通信方计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥进行公开;其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;
签名生成模块,用于第一通信方和第二通信方根据待签名消息M生产签名;具体过程如下:
1)第一通信方生成待签名消息M的消息摘要e;第一通信方生成待签名消息M的消息摘要e的方法如下:第一通信方将Z和待签名消息M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的用户身份标识,Hash()表示预定的密码杂凑函数;
即有:M'=Z||M,||表示拼接;e=Hash(M');
2)第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算Q1=k1[*]W1,将计算结果Q1作为第一部分签名;即有:k1∈[1,n-1];Q1=k1[*]W1;其中,[*]表示椭圆曲线点乘运算;
3)第一通信方将e和第一部分签名Q1发送给第二通信方;
4)第二通信方根据e和第一部分签名Q1生成第二部分签名r;生成第二部分签名r的过程如下:
第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n;
若r不等于0,则转入下一步,若r等于0,则第二通信方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算;
5)第二通信方计算s2=D2*(r+k2)mod n,将计算结果作为s2;即有:s2=D2*(r+k2)mod n;其中,mod表示求模运算;
6)第二通信方将r和s2发送给第一通信方;
7)第一通信方计算s=k1+D1*s2-r mod n,得到计算结果s;;若s等于0或等于n-r,则重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤8);其中,mod表示求模运算;
8)若s不等于0且不等于n-r,则第一通信方将(r,s)作为待签名消息M的完整签名输出,同时,还可输出待签名消息M。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (7)
1.一种轻量级的基于SM2算法的协同签名方法,协同签名参与方包括第一通信方和第二通信方,其特征在于,包括以下步骤:
1)签名参数初始化
产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();
其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;
2)生成秘钥
第一通信方产生随机数D1作为第一通信方的私钥D1,获得自身的私钥D1和相应公钥P1;
第二通信方产生随机数D2作为第二通信方的私钥D2,获得自身的私钥D2和相应公钥P2;
第一通信方根据D1和P2计算W1;然后根据W1计算公钥P;
3)生成签名
3.1)第一通信方生成待签名消息M的消息摘要e;
3.2)第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算k1[*]W1,将计算结果作为Q1;即有:k1∈[1,n-1];Q1=k1[*]W1;其中,[*]表示椭圆曲线点乘运算;
3.3)第一通信方将e和Q1发送给第二通信方;
3.4)第二通信方根据e和第一部分签名Q1生成第二部分签名r;
3.5)第二通信方计算D2*(r+k2)mod n,将计算结果作为s2;即有:s2=D2*(r+k2)mod n;其中,mod表示求模运算;
3.6)第二通信方将r和s2发送给第一通信方;
3.7)第一通信方计算k1+D1*s2-r mod n,得到计算结果s;即有:s=k1+D1*s2-r mod n;若s等于0或等于n-r,则重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤3.8);其中,mod表示求模运算;
3.8)若s不等于0且不等于n-r,则第一通信方将(r,s)作为待签名消息M的完整签名输出,同时,还可输出待签名消息M。
2.根据权利要求1所述的基于SM2算法的协同签名方法,其特征在于,所述步骤2)中,生成秘钥的过程如下:
2.1)第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D1作为第一通信方的私钥,即有:D1∈[1,n-1];
2.2)第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D2作为第二通信方的私钥,即有:D2∈[1,n-1];
2.3)第一通信方计算D1在Fq上的逆元D1 -1mod n;mod表示求模运算;计算P1=D1 -1[*]G,将计算结果P1发送给第二通信方;其中,[*]表示椭圆曲线点乘运算;
2.4)第二通信方计算D2在Fq上的逆元D2 -1mod n;mod表示求模运算;计算P2=D2 -1[*]G,将计算结果P2发送给第一通信方;其中,[*]表示椭圆曲线点乘运算;
2.5)第一通信方计算W1=D1 -1[*]P2,存储计算结果W1;其中,[*]表示椭圆曲线点乘运算;
2.6)第一通信方计算P=W1[-]G=D1 -1[*]P2[-]G=D1 -1[*]D2 -1[*]G[-]G,将计算结果P作为公钥公开;其中,[-]表示椭圆曲线点减运算;
2.7)第二通信方计算P=D2 -1[*]P1[-]G=D2 -1[*]D1 -1[*]G[-]G,将计算结果P作为公钥进行公开;其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算。
3.根据权利要求1所述的基于SM2算法的协同签名方法,其特征在于,所述步骤3.1)中第一通信方生成待签名消息M的消息摘要e的方法如下:第一通信方将Z和待签名消息M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的用户身份标识,Hash()表示预定的密码杂凑函数;
即有:M'=Z||M,||表示拼接;e=Hash(M')。
4.根据权利要求1所述的基于SM2算法的协同签名方法,其特征在于,所述步骤3.4)中生成第二部分签名r的过程如下:
第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n;
若r不等于0,则转入下一步,若r等于0,则第二通信方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。
5.一种轻量级的基于SM2算法的协同签名装置,其特征在于,包括:
签名参数初始化模块,用于产生整个签名过程中所需的公开参数;所述参数包括:SM2算法的椭圆曲线相关参数(q,Fq,n,G)、密码杂凑函数Hash();
其中,q为大素数,Fq为包含q个元素的有限域,n为素数,G为椭圆曲线的一个基点,其阶为n;
秘钥生成模块,用于第一通信方和第二通信方产生自己的公私密钥,以及用户的公钥;具体过程如下:
1)第一通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D1作为第一通信方的私钥,即有:D1∈[1,n-1];
2)第二通信方产生一个位于[1,n-1]之间的随机数,将产生的随机数D2作为第一通信方的私钥,即有:D2∈[1,n-1];
3)第一通信方计算D1在Fq上的逆元D1 -1mod n;mod表示求模运算;
4)第二通信方计算D2在Fq上的逆元D2 -1mod n;mod表示求模运算;
5)第一通信方计算P1=D1 -1[*]G,将计算结果P1发送给第二通信方;其中,[*]表示椭圆曲线点乘运算;
6)第二通信方计算P2=D2 -1[*]G,将计算结果P2发送给第一通信方;其中,[*]表示椭圆曲线点乘运算;
7)第一通信方计算W1=D1 -1[*]P2,存储计算结果W1;其中,[*]表示椭圆曲线点乘运算;
8)第一通信方计算:P=W1[-]G=D1 -1[*]P2[-]G,将计算结果P作为公钥公开;其中,[-]表示椭圆曲线点减运算;
9)第二通信方计算P=D2 -1[*]P1[-]G,将计算结果P作为公钥公开;其中,[*]表示椭圆曲线点乘运算,[-]表示椭圆曲线点减运算;
签名生成模块,用于第一通信方和第二通信方根据待签名消息M生产签名;具体过程如下:
1)第一通信方生成待签名消息M的消息摘要e;
2)第一通信方产生一个位于[1,n-1]之间的随机数k1,并计算Q1=k1[*]W1,将计算结果Q1作为第一部分签名;即有:k1∈[1,n-1];Q1=k1[*]W1;其中,[*]表示椭圆曲线点乘运算;
3)第一通信方将e和第一部分签名Q1发送给第二通信方;
4)第二通信方根据e和第一部分签名Q1生成第二部分签名r;
5)第二通信方计算s2=D2*(r+k2)mod n,将计算结果作为s2;即有:s2=D2*(r+k2)mod n;其中,mod表示求模运算;
6)第二通信方将r和s2发送给第一通信方;
7)第一通信方计算s=k1+D1*s2-r mod n,得到计算结果s;若s等于0或等于n-r,则重新产生k1,并将与此相关的步骤重新执行,若s不等于0且不等于n-r,则执行步骤8);其中,mod表示求模运算;
8)若s不等于0且不等于n-r,则第一通信方将(r,s)作为待签名消息M的完整签名输出,同时,还可输出待签名消息M。
6.根据权利要求5所述的基于SM2算法的协同签名装置,其特征在于,所述签名生成模块步骤1)中第一通信方生成待签名消息M的消息摘要e的方法如下:
第一通信方将Z和待签名消息M拼接形成M',并计算Hash(M'),将计算结果作为e,其中,Z表示第一通信方和第二通信方共同的用户身份标识,Hash()表示预定的密码杂凑函数;
即有:M'=Z||M,||表示拼接;e=Hash(M')。
7.根据权利要求5所述的基于SM2算法的协同签名装置,其特征在于,所述签名生成模块步骤3)中生成第二部分签名r的过程如下:
第二通信方产生一个位于[1,n-1]之间的随机数k2,并计算k2[*]G[+]Q1,得到计算结果(x1,y1),并计算r=x1+e mod n,将计算结果r作为第二部分签名;即有:k2∈[1,n-1];(x1,y1)=k2[*]G[+]Q1;r=x1+e mod n;
若r不等于0,则转入下一步,若r等于0,则第二通信方重新产生k2,并重新计算得到(x1,y1)和r,直到r不等于0为止;其中,[*]表示椭圆曲线点乘运算,[+]表示椭圆曲线点加运算,mod表示求模运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910657004.XA CN110535636B (zh) | 2019-07-19 | 2019-07-19 | 一种轻量级的基于sm2算法的协同签名方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910657004.XA CN110535636B (zh) | 2019-07-19 | 2019-07-19 | 一种轻量级的基于sm2算法的协同签名方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110535636A CN110535636A (zh) | 2019-12-03 |
CN110535636B true CN110535636B (zh) | 2022-04-15 |
Family
ID=68660347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910657004.XA Active CN110535636B (zh) | 2019-07-19 | 2019-07-19 | 一种轻量级的基于sm2算法的协同签名方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110535636B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111010285B (zh) * | 2019-11-25 | 2023-04-18 | 武汉大学 | 一种适用于轻量级客户端的sm2两方协同签名方法及介质 |
CN113158258B (zh) * | 2021-03-31 | 2022-02-11 | 郑州信大捷安信息技术股份有限公司 | 一种基于椭圆曲线的协同签名方法、装置和系统 |
CN113918979B (zh) * | 2021-10-29 | 2024-09-20 | 西安邮电大学 | 基于移动key密钥保护技术的sm2签名方法 |
CN114205081B (zh) * | 2021-12-03 | 2023-12-19 | 中国科学院大学 | 一种保护用户隐私的盲协同签名方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103427997B (zh) * | 2013-08-16 | 2016-06-22 | 西安西电捷通无线网络通信股份有限公司 | 一种生成数字签名的方法及装置 |
CN104243456B (zh) * | 2014-08-29 | 2017-11-03 | 中国科学院信息工程研究所 | 适用于云计算的基于sm2算法的签名及解密方法和系统 |
CN108989047B (zh) * | 2018-07-19 | 2021-03-02 | 郑州信大捷安信息技术股份有限公司 | 一种基于sm2算法的通信双方协同签名方法与系统 |
-
2019
- 2019-07-19 CN CN201910657004.XA patent/CN110535636B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110535636A (zh) | 2019-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110535636B (zh) | 一种轻量级的基于sm2算法的协同签名方法与装置 | |
CN108989047B (zh) | 一种基于sm2算法的通信双方协同签名方法与系统 | |
CN109088726B (zh) | 基于sm2算法的通信双方协同签名及解密方法和系统 | |
CN107040385B (zh) | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 | |
CN110247757B (zh) | 基于国密算法的区块链处理方法、装置及系统 | |
EP3035590B1 (en) | Method and device for generating digital signature | |
CN104243456B (zh) | 适用于云计算的基于sm2算法的签名及解密方法和系统 | |
CN108667623B (zh) | 一种sm2椭圆曲线签名验证算法 | |
CN108667627B (zh) | 基于两方协同的sm2数字签名方法 | |
CN110535635B (zh) | 一种支持信息隐藏的协同签名方法与系统 | |
CN110011803B (zh) | 一种轻量级sm2两方协同生成数字签名的方法 | |
CN109450640B (zh) | 基于sm2的两方签名方法及系统 | |
CN109639439B (zh) | 一种基于两方协同的ecdsa数字签名方法 | |
CN113158258B (zh) | 一种基于椭圆曲线的协同签名方法、装置和系统 | |
CN109743166B (zh) | 多方签名生成方法及安全信息验证系统 | |
CN109547199B (zh) | 一种多方联合生成sm2数字签名的方法 | |
CN112187469B (zh) | 一种基于密钥因子的sm2多方协同数字签名方法和系统 | |
CN111010285A (zh) | 一种适用于轻量级客户端的sm2两方协同签名方法及介质 | |
CN113132104A (zh) | 一种主动安全的ecdsa数字签名两方生成方法 | |
CN114567448B (zh) | 一种协同签名方法以及协同签名系统 | |
CN110932866B (zh) | 一种基于sm2数字签名算法的环签名生成方法 | |
Chia et al. | Digital signature schemes with strong existential unforgeability | |
CN108964906B (zh) | 协同ecc的数字签名方法 | |
CN110943826B (zh) | 一种基于sm2算法的拆分密钥签名方法与系统 | |
CN116865970A (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 |