本发明涉及信息安全技术,尤其涉及一种基于两方协同的sm2数字签名方法。
背景技术:
数字签名是数字化环境下的对传统手写签名的模拟,可以提供数字信息的不可伪造性、认证性和完整性。通常情况下,一方生成数字签名,可以被其他方公开验证。随着互联网的发展,数字签名技术已经应用于金融、商务、军事和外交等诸多领域。为了降低签名权利集中或签名密钥丢失带来的风险,一些特殊的文档,如高机密的文件通常需要多人协同才能完成签名。
针对这类问题,常见的解决方法是采用门限秘密共享方案。在这种方法中,签名密钥被分割成t个子密钥,并安全地分给t个参与者掌管,这些参与者中的k个及以上所构成的子集可以重构签名密钥,少于k个参与者则无法获得完整签名密钥。然而,恢复出完整签名密钥之后,持有完整签名密钥的一方就可以在其他参与方不知情的情况下独立地进行签名,从而破坏了系统的安全性和公平性。特别是在只有两个参与方的情况下,某一方恢复并持有完整签名密钥,就可以在另一方不知情的情况下,独立地进行签名,给系统造成利益损失。
针对这种情况,本发明设计了一种两方协同sm2数字签名方案,实现两个参与方之间协同完成数字签名,该签名必须由两方共同参与,并且在签名过程中没有恢复完整的签名密钥,即保证签名的正确性,又能保证签名密钥的安全性。
技术实现要素:
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种基于两方协同的sm2数字签名方法及系统。
本发明解决其技术问题所采用的技术方案是:基于两方协同的sm2数字签名方法,包括以下步骤:
1)参与协同签名的签名方a和签名方b,以密钥生成中心作为可信第三方,生成签名公私钥、通信会话密钥和其他参数;
1.1)签名方a随机选择一个大整数da∈zn作为私钥,计算对应的公钥为pa=[da]g;签名方b随机选择一个大整数db∈zn作为私钥,计算对应的公钥为pb=[db]g;其中,zn为模大整数n的剩余类;
1.2)b发送pb给a;
1.3)a计算可公开签名验证公钥pab=[da]pb-g;
1.4)a和b分别以大整数1/da和1/db为输入运行πmul,a得到输出ta′,b得到输出t′b,即满足
其中,1/da为大整数da∈zn模n的逆,即da·1/da=1(modn);1/db为大整数db∈zn模n的逆;
πmul为预设的一种基于不经意传输协议的乘法器,该乘法器定义如下:由两个参与方a,b运行,a,b对πmul输入分别为大整数a∈zn和b∈zn,πmul分别返回输出大整数t′a和t′b给a,b,使其满足t′a+t′b=a·b;
1.5)a秘密保存参数(da,pa,pb,t′a),公开公钥pab;b秘密保存参数(db,pa,pb,t′b);
2)a和b协商产生一个会话密钥sk;
3)a选择随机数ka∈zn,计算ra=[ka]g,并对其进行加密,记作c1=encsk(ra);b选择随机数kb∈zn,计算rb=[kb]g并对其进行加密,记作c2=encsk(rb);
4)a发送c1给b;b计算ra=decsk(c1)和α=h(ra,rb,sk),将(c2,α)发送给a;
5)a计算rb=decsk(c2)和β=h(ra,rb,sk),验证α是否与β相等,如果不相等则终止签名,如果相等,a计算e=h(m),[x1,y1]←[ka]rb和r=e+x1,并将β发送给b;
6)b验证α是否与β是否相等,如果不相等则终止签名,如果相等则计算e=h(m),[x1,y1]←[kb]ra和r=e+x1,执行下一步;
7)a和b共同运行πmul:a的输入为
8)b计算sigb=t″b+r·t′b,再计算c3=encsk(sigb),b把c3发送给a;
9)a解密得sigb=decsk(c4),然后计算a计算siga=t″a+r·t′a和s=siga+sigb-r,获得最终签名结果(r,s);
本发明产生的有益效果是:本发明适用于在两方不泄露各自部分签名密钥的情况下共同完成sm2协同签名,产生签名的过程必须有双方同时参与,且生成签名的过程中不恢复完整的签名密钥,保证了签名密钥的安全性,提高了双方参与签名的公平性。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例的初始化步骤示意图;
图2是本发明实施例的协同签名步骤示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提出了一种基于两方协同的sm2数字签名方法,下面给出具体描述。
符号及定义:
g:椭圆曲线上的基点;
h():密码杂凑函数;
a,b:参与签名的两方;
da,db:签名参与方a,b对应的私钥;
pa,pb:签名参与方对应的公钥;
pab:用于验证最终签名正确性的可公开公钥;
sk:会话密钥;
m:待签名的消息;
e:待签名的消息的杂凑值;
n:基点g的阶(n是素因子);
modn:模n运算,例如,23mod7=2;
ka,kb:签名参与方a,b选择的随机数;
ra,rb:签名参与方a,b计算的椭圆曲线点;
t′a,t′b,t″a,t″b:模n大整数;
[k]p:椭圆曲线上点p的k倍点,即
a·b:整数a,b相乘;
encsk():密钥为sk的对称加密算法;
decsk():密钥为sk的对称解密算法;
c1,c2,c3:密文;
α,β:杂凑值;
siga,sigb:签名参与方a,b分别计算的部分签名值;
(r,s):签名结果;
[x1,y1]←p:椭圆曲线上点p的横坐标为x1,纵坐标为y1;
基于不经意传输的乘法器:
本发明使用一种基于不经意传输协议的乘法器,记为πmul,该乘法器由两个参与方a,b运行,a,b对πmul输入分别为大整数a和b,πmul分别返回输出大整数t′a和t′b给a,b,使其满足t′a+t′b=a·b。
基于两方协同的sm2数字签名方法,包括以下步骤:
一、初始化,如图1所示:
在本发明中,针对参与协同签名的两方,分别产生签名公私钥、通信会话密钥和其他参数,操作如下:
1.签名方a随机选择一个大整数da∈zn作为私钥,计算对应的公钥为pa=[da]g;签名方b随机选择一个大整数db∈zn作为私钥,计算对应的公钥为pb=[db]g。
2.b发送pb给a。
3.a计算pab=[da]pb-g,并把计算结果公布。
4.a和b分别以1/da和1/db为输入运行πmul,a得到输出t′a,b得到输出t′b,使之满足
5.a秘密保存参数(da,pa,pb,pab,t′a);b秘密保存参数(db,pa,pb,t′b)。
二、两方协同sm2签名,如图2所示,:
在本发明中,数字签名由两方a和b协同完成,具体操作如下:
1.a和b协商产生一个会话密钥sk。
2.a选择随机数ka∈zn,计算ra=[ka]g并对其进行加密,记作c1=encsk(ra);b选择随机数kb∈zn,计算rb=[kb]g并对其进行加密,记作c2=encsk(rb)。
3.a发送c1给b。
4.b计算ra=decsk(c1)和α=h(ra,rb,sk),将(c2,α)发送给a。
5.a计算rb=decsk(c2)和β=h(ra,rb,sk),验证α是否与β相等,如果不相等则终止签名,如果相等,a计算e=h(m),[x1,y1]←[ka]rb和r=e+x1,并将β发送给b,与b协同执行步骤7。
6.b验证α是否与β是否相等,如果不相等则终止签名,如果相等则计算e=h(m),[x1,y1]←[kb]ra和r=e+x1,执行下一步。
7.a和b共同运行πmul:a的输入为
8.b计算sigb=t″b+r·t′b,再计算c3=encsk(sigb),b把c3发送给a。
9.a解密得sigb=decsk(c4),计算siga=t″a+r·t′a和s=siga+sigb-r,获得最终签名结果(r,s);
三、两方协同sm2签名验证,签名的验证方法与sm2签名验证方法相同,其中验证签名的公钥为pab。
本发明实现了安全高效的sm2协同签名,签名过程中保证签名的两方参与方不会暴露各自的签名密钥,同时签名必须由双方同时参与才能完成,从而提高了签名方案的安全性和公平性。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。