SM2密钥生成法及相关方法、计算机设备和存储介质与流程

文档序号:32756207发布日期:2022-12-31 03:44阅读:44来源:国知局
SM2密钥生成法及相关方法、计算机设备和存储介质与流程
sm2密钥生成法及相关方法、计算机设备和存储介质
技术领域
1.本发明涉及信息安全技术领域,尤其涉及一种sm2密钥生成法及相关方法、计算机设备和存储介质。


背景技术:

2.sm2密码算法是国家密码管理局发布的一种公钥密码算法。传统的基于证书的公钥基础设施(public key infrastructure,pki)体系,是使用数字证书,由可信第三方将公钥、用户身份信息和可辨别标识关联的系统。
3.然而,使用基于证书的pki体系,证书管理对用户端的计算设备有较高的要求,在车辆网、物联网等应用场景中,使用基于证书的pki体系会给用户端的计算设备带来较大的运算开销。为此,基于标识的密码算法体系使用用户的可辨别标识作为用户公钥,如国家密码管理局发布的sm9标识密码算法,以简化证书管理。但是,sm9标识密码算法本身对计算开销要求也较高。
4.为克服证书管理以及sm9标识密码算法中的高计算开销,本发明提供一种基于用户标识和密钥生成中心(key generation center,kgc)为用户生成sm2密钥以及签名验证、加解密的方法,使用sm2公钥算法并简化证书管理带来的高计算开销。


技术实现要素:

5.有鉴于此,本发明提供了一种sm2密钥生成法及相关方法、计算机设备和存储介质,以解决上述证书管理以及sm9标识密码算法中的高计算开销的问题。
6.本发明提供的sm2密钥生成法,包括步骤:步骤一,步骤二和/或步骤三,
7.其中,
8.步骤一.建立系统参数;
9.步骤二.基于所述系统参数,生成用户签名私钥dsa;
10.步骤三.基于所述系统参数,生成用户加密私钥dea。
11.进一步,所述步骤一包括如下步骤:
12.s11.用户和密钥生成中心kgc共享sm2算法的椭圆曲线e(fq)参数g和n,其中,e(fq)为定义在有限域fq上的椭圆曲线,g表示所述椭圆曲线e(fq)上阶为n的基点,n为素数;
13.s12.由所述密钥生成中心kgc生成系统主私钥ms和系统主公钥p
pub
,其中,系统主公钥p
pub
=[ms]
×
g,方括号[]的含义代表所述椭圆曲线e(fq)上的倍点运算,所述系统主公钥p
pub
是所述椭圆曲线e(fq)上的点,后面各计算式中的方括号[]的含义均代表所述椭圆曲线e(fq)上的倍点运算;
[0014]
s13.由所述密钥生成中心kgc随机选择第一私钥生成符kid0∈[1,n-1]和第二私钥生成符kid1∈[1,n-1],并且kid0和kid1不相等;
[0015]
s14.所述密钥生成中心kgc公开所述系统主公钥p
pub
、第一私钥生成符kid0和第二私钥生成符kid1。
[0016]
进一步,所述步骤二包括如下步骤:
[0017]
s21.所述用户产生第一随机数ra∈[1,n-1],计算ua=[ra]
×
g;
[0018]
s22.所述用户将所述ua和所述用户的可辨别标识ida提交给所述密钥生成中心kgc;;
[0019]
s23.所述密钥生成中心kgc使用所述系统主私钥ms计算第一部分密钥值ta和第一公钥恢复数据wa,并将所述第一部分密钥值ta和第一公钥恢复数据wa发送给所述用户,并向所述用户返回第一密文cipher1或第二密文cipher2;
[0020]
s24.所述用户收到所述第一密文cipher1或第二密文cipher2,解密后得到所述第一部分密钥值ta和所述第一公钥恢复数据wa,计算ha=h
256
(entla‖ida‖x
pub
‖y
pub
)和ha=h
256
(xw‖yw‖ha),计算所述用户签名私钥dsa=(ha×
ta+ra)mod n,保存用户签名私钥dsa和第一公钥恢复数据wa,其中,h
256
为输出为256比特的杂凑函数;entla为2个字节表示的所述可辨别标识ida的字节长度;‖表示字节串的拼接;x
pub
,y
pub
为所述系统主公钥p
pub
的坐标;xw,yw为所述第一公钥恢复数据wa的坐标;x mod y代表x对y的求余运算。
[0021]
进一步,所述步骤s23中,所述计算包括如下步骤:
[0022]
a1.计算所述ha=h
256
(entla‖ida‖x
pub
‖y
pub
),并转换为字节串;
[0023]
a2.生成第二随机数w∈[1,n-1];
[0024]
a3.计算所述第一公钥恢复数据wa=[w]
×
g+ua+[kid0]
×
p
pub

