CN106603231A - 基于去秘密化的分布式sm2数字签名生成方法及*** - Google Patents
基于去秘密化的分布式sm2数字签名生成方法及*** Download PDFInfo
- Publication number
- CN106603231A CN106603231A CN201710040822.6A CN201710040822A CN106603231A CN 106603231 A CN106603231 A CN 106603231A CN 201710040822 A CN201710040822 A CN 201710040822A CN 106603231 A CN106603231 A CN 106603231A
- Authority
- CN
- China
- Prior art keywords
- mod
- calculated
- secret
- digital signature
- elliptic curve
- 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.)
- Granted
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/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/085—Secret sharing or secret splitting, e.g. threshold 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
-
- 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
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)
- Complex Calculations (AREA)
Abstract
发明涉及SM2数字签名生成方法:在[1,n‑1]中选一整数c;计算Gb=[c(1+dA)]G;将Gb、c给m个装置,m≥2;m个装置分别有秘密g1、g2、…、gm且(‑(1+dA)‑1dA)mod n=(g1+g2+…+gm)mod n;需使用SM2私钥dA对消息数字签名时,m个装置通过交互计算出r=(e+x1)mod n,其中(x1,y1)=[k1+k2+…+km]Gb,ki是装置i在[1,n‑1]中任选的整数,e是消息杂凑值;每个装置计算si=(cki+gir)mod n;由一装置计算s=(s1+s2+…+sm)mod n;(r,s)为数字签名。
Description
技术领域
本发明属于信息安全技术领域,特别是基于去秘密化的分布式SM2数字签名生成方法及***。
背景技术
在公开密钥密码体制中,为了保障用户私钥的安全性,用户的私钥通常是存储在专门的密码硬件中使用,如存储在USB Key、SmartCard中使用,且私钥不能从密码硬件中导出。但是,在有些情况下,比如,由于成本的原因,或者由于没有合适的密码硬件(如移动通信终端),使得用户无法依赖密码硬件来存储私钥、以及使用私钥进行密码运算。对于这种情况,目前最常用的方法是使用纯软件的密码模块,并将用户私钥保存在用户计算装置本地的永久存储介质中(如个人电脑的磁盘、移动通信终端内的电子盘),并通过PIN(Personal Identification Number)码对私钥进行保护。当需要使用用户私钥时,软件密码模块从用户计算装置的永久存储介质读取用户私钥(必要时要求用户输入PIN码),然后进行密码运算。这种采用纯软件密码模、将用户私钥保存在用户计算装置本地的方式存在用户私钥泄露的风险,比如,攻击者通过木马窃取保存在用户计算装置中的用户私钥,破解用户保护私钥的PIN码,从而获得用户私钥;而且这种采用纯软件密码模块的方式,用户私钥最终需以明文形式导入到内存中使用,这样攻击者有可能通过一定的攻击方式,窃取存放在内存中的用户私钥。如何在不采用密码硬件的情况下,安全存储和使用用户私钥具有现实的需求,对此问题的解决具有很好的实际应用意义。
对此问题常见的解决方案是,将用户私钥通过一定的方式分割成多份,每份称为秘密份额,然后将每份秘密份额存储到不同的计算装置中,尤其是将部分秘密份额存放在安全保护措施到位、安全条件好的专业的密码服务机构的在线密码服务***中;当密码应用程序、***需要使用用户私钥进行密码运算时,如进行数字签名或数据解密时,多个计算装置分别使用自己的秘密份额进行密码运算,最后将各装置计算的结果合并,形成最后的、使用用户私钥进行密码运算的结果(数字签名或数据解密的结果)。这里,对用户私钥进行的秘密分割可以是普通秘密分割,也可以是门限秘密分割。
SM2是由国家密码管理局颁布的一种椭圆曲线公钥密码算法(参见《SM2椭圆曲线公钥密码算法》规范,国家密码管理局,2010年12月),基于此算法能实现数字签名、密钥交换及数据加密。但是,由于SM2算法独特的数字签名运算方式,通常的秘密共享(分割)方式及对应的基于秘密共享的密码运算方式无法适合于使用SM2私钥进行数字签名的情形。
发明内容
本发明的目的是提出支持秘密共享的分布式SM2数字签名生成方法及相应的***,以满足没有密码硬件的情况下,安全使用用户SM2私钥进行数字签名的需求。
针对本发明的目的,本发明提出了两种基于去秘密化的分布式SM2数字签名生成方法,下面给出具体描述。
在以下对本发明技术方案的描述中,若P、Q是椭圆曲线点群中的元素(点),则P+Q表示P、Q的点加,[k]P表示k个椭圆曲线点P的点加,即P+P+...+P(共有k个P);省略号“...”,表示多个同样(类型)的数据项或多个同样的运算;c-1表示整数c的模n乘法逆(即cc-1mod n=1);多个整数相乘(包括整数符号相乘、常数与整数符号相乘),在不产生二义性的情况下,省略掉乘号“·”,如k1·k2简化为k1k2,3·c,简化位3c;mod n表示模n运算(modulooperation),对应于《SM2椭圆曲线公钥密码算法》规范(国家密码管理局,2010年12月)中的modn;还有,模n运算的算子mod n的优先级是最低的,如a+b mod n等同于(a+b)mod n,a-bmod n等同于(a-b)mod n,ab mod n等同于(ab)mod n。
本发明的方法一具体如下。
生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;
在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:
在区间[1,n-1]中选取一个整数c(c是随机选择的一个整数或是固定选取的一个整数,如固定选取c=1,或者是在应用其他去秘密化方法的过程中选取或生成的整数,只要它是[1,n-1]中的一个整数即可),其中n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶(SM2密码运算所使用的椭圆曲线点群是指由基点G生成的循环群);
给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是gi,i=1,2,…,m,gi是区间[1,n-1]内的整数(比如,对于普通秘密共享,gi就是秘密份额;对于门限秘密共享,gi是从秘密份额导出的秘密数);
m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(二者之一):
(1+dA)-1=(g1+g2+…+gm)mod n,
或(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,
其中(1+dA)-1是(1+dA)的模n乘法逆(即(1+dA)(1+dA)-1mod n=1);
(这里(1+dA)-1或(-(1+dA)-1dA)mod n是被共享的秘密,对(1+dA)-1或(-(1+dA)-1dA)mod n的秘密分割可以是普通秘密分割,也可以是门限秘密分割)
计算Gb=[c(1+dA)]G,其中G是SM2椭圆曲线点群的基点;
将c、Gb分发给所有m个装置;
(m个装置都不保存dA;进行这些初始化操作的可以是一个专门的密钥管理***,或用户计算装置中的一个密码模块、密钥管理工具)
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成(需要使用用户的SM2私钥dA针对消息M进行数字签名的主体可以是调用这些装置的密码应用程序、***或密码模块,或其中一个装置中的密码应用程序、***):
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);
之后,每个装置计算si=(cki+gir)mod n,其中i=1,2,…,m,si对应装置i所进行的计算;
最后,m个装置中的一个装置(任一个装置)进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
在上述数字签名生成过程中,r、e、si,i=1,2,…,m,根据计算的需要在m个装置之间传送(如通过网络传送)。
在上述方法一中,在针对消息M进行数字签名时,m个装置按如下方式,或者按与如下方式等同的方式,通过交互计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点):
m个装置中的每个装置在区间[1,n-1]中随机选择一个整数ki,计算得到Qi=[ki]Gb,其中,i=1,2,…,m,分别表示装置i随机选择的整数ki,所进行的计算及计算得到的Qi;
之后,由m个装置中的一个装置(任一个装置)计算Q=Q1+Q2+…+Qm,此时,Q=[k1+k2+…+km]Gb(计算过程中Q1,Q2,…,Qm可在装置间传递);
若进行Q=Q1+Q2+…+Qm计算的是装置j,其中j=1,或2,…,或m,则在完成Q的计算后,装置j检查Q是否是SM2椭圆曲线点群的零元(无穷远点),若是,则装置j重新选择kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,重复此过程,直到Q不是零元;若Q不是零元,则装置j取(x1,y1)=Q,计算r=(e+x1)mod n;
若计算得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),则Q、r的计算完成;否则,装置j重新在区间[1,n-1]中随机选择一个整数kj,然后重新计算Qj、Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,重复此过程,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);
或者,若r=0或[r]G+Q是SM2椭圆曲线点群的零元(无穷远点),则所有m个装置一起从头重新进行Q、r的计算(即每个装置重新选择ki,计算Qi=[ki]Gb,其中i=1,2,…,m,表示装置i的Qi和ki,其中一个装置重新计算Q=Q1+Q2+…+Qm、重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n),直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);
所述等同的方式,即同样能得到Q=[k1+k2+…+km]Gb、并在Q不是SM2椭圆曲线点群的零元时依据Q计算得到r,且使得r、Q满足r≠0且[r]G+Q不是SM2椭圆曲线点群的零元的方式。
计算Q、r时,若计算Q=Q1+Q2+…+Qm、r=(e+x1)mod n的装置(即前面的所述装置j),在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元(无穷远点),且仅在r=0时重新进行Q、r计算(只要r≠0就不重新进行Q、r计算),则:
根据s1,s2,…,sm计算s的装置(m个装置中的一个装置),若检查发现(s+r)mod n=0,则放弃计算得到的s,数字签名生成过程中计算Q、r的装置j,其中j=1,或2,…,或m,重新在区间[1,n-1]中随机选择一个整数kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s,重复此过程,直到最后计算得到的s满足(s+r)mod n≠0;
或者根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则所有m个装置一起从头重新进行Q、r的计算(每个装置重新选择ki、计算Qi=[ki]Gb,其中i=1,2,…,m,分别表示装置i选择的ki和计算的Qi,然后其中的一个装置重新计算Q=Q1+Q2+…+Qm、确定Q是否为零元、以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s),直到最后计算得到的s满足(s+r)mod n≠0。
以上所述方法一,根据被共享(分割)的秘密的不同,如(1+dA)-1或者(-(1+dA)-1dA)mod n,实际上又对应两个略有不同的方案,在具体实施时,只需实施其中的一个方案即可。
对于以上所述SM2数字签名生成方法,用户的公钥仍然是[dA]G,在进行秘密分割前计算得到,并公开发布。
本发明的方法二具体如下。
同样地,生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;
在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:
在区间[1,n-1]中选取两个整数c、u(前面的方法一样,c、u是随机选择的整数,或者是固定选取的整数,如固定选取c=1,或者是在应用其他去秘密化方法的过程中选取或生成的整数,只要它们是[1,n-1]中的整数即可),其中n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶(SM2密码运算所使用的椭圆曲线点群是指由基点G生成的循环群);
给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是gi,i=1,2,…,m,gi是区间[1,n-1]内的整数(比如,对于普通秘密共享,gi就是秘密份额;对于门限秘密共享,gi是从秘密份额导出的秘密数);
m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(二者之一):
(1+dA)-1=(g1+g2+…+gm)mod n,
或(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,
其中(1+dA)-1是(1+dA)的模n乘法逆(即(1+dA)(1+dA)-1mod n=1);
(这里(1+dA)-1或(-(1+dA)-1dA)mod n是被共享的秘密,对(1+dA)-1或(-(1+dA)-1dA)mod n的秘密分割可以是普通秘密分割,也可以是门限秘密分割)
计算Gb=[c(1+dA)]G,Gu=[mu(1+dA)]G,其中G是SM2椭圆曲线点群的基点;
将c、u、Gb分发给所有m个装置,将Gu分发给需要的装置(Gu不保密,对一个装置而言Gu只是需要或不需要的问题);
(m个装置都不保存dA;进行这些初始化操作的可以是一个专门的密钥管理***,或用户计算装置中的一个密码模块、密钥管理工具)
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成(需要使用用户的SM2私钥dA针对消息M进行数字签名的主体可以是调用这些装置的密码应用程序、***或密码模块,或其中一个装置中的密码应用程序、***):
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);
之后,每个装置计算si=(cki+gir+u)mod n,其中i=1,2,…,m,si对应装置i所进行的计算;
最后,m个装置中的一个装置(任一个装置)进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
在上述数字签名生成过程中,r、e、si,i=1,2,…,m,根据计算的需要在m个装置之间传送(如通过网络传送)。
对于方法二的以上所述方案,若Gu=[u(1+dA)]G(同样需将Gu分发给需要的装置),则相应地:
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成:
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);
之后,每个装置计算si=(cki+gir+m-1u)mod n,其中i=1,2,…,m,si对应装置i所进行的计算,m-1是m的模n乘法逆(即m-1m mod n=1);
最后,m个装置中的一个装置(任一个装置)进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
对于以上方法二(包括作了变化的方法二),在针对消息M进行数字签名时,m个装置按如下方式,或者按与如下方式等同的方式,通过交互计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点):
m个装置中的每个装置在区间[1,n-1]中随机选择一个整数ki,计算得到Qi=[ki]Gb,其中,i=1,2,…,m,分别表示装置i随机选择的整数ki,所进行的计算及计算得到的Qi;
之后,由m个装置中的一个装置(任一个装置)计算Q=Q1+Q2+…+Qm+Gu,此时,Q=[k1+k2+…+km]Gb+Gu(计算过程中Q1,Q2,…,Qm可在装置间传递);
若进行Q=Q1+Q2+…+Qm+Gu计算的是装置j,其中j=1,或2,…,或m,则在完成Q的计算后,装置j检查Q是否是SM2椭圆曲线点群的零元(无穷远点),若是,则装置j重新选择kj,重新计算Qj,然后重新计算Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,重复此过程,直到Q不是零元;若Q不是零元,则装置j取(x1,y1)=Q,计算r=(e+x1)mod n;
若计算得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),则Q、r的计算完成;否则,装置j重新在区间[1,n-1]中随机选择一个整数kj,然后重新计算Qj、Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)modn,重复此过程,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);
或者,若r=0或[r]G+Q是SM2椭圆曲线点群的零元(无穷远点),则所有m个装置一起从头重新进行Q、r的计算(即每个装置重新选择ki,计算Qi=[ki]Gb,其中i=1,2,…,m,表示装置i的Qi和ki,其中一个装置重新计算Q=Q1+Q2+…+Qm+Gu、重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n),直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);
所述等同的方式,即同样能得到Q=[k1+k2+…+km]Gb+Gu、并在Q不是SM2椭圆曲线点群的零元时依据Q计算得到r,且使得r、Q满足r≠0且[r]G+Q不是SM2椭圆曲线点群的零元的方式。
计算Q、r时,若计算Q=Q1+Q2+…+Qm+Gu、r=(e+x1)mod n的装置(即前面的所述装置j),在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元(无穷远点),且仅在r=0时重新进行Q、r计算(只要r≠0就不重新进行Q、r计算),则:
根据s1,s2,…,sm计算s的装置(m个装置中的一个装置),若检查发现(s+r)mod n=0,则放弃计算得到的s,数字签名生成过程中计算Q、r的装置j,其中j=1,或2,…,或m,重新在区间[1,n-1]中随机选择一个整数kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s,重复此过程,直到最后计算得到的s满足(s+r)mod n≠0;
或者根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则所有m个装置一起从头重新进行Q、r的计算(每个装置重新选择ki、计算Qi=[ki]Gb,其中i=1,2,…,m,分别表示装置i选择的ki和计算的Qi,然后其中的一个装置重新计算Q=Q1+Q2+…+Qm+Gu、确定Q是否为零元、以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s),直到最后计算得到的s满足(s+r)mod n≠0。
同样地,对于以上所述方法二(包括变化了的方法),根据被共享(分割)的秘密的不同,如(1+dA)-1或者(-(1+dA)-1dA)mod n,实际上又对应两个略有不同的方案,在具体实施时,只需实施其中的一个方案即可。
同样地,对于以上所述方法二,用户的公钥仍然是[dA]G,在进行秘密分割前计算得到,并公开发布。
从以上发明内容并结合实施例可以看到,基于本发明的SM2数字签名生成方法,当用户没有硬件密码装置存放SM2私钥时,可以将与用户的私钥dA相关的秘密数据,分别存放在不同装置中,如用户的计算装置(如个人电脑、移动终端)、一个或多个密码服务***的密码服务器中;在需要使用用户的SM2私钥对消息进行数字签名时,多个装置使用各自拥有的秘密数据(秘密份额或秘密份额的导出的数据)进行运算,通过交互生成最终的数字签名,而且在交互过程中,每个装置都***露自己的秘密;除非攻击者能同时获得分布在不同装置中的足够数量的秘密份额,否则,攻击者无法恢复用户私钥;由于攻击者要同时获得分布在不同装置中的、足够数量的秘密份额的可能性非常低,或者几乎不可能,比如攻击者很难获得专业密码服务机构的密码服务***中的秘密份额,这就大大提高了在没有密码硬件的情况下,用户SM2私钥使用的安全性。
与现有的技术方案相比,本发明的方法简单,不但适合于两方共享秘密,而且适合于多方共享秘密,不但适合于普通的秘密共享(分割),而且适合于门限秘密共享(分割)。
本发明的方法,通过引入Gb=[c(1+dA)]G、Gu=[mu(1+dA)]G或Gu=[u(1+dA)],将计算(1+dA)-1k变成了计算ck或ck+u或ck+m-1u,其中c、u是在[1,n-1]中选取或选定的非保密的整数,而Gb、Gu也是非保密的,这就将涉及秘密(1+dA)-1的运算(1+dA)-1k变成了非涉密的运算ck或ck+u或ck+m-1u,即实现了(1+dA)-1k的去秘密化,于此同时,将秘密(1+dA)-1或者秘密(-(1+dA)-1dA)mod n在多个装置中(分割)共享,之后,在针对消息M进行数字签名时,由多个装置协同、通过分布计算,最终生成使用用户的SM2私钥dA、针对消息的SM2数字签名。
附图说明
无。
具体实施方式
下面结合实施例对本发明作进一步的描述。以下实施例只表示本发明几种可能的实施方式,不是全部可能的实施方式,不作为对本发明的限定。
对于本发明方法一、二中的c的选取,最简单的方式是固定选取c=1,或者在[1,n-1]中随机选择一个整数作为c,或者在应用其他去秘密化方法的过程中生成c。
去秘密化的关键是将计算(1+dA)-1k变成计算ck或ck+u或ck+m-1u,其中c、u是在[1,n-1]中选取或选定的非保密的整数。除了固定或随机选取c,去秘密化的另一种方法是用一个在[1,n-1]中随机选择的整数与涉及秘密的整数进行模n乘法运算,然后将模n乘积作为非秘密数公开,以下是一些采用这种去秘密化方式生成c的例子(不代表全部)。
去秘密化实例1、
分布式SM2数字签名使用的公式是((1+dA)-1(k+r)-r)mod n,在[1,n-1]中随机选择一个整数b,令c=(1+dA)-1b mod n,SM2数字签名转化为计算(c(k+b-1r)-r)mod n(其中b-1是b的模n乘法逆,即b-1b mod n=1),此时Gb=[c(1+dA)]G=[b]G(这里的b不是椭圆曲线方程中的参数b)。
去秘密化实例2、
分布式SM2数字签名使用的公式是((1+dA)-1k-(1+dA)-1dAr)mod n,在[1,n-1]中随机选择一个整数b,令c=(1+dA)-1b mod n,SM2数字签名转化为计算(ck-(1+dA)-1dAr)modn,此时Gb=[c(1+dA)]G=[b]G。
去秘密化实例3、
分布式SM2数字签名使用的公式是((1+dA)-1dA((dA)-1k-r))mod n,在[1,n-1]中随机选择整数b、a,令w=(1+dA)-1dAb mod n,v=a(dA)-1mod n,SM2数字签名转化为计算(w(vk-b-1r))mod n,此时c=wv mod n=ba(1+dA)-1mod n,Gb=[c(1+dA)]G=[ba]G(这里的b、a不是椭圆曲线方程中的参数b、a)。
去秘密化实例4、
分布式SM2数字签名使用的公式是(k-(1+dA)-1dA(k+r))mod n,在[1,n-1]中随机选择整数b、h,令w=(1+dA)-1dAb mod n,SM2数字签名转化为计算(hk-w(k+b-1r))mod n,此时,c=(h-w)mod n(要求c≠0),Gb=[c(1+dA)]G=[h(1+dA)-bdA]G。
对于本发明方法二中的u,可以在[1,n-1]中任意选择一个整数作为u,或者固定选取一个整数作为u,或者在应用其他去秘密化方法的过程中生成u。
去秘密化实例5、
分布式SM2数字签名使用的公式是(k-(1+dA)-1dA(k+r))mod n,在[1,n-1]中随机选择两个整数c、k0,令u=(-(1+dA)-1dAk0)mod n,SM2数字签名转化为计算(ck-(1+dA)-1dAr+u)mod n,此时,Gb=[c(1+dA)]G,Gu=[mu(1+dA)]G。
对于本发明的方法(方法一、方法二),要分割、共享的秘密是(1+dA)-1或(-(1+dA)- 1dA)mod n。对(1+dA)-1或(-(1+dA)-1dA)mod n的秘密分割有普通秘密分割和门限秘密共享分割。
若是普通秘密分割,则很简单。令h=(1+dA)-1或h=(-(1+dA)-1dA)mod n,若有m个装置,则在区间[1,n-1]中随机选择m-1个整数,g1,g2,…,gm-1,计算gm=(h-(g1+g2+…+gm-1))mod n,若gm≠0,则g1,g2,…,gm即是所需的秘密分割,若gm=0,则重新选择g1,g2,…,gm-1,直到gm≠0。
除了直接对(1+dA)-1或(-(1+dA)-1dA)mod n进行秘密分割外,对应于前面的去秘密化实例,还有如下的秘密分割方式(不代表全部)。
对应于去秘密化实例1,可以先将b-1分割,即先获得b1,b2,…,bm,使得b-1=(b1+b2+…+bm)mod n(按前面分割(1+dA)-1或(-(1+dA)-1dA)mod n一样的方式),则gi=cbi mod n,i=1,2,…,m,为(1+dA)-1对应的秘密分割。
对应于去秘密化实例3或4,可以先将(-b-1)mod n分割,即先获得b1,b2,…,bm,使得(-b-1)mod n=(b1+b2+…+bm)mod n(与分割b-1一样的方式),则gi=wbi mod n,i=1,2,…,m,为(-(1+dA)-1dA)mod n对应的秘密分割。
若采用门限秘密共享分割,则可以采用Shamir或拉格朗日秘密共享方案。此时,本发明中进行数字签名操作处理的m个装置,仅是全部p个装置中的m个(p≥m),即采用(m,p)的门限方案;初始化时,按门限秘密共享算法,将秘密h=(1+dA)-1或h=(-(1+dA)-1dA)mod n在所有p个装置中分享;而在应用本发明的方法时,m个装置的秘密数据g1,g2,…,gm是参与数字签名生成的m个装置中的每个装置,依据自身的门限秘密(秘密份额),针对此时的m个装置计算得到的秘密数(若p>m,那么,针对不同的m个装置,每个装置依据门限秘密份额进行恢复秘密的操作时,每个装置依据秘密份额计算得到的秘密数是不同的,它取决于恢复秘密时参与的装置是哪m个,对于熟悉Shamir或拉格朗日秘密共享方案的人而言,这些是很容易理解的)。
以上秘密分割方法,只是对(1+dA)-1或(-(1+dA)-1dA)mod n分割的两种可能方案,不是全部的方案。
以下是本发明的一些实施例,以下实施例同时适合于本发明的方法一、方法二。
实施例1、
在此实施例中,m=2,采用普通秘密共享方案,用户的计算装置(如个人电脑、移动通信终端)是本发明的SM2数字签名生成方法中的两个装置中的一个(装置1或装置2),本发明方法中的另一个装置是密码服务***中的密码服务器(作为装置2或装置1);用户的计算装置和密码服务器都不保存用户的SM2私钥dA;(1+dA)-1或(-(1+dA)-1dA)mod n的秘密份额g1、g2,一份保存在用户计算装置中,另一份保存在密码服务器中;当用户计算装置中的密码应用程序或***要使用用户的SM2私钥dA对消息进行签名时,用户计算装置(实际上通常是用户计算装置中的密码模块)与密码服务***的密码服务器交互,应用本发明的方法、使用秘密份额g1、g2生成消息的数字签名。
实施例2、
在此实施例中,m=2,采用普通秘密共享,两个装置中一个装置是一个机构的密码服务***中的密码服务器,另一个装置是另一个机构的密码服务***中的密码服务器;用户计算装置(如个人电脑、移动终端)以及两个机构的密码服务器都不保存用户的SM2私钥dA;(1+dA)-1或(-(1+dA)-1dA)mod n的两份秘密份额g1、g2,分别保存在两个机构的密码服务***的密码服务器中;当用户计算装置中的密码应用程序或***要使用用户的SM2私钥dA对消息进行签名时,用户计算装置(实际上通常是用户计算装置中的密码模块)将请求发送到一个密码服务***,之后两个密码服务***的密码服务器通过交互,应用本发明的方法、使用秘密份额g1、g2生成消息的数字签名,然后将生成的签名被返回给用户计算装置;在数字签名生成过程中,分属两个机构的密码服务***中的密码服务器中的任一个可以都作为本发明的数字签名生成方法中的装置1,而另一个作为装置2。
实施例3、
在此实施例中,m=3,采用普通秘密共享,其中一个装置是一个机构的密码服务***中的密码服务器A,另一个装置是另一个机构的密码服务***中的密码服务器B,还有一个装置是用户的计算装置(如个人电脑、移动终端);密码服务器A、B和用户计算装置中的任一个可作为装置1、装置2或3;用户计算装置以及两个机构的密码服务***的密码服务器都不保存用户的SM2私钥dA;(1+dA)-1或(-(1+dA)-1dA)mod n的3份秘密份额g1、g2、g3,被分别保存在密码服务器A、B,以及用户计算装置中;当用户计算装置中的密码应用程序要使用用户的SM2私钥dA对消息进行签名时,用户计算装置、密码服务器A、密码服务器B通过交互,应用本发明的方法、使用秘密份额g1、g2、g3生成消息的数字签名。
实施例4、
在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。
三个装置的一个是密码服务***中的密码服务器,另两个装置,一个是用户的个人电脑,另一个是用户的移动终端;(1+dA)-1或(-(1+dA)-1dA)mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器、用户的个人电脑、用户的移动终端;在应用本发明的方法时,假设本发明中的装置1始终是密码服务器,而本发明中的装置2或者是用户的个人电脑,或者是用户的移动终端,取决于用户的哪个装置参与数字签名的生成过程。
当用户的个人电脑要使用用户的SM2私钥进行数字签名时,密码服务器、用户的个人电脑(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的g1、g2,然后使用g1、g2生成消息的数字签名;当用户的移动终端要使用用户的SM2私钥进行数字签名时,密码服务器、用户的移动终端(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的g1、g2(或者g1、g2已预先算好、保存,下同),使用g1、g2生成消息的数字签名(对于门限秘密共享,恢复秘密时的参与方不同,由门限秘密算出的相应的秘密数是不同的)。
实施例5、
在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。
三个装置中的一个是一个机构的密码服务***的密码服务器A,一个是另一个机构的密码服务***的密码服务器B,再有一个是用户的计算装置(如个人电脑、移动终端);(1+dA)-1或(-(1+dA)-1dA)mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B和用户的计算装置;在应用本发明的方法时,假设本发明中的装置1始终是用户的计算装置,而本发明中的装置2或者是密码服务器A,或者是密码服务器B,取决于哪个密码服务器参与数字签名的生成。
当用户的计算装置要使用用户的SM2私钥进行数字签名时,用户计算装置先尝试与密码服务器A建立连接,若无法与密码服务器A建立连接,则尝试与密码服务器B建立连接。若用户计算装置与密码服务器A成功建立连接,则密码服务器A、用户的计算装置(中的密码模块)根据它们各自拥有的门限秘密(秘密份额)及门限算法,分别算出各自此时的g1、g2,然后使用g1、g2生成消息的数字签名;若用户计算装置与密码服务器A无法建立连接,但之后与密码服务器B成功建立连接,则密码服务器B、用户的计算装置(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的g1、g2,使用g1、g2生成消息的数字签名。
实施例6、
在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。
三个装置分别是分属三个机构的密码服务***的密码服务器A、密码服务器B、密码服务器C;(1+dA)-1或(-(1+dA)-1dA)mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B、密码服务器C;在应用本发明的方法时,参与数字签名生成的两个服务器分别对应本发明中的装置1、装置2。
当用户的计算装置要使用用户的SM2私钥进行数字签名时,三个密码服务器中的两个(至于如何选择其中的两个,取决于实施者的方案),根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的g1、g2,然后使用g1、g2生成消息的数字签名。
实施例7、
在此实施例中,采用(3,4)的门限秘密共享,共四个装置,其中任意三个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=3。
四个装置中的两个是属于同一个机构的密码服务***的密码服务器A、B,或者分属是不同机构的密码服务***的密码服务器A、B,四个装置中的另两个装置,一个是用户的个人电脑,一个是用户的移动终端,用户的两个装置只有一个参与数字签名的生成。(1+dA)-1或(-(1+dA)-1dA)mod n的按门限秘密共享算法生成的4份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B、以及用户的个人电脑、移动终端。假定密码服务器A、B是本发明中的装置1、装置2,而生成数字签名时,参与数字签名生成过程的用户装置假定是本发明的装置3。
当用户的一个装置,如个人电脑或移动终端,需要使用用户的SM2私钥生成针对消息的数字签名时,密码服务器A、密码服务器B、用户的装置各自根据自己拥有的门限秘密和门限算法,分别算出针对此时三个装置的秘密数g1、g2、g3,然后通过交互应用本发明方法、使用各自的秘密数g1、g2、g3生成数字签名。
基于本发明的方法(包括方法一、方法二),很容易构建实施本发明方法的***。
基于本发明的SM2数字签名生成方法构建的SM2数字签名生成***包括m个装置,其中m大于或等于2;m个装置中的每个装置是一个密码服务器或一个用户计算装置;m个装置按本发明的数字签名生成方法,生成使用用户的SM2私钥dA针对消息M的数字签名。
其他未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。
Claims (9)
1.一种基于去秘密化的分布式SM2数字签名生成方法,其特征是:
生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;
在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:
在区间[1,n-1]中选取一个整数c,其中n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶;
给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是gi,i=1,2,…,m,gi是区间[1,n-1]内的整数;
m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系:
(1+dA)-1=(g1+g2+…+gm)mod n,
或(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,
其中(1+dA)-1是(1+dA)的模n乘法逆;
计算Gb=[c(1+dA)]G,其中G是SM2椭圆曲线点群的基点;
将c、Gb分发给所有m个装置;
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成:
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元,其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值;
之后,每个装置计算si=(cki+gir)mod n,其中i=1,2,…,m,si对应装置i所进行的计算;
最后,m个装置中的一个装置进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
2.根据权利要求1所述的基于去秘密化的分布式SM2数字签名生成方法,其特征是:
在针对消息M进行数字签名时,m个装置按如下方式,或者按与如下方式等同的方式,通过交互计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元:
m个装置中的每个装置在区间[1,n-1]中随机选择一个整数ki,计算得到Qi=[ki]Gb,其中,i=1,2,…,m,分别表示装置i随机选择的整数ki,所进行的计算及计算得到的Qi;
之后,由m个装置中的一个装置计算Q=Q1+Q2+…+Qm,此时,Q=[k1+k2+…+km]Gb;
若进行Q=Q1+Q2+…+Qm计算的是装置j,其中j=1,或2,…,或m,则在完成Q的计算后,装置j检查Q是否是SM2椭圆曲线点群的零元,若是,则装置j重新选择kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,重复此过程,直到Q不是零元;若Q不是零元,则装置j取(x1,y1)=Q,计算r=(e+x1)mod n;
若计算得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元,则Q、r的计算完成;否则,装置j重新在区间[1,n-1]中随机选择一个整数kj,然后重新计算Qj、Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,重复此过程,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元;
或者,若r=0或[r]G+Q是SM2椭圆曲线点群的零元,则所有m个装置一起从头重新进行Q、r的计算,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元;
所述等同的方式,即同样能得到Q=[k1+k2+…+km]Gb、并在Q不是SM2椭圆曲线点群的零元时依据Q计算得到r,且使得r、Q满足r≠0且[r]G+Q不是SM2椭圆曲线点群的零元的方式。
3.根据权利要求2所述的基于去秘密化的分布式SM2数字签名生成方法,其特征是:
若计算Q=Q1+Q2+…+Qm、r=(e+x1)mod n的装置,在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元,且仅在r=0时重新进行Q、r计算,则:
根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则放弃计算得到的s,数字签名生成过程中计算Q、r的装置j,其中j=1,或2,…,或m,重新在区间[1,n-1]中随机选择一个整数kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s,重复此过程,直到最后计算得到的s满足(s+r)mod n≠0;
或者根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则所有m个装置一起从头重新进行Q、r的计算,直到最后计算得到的s满足(s+r)mod n≠0。
4.一种基于权利要求1-3中任一项的SM2数字签名生成***,其特征是:
所述SM2数字签名生成***包括m个装置,其中m大于或等于2;所述m个装置中的每个装置是一个密码服务器或一个用户计算装置;所述m个装置按所述数字签名生成方法,生成使用用户的SM2私钥dA针对消息M的数字签名。
5.一种基于去秘密化的分布式SM2数字签名生成方法,其特征是:
生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;
在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:
在区间[1,n-1]中选取两个整数c、u,其中n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶;
给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是gi,i=1,2,…,m,gi是区间[1,n-1]内的整数;
m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系:
(1+dA)-1=(g1+g2+…+gm)mod n,
或(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,
其中(1+dA)-1是(1+dA)的模n乘法逆;
计算Gb=[c(1+dA)]G,Gu=[mu(1+dA)]G,其中G是SM2椭圆曲线点群的基点;
将c、u、Gb分发给所有m个装置,将Gu分发给需要的装置;
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成:
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元,其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值;
之后,每个装置计算si=(cki+gir+u)mod n,其中i=1,2,…,m,si对应装置i所进行的计算;
最后,m个装置中的一个装置进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
6.根据权利要求5所述的基于去秘密化的分布式SM2数字签名生成方法,其特征是:
若Gu=[u(1+dA)]G,则:
当需要使用用户的SM2私钥dA针对消息M进行数字签名时,m个装置按如下方式进行数字签名的生成:
首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元,其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值;
之后,每个装置计算si=(cki+gir+m-1u)mod n,其中i=1,2,…,m,si对应装置i所进行的计算,m-1是m的模n乘法逆;
最后,m个装置中的一个装置进行如下计算:
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(1+dA)-1=(g1+g2+…+gm)mod n,则计算s=((s1+s2+…+sm)-r)mod n;
若m个装置的秘密份额或者从秘密份额导出的秘密数与dA满足关系(-(1+dA)-1dA)mod n=(g1+g2+…+gm)mod n,则计算s=(s1+s2+…+sm)mod n;
计算得到的(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。
7.根据权利要求5或6所述的基于去秘密化的分布式SM2数字签名生成方法,其特征是:
在针对消息M进行数字签名时,m个装置按如下方式,或者按与如下方式等同的方式,通过交互计算得到Q=[k1+k2+…+km]Gb+Gu,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元:
m个装置中的每个装置在区间[1,n-1]中随机选择一个整数ki,计算得到Qi=[ki]Gb,其中,i=1,2,…,m,分别表示装置i随机选择的整数ki,所进行的计算及计算得到的Qi;
之后,由m个装置中的一个装置计算Q=Q1+Q2+…+Qm+Gu,此时,Q=[k1+k2+…+km]Gb+Gu;
若进行Q=Q1+Q2+…+Qm+Gu计算的是装置j,其中j=1,或2,…,或m,则在完成Q的计算后,装置j检查Q是否是SM2椭圆曲线点群的零元,若是,则装置j重新选择kj,重新计算Qj,然后重新计算Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,重复此过程,直到Q不是零元;若Q不是零元,则装置j取(x1,y1)=Q,计算r=(e+x1)mod n;
若计算得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元,则Q、r的计算完成;否则,装置j重新在区间[1,n-1]中随机选择一个整数kj,然后重新计算Qj、Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,重复此过程,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元;
或者,若r=0或[r]G+Q是SM2椭圆曲线点群的零元,则所有m个装置一起从头重新进行Q、r的计算,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元;
所述等同的方式,即同样能得到Q=[k1+k2+…+km]Gb+Gu、并在Q不是SM2椭圆曲线点群的零元时依据Q计算得到r,且使得r、Q满足r≠0且[r]G+Q不是SM2椭圆曲线点群的零元的方式。
8.根据权利要求7所述的基于去秘密化的分布式SM2数字签名生成方法,其特征是:
若计算Q=Q1+Q2+…+Qm+Gu、r=(e+x1)mod n的装置,在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元,且仅在r=0时重新进行Q、r计算,则:
根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则放弃计算得到的s,数字签名生成过程中计算Q、r的装置j,其中j=1,或2,…,或m,重新在区间[1,n-1]中随机选择一个整数kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm+Gu,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s,重复此过程,直到最后计算得到的s满足(s+r)mod n≠0;
或者根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则所有m个装置一起从头重新进行Q、r的计算,直到最后计算得到的s满足(s+r)mod n≠0。
9.一种基于权利要求5或6的SM2数字签名生成***,其特征是:
所述SM2数字签名生成***包括m个装置,其中m大于或等于2;所述m个装置中的每个装置是一个密码服务器或一个用户计算装置;所述m个装置按所述数字签名生成方法,生成使用用户的SM2私钥dA针对消息M的数字签名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710040822.6A CN106603231B (zh) | 2017-01-20 | 2017-01-20 | 基于去秘密化的分布式sm2数字签名生成方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710040822.6A CN106603231B (zh) | 2017-01-20 | 2017-01-20 | 基于去秘密化的分布式sm2数字签名生成方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106603231A true CN106603231A (zh) | 2017-04-26 |
CN106603231B CN106603231B (zh) | 2019-08-23 |
Family
ID=58585136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710040822.6A Active CN106603231B (zh) | 2017-01-20 | 2017-01-20 | 基于去秘密化的分布式sm2数字签名生成方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106603231B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107483205A (zh) * | 2017-09-28 | 2017-12-15 | 武汉理工大学 | 一种基于加密的私钥秘密的数字签名生成方法及*** |
CN107528696A (zh) * | 2017-09-27 | 2017-12-29 | 武汉理工大学 | 一种隐藏私钥秘密的数字签名生成方法及*** |
CN107634836A (zh) * | 2017-09-05 | 2018-01-26 | 何德彪 | 一种sm2数字签名生成方法及*** |
CN109474422A (zh) * | 2018-11-19 | 2019-03-15 | 武汉大学 | 一种多方协同产生sm2数字签名的方法 |
CN110048839A (zh) * | 2019-04-26 | 2019-07-23 | 山东渔翁信息技术股份有限公司 | 一种数字签名方法、装置及存储介质 |
CN110266486A (zh) * | 2019-07-02 | 2019-09-20 | 武汉理工大学 | 基于乘积秘密共享的sm9数字签名简捷生成方法及*** |
CN110266472A (zh) * | 2019-04-09 | 2019-09-20 | 武汉理工大学 | 支持混合秘密共享的sm9数字签名协同生成方法及*** |
CN110519051A (zh) * | 2019-08-22 | 2019-11-29 | 武汉理工大学 | r参数和秘密双乘积的SM9签名协同生成方法及*** |
CN111106938A (zh) * | 2018-10-26 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、***及设备 |
WO2020114377A1 (en) * | 2018-12-03 | 2020-06-11 | Foris Limited | Secure distributed key management system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104113416A (zh) * | 2014-06-26 | 2014-10-22 | 北京天威诚信电子商务服务有限公司 | 基于电子签名的二维码验证方法及*** |
US20150057899A1 (en) * | 2013-08-23 | 2015-02-26 | Danfoss Power Solutions Inc. | Method for engagement and disengagement |
CN104486077A (zh) * | 2014-11-20 | 2015-04-01 | 中国科学院信息工程研究所 | 一种VoIP实时数据安全传输的端到端密钥协商方法 |
US20160270000A1 (en) * | 2013-09-10 | 2016-09-15 | M2M And Lot Technologies, Llc | Power Management and Security for Wireless Modules in "Machine-to-Machine" Communications |
-
2017
- 2017-01-20 CN CN201710040822.6A patent/CN106603231B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150057899A1 (en) * | 2013-08-23 | 2015-02-26 | Danfoss Power Solutions Inc. | Method for engagement and disengagement |
US20160270000A1 (en) * | 2013-09-10 | 2016-09-15 | M2M And Lot Technologies, Llc | Power Management and Security for Wireless Modules in "Machine-to-Machine" Communications |
CN104113416A (zh) * | 2014-06-26 | 2014-10-22 | 北京天威诚信电子商务服务有限公司 | 基于电子签名的二维码验证方法及*** |
CN104486077A (zh) * | 2014-11-20 | 2015-04-01 | 中国科学院信息工程研究所 | 一种VoIP实时数据安全传输的端到端密钥协商方法 |
Non-Patent Citations (2)
Title |
---|
NINGHONG: "《A Security Framework for Internet of Things Based on SM2 Cipher Algorithm》", 《2013 INTERNATIONAL CONFERENCE ON COMPUTATIONAL AND INFORMATION SCIENCES》 * |
何欢: "《船舶嵌入式通信***中的SM2加密算法研究》", 《舰船科学技术》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107634836A (zh) * | 2017-09-05 | 2018-01-26 | 何德彪 | 一种sm2数字签名生成方法及*** |
CN107528696A (zh) * | 2017-09-27 | 2017-12-29 | 武汉理工大学 | 一种隐藏私钥秘密的数字签名生成方法及*** |
CN107483205A (zh) * | 2017-09-28 | 2017-12-15 | 武汉理工大学 | 一种基于加密的私钥秘密的数字签名生成方法及*** |
CN107483205B (zh) * | 2017-09-28 | 2019-08-20 | 武汉理工大学 | 一种基于加密的私钥秘密的数字签名生成方法及*** |
CN111106938A (zh) * | 2018-10-26 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、***及设备 |
CN109474422A (zh) * | 2018-11-19 | 2019-03-15 | 武汉大学 | 一种多方协同产生sm2数字签名的方法 |
CN109474422B (zh) * | 2018-11-19 | 2021-07-02 | 武汉大学 | 一种多方协同产生sm2数字签名的方法 |
WO2020114377A1 (en) * | 2018-12-03 | 2020-06-11 | Foris Limited | Secure distributed key management system |
CN110266472A (zh) * | 2019-04-09 | 2019-09-20 | 武汉理工大学 | 支持混合秘密共享的sm9数字签名协同生成方法及*** |
CN110048839A (zh) * | 2019-04-26 | 2019-07-23 | 山东渔翁信息技术股份有限公司 | 一种数字签名方法、装置及存储介质 |
CN110266486A (zh) * | 2019-07-02 | 2019-09-20 | 武汉理工大学 | 基于乘积秘密共享的sm9数字签名简捷生成方法及*** |
CN110519051A (zh) * | 2019-08-22 | 2019-11-29 | 武汉理工大学 | r参数和秘密双乘积的SM9签名协同生成方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN106603231B (zh) | 2019-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106549770B (zh) | Sm2数字签名生成方法及*** | |
CN106603231B (zh) | 基于去秘密化的分布式sm2数字签名生成方法及*** | |
CN106850198B (zh) | 基于多装置协同的sm2数字签名生成方法及*** | |
CN106603246B (zh) | 一种sm2数字签名分割生成方法及*** | |
CN106656512B (zh) | 支持门限密码的sm2数字签名生成方法及*** | |
CN106712942B (zh) | 基于秘密共享的sm2数字签名生成方法及*** | |
CN106850229B (zh) | 基于乘积秘密分割的sm2数字签名生成方法及*** | |
CN105406967B (zh) | 一种分层属性加密方案 | |
CN110999206A (zh) | 阈值数字签名方法及*** | |
CN109728906B (zh) | 基于非对称密钥池的抗量子计算非对称加密方法和*** | |
CN107104793B (zh) | 一种数字签名生成方法及*** | |
CN107819585A (zh) | Sm9数字签名协同生成方法及*** | |
CN107872322A (zh) | 基于同态加密的数字签名协同生成方法及*** | |
CN107968710A (zh) | Sm9数字签名分离交互生成方法及*** | |
WO2016153430A1 (en) | Method of obfuscating data | |
CN109905229B (zh) | 基于群组非对称密钥池的抗量子计算Elgamal加解密方法和*** | |
CN109547199A (zh) | 一种多方联合生成sm2数字签名的方法 | |
Lee et al. | Secure key transfer protocol based on secret sharing for group communications | |
CN110213057A (zh) | 具有乘积r参数的SM9数字签名协同生成方法及*** | |
CN111859030B (zh) | 一种支持复合数据的公开审计方法 | |
CN109495244A (zh) | 基于对称密钥池的抗量子计算密钥协商方法 | |
WO2021102443A1 (en) | Multi-party and multi-use quantum resistant signatures and key establishment | |
CN104734847A (zh) | 面向公钥密码应用的共享对称密钥数据加密和解密方法 | |
KR102391952B1 (ko) | 암호화 분산 처리 시스템, 장치 또는 이를 위한 방법 | |
CN110166235A (zh) | 增强安全的sm9数字签名协同生成方法及*** |
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 |