一种基于可验证秘密共享的无证书SM2密钥生成方法与流程

文档序号:32864481发布日期:2023-01-07 01:33阅读:33来源:国知局
一种基于可验证秘密共享的无证书SM2密钥生成方法与流程
一种基于可验证秘密共享的无证书sm2密钥生成方法
技术领域
1.本发明涉及信息安全技术领域,具体涉及一种基于可验证秘密共享的无证书sm2密钥生成方法。


背景技术:

2.在公钥密码机制中,用户的公钥往往需要与用户的身份信息或其他可辨别标识关联在一起,这其中是基于证书的系统或无证书的系统进行管理。对于国密sm2签名算法来说,基于证书的系统需要额外的证书认证机制,证书管理较为繁冗,而通过无证书的系统来管理用户的sm2密钥可以直接将用户的标识作为用户的公钥,省略了交换数字证书和公钥过程,使得密码系统变得易于部署和管理。
3.现有的sm2无证书系统是通过密钥生成中心(kgc)为用户生成私钥分片,最终由用户独立生成完整的私钥。这其中的密钥生成中心无法得知用户完整私钥的任何信息。通过单个密钥生成中心生成用户私钥分片会存在权力集中或单点故障而导致的服务中断、主私钥泄漏等问题,而在一般情况下,可以采用基于秘密共享方案的门限机制,由多方密钥生成中心共享系统主私钥的秘密份额,并协作参与生成用户的私钥分片。但是,当存在部分不诚实的密钥生成机构时,是无法避免某不诚实的密钥中心分发错误的秘密份额,从而最终构建无效的密钥,这必然会破坏无证书系统的安全性和稳定性。


技术实现要素:

4.本发明的目的是为了克服以上现有技术存在的不足,提供了一种基于可验证秘密共享的无证书sm2密钥生成方法,其能解决现有sm2无证书系统中由单个kgc为用户生成用户私钥分片时所存在的权力集中或单点故障而导致的服务中断、主私钥泄漏等问题,同时需要解决多方kgc基于秘密共享方案的门限机制共享系统主私钥的秘密份额并协作参与生成用户的私钥分片时,由于部分不诚实的kgc分发了错误的秘密份额,从而构建无效密钥的问题。
5.本发明的目的通过以下的技术方案实现:
6.一种基于可验证秘密共享的无证书sm2密钥生成方法包括:
7.s1,系统内的各个密钥生成中心根据预先保存的主密钥分量、预设门限阈值、系统公开参数和t-1阶多项式,计算并公开可验证的零知识承诺,为其他密钥生成中心生成对应的第一部分密码份额(fi(j),gi(j)),并发送至对应的密钥生成中心;
8.s2,各个密钥生成中心根据公开的零知识承诺验证所述第一部分密码份额(fi(j),gi(j))是否有效;若有效,则执行步骤s3;
9.s3,各个密钥生成中心根据所述第一部分密码份额计算第二部分秘密份额s2i、gi,并将所述第二部分秘密份额s2i、gi保存在本地;
10.s4,用户端生成部分私钥xa,并将与所述用户部分私钥xa对应的公钥和用户标识发送至密钥生成中心;
11.s5,当前密钥生成中心向系统内其他密钥生成中心请求获取用于恢复系统主密钥对的第二部分秘密分量s2i、gi,从而恢复完整的系统主私钥s以及与所述主私钥对应的主公钥p
pub