[0025]
a4.计算所述ha=h
256
(xw‖yw‖ha),并转换为字节串;
[0026]
a5.将所述ha转换为整数,如果转换为整数后为0,则转至所述步骤a2;
[0027]
a6.计算所述第一部分密钥值ta=(h
a-1
×
(w+kid0×
ms)+kid0×
ms)modn,然后所述密钥生成中心kgc将所述第一部分密钥值ta和所述第一公钥恢复数据wa发送给所述用户,其中,包括发送方法b或发送方法c,
[0028]
所述发送方法b包括如下步骤:
[0029]
b1.计算k=[ms]
×
ua,第一密钥k=kdf(xk||yk,128),其中,xk,yk为k的坐标,kdf是密钥派生函数,所述第一密钥k是通过所述密钥派生函数生成的128比特的字节串;
[0030]
b2.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw按照转换为字节串;
[0031]
b3.使用所述第一密钥k和sm4密码算法对明文ta||xw||yw进行加密得到所述第一密文cipher1=sm4_enc(k,ta||xw||yw),并将所述第一密文cipher1发送给所述用户,其中,sm4_enc(k,ta||xw||yw)表示使用sm4加密算法和128比特的所述第一密钥k,对所述明文ta||xw||yw进行加密计算并输出密文;
[0032]
所述发送方法c包括如下步骤:
[0033]
c1.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为字节串;
[0034]
c2.使用所述ua作为第三公钥,并使用sm2加密算法对明文ta||xw||yw进行加密后得到所述第二密文cipher2=sm2_enc(ua,ta||xw||yw),并将所述第二密文cipher2发送给所述用户,其中,sm2_enc(ua,ta||xw||yw)表示使用sm2加密算法和所述第三公钥ua,对所述明文ta||xw||yw进行加密计算并输出密文,
[0035]
所述步骤s24中,在进行所述解密时,
[0036]
若所述步骤s23中使用所述发送方法b,则解密方法为方法d,所述方法d包括如下
步骤:
[0037]
d1.计算k’=[ra]
×
p
pub
,第二密钥k’=kdf(x
k’||y
k’,128),其中,x
k’,y
k’为k’的坐标,所述第二密钥k’是通过所述密钥派生函数生成的128比特的字节串;
[0038]
d2.使用所述第二密钥k’和sm4密码算法对所述第一密文cipher1进行解密得到明文:
[0039]
ta||xw||yw=sm4_dec(k’,cipher1),
[0040]
其中,sm4_dec(k’,cipher1)表示使用所述sm4解密算法和128比特的所述第二密钥k’,对所述第一密文cipher1进行解密计算并输出明文;
[0041]
d3.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为整数,从而解密得到所述第一部分密钥值ta和所述第一公钥恢复数据wa;
[0042]
若所述步骤s23中使用所述发送方法c,则解密方法为方法e,所述方法e包括如下步骤:
[0043]
e1.使用所述第一随机数ra作为第一私钥,并使用sm2解密算法对所述第二密文cipher2进行解密后得到明文:
[0044]
ta||xw||yw=sm2_dec(ra,cipher2);
[0045]
其中,sm2_dec(ra,cipher2)表示使用所述sm2解密算法和第一私钥ra,对所述第二密文cipher2进行解密计算并输出明文;
[0046]
e2.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为整数,从而解密得到所述第一部分密钥值ta和所述第一公钥恢复数据wa。
[0047]
进一步,所述步骤三包括如下步骤:
[0048]
s31.所述用户产生一个第三随机数rra∈[1,n-1],计算uua=[rra]
×
g;
[0049]
s32.所述用户将所述uua和所述用户的可辨别标识ida提交给所述密钥生成中心kgc;
[0050]
s33.所述密钥生成中心kgc使用所述系统主私钥ms计算第二部分签名密钥值tta和第二公钥恢复数据wwa,并将所述第二部分签名密钥值tta和第二公钥恢复数据wwa发送给所述用户,并向所述用户返回第三密文cipher3或第四密文cipher4;
[0051]
s34.用户收到所述第三密文cipher3或第四密文cipher4,解密后得到所述第二部分签名密钥值tta和第二公钥恢复数据wwa,计算hha=h
256
(x
ww
‖y
ww
‖ha),再计算所述用户加密私钥dea=(hha×
tta+rra)modn,并保存所述用户加密私钥dea和第二公钥恢复数据wwa,其中,x
ww
,y
ww
为所述第二公钥恢复数据wwa的坐标。
[0052]
进一步,所述步骤s33中,所述计算包括如下步骤:
[0053]
g1.计算所述ha=h
256
(entla‖ida‖x
pub
‖y
pub
);
[0054]
g2.产生第四随机数ww∈[1,n-1];
[0055]
g3.计算所述第二公钥恢复数据wwa=[ww]
×
g+uua+[kid1]
×
p
pub

