基于SM2数字签名的门限签名方法

专利查询7月前  79


基于sm2数字签名的门限签名方法
技术领域
1.本发明涉及门限签名领域,具体是涉及基于sm2数字签名的门限签名方法。


背景技术:

2.国家密码管理局发布的sm2椭圆曲线公钥密码算法是我国商用公钥密码标准算法,共包含总则、数字签名算法、密钥交换协议、密钥封装机制、公钥加密算法和参数定义五个部分。sm2算法的参数需要利用算法产生,同时加入了用户特异性的椭圆曲线参数、基点、用户公钥点信息,使sm2算法相较于ecc算法安全性有明显提升。
3.普通签名算法中,只有一个用户拥有私钥。当攻击者窃取该用户的私钥后可以伪造签名信息。门限签名的思想能够有效针对这个问题。门限签名是门限秘密共享技术和数字签名的一种结合,由潜在的参与方共同运行,只有预定部分的参与方同意时,才可以生成特定消息下的签名。在(t,n)门限签名方案中,由n个成员组成一个签名群体,群体中有一对公私钥,当多于t个成员诚实时,可以代表群体用群私钥进行签名,任何人可利用该群体的公钥进行签名验证。其中,t是门限值,任意不少于t+1个人的签名都可以恢复出签名,群体中任何t个或更少的成员不能代表该群体进行签名,同时任何成员不能假冒其他成员进行签名。采用门限签名方式可以有效实现权力分配,同时避免滥用职权。
4.尚铭等人在2014年提出的sm2椭圆曲线门限密码算法中,私钥信息被分享给独立的多个参与者,签名需要多个参与者同意,但是,该方法中总成员数n必须大于等于2t+1,不适用(2,3)等区块链签名。签名过程中需要公开签名中的乘法分量,且无法确定不诚实用户,存在秘密份额泄露的风险。
5.zl2018113793989一种多方联合生成sm2数字签名的方法,每个参与方在不得到完整的私钥的情况下通过交互完成对消息产生唯一的签名,使用零知识证明来保证发送数据的隐私性并且证明发送的数据是来自发送方,但签名过程需要所有参与方共同参与,一旦参与方中存在多数的不诚实者,就会造成签名失败,威胁了安全性和公平性,甚至造成巨大的利益损失。
6.zl2018114738527一种基于sm2签名算法的门限签名方法,采用dsa的签名算法,多个用户联合生成dsa公私钥,通过同态性加密的性质共同计算得到dsa签名的加密值,最后对该值解密就生成消息摘要的签名。此方法的签名过程中需要计算n方参与者之间的乘法运算,计算复杂度大。


技术实现要素:

7.为解决上述技术问题,本发明提供了一种基于sm2数字签名的门限签名方法,可以在不诚实者占多数的前提下,保证签名的有效性。
8.本发明所述的基于sm2数字签名的门限签名方法,其步骤为:
9.s1、公共参数生成阶段:所有参与者协作生成cl加密方案的公共参数gq,作为公开值在用户之间共享;
10.s2、秘钥生成阶段:所有参与方生成各自的sm2公钥和私钥,将各自的公钥发送给其他参与方,生成sm2系统公钥,私密保存各自的私钥;
11.s3、签名阶段:所有参与方利用cl加密方案传输密文,与其他参与方交互生成各自的签名,所有参与方广播各自的签名并累加生成sm2最后的总签名。
12.进一步的,s1所述的公共参数生成阶段的具体步骤为:
13.s1-1、计算基本判别式和生成类群需要用到的随机公共参数
14.s1-1-1、n方参与者输入公共参数(q,1
λ
),协作运行isetup算法,其中,λ是安全参数,q是有限域fq的阶;参与方选择随机数ri,计算ri的承诺(gci,gdi)

com(ri),并广播gci;其中,com指承诺算法,gci为承诺信息,gdi为打开承诺的信息;
15.s1-1-2、各参与方收到其余方的承诺{gcj}
j≠i
后,广播gdi;
16.s1-1-3、各参与方收到广播的gdi后,执行ri←
open(gci,gdi),揭开ri,open为打开承诺的算法;
17.s1-1-4各参与方计算公共参数计算公共参数
18.s1-2、协作生成公共参数gq;
19.s1-2-1、各参与方运行其中,是λ比特整数,子群由生成,子群f由f生成,是阶的上限,生成cl方案的公共参数;
20.s1-2-2、各参与方选择一个随机数ti,计算生成各自随机的gi份额;
21.s1-2-3、各参与方计算gi的承诺广播为承诺信息,为打开承诺的信息;;
22.s1-2-4、各参与方收到其余方的承诺后,广播s1-2-5、各参与方收到广播的后,执行揭开gi;
23.s1-2-6、各参与方广播ti的零知识证明zkpok,证明自己知道ti;
24.s1-2-7、收到广播的零知识证明后进行验证,若验证失败,则终止协议;
25.s1-2-8、各参与方计算出cl加密方案的公共参数gq,
26.输出cl方案的公共参数
27.进一步的,s2中sm2密钥生成阶段的具体步骤为:
28.s2-1、生成sm2门限签名公钥;
29.s2-1-1、各参与方选择一个随机数ui,计算ig的承诺,
30.[kgci,kgdi]