12.s6,根据所述用户部分私钥xa、用户标识ida、其他密钥生成中心随机生成的随机参数分量ωi、系统公开参数计算生成用户私钥分片t和声称公钥w;
13.s7,用户端根据所述用户部分私钥xa、用户私钥分片t和声称公钥w得到用户完整私钥和用户实际公钥pu,完成无证书sm2密钥的生成。
14.优选地,步骤s1包括:
15.s11,系统内的每个kgc各自生成随机数s1i,并将所述随机数s1i作为系统主私钥的分量,其中,s1i∈[1,n-1]i∈[1,k],k代表所有kgc的个数;
[0016]
s12,各kgc将所述随机数s1i作为秘密值,并根据预设阈值(t,k),选择t-1个随机数[a
i1
,a
i2
,....,a
i(t-1)
]和另一部分随机数[ri,b
i1
,b
i2
,....,b
i(t-1)
],并计算两个t-1阶多项式fi(x)和gi(x),其中,[a
i1
,a
i2
,....,a
i(t-1)
]∈[1,n-1],[ri,b
i1
,b
i2
,....,b
i(t-1)
]∈[1,n-1],而多项式fi(x)=s1i+a
i1
x1+a
i2
x2+....+a
i(
t-1)
x
t-1
,gi(x)=ri+b
i1
x+b
i2
x2+....+b
i(t-1)
x
t-1
,i∈[1,k];
[0017]
s13,各kgc计算并公开可验证的零知识承诺e
i0
,....,e
i(t-1)
;其中,
[0018]
s14,各kgc根据多项式fi(x)和gi(x)为其他kgc生成第一部分秘密份额(fi(j),gi(j)),并将所述秘密份额(fi(j),gi(j))依次分发到其他kgc;其中i,j∈[1,k],i≠j,fi(j)和gi(j)代表第i个kgc生成的并发给第j个kgc的秘密份额。
[0019]
优选地,步骤s2包括:
[0020]
s21,各kgc接收其他kgc分发的秘密份额(fi(j),gi(j)),并验证是否成立,若成立,则执行步骤s31;其中e
jl
,j∈[1,k],l∈[1,t-1]为每个kgc发布的可验证零知识承诺;
[0021]
步骤s3包括:
[0022]
s31,各kgc计算并保存第二部分秘密份额s2i、gi;其中,;其中,
[0023]
优选地,步骤s4包括:
[0024]
s41,用户端随机秘密生成部分私钥xa,将与所述用户部分私钥xa所对应的第一倍点ua与用户标识ida发送至密钥生成中心。
[0025]
5、根据权利要求4所述的无证书sm2密钥生成方法,其特征在于,步骤s5包括:
[0026]
s51,当前密钥生成中心接收到用户的生成密钥请求,并向系统内其他密钥生成中心请求获取用于恢复系统主密钥对的第二部分秘密分量s2i、gi和随机生成的随机参数分量ωi;所述用户的生成密钥请求包括第一倍点ua与用户标识ida;
[0027]
s52,验证所述秘密分量s2i是否有效;若有效,则执行步骤s52;
[0028]
s53,当获取到至少t个有效秘密份额s2i后,通过拉格朗日插值法恢复t-1阶多项式f(x),并恢复完整的系统主私钥s以及与所述主私钥对应的主公钥p
pub

[0029]
优选地,步骤s6包括:
[0030]
s61,根据t个密钥生成中心随机生成的随机参数分量ωi和第一倍点ua计算得到声称公钥w;
[0031]
s62,根据所述用户标识ida计算得到用户私钥分片t;
[0032]
s63,将所述用户私钥分片t和声称公钥w发回至用户端。
[0033]
优选地,在步骤s52中,通过验证是否成立判断所述秘密分量s2i是否有效;其中,是否有效;其中,为第j个kgc公开的零知识承诺;
[0034]
在步骤s53中,恢复系统主私钥s的公式为:
[0035]
s=f(0)mod n;
[0036]
恢复所述主私钥对应的主公钥p
pub
的公式为:
[0037][0038]
其中,是倍点[s]g在椭圆曲线上x轴的值,是倍点[s]g在椭圆曲线上y轴的值。
[0039]
优选地,步骤s61中,根据t个密钥生成中心随机生成的随机参数分量ωi和第一倍点ua进行计算的公式为:
[0040][0041]
pa=[ω]g;
[0042]
w=pa+ua=[ω]g+[x]g=[ω+x]g=(xw,yw);
[0043]
其中,ωi指的是t个密钥生成中心随机生成的随机参数分量,ω是将t个ωi求和并将求和结果与n取余;pa是根据ω和基点g生成的第二倍点;xw和yw分别是声称公钥w在椭圆曲线上x轴和y轴的值。
[0044]
在步骤s62中,根据所述用户标识ida进行计算的公式为:
[0045][0046]
t1=hash(xw||yw||za)mod n;
[0047]
t=(ω+t1*s)mod n;
[0048]
其中,a、b是椭圆曲线的参数,ida是指用户标识,xg和yg分别是基点g在椭圆曲线上x轴和y轴的值;za则是对结果生成的hash值,t1是将hash值结果与n取余所得出的整数;s是已恢复完整的系统主私钥,而t为用户私钥分片。
[0049]
优选地,步骤s7包括:根据所述用户私钥分片t和声称公钥w计算得到用户完整私钥;根据声称公钥w生成不可伪造的用户实际公钥pu;其中,根据所述用户私钥分片t和声称公钥w进行计算的公式为:
[0050]
sa=(xa+t)mod n;
[0051]
根据声称公钥w生成不可伪造的用户实际公钥pu的公式为:
[0052][0053]
t1=hash(xw||yw||za)mod n
[0054]
pu=w+[t1]p
pub