[0056]
g4.计算hha=h
256
(x
ww
‖y
ww
‖ha),其中,x
ww
,y
ww
为所述第二公钥恢复数据wwa的坐标,并转换为字节串;
[0057]
g5.将所述hha转换为整数,如果转换为整数后为0,则转至所述步骤g2;
[0058]
g6.计算tta=(hh
a-1
×
(ww+kid1×
ms)+kid1×
ms)mod n,然后所述密钥生成中心kgc将所述第二部分密钥值tta和第二公钥恢复数据wwa发送给所述用户,其中,包括发送方
法h或发送方法i,
[0059]
所述发送方法h包括如下步骤:
[0060]
h1.计算kk=[ms]
×
uua,第三密钥kk=kdf(x
kk
||y
kk
,128),其中,x
kk
,y
kk
为所述kk的坐标,所述第三密钥kk是通过所述密钥派生函数生成的128比特的字节串;
[0061]
h2.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
和y
ww
转换为字节串;
[0062]
h3.使用所述第三密钥kk和sm4密码算法对tta||x
ww
||y
ww
进行加密得到所述第三密文cipher3=sm4_enc(kk,tta||x
ww
||y
ww
),并将所述第三密文cipher3发送给所述用户;
[0063]
所述发送方法i包括如下步骤:
[0064]
i1.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
和y
ww
转换为字节串;
[0065]
i2.使用所述uua作为第四公钥,并使用sm2加密算法对tta||x
ww
||y
ww
进行加密后得到所述第四密文cipher4=sm2_enc(uua,tta||x
ww
||y
ww
),并将所述第四密文cipher4发送给所述用户,
[0066]
所述步骤s34中,包括如下步骤:
[0067]
在进行所述解密时,
[0068]
若所述步骤s33中使用所述发送方法h,则解密方法为方法j,所述方法j包括如下步骤:
[0069]
j1.计算kk’=[rra]
×
p
pub
,第四密钥kk’=kdf(x
kk’||y
kk’,128),其中,x
kk’,y
kk’为所述kk’的坐标,所述第四密钥kk’是通过所述密钥派生函数生成的128比特的字节串;
[0070]
j2.使用所述第四密钥kk’和sm4密码算法对所述第三密文cipher3进行解密得到明文
[0071]
tta||x
ww
||y
ww
=sm4_dec(kk’,cipher3);
[0072]
j3.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为整数,从而解密得到所述第二部分密钥值tta和第二公钥恢复数据wwa;
[0073]
若所述步骤s33中使用所述发送方法i,则解密方法为方法k,所述方法k包括如下步骤:
[0074]
k1.使用所述第三随机数rra作为第二私钥,并使用sm2解密算法对所述第四密文cipher4进行解密后得到明文
[0075]
tta||x
ww
||y
ww
=sm2_dec(rra,cipher4);
[0076]
k2.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为整数,从而解密得到所述第二部分密钥值tta和第二公钥恢复数据wwa。
[0077]
本发明还提供一种公钥恢复方法,其中采用上述sm2密钥生成法生成第一公钥p’a
或/和生成第二公钥pp’a

[0078]
其中,
[0079]
所述生成第一公钥p’a
,是使用用户的可辨别标识ida,密钥生成中心kgc的系统主公钥p
pub
、第一公钥恢复数据wa和第一私钥生成符kid0,生成对应的第一公钥p’a
,包括如下步骤:
[0080]
g1.计算h11=h
256
(entl‖ida‖x
pub
‖y
pub
),其中,h
256
为输出为256比特的杂凑函数,
entl为2个字节表示的所述可辨别标识ida的字节长度,‖表示字节串的拼接,x
pub
,y
pub
为所述系统主公钥p
pub
的坐标;
[0081]
g2.将所述第一公钥恢复数据wa的坐标xw、yw转换为字节串,计算h11=h
256
(xw‖yw‖h11),并将所述h11转换为整数;
[0082]
g3.计算p’a
=wa+[kid0×
h11]
×
p
pub