com(uig),g为椭圆曲线上的基点;
[0031]
s2-1-2、各参与方生成cl加密方案的一对公私钥(ski,pki),
[0032]
(ski,pki)

cl.keygen(1
λ
);cl.keygen(1
λ
)秘钥生成算法:选择设计算返回(sk,pk);
[0033]
s2-1-3、各参与方广播自己的公钥和对uig的承诺(pki,kgci);
[0034]
s2-1-4、各参与方广播打开承诺的信息kgdi;
[0035]
s2-1-5、各参与方收到其余方的广播后,揭开每方的承诺pi←
open(kgci,kgdi),其中,pi=uig为各参与方的公钥;
[0036]
s2-1-6、各参与方计算sm2算法公钥
[0037]
s2-2、生成sm2门限签名私钥;
[0038]
s2-2-1、各参与方执行ui的门限(t,n)feldman-vss算法,
[0039]
其中,a
i,k
为选择的k项个系数,x为自变量;
[0040]
s2-2-2、当各参与者与其他参与方交互时,向发送σ
i,j
,其中,{σ
i,j
:=pi(j)}
j∈[n]
为多项式的计算结果;
[0041]
s2-2-3、收到各方发来的σ
i,j
后,各参与方计算di:=∑
k∈[n]
pk(i),其中,di是签名私钥d的(t,n)shamir门限份额;
[0042]
s2-2-4、各参与方向所有参与方广播feldman-vss算法系数和基点的乘积{v
i,k
}
k∈[t]
,其中,{v
i,k
:=a
i,k
g}
k∈[t]

[0043]
s2-2-5、各参与方计算零知识证明并广播πk
g,i
,证明自己知道di;
[0044]
s2-2-6、收到广播的零知识证明后进行验证,若验证失败,则终止协议。
[0045]
进一步的,s3签名阶段的具体步骤为:
[0046]
s3-1、参与方生成各自的(t,n)门限秘密份额;
[0047]
s3-2、对秘密份额加密;
[0048]
s3-3、生成各自的可加份额;
[0049]
s3-4、计算sm2签名的第一部分r;
[0050]
s3-5、计算sm2签名的第二部分s。
[0051]
进一步的,s3-1参与方生成各自的(t,n)门限秘密份额的具体步骤为:
[0052]
s3-1-1、各参与方使用适当的拉格朗日系数将私钥d的(t,n)份额{di}
i∈[n]
转换为d的(t,t)份额{wi}
i∈s
,得到d=∑wi;
[0053]
s3-1-2、各参与方计算1+d的(t,t)份额{vi}
i∈s
,其中(1+d)-1
=∑vi;
[0054]
由于di=di·
g和拉格朗日系数是公共值,所有方都可以计算出
[0055]
进一步的,s3-2对秘密份额加密的具体步骤为:
[0056]
s3-2-1、各参与方输入签名信息m后,首先选择随机的私有共享(ki,γi),
[0057]
选择随机数ri和ri′
,用cl加密算法对随机数ki加密,得到cl.enc(pk,m)加密算法:选择返回
[0058]
s3-2-2、各参与方对私有份额vi加密,得到其中,使用到的cl.enc(pk,m)加密算法为:选择返回
[0059]
s3-2-3、各参与方计算γig的承诺,[sci,sdi]

com(γig);其中,sci为承诺信息,sdi为打开承诺的信息;
[0060]
s3-2-4、各参与方计算零知识证明zkaok
[0061][0062]
来保证cl密文形式正确;
[0063]
s3-2-5、各参与方将广播给其余参与方若验证证明失败,则终止协议。
[0064]
进一步的,s3-3生成各自的可加份额的具体步骤为:
[0065]
s3-3-1、定义由n方参与者生成签名算法过程中的乘法份额,k:=∑
i∈ski
,γ:=∑
i∈s
γi,kγ=∑
i,j∈s
kjγi,k(1+d)-1=∑
i,j∈s
kjvi,(1+d)-1
d=∑
i,j∈s
vjwi;
[0066]
s3-3-2、各参与方选择交互过程中己方的随机加法份额计算b
ji:
=β
j,i
·
g,c
j,i
∶=v
j,i
·
g用于验证对方在签名过程中是否诚实;用交互的的公钥pkj对使用cl加密算法加密,导到得到得到
[0067]
s3-3-3、各参与方使用cl同态加密方法中的转化和算法、转化标量算法计算计算得到利用同样的加密方法得到得到得到
[0068]
s3-3-4、各参与方将将密文和验证信息广播给
[0069]
s3-3-5、解密密文以恢复出另一半可加份额(α
j,i
,μ
j,i
,τ
j,i
))解密后得到明文α
j,i
=kjv
i-β
j,i
,μ
j,i
=vjw
i-v
j,i

[0070]
s3-3-6、验证若等式不成立,说明有参与者使用了与秘密共享阶段不同的私钥,验证不通过,中止协议;
[0071]
s3-3-7、各参与方保存(ρi,σi,δi),其中,ρi=kivi+∑
j≠i

