本发明涉及信息安全技术,尤其涉及一种多方协同产生sm2数字签名的方法。
背景技术:
数字签名是公钥密码体系中重要的一部分,在很多场合有着重要的作用。一般情况下,一方产生数字签名,可以被另一方公开被验证。在某些场合,需要多方对一份文件产生数字签名,比如一些高机密的文档,需要被多人签名。在去中心化的货币交易中,例如比特币交易,也需要多方同时对某个交易进行签名,如果私钥被盗则会造成直接的经济损失。因此,多方协同产生数字签名成为了研究热点。
对于此类问题,比较常见的解决方法是将私钥分割为多份后发给多个参与方,当需要使用私钥进行签名时,t个被分割的密钥份额可以恢复用户的原始私钥,如果低于t个参与者,则无法恢复原始私钥。一旦私钥被恢复,拥有原始私钥的一方都可以在其他参与方不知晓的情况下产生数字签名。
针对这种情况,本专利设计了一种多方协同产生sm2数字签名的方案,此方案在多方协同产生签名的情况下,既能保证签名的正确性,又能保证私钥不被泄露,且产生签名的过程中必须由多方同时参与。
sm2是由国家密码管理局颁布的一种椭圆曲线公钥密码算法(参见《sm2椭圆曲线公钥密码算法》规范,国家密码管理局,2010年12月),基于此算法能实现数字签名、密钥交换及数据加密。在这里,不同于各种普通的密钥分割或门限秘密分割。本专利提出的多方协同产生sm2数字签名的方法与系统,必须在多方共同运算下才能产生,并且任何一方都无法得到原始私钥。
技术实现要素:
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种多方协同产生sm2数字签名的方法。
本发明解决其技术问题所采用的技术方案是:一种多方协同产生sm2数字签名的方法,所述多方为t个用户组成的集合s共同参与,假设第i个用户是ui,其中,t≥2,1≤i≤t;
包括以下步骤:
1)多方协同产生密钥对;
1.1)所有用户ui从{1,...,n}中随机选取两个数ui和ρi,计算并广播yi=ρig的承诺
其中,n为基点g的阶;g为椭圆曲线的一个基点,其阶为素数;
令u=∑iui,ρ=∑iρi,则得到uρ=∑i,j∈suiρjmodn;
1.2)任意的两个用户ui,uj进行交互,将由ui和ρj相乘所得到的秘密值uiρj变为两个秘密值αij和βij的和,即满足αij+βij=uiρj;随后,每个用户ui(1≤i≤t)计算δi=uiρi+∑j≠iαij+∑j≠iβji,并广播δi,这里δi即是(t,t)加法门限共享uρ的份额;
1.3)每个用户ui(1≤i≤t)打开所有承诺
2)多方协同产生sm2数字签名;
2.1)集合s中的所有用户ui(1≤i≤t)从{1,…,n}中随机选取ki,计算并广播kig的承诺
2.2)任意的两个用户ui,uj(1≤i,j≤t)进行交互,将由ki和uj相乘所得到的秘密值kiuj变为两个秘密值μij和νij的和,即满足μij+νij=kiuj(包括但不限于使用同态加密或者不经意传输方案)。随后,每个用户ui设置σi=kiui+∑j≠iμij+∑j≠ivji,这里σi即是(t,t)加法门限共享ku的份额;
该步骤中,所有用户都需要两两交互,对于任意的一个用户i,当他与所有用户两两交互完后,计算出σi。
2.3)每个用户ui(1≤i≤t)打开所有承诺
每个用户ui计算ηi=uir,广播si=σi+ηi;
2.4)每个用户ui(1≤i≤t)计算签名的第二部分s=∑isi-r;并验证(r,s是否合法,如果合法则输出(r,s),否则终止。
按上述方案,所述步骤1.2)中,将秘密值uiρj变为两个秘密值αij和βij的和,使用同态加密或者不经意传输获得。
按上述方案,所述步骤1)和步骤2)中,各参与方之间的通信使用零知识证明来证明发送的数据是来自发送方。
本发明产生的有益效果是:
1、目前现有的普通的密钥分割或门限秘密分割能够将密钥进行分割,但是在签名的阶段,密钥会被恢复并被某一方所掌握,这样降低了多方签名的安全性和公平性,持有完整私钥的一方可以在其他用户不知情的情况下完成签名。
2、现存的不需恢复私钥的多方签名方案使用了大量的同态签名算法和零知识证明,使得方案的效率低下。
3、本发明实现了多方协同产生sm2数字签名的功能,不仅要求产生签名时,集合中的用户必须同时参与,同时保证了签名私钥的安全性、高效性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的方法流程示意图。
图2是本发明实施例的方法流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
一、符号及定义
ui:第i个用户。
x:sm2签名算法的私钥。
e:密码杂凑函数作用于消息m的输出值。
g:椭圆曲线的一个基点,其阶为素数。
h():消息摘要长度为v比特的密码杂凑函数。
m:待签名的消息。
modn:模n运算。例如,23mod7≡2。
n:基点g的阶。
o:椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
x||y:x与y的拼接,其中x,y可以是比特串或字节串。
kp:椭圆曲线上点p的k倍点,k是正整数。
[x,y]:大于或等于x且小于或等于y的整数的集合。
(rx,ry):某一点的x坐标的值和y坐标的值。
∑iai:将所有的ai都累加起来,即a1+ai+…+at。
∑i,j∈saibj:将所有i,j属于集合s的aibj累加起来,即a1∑j∈sbj+a2∑j∈sbj+…+an∑j∈sbj。
如图1所示,一种多方协同产生sm2数字签名的方法,
对于本方案,需要t(t≥2)个用户构成的集合s中的所有用户参与,假设第i(1≤i≤t)个用户是ui。
一、首先是多方协同产生密钥对阶段,此阶段由s中的用户共同完成:
1)用户ui(1≤i≤t)从{1,...,n}中随机选取两个数ui和ρi,计算并广播yi=ρig的承诺
2)任意的两个用户ui,uj进行交互,将由ui和ρj相乘所得到的秘密值uiρj变为两个秘密值αij和βij的和,即满足αij+βij=uiρj(包括但不限于使用同态加密或者不经意传输方案)。随后,用户ui(1≤i≤t)计算δi=uiρi+∑j≠iαij+∑j≠iβji,并广播δi,这里δi即是(t,t)加法门限共享uρ的份额。
3)每个用户ui(1≤i≤t)打开所有承诺
(uρ)-1∑iyi-g。设q对应的sm2数字签名的私钥为x,则x满足u=(1+x)-1。用户ui保存公钥q和自己的部分私钥ui,ρi。
多方协同产生密钥对结束。
二、如图2,多方协同产生sm2数字签名阶段,由集合s中的用户共同完成:
1)集合s中的所有用户ui(1≤i≤t)从{1,...,n}中随机选取ki,计算并广播kig的承诺
2)任意的两个用户ui,uj进行交互,将由ki和uj相乘所得到的秘密值kiuj变为两个秘密值μij和νij的和,即满足并满足μij+vij=kiuj(包括但不限于使用同态加密或者不经意传输方案)。随后,每个用户ui设置σi=kiui+∑j≠iμij+∑j≠ivji,这里σi即是(t,t)加法门限共享ku的份额。
3)每个用户ui(1≤i≤t)打开所有承诺
4)每个用户ui(1≤i≤t)计算签名的第二部分s=∑isi-r。,并验证(r,s)是否合法,如果合法则输出(r,s),否则终止程序。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。