[0083]
所述生成第二公钥pp’a
是使用所述可辨别标识ida,密钥生成中心kgc的系统主公钥p
pub
、第二公钥恢复数据wwa和第二私钥生成符kid1,生成对应的第二公钥pp’a
,包括如下步骤:
[0084]
m1.计算所述h11=h
256
(entl‖ida‖x
pub
‖y
pub
);
[0085]
m2.将所述第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为字节串,计算h22=h
256
(x
ww
‖y
ww
‖h11),并将所述h22转换为整数;
[0086]
m3.计算pp’a
=wwa+[kid1×
h22]
×
p
pub

[0087]
本发明还提供一种sm2密钥生成法,其中采用上述公钥恢复方法,包括如下步骤:
[0088]
s25.用户选择进行第一公钥验证,包括如下步骤:
[0089]
f1.采用上述公钥恢复方法,生成第一公钥p’a

[0090]
f2.计算pa=[da]
×
g;
[0091]
f3.如果p’a
=pa,则第一公钥验证成功,否则第一公钥验证失败;
[0092]
或包括如下步骤:
[0093]
s35.用户选择进行第二公钥验证,包括如下步骤:
[0094]
l1.采用上述公钥恢复方法,生成第二公钥pp’a

[0095]
l2.计算ppa=[dea]
×
g;
[0096]
l3.如果pp’a
=ppa,则第二公钥验证成功,否则第二公钥验证失败。
[0097]
本发明还提供一种数字签名生成方法,其中采用上述的sm2密钥生成法对待签名数据e计算数字签名。
[0098]
本发明还提供一种数字签名验证方法,其中采用上述的公钥恢复方法对签名值进行验证。
[0099]
本发明还提供一种数据加密方法,其中采用上述的公钥恢复方法对数据明文进行加密。
[0100]
本发明还提供一种数据解密方法,其中采用上述的sm2密钥生成法对加密数据密文进行解密。
[0101]
本发明还提供一种计算机设备,包括储存器、第一处理器及储存在所述存储器上并可在所述第一处理器上运行的第一计算机程序,第一计算机程序被第一处理器执行时实现下列方法的一种或几种:
[0102]
上述的sm2密钥生成法、公钥恢复方法、数字签名生成方法、数字签名验证方法、数据加密方法、数据解密方法。
[0103]
本发明还提供一种计算机可读存储介质,用于储存第二计算机程序,所述第二计算机程序可被至少一个第二处理器所执行,以使所述至少一个第二处理器执行下列方法的一种或几种:
[0104]
上述的sm2密钥生成法、公钥恢复方法、数字签名生成方法、数字签名验证方法、数
据加密方法、数据解密方法。
[0105]
本发明与现有技术相比存在的有益效果是:
[0106]
1.本发明使得用户在生成签名密钥和加密密钥的过程中,通过私钥生成符对签名密钥和加密密钥进行区分,而且,签名验证者和数据加密者也需要使用私钥生成符来恢复签名公钥和加密公钥,从而使得签名密钥和加密密钥的生成和使用从算法层面上进行了区分,避免混用。
[0107]
2.本发明节省了大量计算资源。本发明通过使用用户标识、公钥恢复数据和kgc的主公钥对用户的sm2公钥进行恢复并验证,避免了基于证书的证书链验证所需的大量计算和网络资源。
附图说明
[0108]
为了更清楚地说明本发明中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0109]
图1示出了根据本发明实施例的sm2密钥生成法的流程图。
具体实施方式
[0110]
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
[0111]
下面结合附图详细说明本发明提供的一种sm2密钥生成法。
[0112]
图1示出了根据本发明实施例的sm2密钥生成法的流程图。如图1所示,所述sm2密钥生成法包括如下步骤:
[0113]
一.建立系统参数,包括步骤:
[0114]
s11.用户和密钥生成中心(key generation center,kgc)共享sm2算法的椭圆曲线e(fq)的参数g和n,其中,e(fq)为定义在有限域fq上的椭圆曲线,g表示椭圆曲线e(fq)上阶为n的基点,n为素数,各参数的具体取值均根据sm2算法预先设定;
[0115]
s12.由密钥生成中心kgc生成系统主私钥ms和系统主公钥p
pub
,其中p
pub
=[ms]
×
g,方括号[]的含义代表椭圆曲线e(fq)上的倍点运算,p
pub
是椭圆曲线e(fq)上的点,需注意,本发明中各计算式中的方括号[]的含义均代表椭圆曲线e(fq)上的倍点运算;
[0116]
s13.由密钥生成中心kgc随机选择第一私钥生成符kid0∈[1,n-1]和第二私钥生成符kid1∈[1,n-1],并且kid0和kid1不相等,其中,第一私钥生成符kid0为用户签名私钥生成符,用于生成用户签名私钥;kid1为用户解密私钥生成符,用于生成用户解密私钥;
[0117]
s14.所述密钥生成中心kgc公开p
pub
、kid0和kid1。
[0118]
二.基于系统参数,生成用户签名私钥,包括如下步骤:
[0119]
s21.用户产生一个第一随机数ra∈[1,n-1],基于所述第一随机数ra与g,计算ua=[ra]
×
g;
[0120]
s22.用户将ua和用户的可辨别标识ida提交给所述密钥生成中心kgc;
[0121]
s23.密钥生成中心kgc使用系统主私钥ms计算第一部分密钥值ta和第一公钥恢复数据wa,并将所述第一部分密钥值ta和第一公钥恢复数据wa发送给用户,所述计算具体包括如下步骤:
[0122]
a1.计算ha=h
256
(entla‖ida‖x
pub
‖y
pub
),并转换为字节串,其中,entla为2个字节表示的可辨别标识ida的字节长度;‖表示字节串的拼接;x
pub
,y
pub
为kgc的系统主公钥p
pub
的坐标,h
256
为输出为256比特的杂凑函数(如sm3密码算法),所述转换为字节串是按照国家标准《gb/t32918.1-2016》中4.2.6给出的方法进行的;
[0123]
a2.生成第二随机数w∈[1,n-1];
[0124]
a3.基于所述第二随机数w,计算所述第一公钥恢复数据wa=[w]
×
g+ua+[kid0]
×
p
pub