i,j

j,i
),σi=viwi+∑
j≠i

i,j
+v
j,i
)作为计算签名算法中s的信息,
[0072]
作为计算签名算法中r的信息。
[0073]
进一步的,s3-4、计算sm2签名中的r的具体步骤为:
[0074]
s3-4-1、各参与方广播自己的δi,所有的参与方计算δ=∑
i∈s
δi=kγ-1

[0075]
s3-4-2、各参与方广播承诺中的sdi来解除对γi的承诺,其中γi=γig=open(sci,sdi);
[0076]
s3-4-3、各参与方计算零知识证明并广播,证明自己知道γi,收到后若验证不通过,中止协议;
[0077]
s3-4-4、各参与方计算r:=δ(∑
i∈s
γi)=k
·
g,r:=r
x
+e;其中,r
x
是r的横坐标,e是消息m的哈希值。
[0078]
进一步的,s3-5、计算sm2签名中的s的具体步骤为
[0079]
s3-5-1、各参与方计算各自的签名信息si=ρ
i-rσi;
[0080]
s3-5-2、各参与方选择独立随机数(ηi,θi),计算验证信息vi:=si(g+p)+ηig;ai:=θig;并广播
[0081]
s3-5-3、各参与方收到其余方广播的对验证信息的承诺信息后,通过广播来解除承诺,同时计算(si,ηi,θi)的零知识证明nizkpok,证明自己知道(si,ηi,θi);
[0082]
s3-5-4、收到后检查零知识证明nizkpok,若验证不通过,中止协议;各参与方利用消息m,签名信息r和r以及公钥p计算
[0083]
v:=m+rp-r+∑
i∈svi
,a:=∑
i∈sai

[0084]
s3-5-5、各参与方计算ui:=θiv,ti:=ηia,对ui和ti计算承诺广播
[0085]
s3-5-6、各参与方收到其余方广播的后,广播后,广播收到后解除承诺,
[0086]
s3-5-7、各参与方检查∑
i∈s
ti=∑
i∈s
ui,若验证不通过,中止协议;
[0087]
s3-5-8、各参与方广播si,所有参与方都计算s:=∑
i∈s
si;
[0088]
s3-5-9、各参与方检查(r,s)是否是合理的sm2签名,输出(r,s),否则停止协议。
[0089]
本发明所述的有益效果为:本发明的(t,n)sm2门限签名协议中,参与方人数n仅要求大于等于t+1;使用cl方法解决秘密值的乘法问题,将乘法份额转变为可加份额,签名过程中n方之间的乘法转化为一对乘法,降低了计算复杂度;cl方案的消息空间与sm2签名算法中使用的大素数相同,从而避免范围证明;每一方的签名都可以验证合法性。
附图说明
[0090]
为了使本发明的内容更容易被清楚地理解,下面根据具体实施例并结合附图,对本发明作进一步详细的说明。
[0091]
图1为本发明实施例中门限签名算法的流程图;
[0092]
图2为本发明实施例中生成公共参数交互示意图;
[0093]
图3为本发明实施例中生成公私钥交互示意图;
[0094]
图4为本发明实施例中生成签名交互示意图。
具体实施方式
[0095]
本发明所述的基于sm2数字签名的门限签名方法,主要包括公共参数生成阶段、秘钥生成阶段和签名阶段,其中:在系统建立阶段,多个参与者协作生成cl加密的参数gq,作为公开值在用户之间共享;在秘钥生成阶段,选择各自随机的私钥份额,生成算法的公钥作为公开值;在签名阶段使用feldman vss协议重新生成参与方各自的私钥份额,使用cl方法解决秘密值的乘法问题,与其他参与方交互将乘法份额转变为可加份额,n方之间的乘法转化为一对乘法,交互过程中获得的加法份额可以验证对方是否诚实;利用诚实参与者各自的签名累加生成最后的总签名。
[0096]
在秘钥生成阶段和签名阶段的步骤1、2、4、5,所有参与方对各自的输入都执行相同的操作,在本发明中只描述某些方的执行步骤。若广播某个值vi也隐式地接受广播的vj;签名阶段的步骤3由n个参与方中所有的对执行。
[0097]
在本实施例中,引用文献“castagnos,g.,catalano,d.,laguillaumie,f.,savasta,f.,tucker,i.:bandwidth-efficient threshold ec-dsa.cryptology eprint archive,report 2020/084(2020).”中描述的零知识证明作为实施例中用到的zkpok算法,feldman可验证秘密共享和承诺算法作为本发明的feldman-vss算法和com算法。
[0098]
n个参与方的的公共参数(e(fq),q,g)是sm2数字签名算法的系统参数,其中,e(fq)表示fq上椭圆曲线e的所有有理点,有限域fq的阶是素数q,g表示椭圆曲线上的基点,g的阶为n。选取椭圆曲线方程e为y2=x3+ax+b,其中,a,b∈fq。本发明中使用国密sm3哈希算法,系统参数的选取符合sm2数字签名算法、sm3哈希算法的标准规范。
[0099]
本发明所述的基于sm2数字签名的门限签名方法,其具体步骤为:
[0100]
s1、公共参数生成阶段:所有参与者协作生成cl加密方案的公共参数gq,作为公开值存用户之间共享;
[0101]
s2、秘钥生成阶段;所有参与方生成各自的sm2公钥和私钥,将各自的公钥发送个其他参与方,生成sm2系统公钥,私密保存各自的私钥;
[0102]
s3、签名阶段:所有参与方利用cl加密方案与其他参与方交互生成各自的签名,所有参与方广播各自的签名并累加生成sm2最后的总签名。
[0103]
其中,公共参数生成阶段的具体步骤为:
[0104]
s1-1、计算基本判别式和生成类群需要用到的随机公共参数s1-1-1、n方参与者输入公共参数(q,1
λ
),协作运行isetup算法,其中,λ是安全参数,q是有限域fq的阶;参与方选择随机数ri,计算ri的承诺(gci,gdi)