[0055]
优选地,步骤s7之后还包括:验证所述用户实际公钥pu中的声称公钥是否由kgc分发且未被篡改,具体包括:验证p
u*
与所述用户实际公钥pu是否相同,若相同,则该声称公钥是有效且未被篡改;其中,p
u*
=[sa]g。
[0056]
本发明相对于现有技术具有如下优点:
[0057]
本发明通过基于秘密共享方案的安全多方计算操作,根据各方密钥生成中心本地保存的主密钥分量生成对应的秘密份额并分发给系统内其他密钥生成中心。而且本发明还能基于可验证的零知识承诺并通过支持加法同态的可验证计算操作验证各方不信任实体发送的秘密份额的有效正确性。所述过程除了能确保各方实体接收的秘密份额是正确有效的,还能确保不泄漏各方密钥生成中心秘密保存的主密钥分量的任何隐私信息,这能有效提高系统整体的安全性、稳定性。此外,本发明通过多方密钥生成中心协同生成用户密钥分片,并由用户计算完整的私钥,这避免了单个密钥生成中心的权力集中,提高了用户密钥的安全性。
附图说明
[0058]
构成本技术的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0059]
图1为本发明的基于可验证秘密共享的无证书sm2密钥生成方法的流程示意图。
[0060]
图2为本发明的系统初始化的流程示意图。
[0061]
图3为本发明的用户密钥生成的流程示意图。
具体实施方式
[0062]
下面结合附图和实施例对本发明作进一步说明。
[0063]
图1为本发明的基于可验证秘密共享的无证书sm2密钥生成方法的流程示意图。如图1所示、一种基于可验证秘密共享的无证书sm2密钥生成方法包括:
[0064]
s1,系统内的各个密钥生成中心根据预先保存的主密钥分量、预设门限阈值、系统公开参数和t-1阶多项式,计算并公开可验证的零知识承诺,为其他密钥生成中心生成对应的第一部分密码份额(fi(j),gi(j)),并发送至对应的密钥生成中心;
[0065]
s2,各个密钥生成中心根据自己的可验证的零知识承诺验证所述第一部分密码份额(fi(j),gi(j))是否有效;若有效,则执行步骤s3;
[0066]
s3,各个密钥生成中心根据所述第一部分密码份额计算第二部分秘密份额s2i、gi,并将所述第二部分秘密份额s2i、gi保存在本地;
[0067]
s4,用户端生成部分私钥xa,并将与所述用户部分私钥xa对应的公钥和用户标识发送至密钥生成中心;
[0068]
s5,当前密钥生成中心向系统内其他密钥生成中心请求获取用于恢复系统主密钥对的第二部分秘密分量s2i、gi,从而恢复完整的系统主私钥s以及与所述主私钥对应的主公
1阶多项式,计算并公开可验证的零知识承诺,并为其他k-1个kgc生成对应的第一部分秘密份额并发送至对应的kgc。
[0084]
5)各kgc接收其他kgc分发的秘密份额(fi(j),gi(j)),并验证是否成立,其中e
ij
,j∈[1,5],l∈[1,2]为每个kgc发布的可验证零知识承诺,若不成立则该秘密份额无效,需重新请求生成第一部分秘密份额;
[0085]
步骤3)、4)和5)通过可验证计算操作并基于各kgc生成的可验证零知识承诺校验接收的秘密份额是否有效,同时确保不泄漏系统主私钥分量s1i的任何信息。
[0086]
6)各kgc计算第二部分秘密份额和随后各kgc将s2i、gi保存在本地。
[0087]
步骤6)中每个kgc本地保存的第二部分秘密份额s2i和gi是用于后续校验秘密份额的有效性并构建t-1阶多项式f(x),从而构建完整的系统主私钥秘密值s=f(0)mod n=(s11+s12+s13)mod n,而主公钥为p
kgc
=s[g]=([s11]g+[s12]g+[s13]g);
[0088]
本方案的所述每个kgc根据各kgc公开的零知识承诺以及从其他kgc接收的第一部分秘密份额验证该秘密份额是否正确有效,若有效则根据本地保存的第一部分秘密份额以及从其他kgc接收的第一部分秘密份额计算第二部分的秘密份额并保存,无效则重新请求目标密钥生成机构获取第一部分秘密份额。
[0089]
二、用户密钥生成(参照图3)
[0090]
用户端:
[0091]
1)随机秘密生成x,x∈[1,n-1]作为用户部分私钥xa=x;
[0092]
2)计算ua=[x]g;
[0093]
3)将ua与用户标识ida发送至密钥生成中心;ua是指与用户部分私钥xa所对应的第一倍点(基于椭圆曲线的基点g生成的)。
[0094]
密钥生成中心:
[0095]
1)接收用户的生成密钥请求,并向其他密钥生成中心请求获取用于恢复系统主密钥对的第二部分秘密分量s2i、gi和随机生成的随机参数分量ωi∈[1,n-1],i∈[1,t-1];
[0096]
2)计算其中代表第j个kgc公开的零知识承诺。接着根据接收的第二部分秘密分量s2i、gi,通过验证,通过验证是否成立判断其他kgc发送的秘密分量s2i是否有效,若不成立则返回错误,重新请求获取秘密分量s2i。
[0097]
3)当收集完不少于t个有效秘密份额s2i后,通过拉格朗日插值法恢复t-1阶多项式f(x),从而恢复完整的系统主私钥s=f(0)mod n,随后计算并公开系统主公钥此处的p
pub
指的是与上述已恢复完整的系统主私钥s所对应的主公钥,其同样是基于椭圆曲线的基点g生成的,其中指的是倍点[s]g在椭圆曲线上x轴的值,而指的是倍点[s]g在椭圆曲线上y轴的值。
[0098]
4)计算并计算pa=[ω]g;其中,ωi指的是t个密钥生成中心随机生成的随机参数分量,而ω则是将t个ωi求和并将求和结果与n取余,确保得出的ω不超过n;而pa指的是根据ω和基点g生成的第二倍点;
[0099]
5)计算w=pa+ua=[ω]g+[x]g=[ω+x]g=(xw,yw);其中,w为倍点pa与ua之和,而xw和yw分别是w在椭圆曲线上x轴和y轴的值;后续将w标注为声称公钥;
[0100]
6)计算其中,a、b是椭圆曲线的参数,ida是指用户标识,xg和yg分别是基点g在椭圆曲线上x轴和y轴的值;za则是对结果生成的hash值。
[0101]
7)计算t1=hash(xw||yw||za)modn;其中,t1是将hash值结果与n取余所得出的整数;
[0102]
8)计算t=(ω+t1*s)modn;其中,s是已恢复完整的系统主私钥,而t为用户私钥分片,w为声称公钥;
[0103]
9)将用户私钥分片t和声称公钥w发回至用户端;
[0104]
本方案的所述用户端计算部分私钥并将对应的公钥发送至kgc。所述kgc请求获取其他kgc保存的第二部分有效秘密份额从而恢复系统主私钥,接着根据用户发送的部分公钥、用户可辨别标识、其他kgc发送的随机参数分量、系统公开参数和系统主公钥计算生成用户部分私钥以及声称公钥,然后发送至用户端。
[0105]
用户端:
[0106]
1)计算sa=(xa+t)mod n并作为用户完整私钥;
[0107]
2)用户保存w=(xw,yw)并作为用户声称公钥;
[0108]
用户的声称公钥是用于后续基于公开的原始数据(如系统公开参数、用户标识ida、系统主公钥p
pub
以及用户声明公钥w)生成不可伪造的用户实际公钥pu。随后可基于用户实际公钥pu进行sm2算法的验签和解密操作,其用户实际公钥pu生成过程分为下面三个步骤:
[0109]
1)计算
[0110]
2)计算t1=hash(xw||yw||za)modn;
[0111]
3)计算pu=w+[t1]p
pub