[0125]
a4.基于所述第一公钥恢复数据wa,计算ha=h
256
(xw‖yw‖ha),并转换为字节串,其中,xw,yw为第一公钥恢复数据wa的坐标,转换为字节串是按照国家标准《gb/t32918.1-2016》中4.2.6给出的方法进行的;
[0126]
a5.将ha转换为整数,如果转换为整数后为0,则转至步骤a2;
[0127]
其中,将ha转换为整数,是按照《gb/t 32918.1-2016》中4.2.3给出的方法进行;
[0128]
a6.计算所述第一部分密钥值ta=(h
a-1
×
(w+kid0×
ms)+kid0×
ms)mod n,然后密钥生成中心kgc将所述第一部分密钥值ta和所述第一公钥恢复数据wa发送给用户,x mod y代表x对y的求余运算,其中,包括发送方法b或发送方法c,
[0129]
所述发送方法b包括如下步骤:
[0130]
b1.计算k=[ms]
×
ua,第一密钥k=kdf(xk||yk,128),其中,xk,yk为k的坐标,kdf是《gb/t 32918.4-2016》——《信息安全技术sm2椭圆曲线公钥密码算法第4部分:公钥加密算法》第5.4.3节中的密钥派生函数,第一密钥k是通过密钥派生函数生成的128比特的字节串;
[0131]
b2.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw按照《gb/t 32918.1-2016》中4.2.6给出的方法转换为字节串;
[0132]
b3.使用第一密钥k和sm4密码算法对明文ta||xw||yw进行加密得到第一密文cipher1=sm4_enc(k,ta||xw||yw),并将第一密文cipher1发送给用户,其中,sm4_enc(k,ta||xw||yw)表示使用《gb/t 32907-2016》——《信息安全技术sm4分组密码算法》中定义的sm4加密算法和128比特的第一密钥k,对明文ta||xw||yw进行加密计算并输出密文;
[0133]
所述发送方法c包括如下步骤:
[0134]
c1.将所述第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为字节串,其中,所述转换是按照《gb/t 32918.1-2016》中4.2.6给出的方法进行的;
[0135]
c2.使用ua作为第三公钥,并使用sm2加密算法对明文ta||xw||yw进行加密后得到第二密文cipher2=sm2_enc(ua,ta||xw||yw),并将所述第二密文cipher2发送给用户,其中,sm2_enc(ua,ta||xw||yw)表示使用《gb/t32918.4-2016》中的sm2加密算法和第三公钥ua,对明文ta||xw||yw进行加密计算并输出密文;
[0136]
s24.用户收到密钥生成中心kgc返回的第一密文cipher1或第二密文cipher2,解密后得到所述第一部分密钥值ta和所述第一公钥恢复数据wa,计算ha=h
256
(entla‖ida‖x
pub
‖ypub
)和ha=h
256
(xw‖yw‖ha),计算用户签名私钥dsa=(ha×
ta+ra)(mod n),保存用户签名私钥dsa和第一公钥恢复数据wa,
[0137]
在进行所述解密时,
[0138]
若步骤s23中使用发送方法b,则解密方法为方法d,方法d包括如下步骤:
[0139]
d1.计算k’=[ra]
×
p
pub
,第二密钥k’=kdf(x
k’||y
k’,128),其中,x
k’,y
k’为k’的坐标,第二密钥k’是通过密钥派生函数生成的128比特的字节串;
[0140]
d2.使用第二密钥k’和sm4密码算法对第一密文cipher1进行解密得到明文:
[0141]
ta||xw||yw=sm4_dec(k’,cipher1);
[0142]
其中,sm4_dec(k’,cipher1)表示使用《gb/t 32907-2016》中的sm4解密算法和128比特的第二密钥k’,对第一密文cipher1进行解密计算并输出明文。
[0143]
d3.将第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为整数,从而解密得到所述第一部分密钥值ta和所述第一公钥恢复数据wa。其中,将ta和xw、yw转换为整数,是按照《gb/t 32918.1-2016》中4.2.3给出的方法进行的;
[0144]
若步骤s23中使用发送方法c,则解密方法为方法e,方法e包括如下步骤:
[0145]
e1.使用第一随机数ra作为第一私钥,并使用sm2解密算法对第二密文cipher2进行解密后得到明文:
[0146]
ta||xw||yw=sm2_dec(ra,cipher2),
[0147]
其中,sm2_dec(ra,cipher2)表示使用《gb/t 32918.4-2016》中的sm2解密算法和第一私钥ra,对第二密文cipher2进行解密计算并输出明文;
[0148]
e2.将第一部分密钥值ta和第一公钥恢复数据wa的坐标xw、yw转换为整数,从而解密得到所述第一部分密钥值ta和所述第一公钥恢复数据wa。其中,将ta和xw、yw转换为整数,是按照《gb/t 32918.1-2016》中4.2.3给出的方法进行的;
[0149]
s25.用户可选择是否进行第一公钥验证。如不进行第一公钥验证,则返回用户签名私钥生成成功,如进行第一公钥验证,则包括如下步骤:
[0150]
f1.使用可辨别标识ida,密钥生成中心kgc的系统主公钥p
pub
、第一公钥恢复数据wa和第一私钥生成符kid0,生成对应的第一公钥p’a
(即恢复第一公钥p’a
),所述生成包括如下步骤:
[0151]
g1.计算h11=h
256
(entl‖ida‖x
pub
‖y
pub
),其中entl为2个字节表示ida的字节长度;
[0152]
g2.按《gb/t32918.1-2016》中4.2.6给出的方法将第一公钥恢复数据wa的坐标xw、yw转换为字节串,计算h11=h
256
(xw‖yw‖h11),并按照《gb/t 32918.1-2016》中4.2.3给出的方法将h11转换为整数;
[0153]
g3.计算p’a
=wa+[kid0×
h11]
×
p
pub