com(ri),并广播gci;其中,com指承诺算法,gci为承诺信息,gdi为打开承诺的信息;
[0105]
s1-1-2、各参与方收到其余方的承诺{gcj}
j≠i
后,广播gdi;
[0106]
s1-1-3、各参与方收到广播的gdi后,执行ri←
open(gci,gdi),揭开ri,open为打开承诺的算法;
[0107]
s1-1-4各参与方计算公共参数计算公共参数
[0108]
s1-2、协作生成公共参数gq;
[0109]
s1-2-1、各参与方运行其中,是λ比特整数,子群由生成,子群f由f生成,是阶的上限,生成cl方案的公共参数;
[0110]
s1-2-2、各参与力选择一个随机数ti,计算生成各自随机的gi份额;
[0111]
s1-2-3、各参与方汁算gi的承诺广播为承诺信息,为打开承诺的信息;;
[0112]
s1-2-4、各参与方收到其余方的承诺后,广播
[0113]
s1-2-5、各参与方收到广播的后,执行揭开gi;
[0114]
s1-2-6、各参与方广播ti的零知识证明zkpok,证明自己知道ti;
[0115]
s1-2-7、收到广播的零知识证明后进行验证,若验证失败,则终止协议;s1-2-8、各参与方计算出cl加密方案的公共参数gq,
[0116]
输出cl方案的公共参数
[0117]
sm2密钥生成阶段的具体步骤为:
[0118]
s2-1、生成sm2门限签名公钥;
[0119]
s2-1-1、各参与方选择一个随机数ui,计算uig的承诺,[kgci,kgdi]

com(uig),g为椭圆曲线上的基点;
[0120]
s2-1-2、各参与方生成cl加密方案的一对公私钥(ski,pki),(ski,pki)

cl.keygen(1
λ
);cl.keygen(1
λ
)秘钥生成算法:选择设计算返回(sk,pk);
[0121]
s2-1-3、各参与方广播自己的公钥和对uig的承诺(pki,kgci);
[0122]
s2-1-4、各参与方广播打开承诺的信息kgdi;
[0123]
s2-1-5、各参与方收到其余方的广播后,揭开每方的承诺pi←
open(kgci,kgdi),其中,pi=uig为各参与方的公钥;
[0124]
s2-1-6、各参与方计算sm2算法公钥
[0125]
s2-2、生成sm2门限签名私钥;
[0126]
s2-2-1、各参与方执行ui的门限(t,n)feldman-vss算法,其中,a
i,k
为选择的k项个系数,x为自变量;s2-2-2、当各参与者与其他参与方交互时,向发送σ
i,j
,其中,{σ
i,j
:=pi(j)}
j∈[n]
为多项式的计算结果;
[0127]
s2-2-3、收到各方发来的σ
i,j
后,各参与方汁算di:=∑
k∈[n]
pk(i),其中,di是签名私钥d的(t,n)shamir门限份额;
[0128]
s2-2-4、各参与方向所有参与方广播feldman-vss算法系数和基点的乘积{v
i,k
}
k∈[t]
,其中,{v
i,k
:=a
i,k
g}
k∈[t]

[0129]
s2-2-5、各参与方计算零知识证明并广播π
kg,i
,证明自己知道di;
[0130]
s2-2-6、收到广播的零知识证明后进行验证,若验证失败,则终止协议。
[0131]
签名阶段,将乘法份额转变为可加份额的签名方案:
[0132]
在sm2签名算法中,r=kg+e,s=k(1+d)-1-(1+d)-1
rd;本实施例中存在n方参与者的情况下,多方参与者交互生成乘法秘密值,最终合作生成签名的算法过程如下:令kg=kγ-1
γg=(∑
i,j∈[s]ki
γ
j-1
)
·
(∑
i∈[s]
γig)=[∑
i∈[s]
(∑
j∈[s]
(kiγj))]
·
(∑
i∈[s]
γig),k(1+d)-1
=∑
i,j∈[s]
kjvi=∑
i∈[s]
(∑
j∈[s]
(kivj)),(1+d)-1
d=∑
i,j∈[s]
vjwi=∑
i∈[s]
(∑
j∈[s]
(viwj));
[0133]
设ρi=∑
i∈[s]
(kivj)=kivi+∑
i≠j
(kivj)=kivi+∑
j≠i