[0112]
本方案的所述用户端根据从kgc接收的部分私钥计算生成完整用户私钥,同时根据声称公钥,系统主公钥以及系统公开参数计算生成对应的用户实际公钥。
[0113]
其中,验证所述用户实际公钥pu中的声称公钥是否由kgc分发且未被篡改的步骤主要分为:
[0114]
1)计算p
u*
=[sa]g;
[0115]
2)验证p
u*
=pu是否成立,即验证p
u*
与所述计算生成的用户实际公钥pu是否相同,若相同则该声称公钥是有效且未被篡改,不相同则无效。
[0116]
与现有的基于秘密共享的密钥生成方案相比,本实施例引入了可验证的零知识承诺。在之前的方案中,各方通过秘密共享方案共享设定的秘密值并获取对应的秘密份额,随后各方可根据持有的秘密份额并通过多方安全计算来构建共享的秘密值,但其中若有某方
不诚实的实体分发错误无效的秘密份额或某方实体接收了错误的秘密份额,这必然会导致最终构建无效的秘密值,从而破坏系统的安全性,浪费了系统资源。
[0117]
本实施例提出的方法不仅能够通过基于秘密共享方案的安全多方计算操作,根据各方密钥生成中心本地保存的主密钥分量生成对应的秘密份额并分发给其他密钥生成中心,而且还能基于可验证的零知识承诺并通过支持加法同态的可验证计算操作验证各方不信任实体发送的秘密份额的有效正确性。所述过程除了能确保各方实体接收的秘密份额是正确有效的,还能确保不泄漏各方密钥生成中心秘密保存的主密钥分量的任何隐私信息,这能有效提高系统整体的安全性、稳定性。
[0118]
上述具体实施方式为本发明的优选实施例,并不能对本发明进行限定,其他的任何未背离本发明的技术方案而所做的改变或其它等效的置换方式,都包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1