[0154]
f2.计算pa=[da]
×
g;
[0155]
f3.如果p’a
=pa,则第一公钥验证成功,否则第一公钥验证失败;
[0156]
f4.如果第一公钥验证成功,则返回用户签名私钥生成成功,否则返回用户签名私钥生成失败。
[0157]
三.基于所述系统参数,生成用户加密私钥(本步骤与步骤二可任意择一先进行,也可同时进行,还可根据需要只择一进行),包括如下步骤:
[0158]
s31.用户产生一个第三随机数rra∈[1,n-1],计算uua=[rra]
×
g;
[0159]
s32.用户将所述uua和用户的可辨别标识ida提交给所述密钥生成中心kgc;
[0160]
s33.所述密钥生成中心kgc使用系统主私钥ms计算第二部分签名密钥值tta和第二公钥恢复数据wwa,并将tta和wwa发送给用户,其中,所述计算包括如下步骤:
[0161]
g1.计算ha=h
256
(entla‖ida‖x
pub
‖y
pub
);
[0162]
g2.产生第四随机数ww∈[1,n-1];
[0163]
g3.基于所述第四随机数ww,计算所述第二公钥恢复数据wwa=[ww]
×
g+uua+[kid1]
×
p
pub

[0164]
g4.基于所述第二公钥恢复数据wwa,计算hha=h
256
(x
ww
‖y
ww
‖ha),其中,x
ww
,y
ww
为第二公钥恢复数据wwa的坐标,并按照《gb/t32918.1-2016》中4.2.6给出的方法转换为字节串;
[0165]
g5.按照《gb/t 32918.1-2016》中4.2.3给出的方法将hha转换为整数,如果转换为整数后为0,则转至步骤g2;
[0166]
g6.计算tta=(hh
a-1
×
(ww+kid1×
ms)+kid1×
ms)(mod n),然后所述密钥生成中心kgc将第二部分密钥值tta和第二公钥恢复数据wwa发送给用户,其中,包括发送方法h或发送方法i,
[0167]
所述发送方法h包括如下步骤:
[0168]
h1.计算kk=[ms]
×
uua,第三密钥kk=kdf(x
kk
||y
kk
,128),其中,x
kk
,y
kk
为kk的坐标,kk是通过密钥派生函数生成的128比特的字节串;
[0169]
h2.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
和y
ww
按照《gb/t 32918.1-2016》中4.2.6给出的方法转换为字节串;
[0170]
h3.使用所述第三密钥kk和sm4密码算法对明文tta||x
ww
||y
ww
进行加密得到第三密文cipher3=sm4_enc(kk,tta||x
ww
||y
ww
),并将所述第三密文cipher3发送给用户,其中,sm4_enc(kk,tta||x
ww
||y
ww
)表示使用《gb/t 32907-2016》——《信息安全技术sm4分组密码算法》中定义的sm4加密算法和128比特的第三密钥kk,对明文tta||x
ww
||y
ww
进行加密计算并输出密文;
[0171]
所述发送方法i包括如下步骤:
[0172]
i1.将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
和y
ww
按照《gb/t 32918.1-2016》中4.2.6给出的方法转换为字节串;
[0173]
i2.使用uua作为第四公钥,并使用sm2加密算法对明文tta||x
ww
||y
ww
进行加密后得到第四密文cipher4=sm2_enc(uua,tta||x
ww
||y
ww
),并将所述第四密文cipher4发送给用户,其中,sm2_enc(uua,tta||x
ww
||y
ww
)表示使用《gb/t 32918.4-2016》中的sm2加密算法和第四公钥uua,对明文tta||x
ww
||y
ww
进行加密计算并输出密文;
[0174]
s34.用户收到密钥生成中心kgc返回的所述第三密文cipher3或第四密文cipher4,解密后得到第二部分签名密钥值tta和第二公钥恢复数据wwa,计算hha=h
256
(x
ww
‖y
ww
‖ha),再计算用户加密私钥dea=(hha×
tta+rra)(modn),并保存所述用户加密私钥dea和所述第二公钥恢复数据wwa,
[0175]
在进行所述解密时,
[0176]
若步骤s33中使用发送方法h,则解密方法为方法j,方法j包括如下步骤:
[0177]
j1.计算kk’=[rra]
×
p
pub
,第四密钥kk’=kdf(x
kk’||y
kk’,128),其中,x
kk’,y
kk’为
kk’的坐标,第四密钥kk’是通过密钥派生函数生成的128比特的字节串;
[0178]
j2.使用第四密钥kk’和sm4密码算法对所述第三密文cipher3进行解密得到明文
[0179]
tta||x
ww
||y
ww
=sm4_dec(kk’,cipher3),
[0180]
其中,sm4_dec(kk’,cipher3)表示使用《gb/t 32907-2016》中的sm4解密算法和128比特的第四密钥kk’,对第三密文cipher3进行解密计算并输出明文;
[0181]
j3.按照《gb/t 32918.1-2016》中4.2.3给出的方法将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为整数,从而解密得到所述第二部分密钥值tta和第二公钥恢复数据wwa;
[0182]
若s33中使用发送方法i,则解密方法为方法k,方法k包括如下步骤:
[0183]
k1.使用第三随机数rra作为第二私钥,并使用sm2解密算法对所述第四密文cipher4进行解密后得到明文
[0184]
tta||x
ww
||y
ww
=sm2_dec(rra,cipher4)
[0185]
其中,sm2_dec(rra,cipher4)表示使用《gb/t 32918.4-2016》中的sm2解密算法和第二私钥rra,对第四密文cipher4进行解密计算并输出明文;
[0186]
k2.按照《gb/t 32918.1-2016》中4.2.3给出的方法将所述第二部分密钥值tta和第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为整数,从而解密得到所述第二部分密钥值tta和第二公钥恢复数据wwa;
[0187]
s35.用户可选择是否进行第二公钥验证。如不进行第二公钥验证,则返回用户加密私钥生成成功。如进行第二公钥验证,则包括如下步骤:
[0188]
l1.使用可辨别标识ida,密钥生成中心kgc的系统主公钥p
pub
、第二公钥恢复数据wwa和第二私钥生成符kid1,生成对应的第二公钥pp’a
(即恢复第二公钥pp’a
),所述生成包括如下步骤:
[0189]
m1.计算h11=h
256
(entl‖ida‖x
pub
‖y
pub
),其中entl为2个字节表示ida的字节长度;
[0190]
m2.按《gb/t32918.1-2016》中4.2.6给出的方法将第二公钥恢复数据wwa的坐标x
ww
、y
ww
转换为字节串,计算h22=h
256
(x
ww
‖y
ww
‖h11),并按照《gb/t 32918.1-2016》中4.2.3给出的方法将h22转换为整数;
[0191]
m3.计算pp’a
=wwa+[kid1×
h22]
×
p
pub