i,j

j,i
),σi=(∑
i∈[s]
(viwj)=viwi+∑
i≠j
(viwj)=viwi+∑
j≠i

i,d
+v
j,i
);则可以得到kg=∑
i∈[s]
δi·
(∑
i∈[s]
γig)=∑
i∈[s]
δi·

i∈[s]
γi,r=kg+e,s=∑
i∈[s]
ρ
i-r∑
i∈[s]
σi=∑
i∈[s]

i-rσi);
[0134]
又si=∑
i∈[s]

i-rσi),因此,s=∑
i∈[s]
si。
[0135]
s3-1参与方生成各自的(t,n)门限秘密份额:
[0136]
s3-1-1、各参与方使用适当的拉格朗日系数将私钥d的(t,n)份额(di}
i∈[n]转

为d的(t,t)份额{wi}
i∈s
,得到d=∑wi;
[0137]
s3-1-2、各参与方计算1+d的(t,t)份额{vi}
i∈s
,其中(1+d)-1
=∑vi;
[0138]
由于di=di·
g和拉格朗日系数是公共值,所有方都可以计算出
[0139]
s3-2对秘密份额加密:
[0140]
s3-2-1、各参与方输入签名信息m后,首先选择随机的私有共享(ki,γi),选择随机数ri和ri′
,用cl加密算法对随机数ki加密,得到cl.enc(pk,m)加密算法:选择返回s3-2-2、各参与方对私有份额vi加密,得到其中,使用到的cl.enc(pk,m)加密算法为:选择返回
[0141]
s3-2-3、各参与方计算γig的承诺,[sci,sdi]

com(γig);其中,sci为承诺信息,sdi为打开承诺的信息;
[0142]
s3-2-4、各参与方计算零知识证明zkaok
[0143][0144]
来保证cl密文形式正确;
[0145]
证明:prover执行
[0146]
c:=(c1,c2),其中,r为随机数,为取值范围;
[0147]
其中,gen为参数生成算法,gq为cl方案参数,t为随机数,是挑战集合;
[0148]
prover输入verifier输入((pk,c));
[0149]
prover选择随机数(r1,r2),计算将(t1,t2)发送给verifier;verifier收到(t1,t2)后将随机数k发送给prover;prover计算u1:=r1+kr,并将(u1,u2)发送给verifier;verifier计算并验证u2∈z/qz.
[0150]
用同样的方法验证;
[0151]
s3-2-5、各参与方将广播给其余参与方若验证证明失败,则终止协议。
[0152]
s3-3生成各自的可加份额:
[0153]
s3-3-1、定义由n方参与者生成签名算法中的乘法份额,k:=∑
i∈ski
,γ:=∑
i∈s
γi,kγ=∑
i,j∈s
kjγi,k(1+d)-1
=∑
i,j∈s
kjvi,(1+d)-1
d=∑
i,j∈s
viwi;
[0154]
这个阶段在每对之间对等进行,是为了将的乘法份额kj和(包括(kjvi)的kj和vi,(vjwi)的vj和wi)转换为可加份额,其中,α
j,i

j,i
=kjvi,μ
j,i
+v
j,i
=vjwi;
[0155]
s3-3-2、各参与方选择交互过程中己方的随机加法份额计算b
j,i
:=β
j,i
·
g,c
j,i
:=v
j,i
·
g用于验证对方在签名过程中是否诚实;用交互的的公钥pkj对使用cl加密算法加密,得到得到得到
[0156]
s3-3-3、各参与方使用cl同态加密方法中的转化和算法、转化标量算法计算得到利用同样的加密方法得到得到s3-3-4、各参与方将密文和验证信息广播给
[0157]
s3-3-5、解密密文以恢复出另一半可加份额(α
j,i
,μ
j,i
,τ
j,i
))解密后得到明文,α
j,i
=kjv
i-β
j,i
,μ
j,i
=vjw
i-v
j,i

[0158]
cl.dec(sk,(c1,c2))解密算法:计算返回slove(m);
[0159]
s3-3-6、验证若等式不成立,说明有参与者使用了与秘密共享阶段不同的私钥,验证不通过,中止协议;
[0160]
s3-3-7、各参与方保存(ρi,σi,δi),其中,ρi=kivi+∑
j≠i

i,j

j,i
),σi=viwi+∑
j≠i

i,j
+v
j,i
)作为计算签名算法中s的信息,作为计算签名算法中r的信息。
[0161]
s3-4、计算sm2签名中的r:
[0162]
s3-4-1、各参与方广播自己的δi,所有的参与方计算δ=∑
i∈s
δi=kγ-1

