本公开涉及信息安全技术领域,更具体地说,涉及基于sm2的无证书密钥生成方法、装置、电子设备及介质。
背景技术:
随着互联网行业的发展,密码应用场景越来越多样化,在密码的使用过程中,需要生成公私钥,比如传统公钥系统中的密钥生成或标识密码系统中的密钥生成。
传统公钥系统的密钥生成,公钥是一串随机数,很难和现实应用中用户的可识标识联系,需要额外的证书认证机制,证书管理较为繁冗。此外,虽然标识密码系统可直接将用户的标识作为用户的公钥,但是该系统具有天然的密钥托管性质,密钥生成中心拥有系统所有用户的标识私钥,包括签名私钥,这与电子签名法中要求的签名私钥由签名用户唯一拥有相悖,而且密钥生成中心的主私钥泄漏会导致整个系统所有用户的私钥泄漏,要求密钥生成中心可信程度较高,安全性较高。
sm2算法是我国自主设计、具有独特优势的安全高效的密码算法。现有的无证书密钥生成方法少有基于sm2签名结构的设计方法。基于sm2算法设计无证书的密钥生成方法更适用于现有使用sm2算法的应用,可保证密码应用的安全高效可靠。
综上所述,如何安全高效且适用于现有基于国密算法应用的生成密钥是目前本领域技术人员亟待解决的问题。
技术实现要素:
本公开的目的是提供一种基于sm2的无证书密钥生成方法,其能在一定程度上解决如何安全的生成密钥的技术问题。本公开还提供了一种基于sm2的无证书密钥生成装置、电子设备及计算机可读存储介质。
根据本公开实施例的第一方面,提供一种基于sm2的无证书密钥生成方法,应用于密钥生成服务器,包括:
获取sm2算法应用的椭圆曲线参数;
生成第一随机数,基于所述椭圆曲线参数及所述第一随机数生成系统公钥;
获取客户端的身份信息及客户端的部分公钥,所述部分公钥包括所述客户端基于第二随机数及所述椭圆曲线参数生成;
按照与所述客户端协商的密钥生成方式,基于所述密钥生成服务器的身份信息、所述椭圆曲线参数、所述系统公钥、所述客户端的身份信息及所述部分公钥生成公钥生成参数及私钥生成参数;
发送所述公钥生成参数及所述私钥生成参数至所述客户端,以使所述客户端基于所述公钥生成参数生成身份公钥、基于所述私钥生成参数生成身份私钥。
优选的,所述椭圆曲线参数包括所述sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶;
所述基于所述椭圆曲线参数及所述第一随机数生成系统公钥,包括:
将所述基点与所述第一随机数相乘,得到所述系统公钥。
优选的,所述按照与所述客户端协商的密钥生成方式,基于所述密钥生成服务器的身份信息、所述椭圆曲线参数、所述系统公钥、所述客户端的身份信息及所述部分公钥生成公钥生成参数及私钥生成参数,包括:
按照与所述客户端协商的所述密钥生成方式,对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到第一运算值;
生成第三随机数,基于所述系统公钥及所述部分公钥生成所述公钥生成参数;
基于所述第一运算值、所述公钥生成参数及所述基点的阶进行求余运算,得到第二运算值;
基于所述第二运算值、所述第三随机数、所述第一随机数及所述基点的阶进行求余运算,得到所述私钥生成参数。
优选的,所述对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到第一运算值,包括:
通过第一运算公式,对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到所述第一运算值;
所述第一运算公式包括:
zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,zq表示所述第一运算值;h表示杂凑算法;entlkgc表示所述密钥生成服务器的身份信息;idq表示所述客户端的身份信息;a表示所述第一元素;b表示所述第二元素;xg表示所述基点的横坐标值;yg表示所述基点的纵坐标值;xmpk表示所述系统公钥的横坐标对应值;ympk表示所述系统公钥的纵坐标对应值;
所述基于所述系统公钥及所述部分公钥生成所述公钥生成参数,包括:
通过第二运算公式,基于所述系统公钥及所述部分公钥生成所述公钥生成参数;
所述第二运算公式包括:
r=[k]mpk+pk1;
其中,r表示所述公钥生成参数;k表示所述第三随机数;mpk表示所述系统公钥,mpk=(xmpk,ympk);pk1表示所述部分公钥,pk1=[x]g,x表示所述第二随机数,g表示所述基点;
所述基于所述第一运算值、所述公钥生成参数及所述基点的阶进行求余运算,得到第二运算值,包括:
通过第三运算公式,基于所述第一运算值、所述公钥生成参数及所述基点的阶进行求余运算,得到所述第二运算值;
所述第三运算公式包括:
r=zq+rxmodn;
其中,r表示所述第二运算值;rx表示所述公钥生成参数的横坐标值;n表示所述基点的阶;
所述基于所述第二运算值、所述第三随机数、所述第一随机数及所述基点的阶进行求余运算,得到所述私钥生成参数,包括:
通过第四运算公式,基于所述第二运算值、所述第三随机数、所述第一随机数及所述基点的阶进行求余运算,得到所述私钥生成参数;
所述第四运算公式包括:
s=d(k+r)modn;
其中,s表示所述私钥生成参数;d表示所述第一随机数。
根据本公开实施例的第二方面,提供一种基于sm2的无证书密钥生成方法,应用于客户端,包括:
获取sm2算法应用的椭圆曲线参数;
生成第二随机数,基于所述第二随机数及所述椭圆曲线参数生成部分公钥;
传输自身的身份信息及所述部分公钥至密钥生成服务器,以使所述密钥生成服务器生成公钥生成参数及私钥生成参数;
接收所述密钥生成服务器传输的所述公钥生成参数及所述私钥生成参数;
按照与所述密钥生成服务器协商的密钥生成方式,验证所述公钥生成参数及所述私钥生成参数是否正确;
若所述公钥生成参数及所述私钥生成参数正确,则基于所述公钥生成参数生成身份公钥,基于所述私钥生成参数生成身份私钥;
其中,所述密钥生成客户端生成第一随机数,基于所述椭圆曲线参数及所述第一随机数生成系统公钥;按照所述密钥生成方式,基于所述密钥生成服务器的身份信息、所述椭圆曲线参数、所述系统公钥、所述客户端的身份信息及所述部分公钥生成所述公钥生成参数及所述私钥生成参数。
优选的,所述椭圆曲线参数包括所述sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶;
所述基于所述第二随机数及所述椭圆曲线参数生成部分公钥,包括;
将所述第二随机数与所述基点相乘,得到所述部分公钥。
优选的,所述按照与所述密钥生成服务器协商的密钥生成方式,验证所述公钥生成参数及所述私钥生成参数是否正确,包括:
获取所述密钥生成服务器的身份信息及所述系统公钥;
按照所述密钥生成方式,对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到第一验证值;
基于所述第一验证值、所述公钥生成参数及所述基点的阶进行求余运算,得到第二验证值;
验证所述私钥生成参数、所述基点、所述公钥生成参数、所述客户端的身份信息、所述第二验证值及所述系统公钥是否满足预设条件,若满足,则确定所述公钥生成参数及所述私钥生成参数正确,若不满足,则确定所述公钥生成参数及所述私钥生成参数不正确。
优选的,所述对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到第一验证值,包括:
基于第一计算公式,对所述密钥生成服务器的身份信息、所述客户端的身份信息、所述第一元素、所述第二元素、所述基点及所述系统公钥进行杂凑运算,得到所述第一验证值;
所述第一计算公式包括:
z'q=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,z'q表示所述第一验证值;h表示杂凑算法;entlkgc表示所述密钥生成服务器的身份信息;idq表示所述客户端的身份信息;a表示所述第一元素;b表示所述第二元素;xg表示所述基点的横坐标值;yg表示所述基点的纵坐标值;xmpk表示所述系统公钥的横坐标对应值;ympk表示所述系统公钥的纵坐标对应值;
所述基于所述第一验证值、所述公钥生成参数及所述基点的阶进行求余运算,得到第二验证值,包括:
通过第二计算公式,基于所述第一验证值、所述公钥生成参数及所述基点的阶进行求余运算,得到所述第二验证值;
所述第二计算公式包括:
r'=z'q+rxmodn;
其中,r'表示所述第二验证值;rx表示所述公钥生成参数的横坐标值;n表示所述基点的阶;
所述验证所述私钥生成参数、所述基点、所述公钥生成参数、所述客户端的身份信息、所述第二验证值及所述系统公钥是否满足预设条件,包括:
验证所述私钥生成参数、所述基点、所述公钥生成参数、所述客户端的身份信息、所述第二验证值及所述系统公钥是否使得预设等式成立,若成立,则确定满足所述预设条件,若不成立,则确定不满足所述预设条件;
所述预设等式包括:
[s]g=r-pk1+[r']mpk;
其中,mpk表示所述系统公钥,mpk=(xmpk,ympk);pk1表示所述部分公钥,pk1=[x]g,x表示所述第二随机数,g表示所述基点;r表示所述公钥生成参数,r=[k]mpk+pk1,k表示所述密钥生成服务器生成的第三随机数;s表示所述私钥生成参数,s=d(k+r)modn,r=zq+rxmodn,d表示所述第一随机数,zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk)。
优选的,所述基于所述公钥生成参数生成身份公钥,包括:
通过第一生成公式,基于所述公钥生成参数、所述第二验证值及所述系统公钥生成所述身份公钥;
所述第一生成公式包括:
其中,
所述基于所述私钥生成参数生成身份私钥,包括:
通过第二生成公式,基于所述私钥生成参数、所述第二随机数及所述基点的阶进行求余运算,得到所述身份私钥;
所述第二生成公式包括;
其中,
根据本公开实施例的第三方面,提供一种基于sm2的无证书密钥生成装置,应用于密钥生成服务器,包括:
第一获取模块,用于获取sm2算法应用的椭圆曲线参数;
第一生成模块,用于生成第一随机数,基于所述椭圆曲线参数及所述第一随机数生成系统公钥;
第二获取模块,用于获取客户端的身份信息及客户端的部分公钥,所述部分公钥包括所述客户端基于第二随机数及所述椭圆曲线参数生成;
第二生成模块,用于按照与所述客户端协商的密钥生成方式,基于所述密钥生成服务器的身份信息、所述椭圆曲线参数、所述系统公钥、所述客户端的身份信息及所述部分公钥生成公钥生成参数及私钥生成参数;
第一发送模块,用于发送所述公钥生成参数及所述私钥生成参数至所述客户端,以使所述客户端基于所述公钥生成参数生成身份公钥、基于所述私钥生成参数生成身份私钥。
根据本公开实施例的第四方面,提供一种基于sm2的无证书密钥生成装置,应用于客户端,包括:
第三获取模块,用于获取sm2算法应用的椭圆曲线参数;
第三生成模块,用于生成第二随机数,基于所述第二随机数及所述椭圆曲线参数生成部分公钥;
第一传输模块,用于传输自身的身份信息及所述部分公钥至密钥生成服务器,以使所述密钥生成服务器生成公钥生成参数及私钥生成参数;
第一接收模块,用于接收所述密钥生成服务器传输的所述公钥生成参数及所述私钥生成参数;
第一验证模块,用于按照与所述密钥生成服务器协商的密钥生成方式,验证所述公钥生成参数及所述私钥生成参数是否正确;
第四生成模块,用于若所述公钥生成参数及所述私钥生成参数正确,则基于所述公钥生成参数生成身份公钥,基于所述私钥生成参数生成身份私钥;
其中,所述密钥生成客户端生成第一随机数,基于所述椭圆曲线参数及所述第一随机数生成系统公钥;按照所述密钥生成方式,基于所述密钥生成服务器的身份信息、所述椭圆曲线参数、所述系统公钥、所述客户端的身份信息及所述部分公钥生成所述公钥生成参数及所述私钥生成参数。
根据本公开实施例的第五方面,提供一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上任一所述基于sm2的无证书密钥生成方法的步骤。
根据本公开实施例的第六方面,提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如上任一所述基于sm2的无证书密钥生成方法的步骤。
本公开提供的一种基于sm2的无证书密钥生成方法,应用于密钥生成服务器,获取sm2算法应用的椭圆曲线参数;生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥;获取客户端的身份信息及客户端的部分公钥,部分公钥包括客户端基于第二随机数及椭圆曲线参数生成;按照与客户端协商的密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数;发送公钥生成参数及私钥生成参数至客户端,以使客户端基于公钥生成参数生成身份公钥、基于私钥生成参数生成身份私钥。本申请中,密钥生成服务可以基于sma算法应用的椭圆曲线参数、随机数及客户端身份信息生成公钥生成参数及私钥生成参数,生成过程简单,且无法直接生成客户端的公私钥,而是需要客户端根据公钥生成参数及私钥生成参数生成相应的公私钥,无需使用证书,且避免了密钥生成服务器获知客户端的私钥,安全性高。本公开涉及的一种密钥生成装置、电子设备及计算机可读存储介质也解决了相应技术问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为根据一示例性实施例示出的一种基于sm2的无证书密钥生成方法的第一流程图;
图2为密钥生成服务器生成相应密钥参数的流程图;
图3为根据一示例性实施例示出的一种基于sm2的无证书密钥生成方法的第二流程图;
图4为密钥生成服务器与客户端间的密钥生成流程图;
图5为客户端验证密钥参数的流程图;
图6为根据一示例性实施例示出的一种基于sm2的无证书密钥生成装置的第一结构示意图;
图7为根据一示例性实施例示出的一种基于sm2的无证书密钥生成装置的第二结构示意图;
图8为根据一示例性实施例示出的一种电子设备900的框图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
请参阅图1,图1为根据一示例性实施例示出的一种基于sm2的无证书密钥生成方法的第一流程图。
本公开涉及的一种基于sm2的无证书密钥生成方法,应用于密钥生成服务器,可以包括以下步骤:
步骤s101:获取sm2算法应用的椭圆曲线参数。
可以理解的是,sm2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,sm2算法中应用了椭圆曲线参数,本公开中需要借助椭圆曲线参数来生成客户端的公私钥,且椭圆曲线参数及其验证应符合sm2椭圆曲线公钥密码算法的相应规定。
步骤s102:生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥。
可以理解的是,密钥生成服务器在为客户端生成密钥的过程中,需要应用自身的公钥,也即系统公钥,在此过程中,密钥生成服务器需先生成自身的系统公钥,也即可以生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥。
步骤s103:获取客户端的身份信息及客户端的部分公钥,部分公钥包括客户端基于第二随机数及椭圆曲线参数生成。
可以理解的是,密钥生成服务器在为客户端生成密钥的过程中,还需要应用客户端的身份信息及客户端的部分公钥,且部分公钥由客户端基于第二随机数及椭圆曲线参数生成。
应当指出,客户端基于第二随机数及椭圆曲线参数生成部分公钥,及密钥生成服务器基于第一随机数及椭圆曲线参数生成系统公钥的原理及方式可以一致等,本申请在此不做具体限定。
步骤s104:按照与客户端协商的密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数。
可以理解的是,本公开中,客户端密钥并不是单独由密钥生成服务器生成的,而是需要客户端及密钥生成服务器协同生成,在此过程中,客户端与密钥生成服务器需预先协商好密钥生成方式,这样,密钥生成服务器在得到系统公钥、客户端身份信息、部分公钥及椭圆曲线参数之后,便可以基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数,公钥生成参数也即用于生成客户端的公钥的参数,私钥生成参数也即用于生成客户端的私钥的参数。
步骤s105:发送公钥生成参数及私钥生成参数至客户端,以使客户端基于公钥生成参数生成身份公钥、基于私钥生成参数生成身份私钥。
可以理解的是,密钥生成服务器在生成公钥生成参数及私钥生成参数之后,便可以发送公钥生成参数及私钥生成参数至客户端,使得客户端自身基于公钥生成参数生成身份公钥、基于私钥生成参数生成身份私钥,由于客户端身份公钥及身份私钥最后是由客户端自身生成的,所以密钥生成服务器无法获知客户端的身份私钥,保证了客户端的私钥安全性。
本公开提供的一种基于sm2的无证书密钥生成方法,应用于密钥生成服务器,获取sm2算法应用的椭圆曲线参数;生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥;获取客户端的身份信息及客户端的部分公钥,部分公钥包括客户端基于第二随机数及椭圆曲线参数生成;按照与客户端协商的密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数;发送公钥生成参数及私钥生成参数至客户端,以使客户端基于公钥生成参数生成身份公钥、基于私钥生成参数生成身份私钥。本申请中,密钥生成服务可以基于sma算法应用的椭圆曲线参数、随机数及客户端身份信息生成公钥生成参数及私钥生成参数,生成过程简单,且无法直接生成客户端的公私钥,而是需要客户端根据公钥生成参数及私钥生成参数生成相应的公私钥,无需使用证书,且避免了密钥生成服务器获知客户端的私钥,安全性高。
本公开涉及的一种基于sm2的无证书密钥生成方法中,椭圆曲线参数的类型可以包括:sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶等;
相应的,在基于椭圆曲线参数及第一随机数生成系统公钥的过程中,可以直接将基点与第一随机数相乘,得到系统公钥。
请参阅图2,图2为密钥生成服务器生成相应密钥参数的流程图。
本公开提供的一种基于sm2的无证书密钥生成方法中,密钥生成服务器在按照与客户端协商的密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数的过程中,可以包括以下步骤:
步骤s201:按照与客户端协商的密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值。
可以理解的是,密钥生成服务器在生成密钥参数的过程中,可以先按照与客户端协商的密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值,这样,第一运算值中会携带密钥生成服务器的身份信息、客户端的身份信息、系统公钥及第一元素、第二元素、基点的相应信息,且携带的是经过加密后的相应信息,这样后续根据第一运算值生成密钥参数的话,可以间接将密钥参数与客户端及密钥生成服务器关联起来,实现密钥参数的绑定。
步骤s202:生成第三随机数,基于系统公钥及部分公钥生成公钥生成参数。
可以理解的是,密钥生成服务器在生成公钥生成参数的过程中,可以应用系统公钥及部分公钥来生成公钥生成参数,且在此过程中,可以引入第三随机数,以进一步增强公钥生成参数的复杂性,增强公钥生成参数的安全性。
步骤s203:基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值。
步骤s204:基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数。
可以理解的是,密钥生成服务器在生成私钥生成参数的过程中,可以先基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值;再基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数。由私钥生成参数的生成过程可以看出,生成私钥生成参数所应用的数据种类多,安全性高。
本公开提供的一种基于sm2的无证书密钥生成方法中,为了提高整个方法的运算效率,密钥生成服务器在对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值的过程中,可以通过第一运算公式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值;
第一运算公式包括:
zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,zq表示第一运算值;h表示杂凑算法;entlkgc表示密钥生成服务器的身份信息;idq表示客户端的身份信息;a表示第一元素;b表示第二元素;xg表示基点的横坐标值;yg表示基点的纵坐标值;xmpk表示系统公钥的横坐标对应值;ympk表示系统公钥的纵坐标对应值;
相应的,在基于系统公钥及部分公钥生成公钥生成参数的过程中,可以通过第二运算公式,基于系统公钥及部分公钥生成公钥生成参数;
第二运算公式包括:
r=[k]mpk+pk1;
其中,r表示公钥生成参数;k表示第三随机数;mpk表示系统公钥,mpk=(xmpk,ympk);pk1表示部分公钥,pk1=[x]g,x表示第二随机数,g表示基点;
在基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值的过程中,可以通过第三运算公式,基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值;
第三运算公式包括:
r=zq+rxmodn;
其中,r表示第二运算值;rx表示公钥生成参数的横坐标值;n表示基点的阶;
在基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数的过程中,可以通过第四运算公式,基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数;
第四运算公式包括:
s=d(k+r)modn;
其中,s表示私钥生成参数;d表示第一随机数。
实际应用场景中,可以基于基点的阶来生成第一随机数、第二随机数和第三随机数,比如随机选取d∈[1,n-2]作为第一随机数,随机选取x∈[1,n-2]作为第二随机数,随机选取k∈[1,n-1]作为第三随机数等。
请参阅图3,图3为根据一示例性实施例示出的一种基于sm2的无证书密钥生成方法的第二流程图。
本公开涉及的一种基于sm2的无证书密钥生成方法,应用于客户端,可以包括以下步骤:
步骤s301:获取sm2算法应用的椭圆曲线参数。
可以理解的是,客户端在生成公私钥的过程中,也需要如密钥生成服务器一样,使用sm2算法应用的椭圆曲线参数,关于sm2算法应用的椭圆曲线参数的描述可以参数上述实施例,在此不再赘述。
步骤s302:生成第二随机数,基于第二随机数及椭圆曲线参数生成部分公钥。
可以理解的是,客户端在生成公私钥的过程中,需要应用自身生成的部分公钥,在此过程中,客户端可以生成第二随机数,基于第二随机数及椭圆曲线参数生成部分公钥。
步骤s303:传输自身的身份信息及部分公钥至密钥生成服务器,以使密钥生成服务器生成公钥生成参数及私钥生成参数。
可以理解的是,客户端在生成部分公钥之后,便可以传输自身的身份信息及部分公钥至密钥生成服务器,以使密钥生成服务器生成公钥生成参数及私钥生成参数。
步骤s304:接收密钥生成服务器传输的公钥生成参数及私钥生成参数。
可以理解的是,密钥生成服务器需要将公钥生成参数及私钥生成参数发送给客户端,相应的,客户端需接收公钥生成参数及私钥生成参数,以基于此生成自身的公私钥。
步骤s305:按照与密钥生成服务器协商的密钥生成方式,验证公钥生成参数及私钥生成参数是否正确。
步骤s306:若公钥生成参数及私钥生成参数正确,则基于公钥生成参数生成身份公钥,基于私钥生成参数生成身份私钥;其中,密钥生成客户端生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥;按照密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数。
可以理解是,因为密钥生成方式是由客户端及密钥生成服务器之间协商的,所以客户端在接收公钥生成参数及私钥生成参数之后,可以按照与密钥生成服务器协商的密钥生成方式,验证公钥生成参数及私钥生成参数是否正确,若公钥生成参数及私钥生成参数正确,则再基于公钥生成参数生成身份公钥,基于私钥生成参数生成身份私钥。若公钥生成参数及私钥生成参数不正确,则可以结束本次密钥生成过程,重新进行密钥生成等。
本公开涉及的一种基于sm2的无证书密钥生成方法中,椭圆曲线参数的类型可以包括sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶等;
相应的,客户端在基于第二随机数及椭圆曲线参数生成部分公钥的过程中,可以直接将第二随机数与基点进行相乘,得到部分公钥。
请参阅图4和图5,图4为密钥生成服务器与客户端间的密钥生成流程图;图5为客户端验证密钥参数的流程图。
本公开提供的一种基于sm2的无证书密钥生成方法中,客户端在按照与密钥生成服务器协商的密钥生成方式,验证公钥生成参数及私钥生成参数是否正确的过程中,可以执行以下步骤:
步骤s401:获取密钥生成服务器的身份信息及系统公钥。
可以理解的是,因为密钥生成服务器在生成公钥生成参数及私钥生成参数的过程中,应用了密钥生成服务器的身份信息及系统公钥,所以客户端在验证密钥参数的过程中,需先获取密钥生成服务器的身份信息及系统公钥。
步骤s402:按照密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值。
可以理解的是,客户端获知密钥生成服务器的身份信息及系统公钥之后,因为客户端也知道密钥生成方式,所以为了快速对密钥生成参数进行验证,客户端可以按照密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值,以便后续基于第一验证值对公钥生成参数及私钥生成参数进行验证。
应当指出,因为第一验证值与第一运算值的生成方式相同,区别只是数据的来源不同,所以如果相应数据在由密钥生成服务器传输至客户端的过程中发生变化的话,第一验证值与第一运算值便不相同,这样后续客户端基于第一验证值对密钥生成参数,也即公钥生成参数及私钥生成参数,进行验证的过程中便会出现问题,客户端便可以据此确定公钥生成参数及私钥生成参数存在问题。
步骤s403:基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值。
步骤s404:验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否满足预设条件,若满足,则确定公钥生成参数及私钥生成参数正确,若不满足,则确定公钥生成参数及私钥生成参数不正确。
可以理解的是,客户端在得到第一验证值之后,还需基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值;验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否满足预设条件,若满足,则确定公钥生成参数及私钥生成参数正确,若不满足,则确定公钥生成参数及私钥生成参数不正确。
本公开提供的一种基于sm2的无证书密钥生成方法中,为了提高整个方法的运行效率,客户端在对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值的过程中,可以基于第一计算公式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值;
第一计算公式包括:
z'q=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,z'q表示第一验证值;h表示杂凑算法;entlkgc表示密钥生成服务器的身份信息;idq表示客户端的身份信息;a表示第一元素;b表示第二元素;xg表示基点的横坐标值;yg表示基点的纵坐标值;xmpk表示系统公钥的横坐标对应值;ympk表示系统公钥的纵坐标对应值;
相应的,在基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值的过程中,可以通过第二计算公式,基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值;
第二计算公式包括:
r'=z'q+rxmodn;
其中,r'表示第二验证值;rx表示公钥生成参数的横坐标值;n表示基点的阶;
在验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否满足预设条件的过程中,可以验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否使得预设等式成立,若成立,则确定满足预设条件,若不成立,则确定不满足预设条件;
预设等式包括:
[s]g=r-pk1+[r']mpk;
其中,mpk表示系统公钥,mpk=(xmpk,ympk);pk1表示部分公钥,pk1=[x]g,x表示第二随机数,g表示基点;r表示公钥生成参数,r=[k]mpk+pk1,k表示密钥生成服务器生成的第三随机数;s表示私钥生成参数,s=d(k+r)modn,r=zq+rxmodn,d表示第一随机数,zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk)。
本公开提供的一种基于sm2的无证书密钥生成方法中,为了快速、安全的生成密钥,客户端在基于公钥生成参数生成身份公钥的过程中,可以通过第一生成公式,基于公钥生成参数、第二验证值及系统公钥生成身份公钥;
第一生成公式包括:
其中,
在基于私钥生成参数生成身份私钥的过程中,可以通过第二生成公式,基于私钥生成参数、第二随机数及基点的阶进行求余运算,得到身份私钥;
第二生成公式包括;
其中,
请参阅图6,图6为根据一示例性实施例示出的一种基于sm2的无证书密钥生成装置的第一结构示意图。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于密钥生成服务器500,可以包括:
第一获取模块510,用于获取sm2算法应用的椭圆曲线参数;
第一生成模块520,用于生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥;
第二获取模块530,用于获取客户端的身份信息及客户端的部分公钥,部分公钥包括客户端基于第二随机数及椭圆曲线参数生成;
第二生成模块540,用于按照与客户端协商的密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数;
第一发送模块550,用于发送公钥生成参数及私钥生成参数至客户端,以使客户端基于公钥生成参数生成身份公钥、基于私钥生成参数生成身份私钥。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于密钥生成服务器500,椭圆曲线参数包括sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶;
第一生成模块可以具体用于:将基点与第一随机数相乘,得到系统公钥。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于密钥生成服务器500,第二生成模块可以包括:
第一运算子模块,用于按照与客户端协商的密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值;
第一生成子模块,用于生成第三随机数,基于系统公钥及部分公钥生成公钥生成参数;
第二运算子模块,用于基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值;
第二生成子模块,用于基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于密钥生成服务器500,第一运算子模块可以包括:
第一运算单元,用于通过第一运算公式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一运算值;
第一运算公式包括:
zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,zq表示第一运算值;h表示杂凑算法;entlkgc表示密钥生成服务器的身份信息;idq表示客户端的身份信息;a表示第一元素;b表示第二元素;xg表示基点的横坐标值;yg表示基点的纵坐标值;xmpk表示系统公钥的横坐标对应值;ympk表示系统公钥的纵坐标对应值;
第一生成子模块可以包括:
第一生成单元,用于通过第二运算公式,基于系统公钥及部分公钥生成公钥生成参数;
第二运算公式包括:
r=[k]mpk+pk1;
其中,r表示公钥生成参数;k表示第三随机数;mpk表示系统公钥,mpk=(xmpk,ympk);pk1表示部分公钥,pk1=[x]g,x表示第二随机数,g表示基点;
第二运算子模块可以包括:
第二运算单元,用于通过第三运算公式,基于第一运算值、公钥生成参数及基点的阶进行求余运算,得到第二运算值;
第三运算公式包括:
r=zq+rxmodn;
其中,r表示第二运算值;rx表示公钥生成参数的横坐标值;n表示基点的阶;
第二生成子模块可以包括:
第二生成单元,用于通过第四运算公式,基于第二运算值、第三随机数、第一随机数及基点的阶进行求余运算,得到私钥生成参数;
第四运算公式包括:
s=d(k+r)modn;
其中,s表示私钥生成参数;d表示第一随机数。
请参阅图7,图7为根据一示例性实施例示出的一种基于sm2的无证书密钥生成装置的第二结构示意图。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,可以包括:
第三获取模块610,用于获取sm2算法应用的椭圆曲线参数;
第三生成模块620,用于生成第二随机数,基于第二随机数及椭圆曲线参数生成部分公钥;
第一传输模块630,用于传输自身的身份信息及部分公钥至密钥生成服务器,以使密钥生成服务器生成公钥生成参数及私钥生成参数;
第一接收模块640,用于接收密钥生成服务器传输的公钥生成参数及私钥生成参数;
第一验证模块650,用于按照与密钥生成服务器协商的密钥生成方式,验证公钥生成参数及私钥生成参数是否正确;
第四生成模块660,用于若公钥生成参数及私钥生成参数正确,则基于公钥生成参数生成身份公钥,基于私钥生成参数生成身份私钥;
其中,密钥生成客户端生成第一随机数,基于椭圆曲线参数及第一随机数生成系统公钥;按照密钥生成方式,基于密钥生成服务器的身份信息、椭圆曲线参数、系统公钥、客户端的身份信息及部分公钥生成公钥生成参数及私钥生成参数。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,椭圆曲线参数包括sm2算法使用的椭圆曲线的第一元素及第二元素、基点、基点的阶;
第三生成模块可以具体用于:将第二随机数与基点相乘,得到部分公钥。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,第一验证模块可以包括:
第一获取子模块,用于获取密钥生成服务器的身份信息及系统公钥;
第一计算子模块,用于按照密钥生成方式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值;
第二计算子模块,用于基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值;
第一验证子模块,用于验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否满足预设条件,若满足,则确定公钥生成参数及私钥生成参数正确,若不满足,则确定公钥生成参数及私钥生成参数不正确。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,第一计算子模块可以包括:
第一计算单元,用于基于第一计算公式,对密钥生成服务器的身份信息、客户端的身份信息、第一元素、第二元素、基点及系统公钥进行杂凑运算,得到第一验证值;
第一计算公式包括:
z'q=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk);
其中,z'q表示第一验证值;h表示杂凑算法;entlkgc表示密钥生成服务器的身份信息;idq表示客户端的身份信息;a表示第一元素;b表示第二元素;xg表示基点的横坐标值;yg表示基点的纵坐标值;xmpk表示系统公钥的横坐标对应值;ympk表示系统公钥的纵坐标对应值;
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,第二计算子模块可以包括:
第二计算单元,用于通过第二计算公式,基于第一验证值、公钥生成参数及基点的阶进行求余运算,得到第二验证值;
第二计算公式包括:
r'=z'q+rxmodn;
其中,r'表示第二验证值;rx表示公钥生成参数的横坐标值;n表示基点的阶;
第一验证子模块可以包括:
第一验证单元,用于验证私钥生成参数、基点、公钥生成参数、客户端的身份信息、第二验证值及系统公钥是否使得预设等式成立,若成立,则确定满足预设条件,若不成立,则确定不满足预设条件;
预设等式包括:
[s]g=r-pk1+[r']mpk;
其中,mpk表示系统公钥,mpk=(xmpk,ympk);pk1表示部分公钥,pk1=[x]g,x表示第二随机数,g表示基点;r表示公钥生成参数,r=[k]mpk+pk1,k表示密钥生成服务器生成的第三随机数;s表示私钥生成参数,s=d(k+r)modn,r=zq+rxmodn,d表示第一随机数,zq=h(entlkgc,idq,a,b,xg,yg,xmpk,ympk)。
本公开涉及的一种基于sm2的无证书密钥生成装置,应用于客户端600,第四生成模块可以包括:
第三生成单元,用于通过第一生成公式,基于公钥生成参数、第二验证值及系统公钥生成身份公钥;
第一生成公式包括:
其中,
第四生成单元,用于通过第二生成公式,基于私钥生成参数、第二随机数及基点的阶进行求余运算,得到身份私钥;
第二生成公式包括;
其中,
图8为根据一示例性实施例示出的一种电子设备900的框图。如图8所示,该电子设备900可以包括:处理器901,存储器902。该电子设备900还可以包括多媒体组件903,输入/输出(i/o)接口904,以及通信组件905中的一者或多者。
其中,处理器901用于控制该电子设备900的整体操作,以完成上述的密钥生成方法中的全部或部分步骤。存储器902用于存储各种类型的数据以支持在该电子设备900的操作,这些数据例如可以包括用于在该电子设备900上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器902可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件903可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器902或通过通信组件905发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口904为处理器901和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件905用于该电子设备900与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件905可以包括:wi-fi模块,蓝牙模块,nfc模块。
在一示例性实施例中,电子设备900可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的基于sm2的无证书密钥生成方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的基于sm2的无证书密钥生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器902,上述程序指令可由电子设备900的处理器901执行以完成上述的基于sm2的无证书密钥生成方法。
本公开实施例提供的一种基于sm2的无证书密钥生成装置、电子设备及计算机可读存储介质中相关部分的说明请参见本公开实施例提供的一种基于sm2的无证书密钥生成方法中对应部分的详细说明,在此不再赘述。另外,本公开实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本公开。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。