[0192]
l2.计算ppa=[dea]
×
g;
[0193]
l3.如果pp’a
=ppa,则第二公钥验证成功,否则第二公钥验证失败;
[0194]
l4.如果第二公钥验证成功,则返回用户加密私钥生成成功,否则返回用户加密私钥生成失败。
[0195]
需注意,上述的sm2密钥生成法中,步骤f1和步骤l1分别为第一公钥p’a
和第二公钥pp’a
的公钥恢复方法。即本发明同时提供了一种公钥恢复方法,具体步骤为上述步骤f1或/和步骤l1。
[0196]
本发明还提供数字签名生成方法,本方法采用上述sm2密钥生成法,其中,用户即签名者使用sm2密钥生成法计算得到用户签名私钥dsa后,对256比特的待签名数据e计算数字签名,具体而言,用户按照《gb/t32981.2-2016》中6.1的a
3-a7的方法生成签名值(r,s)。
[0197]
本发明还提供数字签名验证方法,本方法采用上述sm2密钥生成法,其中,签名验证者对收到的256比特的待签名数据ee和签名值(rr,ss),使用签名者(即用户)的可辨别标
识ida、第一公钥恢复数据wa和密钥生成中心kgc的系统主公钥p
pub
进行签名验证,包括步骤:使用上述步骤f1恢复出完整的第一公钥p’a
,使用第一公钥p’a
作为公钥按照《gb/t32981.2-2016》中7.1的b
5-b7步骤对签名值(rr,ss)进行验证。
[0198]
本发明还提供数据加密方法,本方法采用上述sm2密钥生成法,其中,数据加密者b使用加密数据接收方a(即用户)的可辨别标识ida,第二公钥恢复数据wwa和密钥生成中心kgc的系统主公钥p
pub
对待加密的数据明文m进行加密,包括步骤:使用上述步骤l1恢复出完整的第二公钥pp’a
,使用第二公钥pp’a
作为公钥按照《gb/t32981.4-2016》中6.1的加密算法对数据明文m进行加密。
[0199]
本发明还提供数据解密方法,本方法采用上述sm2密钥生成法,其中,加密数据接收方a使用用户加密私钥dea对加密数据密文c进行解密恢复明文,包括步骤:按照《gb/t32981.4-2016》中7.1的解密算法进行解密。
[0200]
综上,本发明提供的sm2密钥生成法可用于签名私钥和加密私钥的生成,而签名私钥可以生成数字签名;加密私钥可以用于加密数据和解密数据。所述公钥恢复方法,可以从用户的可辨别标识和(签名/加密)公钥恢复数据恢复出用户(签名/加密)公钥,其中签名公钥用于数字签名验证,加密公钥用于加密数据。
[0201]
本发明还提供一种计算机设备,包括储存器、第一处理器及储存在所述存储器上并可在所述第一处理器上运行的第一计算机程序,第一计算机程序被第一处理器执行时实现上述的两种sm2密钥生成法、公钥恢复方法、数字签名生成方法、数字签名验证方法、数据加密方法和数据解密方法中的一中方法或几种方法。
[0202]
本发明还提供一种计算机可读存储介质,用于储存第二计算机程序,第二计算机程序可被至少一个第二处理器所执行,以使至少一个第二处理器执行上述的两种sm2密钥生成法、公钥恢复方法、数字签名生成方法、数字签名验证方法、数据加密方法和数据解密方法中的一中方法或几种方法。
[0203]
本发明提供的sm2密钥的生成方法通过用户方和kgc根据用户的可辨别标识和kgc系统主密钥联合计算用户签名/加密密钥,节省了大量计算资源。在生成用户签名/加密密钥的过程中,采用本发明可通过私钥生成符对用户签名/加密密钥进行区分,而签名验证者和数据加密者也需要使用私钥生成符来恢复签名公钥和加密公钥,从而使得签名密钥和加密密钥的生成和使用从算法层面上区分开来,避免混用。同时,kgc可以使用同一主私钥为用户生成签名密钥和加密密钥。签名验证者和数据加密者可以通过kgc的系统主公钥、用户的公钥恢复数据和用户的可辨别标识恢复出签名公钥和加密公钥并进行签名验证或数据加密。
[0204]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0205]
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1