[0163]
s3-4-2、各参与方广播承诺中的sdi来解除对γi的承诺,其中γi=γig=open
(sci,sdi);
[0164]
s3-4-3、各参与力计算零知识证明并广播,证明自己知道γi,收到后若验证不通过,中止协议;
[0165]
s3-4-4、各参与力计算r:=δ(∑
i∈s
γi)=k
·
g,r:=r
x
+e;其中,r
x
是r的横坐标,e是消息m的哈希值。
[0166]
国密局颁发的sm2签名算法中e的计算方法如下:用户首先输入消息m,设id是长度为entlen比特的标识,entl是由entlen转换而成的两个字节,z=h
256
(entl||id||a||b||xg||yg||x
p
||y
p
);其中,(a,b)是椭圆曲线方程的参数,(xg,yg)是基点g的坐标,(x
p
,y
p
)是公钥p的坐标;这些值转换为比特串后,再用h
256
进行哈希,取hv是输出v比特长的哈希函数。
[0167]
s3-5、计算sm2签名中的s:
[0168]
s3-5-1、各参与方计算各自的签名信息si=ρ
i-rσi;
[0169]
s3-5-2、各参与方选择独立随机数(ηi,θi),计算验证信息vi:=si(g+p)+ηig;ai:=θig;并广播
[0170]
s3-5-3、各参与方收到其余方广播的对验证信息的承诺信息后,通过广播来解除承诺,同时计算(si,ηi,θi)的零知识证明nizkpok,证明自己知道(si,ηi,θi);
[0171]
s3-5-4、收到后检查零知识证明nizkpok,若验证不通过,中止协议;各参与方利用消息m,签名信息r和r以及公钥p计算
[0172]
v:=m+rp-r+∑
i∈svi
,a:=∑
i∈sai

[0173]
s3-5-5、各参与方汁算ui:=θiv,ti:=ηia,对ui和ti计算承诺广播
[0174]
s3-5-6、各参与方收到其余方广播的后,广播收到后解除承诺,
[0175]
s3-5-7、各参与方检查∑
i∈s
ti=∑
i∈s
ui,若验证不通过,中止协议;
[0176]
s3-5-8、各参与方广播si,所有参与方都计算s:=∑
i∈s
si;
[0177]
s3-5-9、各参与方检查(r,s)是否是合理的sm2签名,输出(r,s),否则停止协议。
[0178]
本发明使用cl方案解决sm2门限签名中秘密值的乘法问题,每个参与方通过与其他参与方交互,将乘法份额转变为可加份额,n方之间的乘法转化为一对乘法,交互过程中可以验证对方是否诚实,实现了在不诚实者占多数的前提下,保证签名的有效性。
[0179]
举例来说,本发明所述的sm2门限签名方案可以应用于区块链钱包消费系统。将安
全有效的门限sm2签名算法应用于以太坊的钱包控制上,即有n个用户对钱包有监管权,当钱包进行交易消费时,需n个用户中超过阈值t个用户共同生成门限签名,才可以进行消费。
[0180]
以转账发起人a为例:
[0181]
1.用户a输入转账地址以及转账数额;
[0182]
2.签名成员合作生成系统参数以及生成公私钥;
[0183]
(1)签名群体中的参与者合作生成系统参数;
[0184]
(2)各参与者选择随机的私钥,通过公开各自的公钥来生成系统公钥,而私钥秘密保存。
[0185]
3.利用本发明中的门限sm2签名方法交互生成系统签名;
[0186]
(1)各参与者选择签名算法中的随机份额,加密后将密文发送给其他参与者,同时提供密文完整性的零知识证明。
[0187]
(2)各参与者收到密文和零知识证明后,首先验证零知识证明,若验证不通过,中止签名过程;
[0188]
(3)各参与者利用同态加密方法对收到的密文和自己的密文加密发送给其他参与者,同时发送验证信息;
[0189]
(4)各参与者首先需要判断验证信息是否合法,若不合法,中止签名过程;
[0190]
(5)各参与者利用解密得到的明文计算签名的部分信息;
[0191]
(6)各参与者广播自己关于签名的部分信息,计算得到签名中的r。
[0192]
(7)各参与者生成各自的签名,向其他参与者发送签名的零知识证明以及其他验证信息;
[0193]
(8)各参与者验证零知识证明以及其他验证信息是否正确,若验证不通过,中止签名;
[0194]
(9)各参与者通过广播各自的签名生成最终的签名s。
[0195]
4.验证;
[0196]
(1)钱包消费系统验证签名(r,s)的合法性;
[0197]
(2)签名通过验证后,用户a完成转账过程。
[0198]
若交易中存在欺骗等恶意行为会引起签名过程失败,交易不能加入区块链中,用户a无法完成转账。
[0199]
基于本发明的方法,很容易构建实施区块链钱包消费系统。
[0200]
以上所述仅为本发明的优选方案,并非作为对本发明的进一步限定,凡是利用本发明说明书及附图内容所作的各种等效变化均在本发明的保护范围之内。

技术特征:
1.基于sm2数字签名的门限签名方法,其特征在于,所述方法步骤为:s1、公共参数生成阶段:所有参与者协作生成cl加密方案的公共参数g
q
,作为公开值在用户之间共享;s2、秘钥生成阶段:所有参与方生成各自的sm2公钥和私钥,将各自的公钥发送给其他参与方,生成sm2系统公钥,私密保存各自的私钥;s3、签名阶段:所有参与方利用cl加密方案传输密文,与其他参与方交互生成各自的签名,所有参与方广播各自的签名并累加生成sm2最后的总签名。2.根据权利要求1所述的基于sm2数字签名的门限签名方法,其特征在于,s1所述的公共参数生成阶段的具体步骤为:s1-1、计算基本判别式和生成类群需要用到的随机公共参数s1-1-1、n方参与者输入公共参数(q,1
λ
),协作运行isetup算法,其中,λ是安全参数,q是有限域f
q
的阶;参与方选择随机数r
i
,计算r
i
的承诺(gc
i
,gd
i
)

com(r
i
),并广播gc
i
;其中,com指承诺算法,gc
i
为承诺信息,gd
i
为打开承诺的信息;s1-1-2、各参与方收到其余方的承诺{gc
j
}
j≠i
后,广播gd
i
;s1-1-3、各参与方收到广播的gd
i
后,执行r
i

open(gc
i
,gd
i
),揭开r
i
,open为打开承诺的算法;s1-1-4各参与方计算公共参数计算公共参数s1-2、协作生成公共参数g
q
;s1-2-1、各参与方运行其中,是λ比特整数,子群由生成,子群f由f生成,是阶的上限,生成cl方案的公共参数;s1-2-2、各参与方选择一个随机数t
i
,计算生成各自随机的g
i
份额;s1-2-3、各参与方计算g
i
的承诺广播为承诺信息,为打开承诺的信息;;s1-2-4、各参与方收到其余方的承诺后,广播s1-2-5、各参与方收到广播的后,执行揭开g
i
;s1-2-6、各参与方广播t
i
的零知识证明zkpok,证明自己知道t
i
;s1-2-7、收到广播的零知识证明后进行验证,若验证失败,则终止协议;s1-2-8、各参与方计算出cl加密方案的公共参数g
q
,输出cl方案的公共参数
3.根据权利要求1所述的基于sm2数字签名的门限签名方法,其特征在于,s2中sm2密钥生成阶段的具体步骤为:s2-1、生成sm2门限签名公钥;s2-1-1、各参与方选择一个随机数u
i
,计算u
i
g的承诺,[kgc
i
,kgd
i
]

com(u
i
g),g为椭圆曲线上的基点;s2-1-2、各参与方生成cl加密方案的一对公私钥(sk
i
,pk
i
),(sk
i
,pk
i
)

cl.keygen(1
λ
);cl.keygen(1
λ
)秘钥生成算法:选择设计算返回(sk,pk);s2-1-3、各参与方广播自己的公钥和对u
i
g的承诺(pk
i
,kg c
i
);s2-1-4、各参与方广播打开承诺的信息kg d
i
;s2-1-5、各参与方收到其余方的广播后,揭开每方的承诺p
i

open(kgc
i
,k
g
d
i
),其中,p
i
=u
i
g为各参与方的公钥;s2-1-6、各参与方计算sm2算法公钥s2-2、生成sm2门限签名私钥;s2-2-1、各参与方执行u
i
的门限(t,n)feldman-vss算法,其中,a
i,k
为选择的k项个系数,x为自变量;s2-2-2、当各参与者与其他参与方交互时,向发送σ
i,j
,其中,{σ
i,j
:=p
i
(j)}
j∈[n]
为多项式的计算结果;s2-2-3、收到各方发来的σ
i,j
后,各参与方计算d
i
:=∑
k∈[n]
p
k
(i),其中,d
i
是签名私钥d的(t,n)shamir门限份额;s2-2-4、各参与方向所有参与方广播feldman-vss算法系数和基点的乘积{v
i,k
}
k∈[t]
,其中,{v
i,k
:=a
i,k
g}
k∈[t]
;s2-2-5、各参与方计算零知识证明并广播π
kg,i
,证明自己知道d
i
;s2-2-6、收到广播的零知识证明后进行验证,若验证失败,则终止协议。4.根据权利要求1所述的基于sm2数字签名的门限签名方法,其特征在于,s3签名阶段的具体步骤为:s3-1、参与方生成各自的(t,n)门限秘密份额;s3-2、对秘密份额加密;s3-3、生成各自的可加份额;s3-4、计算sm2签名的第一部分r;s3-5、计算sm2签名的第二部分s。5.根据权利要求4所述的基于sm2数字签名的门限签名方法,其特征在于,s3-1参与方生成各自的(t,n)门限秘密份额的具体步骤为:
s3-1-1、各参与方使用适当的拉格朗日系数将私钥d的(t,n)份额{d
i
}
i∈[n]
转换为d的(t,t)份额{w
i
}
i∈s
,得到d=∑w
i
;s3-1-2、各参与方计算1+d的(t,t)份额{v
i
}
i∈s
,其中(1+d)-1
=∑v
i
;由于d
i
=d
i
·
g和拉格朗日系数是公共值,所有方都可以计算出6.根据权利要求4所述的基于sm2数字签名的门限签名方法,其特征在于,s3-2对秘密份额加密的具体步骤为:s3-2-1、各参与方输入签名信息m后,首先选择随机的私有共享(k
i
,γ
i
),选择随机数r
i
和r
i

,用cl加密算法对随机数k
i
加密,得到cl.enc(pk,m)加密算法:选择返回s3-2-2、各参与方对私有份额v
i
加密,得到其中,使用到的cl.enc(pk,m)加密算法为:选择返回s3-2-3、各参与方计算γ
i
g的承诺,[sc
i
,sd
i
]

com(γ
i
g);其中,sc
i
为承诺信息,sd
i
为打开承诺的信息;s3-2-4、各参与方计算零知识证明zkaok计算零知识证明zkaok来保证cl密文形式正确;s3-2-5、各参与方将广播给其余参与方若验证证明失败,则终止协议。7.根据权利要求4所述的基于sm2数字签名的门限签名方法,其特征在于,s3-3生成各自的可加份额的具体步骤为:s3-3-1、定义由n方参与者生成签名算法过程中的乘法份额,k:=∑
i∈s
k
i
,γ:=∑
i∈s
γ
i
,kγ=∑
i,j∈s
k
j
γ
i
,k(1+d)-1
=∑
i,j∈s
k
j
v
i
,(1+d)-1
d=∑
i,j∈s
v
j
w
i
;s3-3-2、各参与方选择交互过程中己方的随机加法份额计算b
j,i
:=β
j,i
·
g,c
j,i
:=v
j,i
·
g用于验证对方在签名过程中是否诚实;用交互的的公钥pk
j
对使用cl加密算法加密,得到得到得到s3-3-3、各参与方使用cl同态加密方法中的转化和算法、转化标量算法计算计算
得到利用同样的加密方法得到得到得到s3-3-4、各参与方将将密文和验证信息广播给s3-3-5、解密密文以恢复出另一半可加份额(α
j,i
,μ
j,i
,τ
j,i
),),解密后得到明文α
j,i
=k
j
v
i-β
j,i
,μ
j,i
=v
j
w
i-v
j,i
,s3-3-6、验证若等式不成立,说明有参与者使用了与秘密共享阶段不同的私钥,验证不通过,中止协议;s3-3-7、各参与方保存(ρ
i
,σ
i
,δ
i
),其中,ρ
i
=k
i
v
i
+∑
j≠i

i,j

j,i
),σ
i
=v
i
w
i
+∑
j≠i

i,j
+v
j,i
)作为计算签名算法中s的信息,作为计算签名算法中r的信息。8.根据权利要求4所述的基于sm2数字签名的门限签名方法,其特征在于,s3-4、计算sm2签名中的r的具体步骤为:s3-4-1、各参与方广播自己的δ
i
,所有的参与方计算δ=∑
i∈s
δ
i
=kγ-1
;s3-4-2、各参与方广播承诺中的sd
i
来解除对γ
i
的承诺,其中γ
i
=γ
i
g=open(sc
i
,sd
i
);s3-4-3、各参与方计算零知识证明并广播,证明自己知道γ
i
,收到后若验证不通过,中止协议;s3-4-4、各参与方计算r:=δ(∑
i∈s
γ
i
)=k
·
g,r:=r
x
+e;其中,r
x
是r的横坐标,e是消息m的哈希值。9.根据权利要求4所述的基于sm2数字签名的门限签名方法,其特征在于,s3-5、计算sm2签名中的s的具体步骤为s3-5-1、各参与方计算各自的签名信息s
i
=ρ
i-rσ
i
;s3-5-2、各参与方选择独立随机数(θ
i
,θ
i
),计算验证信息v
i
:=s
i
(g+p)+η
i
g;并广播s3-5-3、各参与方收到其余方广播的对验证信息的承诺信息后,通过广播来解除承诺,同时计算(s
i
,η
i
,θ
i
)的零知识证明nizkpok,证明自己知道(s
i
,η
i

θ
i
);s3-5-4、收到后检查零知识证明nizkpok,若验证不通过,中止协议;各参与方利用消息m,签名信息r和r以及公钥p计算v:=m+rp-r+∑
i∈svi
,a:=∑
i∈s
a
i
;s3-5-5、各参与方计算u
i
:=θ
i
v,t
i
:=η
i
a,对u
i
和t
i
计算承诺广播s3-5-6、各参与方收到其余方广播的后,广播后,广播收到后解除承诺,s3-5-7、各参与方险查∑
i∈s
t
i
=∑
i∈s
u
i
,若验证不通过,中止协议;s3-5-8、各参与方广播s
i
,所有参与方都计算s:=∑
i∈s
s
i
;s3-5-9、各参与方检查(r,s)是否是合理的sm2签名,输出(r,s),否则停止协议。

技术总结
本发明所述的基于SM2数字签名的门限签名方法,主要包括公共参数生成阶段、秘钥生成阶段和签名阶段,其中:在公共参数生成阶段,多个参与者协作生成CL加密的参数g


技术研发人员:王志伟 唐张颖
受保护的技术使用者:南京邮电大学
技术研发日:2021.12.02
技术公布日:2022/3/8

最新回复(0)