基于混合主密钥的标识私钥生成及使用方法及系统和装置与流程

专利2022-06-29  143


本发明属于密码技术领域,特别是一种基于混合主密钥的sm9签名私钥生成及使用方法,以及相应的系统和装置。



背景技术:

基于标识的密码(identitybasedcryptography,ibc)与采用数字证书技术的pki(publickeyinfrastructure)相比,由于省去了获取私钥拥有者的公钥数字证书这一麻烦环节,技术实现简单,目前日益受到人们的重视,具有广阔的应用前景。

基于标识的密码,既可以用于数据加密(称为identitybasedencryption,ibe),也可以用于数字签名(称为identitybasedsignature,ibs)。目前基于标识的密码算法大多是采用基于双线性映射(bilinearmapping,也称配对运算,pairing)的算法,其中的双线性映射(配对运算)为:

e:g1×g2→gt时,其中g1、g2(配对或双线性映射的群)是加法循环群,gt是一个乘法循环群,g1、g2、gt的阶是素数n(sm9规范中使用g1、g2、gt的阶是大写字母n),即若p、q、r分别为g1、g2中的元,则e(p,q)为gt中的元,且:

e(p r,q)=e(p,q)e(r,q),

e(p,q r)=e(p,q)e(p,r),

e([a]p,[b]q)=e(p,q)ab

这里a、b是[0,n-1]中的一个整数,[a]p、[b]q表示点的p、q的倍加或数乘。

sm9是国家密码管理局颁布的一种基于双线性映射(配对运算)的标识密码算法。基于sm9密码算法能实现基于标识的数字签名、密钥交换及数据加密。在sm9密码算法中,使用用户用于签名的的sm9标识私钥da针对消息m生成数字签名的过程如下:

计算得到w=gr,这里r是签名计算时在[1,n-1]区间内随机选择的整数,g=e(p1,ppub),p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范;注意,这里的主私钥或主密钥,主公钥,用户的用于签名的sm9标识私钥的符号与sm9规范中的不一样);

然后,计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示m和w的字串合并,n为g1、g2、gt的阶(参见sm9规范,注意这里群的阶使用的符号与sm9规范略有不同,使用的小写字母n,而sm9规范使用的是大写字母n);

若r≠h,计算s=[r-h]da,则(h,s)为生成的数字签名;若r=h,则重新选择r,重新计算w、h,直到r≠h。

给定一个消息m的数字签名(h,s),验证签名有效性的方法如下(参见sm9规范,注意,sm9规范中签名验证过程描述使用的符号为m′、(h′,s′))。

b1:检验h∈[1,n-1]是否成立,若不成立则验证不通过;

b2:检验s∈g1是否成立,若不成立则验证不通过;

b3:计算群gt中的元素g=e(p1,ppub);

b4:计算群gt中的元素t=gh

b5:计算整数h1=h1(ida||hid,n)(这里是ida用户的标识,hid是用一个字节表示的签名私钥生成函数识别符,h1()是sm9规范中定义的散列或哈希函数);

b6:计算群g2中的元素p=[h1]p2 ppub;

b7:计算群gt中的元素u=e(s,p);

b8:计算群gt中的元素w′=u·t;

b9:计算整数h2=h2(m||w′,n),检验h2=h是否成立,若成立则验证通过;否则验证不通过(h2()是sm9规范中定义的散列或哈希函数)。

在sm9密码算法中,一个用户标识ida所对应的用于签名的私钥由密钥生成中心(keygenerationcenter,kgc)或私钥生成系统的私钥生成器(privatekeygenerator,pkg)按如下方式计算得到:

计算t1=(h1(ida||hid,n) s)modn,其中h1是sm9规范中规定的散列算法,s是主私钥或主密钥,n为g1、g2、gt的阶,hid是用一个字节表示的私钥生成函数识别符,||表示字节串合并,modn表示求模n余数运算(注:sm9规范中主私钥或主密钥使用的符号是ks,群g1、g2、gt的阶用的符号是n,与本专利申请文件略有不同);

若t1=0,则需重新产生主私钥,计算和公布主公钥,并更新已有用户的私钥;否则,计算t2=s(t1)-1modn,da=[t2]p1,其中(t1)-1是t1的模n乘法逆,p1为群g1的生成元,符号[]表示多个元(点)的加运算(数乘运算,参见sm9规范),则da是用户标识ida所对应的签名私钥。

在基于双线性映射(配对运算)的标识密码中,由于用户用于数字签名的私钥是由一个私钥生成系统(或私钥生成中心)生成,采用这种方式生成的用户私钥用于数字签名时无法实现抗抵赖,因为标识私钥拥有者可以说用于数字签名的私钥是私钥生成系统的运行者通过私钥生成系统产生并使用,针对消息的数字签名不是自己使用私钥签名生成的。



技术实现要素:

本发明的目的是针对目前的基于标识的数字签名无法实现抗抵赖的问题,提出相应的解决方案。

为了实现以上目的,本发明的技术方案包括一种针对sm9签名私钥的基于混合主密钥的标识私钥生成方法、一种使用此标识私钥生成方法所生成的sm9签名私钥的数字签名方法,以及针对此数字签名方法的签名验证方法,以及基于此标识私钥生成方法、数字签名方法的系统和装置。

本发明提出的基于混合主密钥的标识私钥生成方法具体如下。

所述标识私钥生成方法涉及双线性映射(配对运算)e:g1×g2→gt;群g1的生成元为p1,群g2的生成元为p2;群g1、g2、gt的阶为素数n;

所述标识私钥生成方法涉及服务端的标识私钥生成服务器(privatekeygenerationserver)和用户端的标识私钥生成客户端(privatekeygenerationclient);

所述标识私钥生成服务器有[1,n-1]内的系统主密钥sm(或称系统主私钥sm);sm有对应的系统主公钥ppub=[sm]p2;

所述标识私钥生成客户端有[1,n-1]内的用户主密钥su(或称用户主私钥su),(利用su和ppub计算)有混合主公钥pzpub=[f(sm,su)]p2,其中,f(sm,su)=(sm su)modn或f(sm,su)=(smsu)modn(因此,相应地,pzpub=ppub [su]p2或pzpub=[su]ppub);

所述用户端的标识私钥生成客户端和服务端的标识私钥生成服务器以s=f(sm,su)为主密钥(主私钥),通过交互协同生成用户标识(如ida)所对应的用于签名的sm9标识私钥da;

(生成da时的群g1的生成元仍然是p1,即:

da=[f(sm,su)(hid f(sm,su))-1]p1,其中hid=h1(ida||hid,n),其中(hid f(sm,su))-1为hid f(sm,su)(等价地(hid f(sm,su))modn)的模n乘法逆)

在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他与私钥生成、发布有关的系统构件)。

在本发明的标识私钥生成方法中,用于生成用户的用于签名的sm9标识私钥da的主密钥(主私钥)f(sm,su)是服务端的标识私钥生成服务器的系统主密钥sm和用户端的标识私钥生成客户端的用户主密钥su的模n乘积或模n和,是一种包含服务端主密钥和用户端主密钥的混合主密钥(主私钥),故本发明的标识私钥生成方法称为基于混合主密钥的标识私钥生成方法。

(所述用户端的标识私钥生成客户端和服务端的标识私钥生成服务器如何通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da属于本发明之外的事情)

在协同生成用户标识所对应的用于签名的sm9标识私钥da后,标识私钥生成客户端和标识私钥生成服务器通过数字签名或配对运算检查确定da是否是用户标识(如ida)所对应的用于签名的sm9标识私钥,若不是,则报错(之后怎么办取决于具体实施),若是,则完成标识私钥da的协同生成。

对于以上所述标识私钥生成方法,在完成用户的用于签名的sm9标识私钥da生成后,用户主密钥su销毁或不销毁(若su不销毁,则可用于用户其他标识私钥的生成)。

对于以上所述标识私钥生成方法,混合主公钥pzpub被标识私钥生成系统(比如,标识私钥生成服务器或其他系统构件)公开发布(比如,通过一个采用区块链技术的公共平台发布,这样在出现纠纷时可用)。

对于以上所述标识私钥生成方法,所述用户标识包括:不包含任何限定信息的用户原始标识(比如,没有限定信息的电子邮箱地址、手机号码),或者包含限定信息的受限定的用户标识(比如,受时间有效期或其他信息限定的电子邮箱地址、手机号码)。

对于以上所述标识私钥生成方法,协同生成用户标识所对应的用于签名的sm9标识私钥da或者协同计算pzpub的过程中可能会出现(hid f(sm,su))modn=0或f(sm,su)=0(当f(sm,su)=(sm su)modn时可能出现f(sm,su)=0这种情况,此时pzpub为零元)的情况,其中hid=h1(ida||hid,n),ida是用户标识,hid是用一个字节表示的签名私钥生成函数识别符,h1()是sm9规范中定义的散列或哈希函数,若如此,则会暴露系统主密钥sm。针对此问题,有如下应对方法。

若f(sm,su)=(sm su)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da和计算pzpub的过程中因出现(hid f(sm,su))modn=0或f(sm,su)=0的情况而导致系统主密钥sm暴露的一种方法如下:

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0 su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0 su1)]p2,其中sm、su0为标识私钥生成服务器的秘密,su1为标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中若检查发现da为零元或pzpub为零元或(hid sm su0 su1)modn=0或(su0 su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器重新在[1,n-1]内随机选择一个整数su0,标识私钥生成客户端重新在[1,n-1]内随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0 su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0 su1)]p2,直到da不为零元且pzpub不为零元且(hid sm su0 su1)modn不为0且(su0 su1)modn不为0;

协同生成da和pzpub后,(su0 su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

(标识私钥生成客户端和标识私钥生成服务器如何通过各自的秘密sm、su0、su1,协同计算da和pzpub,以及在计算过程中如何检查发现(hid sm su0 su1)modn=0或(su0 su1)modn=0,属于本发明之外的事情)

若f(sm,su)=(sm su)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da和计算pzpub的过程中因出现(hid f(sm,su))modn=0或f(sm,su)=0的情况而导致系统主密钥sm暴露的另一种方法如下:

在协同生成用户标识所对应的标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0su1]p2,其中sm、su0是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中,若检查发现da为零元或pzpub为零元或(hid sm su0su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0su1]p2,直到da不为零元且pzpub不为零元且(hid sm su0su1)modn不为0;

协同生成da和pzpub后,(su0su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

(标识私钥生成客户端和标识私钥生成服务器如何通过各自的秘密sm、su0、su1,协同计算da和pzpub,以及在计算过程中如何检查发现(hid sm su0su1)modn=0,属于本发明之外的事情)

若f(sm,su)=(smsu)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da的过程中因出现(hid f(sm,su))modn=0的情况而导致系统主密钥sm泄漏的一种方法如下:

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(smsu0su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[smsu0su1)]p2,其中(smsu0)modn是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da的过程中,若检查发现(hid smsu0su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(smsu0su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[smsu0su1)]p2,直到(hid smsu0su1)modn不为0;

协同生成da和pzpub后,(su0su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

(标识私钥生成客户端和标识私钥生成服务器如何通过各自的秘密sm、su0和su1,协同计算da和pzpub,以及在计算过程中(hid smsu0su1)modn=0,属于本发明之外的事情)

本发明提出的基于上述标识私钥生成方法的数字签名方法如下。

当需要使用按所述标识私钥生成方法生成的用户的用于签名的sm9标识私钥da针对消息m进行数字签名时,签名方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=f(sm,su)对应的主公钥(此时pzpub=[f(sm,su)]p2,对应sm9数字签名算法中的ppub),以da为用户的用于签名的sm9标识私钥,采用sm9数字签名算法生成针对消息m的数字签名(h,s)(signature);最终的签名数据(signeddata)中包含(h,s)、pzpub(最终的签名数据如何包含pzpub属于本发明之外的事)。

针对以上所述数字签名方法的签名验证方法如下。

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出数字签名(h,s)及混合主公钥pzpub;

签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2,若不是,则签名验证不通过,若是,则签名验证方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=f(sm,su)对应的主公钥(此时pzpub=[f(sm,su)]p2,对应sm9数字签名算法中的ppub),采用sm9数字签名算法对(h,s)作为消息m的数字签名的有效性进行验证。

对于以上所述签名验证方法,若f(sm,su)=(sm su)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[sm su]p2的一种方法如下:

签名方有利用su(预先)计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出p1,检查e(p1,p2)和e(pu1,pzpub-ppub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,不是。

对于以上所述签名验证方法,若f(sm,su)=(smsu)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[smsu]p2的一种方法如下:

签名方有利用su(预先)计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出pu1,检查e(p1,ppub)和e(pu1,pzpub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,确定不是。

对于以上所述签名验证方法,若f(sm,su)=(smsu)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[smsu]p2的另一种方法如下:

签名方有利用su(预先)计算得到的群g1中的元pu1=[su]p1;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出pu1,检查e(p1,pzpub)和e(pu1,ppub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,不是。

对于以上所述签名验证方法,若所述su是由所述私钥生成服务器和私钥生成客户端为避免系统主密钥sm暴露,分别在[1,n-1]内随机选择的整数su0、su1生成(即隐含地协同生成),则pu1由所述私钥生成服务器和私钥生成客户端协同生成。

基于本发明的标识私钥生成方法可构建相应的标识私钥生成系统,系统包括服务端的标识私钥生成服务器(privatekeygenerationserver)和用户端的标识私钥生成客户端(privatekeygenerationclient);所述标识私钥生成客户端是一个软件组件或软硬件相结合的组件;所述标识私钥生成服务器和标识私钥生成客户端按所述标识私钥生成方法生成用户标识所对应的用于签名的sm9标识私钥da。

基于前述标识私钥生成方法及数字签名方法可构造相应的密码装置,所述密码装置包括签名运算单元和密钥存储单元,其中签名运算单元用于完成签名运算,密钥存储单元保存有按所述标识私钥生成方法生成的用户的用于签名的标识私钥da;所述签名运算单元是一个硬件组件或软硬件相结合的组件或软件组件;当需要使用用户的用于签名的sm9标识私钥da针对消息m生成数字签名时,所述密码装置中的签名运算单元作为所述数字签名方法中的签名方,使用存储在所述密钥存储单元中的用户的用于签名的sm9标识私钥da,按所述数字签名方法生成针对消息m的数字签名(h,s)(所述密码装置不必负责将pzpub及pu1放到签名数据中的操作)。

基于本发明的标识私钥生成系统和密码装置可实施相应的密码系统,系统包括所述标识私钥生成系统和密码装置,其中标识私钥生成系统按所述标识私钥生成方法生成用户标识所对应的用于签名的sm9标识私钥da,并由标识私钥生成客户端将生成的用户的用于签名的sm9标识私钥da保存在所述密码装置的密钥存储单元中;当需使用用户的用于签名的sm9标识私钥da针对消息m生成数字签名时,所述密码装置中的签名运算单元使用存储在所述密钥存储单元中的用户的用于签名的sm9标识私钥da,按前述数字签名方法生成针对消息m的数字签名(h,s)。

基于本发明的标识私钥生成方法所生成的用户的用于签名的sm9标识私钥da,由系统主密钥(系统主私钥)sm和用户主密钥(用户主私钥)su共同生成,且标识私钥生成系统也无法得到da,这样就确保标识私钥生成系统无法生成、伪造用户的用于签名的sm9标识私钥da,使用这种sm9标识私钥所生成的数字签名具有抗抵赖性,因为其他人、机构无法生成、伪造用户的标识私钥da,且pzpub被公开发布使得用户无法否认da是之前由用户自己生成。

附图说明

图1:本发明的标识私钥生成系统

图2:本发明的密码装置

图3:本发明的密码系统

具体实施方式

下面对本发明的具体实施进行描述。

实施例1、

实施例1是本发明的标识私钥生成方法的一种实施方式;

此实施例涉及双线性映射(配对运算)e:g1×g2→gt;群g1的生成元为p1,群g2的生成元为p2;群g1、g2、gt的阶为素数n;

此实施例涉及服务端的标识私钥生成服务器(privatekeygenerationserver)和用户端的标识私钥生成客户端(privatekeygenerationclient);

所述标识私钥生成服务器有[1,n-1]内的系统主密钥sm(或称系统主私钥sm);sm有对应的系统主公钥ppub=[sm]p2;

所述标识私钥生成客户端在[1,n-1]内随机选择一个整数作为用户主密钥su(或称用户主私钥su),利用su和ppub计算有混合主公钥pzpub=[sm su]p2(通过pzpub=ppub [su]p2计算得到),利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器以s=(sm su)modn为主密钥(主私钥),通过交互协同生成用户标识(如ida)所对应的用于签名的sm9标识私钥da;

(生成da时的群g1的生成元仍然是p1,即:

da=[(sm su)(hid (sm su))-1]p1,其中hid=h1(ida||hid,n),其中(hid (sm su))-1为hid (sm su)(等价地(hid (sm su))modn)的模n乘法逆)

在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

对于以上实施的标识私钥生成方法,在完成用户标识私钥da生成后,用户主密钥su销毁或不销毁(若su不销毁,则可用于用户其他标识私钥的生成)。

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器如何通过交互协同生成用户标识所对应的sm9标识私钥da属于本发明之外的事,任何符合以下要求,能实现sm9标识私钥da协同生成的方式都可以:

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器以s=(sm su)modn为主密钥(主私钥),通过交互协同生成用户标识(如ida)所对应的用于签名的sm9标识私钥da;在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

作为可能的实施选择,cn109361519a或cn110401524a的具体实施方式中所述的sm9标识私钥协同生成方式可采用,其中本发明的用户端的标识私钥生成客户端作为cn109361519a或cn110401524a中的一个标识私钥生成器,本发明的标识私钥生成服务器作为其中的另一个私钥生成器,且由标识私钥生成客户端最终计算得到da,从而使得在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

在协同生成用户标识所对应的用于签名的sm9标识私钥da后,标识私钥生成客户端和标识私钥生成服务器通过数字签名或配对运算检查确定da是否是用户标识(如ida)所对应的用于签名的sm9标识私钥,若不是,则报错(之后怎么办取决于具体实施),若是,则完成标识私钥da的协同生成。

标识私钥生成客户端和标识私钥生成服务器通过数字签名检查确定da是否是用户标识所对应的用于签名的sm9标识私钥,这是很容易的,比如,对于标识私钥生成客户端,可以生成一个随机字串,然后使用生成的da,采用本发明的所述数字签名方法对随机字串进行数字签名,然后采用本发明的所述签名验证方法,对针对随机字串的数字签名进行有效性验证,若验证通过,则协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。类似地,对于标识私钥生成服务器,可以生成一个随机字串,然后请标识私钥生成客户端使用生成的da对随机字串进行数字签名;标识私钥生成客户端采用本发明的所述数字签名方法对随机字串进行数字签名,然后将随机字串的签名数据返回给标识私钥生成服务器;标识私钥生成服务器采用本发明的所述签名验证方法,对针对随机字串的数字签名的有效性进行验证,若验证通过,则说明协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。

标识私钥生成客户端和标识私钥生成服务器通过配对运算检查确定da是否是用户标识所对应的用于签名的sm9标识私钥,这对于本领域的技术人员而言也不是难事,有很多种可能的方式,下面给出一些可能的方式(当然不是全部可能的方式)。

对于标识私钥生成客户端,可以比较e(da,p)与e(p1,pzpub)是否相等,比较e(pu1,pzpub-ppub)与e(p1,p2)是否相等,其中,p=[hid]p2 pzpub,hid=h1(ida||hid,n),ida为用户标识;若两个比较的结果都是相等,则协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。

对于标识私钥生成服务器,可以在[1,n-1]内随机选择一个整数c,计算pc=[hidc]p2 [c]pzpub,将pc发送给标识私钥生成客户端;标识私钥生成客户端计算gc=e(da,pc),将gc发送标识私钥生成服务器;标识私钥生成服务器比较gc和e(p1,pzpub)c是否相等,比较e(pu1,pzpub-ppub)与e(p1,p2)是否相等,若两个比较的结果都是相等,则协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。

对于以上实施的标识私钥生成方法,所述pzpub被标识私钥生成系统(比如,标识私钥生成服务器或其他系统构件)公开发布(比如,通过一个采用区块链技术的公共平台发布,这样在出现纠纷时可用)。

对于以上实施的标识私钥生成方法,所述用户标识包括:不包含任何限定信息的用户原始标识(比如,没有限定信息的电子邮箱地址、手机号码),或者包含限定信息的受限定的用户标识(比如,受时间有效期或其他信息限定的电子邮箱地址、手机号码)。

基于本发明的标识私钥生成方法所述实施的数字签名方法如下。

当需要使用按所述标识私钥生成方法生成的用户标识私钥da针对消息m进行数字签名时,签名方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=(sm su)modn对应的主公钥(此时pzpub=[sm su]p2,对应sm9数字签名算法中的ppub),以da为用户的用于签名的sm9标识私钥,采用sm9数字签名算法生成针对消息m的数字签名(h,s)(signature),具体如下。

计算得到w=gr,这里r是签名计算时在[1,n-1]区间内随机选择的整数,g=e(p1,pzpub);

然后,计算h=h2(m||w,n),其中h2()及其参数如前背景技术中所述;

若r≠h,计算s=[r-h]da,则(h,s)为生成的数字签名;若r=h,则重新选择r,重新计算w、h,直到r≠h。

最终的签名数据(signeddata)中包含(h,s)、pu1及pzpub(最终的签名数据如何包含pu1及pzpub属于本发明之外的事)。

基于本发明的数字签名方法所实施的签名验证方法如下。

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出数字签名(h,s)、pu1及混合主公钥pzpub;

检查e(p1,p2)和e(pu1,pzpub-ppub)是否相等,若不相等,则签名验证失败,若相等,则签名验证方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=(sm su)modn对应的主公钥(此时pzpub=[sm su]p2,对应sm9数字签名算法中的ppub),采用sm9数字签名算法对(h,s)作为消息m的数字签名的有效性进行验证,具体地如下。

b1:检验h∈[1,n-1]是否成立,若不成立则验证不通过;

b2:检验s∈g1是否成立,若不成立则验证不通过;

b3:计算群gt中的元素g=e(p1,pzpub);

b4:计算群gt中的元素t=gh

b5:计算整数h1=h1(ida||hid,n),其中h1()及参数参见sm9规范;

b6:计算群g2中的元素p=[h1]p2 pzpub;

b7:计算群gt中的元素u=e(s,p);

b8:计算群gt中的元素w′=u·t;

b9:计算整数h2=h2(m||w′,n),检验h2=h是否成立,若成立则验证通过;否则验证不通过。

实施例2、

本实施例与实施例1的差别在于:

所述标识私钥生成客户端不在[1,n-1]内随机选择一个整数作为用户主密钥su(或称用户主私钥su),不利用su和ppub计算得到混合主公钥pzpub=[sm su]p2,不利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0 su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0 su1)]p2,通过交互协同生成pu1=[(su0 su1)-1]p1,其中sm、su0为标识私钥生成服务器的秘密,su1为标识私钥生成客户端的秘密,(su0 su1)-1是su0 su1(等价地(su0 su1)modn)的模n乘法逆;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中若检查发现da为零元或pzpub为零元或(hid sm su0 su1)modn=0或(su0 su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器重新在[1,n-1]内随机选择一个整数su0,标识私钥生成客户端重新在[1,n-1]内随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0 su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0 su1)]p2,直到da不为零元且pzpub不为零元且(hid sm su0 su1)modn不为0且(su0 su1)modn不为0;

协同生成da、pu1和pzpub后,(su0 su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

标识私钥生成客户端和标识私钥生成服务器协同生成pzpub是很容易的,再此不再赘述;

标识私钥生成客户端和标识私钥生成服务器如何通过各自的秘密sm、su0、su1,协同计算da、pu1,以及在计算过程中如何检查发现(hid sm su0 su1)modn=0或(su0 su1)modn=0,取决于具体的实施方式。

作为可能的选择,同实施例1类似,标识私钥生成客户端和标识私钥生成服务器以s=(sm su0 su1)modn为主密钥(主私钥),协同生成用户标识对应的用于签名的sm9标识私钥da,可采用cn109361519a或cn110401524a的具体实施方式中的用于签名的sm9标识私钥da协同生成方式,只是su1是标识私钥生成客户端的秘密,(sm su0)modn是标识私钥生成服务器的秘密;在协同生成标识私钥da的过程中,标识私钥生成客户端或标识私钥生成服务器通过检查c是否为0,检查确定(hid sm su0 su1)modn是否为0。

作为可能的选择,标识私钥生成客户端和标识私钥生成服务器协同生成群g1中的元pu1=[(su0 su1)-1]p1的具体实施方式,可以采用发明cn107819581a或cn109361519a中的方法,这时标识私钥生成客户端和标识私钥生成服务器分别对应这两个发明中的两个装置,比如,标识私钥生成客户端在[1,n-1]内随机选择一个整数w1,标识私钥生成服务器在[1,n-1]内随机选择一个整数w2,su1对应秘密g1,su0对应秘密g2,两者协同计算得到包含秘密的数:

c=w1w2(g1 g2)modn,

然后通过检查c是否为0,可以确定(su0 su1)modn是否为0,通过计算[c-1]p1就能很容易地协同计算得到[(su0 su1)-1]p1。

实施例3、

本实施例与实施例1的差别在于:

所述标识私钥生成客户端不在[1,n-1]内随机选择一个整数作为用户主密钥su(或称用户主私钥su),不利用su和ppub计算得到混合主公钥pzpub=[sm su]p2,不利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

在协同生成用户标识所对应的标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0su1]p2,通过交互协同生成pu1=[(su0su1)-1]p1,其中sm、su0是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密,(su0su1)-1是su0su1(等价地(su0su1)modn)的模n乘法逆;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中,若检查发现da为零元或pzpub为零元或(hid sm su0su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0su1]p2,直到da不为零元且pzpub不为零元且(hid sm su0su1)modn不为0;

协同生成da、pu1和pzpub后,(su0su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

标识私钥生成客户端和标识私钥生成服务器协同生成pzpub、pu1是很容易的,再此不再赘述;

标识私钥生成客户端和标识私钥生成服务器如何通过各自的秘密sm、su0、su1,协同计算da,以及在计算过程中如何检查发现(hid sm su0su1)modn=0,取决于具体的实施方式。

下面是一种可能的实施方式。

标识私钥生成客户端和标识私钥生成服务器协同生成用户标识所对应的用于签名的sm9标识私钥,关键是计算[(hid sm su0su1)-1]p1,可以采用如下方式:

(hid sm su0su1)modn==(su0((hid sm)(su0)-1 su1))modn,

标识私钥生成服务器以su0作为w1,以((hid sm)(su0)-1)modn作为秘密g1,标识私钥生成客户端在[1,n-1]内随机选择一个整数作为w2,以su1作为秘密g2;然后,标识私钥生成客户端和标识私钥生成服务器按发明cn107819581a或cn109361519a中的方法协同计算:

c=(w2w1(g1 g2))modn,

然后利用c是否为0可以判断(hid sm su0su1)modn是否为0,以及计算得到[(hid sm su0su1)-1]p1,然后由此计算得到用户的用于签名的sm9标识私钥da。

实施例4、

实施例4是本发明的标识私钥生成方法的一种实施方式;

此实施例涉及双线性映射(配对运算)e:g1×g2→gt;群g1的生成元为p1,群g2的生成元为p2;群g1、g2、gt的阶为素数n;

此实施例涉及服务端的标识私钥生成服务器(privatekeygenerationserver)和用户端的标识私钥生成客户端(privatekeygenerationclient);

所述标识私钥生成服务器有[1,n-1]内的系统主密钥sm(或称系统主私钥sm);sm有对应的系统主公钥ppub=[sm]p2;

所述标识私钥生成客户端在[1,n-1]内随机选择一个整数作为用户主密钥su(或称用户主私钥su),利用su和ppub计算得到混合主公钥pzpub=[smsu]p2(通过pzpub=[su]ppub计算得到),利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器以s=(smsu)modn为主密钥(主私钥),通过交互协同生成用户标识(如ida)所对应的用于签名的sm9标识私钥da;

(生成da时的群g1的生成元仍然是p1,即:

da=[(smsu)(hid (smsu))-1]p1,其中hid=h1(ida||hid,n),其中(hid (smsu))-1为hid (smsu)(等价地(hid (smsu))modn)的模n乘法逆)

在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器如何通过交互协同生成用户标识所对应的sm9标识私钥da属于本发明之外的事,任何符合以下要求,能实现sm9标识私钥da协同生成的方式都可以:

所述用户端的标识私钥生成客户端、服务端的标识私钥生成服务器以s=(smsu)modn为主密钥(主私钥),通过交互协同生成用户标识(如ida)所对应的用于签名的sm9标识私钥da;在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

与实施例1类似,作为可能的实施选择,可采用cn10936151ga或cn110401524a的具体实施方式中所述的sm9标识私钥协同生成方式,其中本发明的用户端的标识私钥生成客户端作为cn109361519a或cn110401524a中的一个标识私钥生成器,本发明的标识私钥生成服务器作为其中的另一个私钥生成器,且由标识私钥生成客户端最终计算得到da,从而使得在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件)。

在协同生成用户标识所对应的用于签名的sm9标识私钥da后,标识私钥生成客户端和标识私钥生成服务器通过数字签名或配对运算检查确定da是否是用户标识(如ida)所对应的用于签名的sm9标识私钥,若不是,则报错(之后怎么办取决于具体实施),若是,则完成标识私钥da的协同生成。

标识私钥生成客户端和标识私钥生成服务器通过数字签名检查确定da是否是用户标识所对应的用于签名的sm9标识私钥,可以采用实施例1中的方式。

标识私钥生成客户端和标识私钥生成服务器通过配对运算检查确定da是否是用户标识所对应的用于签名的sm9标识私钥,可采用实施例1中类似的方式,但略有不同。

对于标识私钥生成客户端,可以比较e(da,p)与e(p1,pzpub)是否相等,比较e(pu1,pzpub)与e(p1,ppub)是否相等,其中,p=[hid]p2 pzpub,hid=h1(ida||hid,n),ida为用户标识;若两个比较的结果都是相等,则协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。

对于标识私钥生成服务器,可以在[1,n-1]内随机选择一个整数c,计算pc=[hidc]p2 [c]pzpub,将pc发送给标识私钥生成客户端;标识私钥生成客户端计算gc=e(da,pc),将gc发送标识私钥生成服务器;标识私钥生成服务器比较gc和e(p1,pzpub)c是否相等,比较e(pu1,pzpub)与e(p1,ppub)是否相等,若两个比较的结果都是相等,则协同生成的da是用户标识所对应的用于签名的sm9标识私钥,否则,不是。

对于以上实施的标识私钥生成方法,在完成用户标识私钥da生成后,用户主密钥su销毁或不销毁(若su不销毁,则可用于用户其他标识私钥的生成)。

对于以上实施的标识私钥生成方法,所述pzpub被标识私钥生成系统(比如,标识私钥生成服务器或其他系统构件)公开发布(比如,通过一个采用区块链技术的公共平台发布,这样在出现纠纷时可用)。

对于以上实施的标识私钥生成方法,所述用户标识包括:不包含任何限定信息的用户原始标识(比如,没有限定信息的电子邮箱地址、手机号码),或者包含限定信息的受限定的用户标识(比如,受时间有效期或其他信息限定的电子邮箱地址、手机号码)。

基于本发明的标识私钥生成方法所述实施的数字签名方法如下。

当需要使用按所述标识私钥生成方法生成的用户标识私钥da针对消息m进行数字签名时,签名方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=(smsu)modn对应的主公钥(此时pzpub=[smsu]p2,对应sm9数字签名算法中的ppub),以da为用户的用于签名的sm9标识私钥,采用sm9数字签名算法生成针对消息m的数字签名(h,s)(signature);具体如下。

计算得到w=gr,这里r是签名计算时在[1,n-1]区间内随机选择的整数,g=e(p1,pzpub);

然后,计算h=h2(m||w,n),其中h2()及其参数如前背景技术中所述;

若r≠h,计算s=[r-h]da,则(h,s)为生成的数字签名;若r=h,则重新选择r,重新计算w、h,直到r≠h。

最终的签名数据(signeddata)中包含(h,s)、pu1及pzpub(最终的签名数据如何包含pu1及pzpub属于本发明之外的事)。

基于本发明的数字签名方法所实施的签名验证方法如下。

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出数字签名(h,s)、pu1及混合主公钥pzpub;

检查e(p1,ppub)和e(pu1,pzpub)是否相等,若不相等,则签名验证失败,若相等,则签名验证方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥(主私钥)s=(smsu)modn对应的主公钥(此时pzpub=[smsu]p2,对应sm9数字签名算法中的ppub),采用sm9数字签名算法对(h,s)作为消息m的数字签名的有效性进行验证,具体地如下。

b1:检验h∈[1,n-1]是否成立,若不成立则验证不通过;

b2:检验s∈g1是否成立,若不成立则验证不通过;

b3:计算群gt中的元素g=e(p1,pzpub);

b4:计算群gt中的元素t=gh

b5:计算整数h1=h1(ida||hid,n),其中h1()及参数参见sm9规范;

b6:计算群g2中的元素p=[h1]p2 pzpub;

b7:计算群gt中的元素u=e(s,p);

b8:计算群gt中的元素w′=u·t;

b9:计算整数h2=h2(m||w′,n),检验h2=h是否成立,若成立则验证通过;否则验证不通过。

实施例5、

实施例5与实施例4的差别在于:

签名方利用su(预先)计算得到的群g1中的元pu1=[su]p1;

采用配对运算验证da是否是用户的用于签名的sm9标识私钥,以及在签名验证时,检查的是e(pu1,ppub)和e(p1,pzpub)是否相等,而不是e(p1,ppub)和e(pu1,pzpub)是否相等。

实施例6、

实施例6与实施例4、5的差别在于:

所述标识私钥生成客户端不在[1,n-1]内随机选择一个整数作为用户主密钥su(或称用户主私钥su),不利用su和ppub计算得到混合主公钥pzpub=[smsu]p2,不利用su计算得到的群g1中的元pu1=[(su)-1]p1(对应实施例4),其中(su)-1是su的模n乘法逆,也不利用su计算得到的群g1中的元pu1=[su]p1(对应实施例5);

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(smsu0su1)modn为主密钥(主私钥),在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[smsu0su1)]p2,其中(smsu0)modn是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中,若检查发现(hid smsu0su1)modn=0(通常是通过间接的方式),则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(smsu0su1)modn为主密钥(主私钥),通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[smsu0su1)]p2,直到(hid smsu0su1)modn不为0;

在协同生成da和pzpub后或过程中,标识私钥生成客户端和标识私钥生成服务器协同计算pu1=[(su0su1)-1]p1(对应实施例4),或协同计算pu1=[su0su1]p1(对应实施例5),其中(su0su1)-1是su0su1(等价地(su0su1)modn)的模n乘法逆;

协同生成da、pu1和pzpub后,(su0su1)modn对应前述用户主密钥(主私钥)su(此时su由标识私钥生成客户端和标识私钥生成服务器共享)。

所述标识私钥生成客户端和标识私钥生成服务器协同计算pu1=[(su0su1)-1]p1(对应实施例4),或协同计算pu1=[su0su1]p1(对应实施例5)是很容易的,在此不再赘述。

如何协同生成da以及在协同生成da的过程中检查(hid smsu0su1)modn是否为0,不属于本发明的内容,作为可能的实施选择,cn109361519a或cn110401524a的具体实施方式中所述的sm9标识私钥协同生成方式可采用,其中本发明的用户端的标识私钥生成客户端作为cn109361519a或cn110401524a中的一个标识私钥生成器,本发明的标识私钥生成服务器作为其中的另一个私钥生成器,其中(smsu0)modn是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密,且由标识私钥生成客户端最终计算得到da,从而使得在标识私钥da的生成过程中服务端的系统无法得到最终的da(所述服务端的系统包括标识私钥生成服务器及其他系统构件);在协同生成da的过程中通过检查c是否为0,可以确定(hid smsu0su1)modn是否为0。

基于本发明的标识私钥生成方法可实施构建相应的标识私钥生成系统,如图1所示,所述系统包括服务端的标识私钥生成服务器(privatekeygenerationserver)和用户端的标识私钥生成客户端(privatekeygenerationclient);所述标识私钥生成客户端是一个软件组件或软硬件相结合的组件;所述标识私钥生成服务器和标识私钥生成客户端按所述标识私钥生成方法生成用户标识所对应的用于签名的sm9标识私钥da。

基于前述标识私钥生成方法及数字签名方法可实施构造相应的密码装置,如图2所示,所述密码装置包括签名运算单元和密钥存储单元,其中签名运算单元用于完成签名运算,密钥存储单元保存有按所述标识私钥生成方法生成的用户的用于签名的sm9标识私钥da;所述签名运算单元是一个硬件组件或软硬件相结合的组件或软件组件;当需要使用用户的用于签名的sm9标识私钥da针对消息m生成数字签名时,所述密码装置中的签名运算单元作为所述数字签名方法中的签名方,使用存储在所述密钥存储单元中的用户的用于签名的sm9标识私钥da,按所述数字签名方法生成针对消息m的数字签名(h,s)(所述密码装置不必负责完成将pu1、pzpub放到签名数据中的操作)。

基于本发明的标识私钥生成系统和密码装置可实施相应的密码系统,如图3所示,系统包括所述标识私钥生成系统和密码装置,其中标识私钥生成系统按所述标识私钥生成方法生成用户标识所对应的用于签名的sm9标识私钥da,并由标识私钥生成客户端将生成的用于签名的sm9标识私钥da保存在所述密码装置的密钥存储单元中;当需使用用户的用于签名的sm9标识私钥da针对消息m生成数字签名时,所述密码装置中的签名运算单元使用存储在所述密钥存储单元中的用户的用于签名的sm9标识私钥da,按前述数字签名方法生成针对消息m的数字签名(h,s)。

其他未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。


技术特征:

1.一种标识私钥生成方法,其特征是:

所述标识私钥生成方法涉及双线性映射e:g1×g2→gt;群g1的生成元为p1,群g2的生成元为p2;群g1、g2、gt的阶为素数n;

所述标识私钥生成方法涉及服务端的标识私钥生成服务器和用户端的标识私钥生成客户端;

所述标识私钥生成服务器有[1,n-1]内的系统主密钥sm;sm有对应的系统主公钥ppub=[sm]p2;

所述标识私钥生成客户端有[1,n-1]内的用户主密钥su,有混合主公钥pzpub=[f(sm,su)]p2,其中,f(sm,su)=(sm su)modn或f(sm,su)=(smsu)modn;

所述用户端的标识私钥生成客户端和服务端的标识私钥生成服务器以s=f(sm,su)为主密钥,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da;

在标识私钥da的生成过程中服务端的系统无法得到最终的da。

2.根据权利要求1所述的标识私钥生成方法,其特征是:

所述用户标识包括:不包含任何限定信息的用户原始标识,或者包含限定信息的受限定的用户标识。

3.根据权利要求1所述的标识私钥生成方法,其特征是:

若f(sm,su)=(sm su)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da和计算pzpub的过程中因出现(hid f(sm,su))modn=0或f(sm,su)=0的情况而导致系统主密钥sm暴露的一种方法如下,其中hid=h1(ida||hid,n),ida是用户标识,hid是用一个字节表示的签名私钥生成函数识别符,h1()是sm9规范中定义的散列或哈希函数:

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0 su1)modn为主密钥,在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0 su1)]p2,其中sm、su0为标识私钥生成服务器的秘密,su1为标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中若检查发现da为零元或pzpub为零元或(hid sm su0 su1)modn=0或(su0 su1)modn=0,则标识私钥生成服务器重新在[1,n-1]内随机选择一个整数su0,标识私钥生成客户端重新在[1,n-1]内随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0 su1)modn为主密钥,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0 su1)]p2,直到da不为零元且pzpub不为零元且(hid sm su0 su1)modn不为0且(su0 su1)modn不为0;

协同生成da和pzpub后,(su0 su1)modn对应前述用户主密钥su。

4.根据权利要求1所述的标识私钥生成方法,其特征是:

若f(sm,su)=(sm su)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da和计算pzpub的过程中因出现(hid f(sm,su))modn=0或f(sm,su)=0的情况而导致系统主密钥sm暴露的一种方法如下,其中hid=h1(ida||hid,n),ida是用户标识,hid是用一个字节表示的签名私钥生成函数识别符,h1()是sm9规范中定义的散列或哈希函数:

在协同生成用户标识所对应的标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(sm su0su1)modn为主密钥,在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[sm su0su1]p2,其中sm、su0是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da和pzpub的过程中,若检查发现da为零元或pzpub为零元或(hid sm su0su1)modn=0,则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(sm su0su1)modn为主密钥,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,重新通过交互协同生成pzpub=[sm su0su1]p2,直到da不为零元且pzpub不为零元且(hid sm su0su1)modn不为0;

协同生成da和pzpub后,(su0su1)modn对应前述用户主密钥su。

5.根据权利要求1所述的标识私钥生成方法,其特征是:

若f(sm,su)=(smsu)modn,则避免协同生成用户标识所对应的用于签名的sm9标识私钥da的过程中因出现(hid f(sm,su))modn=0的情况而导致系统主密钥sm泄漏的一种方法如下,其中hid=h1(ida||hid,n),ida是用户标识,hid是用一个字节表示的签名私钥生成函数识别符,h1()是sm9规范中定义的散列或哈希函数:

在协同生成用户标识所对应的用于签名的sm9标识私钥da时,服务端的标识私钥生成服务器在[1,n-1]内随机选择一个整数su0,用户端的标识私钥生成客户端在[1,n-1]内随机选择一个整数su1;

所述标识私钥生成客户端和标识私钥生成服务器以s=(smsu0su1)modn为主密钥,在不暴露各自秘密的情况下,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,通过交互协同生成pzpub=[smsu0su1)]p2,其中(smsu0)modn是标识私钥生成服务器的秘密,su1是标识私钥生成客户端的秘密;

在协同生成用户标识所对应的sm9标识私钥da的过程中,若检查发现(hid smsu0su1)modn=0,则标识私钥生成服务器在[1,n-1]内重新随机选择一个整数su0,标识私钥生成客户端在[1,n-1]内重新随机选择一个整数su1,标识私钥生成客户端和标识私钥生成服务器重新以s=(smsu0su1)modn为主密钥,通过交互协同生成用户标识所对应的用于签名的sm9标识私钥da,标识私钥生成客户端和标识私钥生成服务器重新通过交互协同生成pzpub=[smsu0su1)]p2,直到(hid smsu0su1)modn不为0;

协同生成da和pzpub后,(su0su1)modn对应前述用户主密钥su。

6.一种基于权利要求1-5中任一项所述的标识私钥生成方法的数字签名方法,其特征是:

当需要使用按所述标识私钥生成方法生成的用户的用于签名的sm9标识私钥da针对消息m进行数字签名时,签名方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥s=f(sm,su)对应的主公钥,以da为用户的用于签名的sm9标识私钥,采用sm9数字签名算法生成针对消息m的数字签名(h,s);最终的签名数据中包含(h,s)、pzpub。

7.一种基于权利要求6所述的数字签名方法的签名验证方法,其特征是:

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出数字签名(h,s)及混合主公钥pzpub;

签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2,若不是,则签名验证不通过,若是,则签名验证方以p1为群g1的生成元,以p2为群g2的生成元,以混合主公钥pzpub作为与主密钥s=f(sm,su)对应的主公钥,采用sm9数字签名算法对(h,s)作为消息m的数字签名的有效性进行验证。

8.根据权利要求7所述的签名验证方法,其特征是:

若f(sm,su)=(sm su)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[sm su]p2的一种方法如下:

签名方有利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

若su是由所述私钥生成服务器和私钥生成客户端为避免系统主密钥sm暴露,分别在[1,n-1]内随机选择的整数su0、su1所生成,则所述pu1由所述私钥生成服务器和私钥生成客户端协同计算得到,否则,由签名方的私钥生成客户端计算得到;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出p1,检查e(p1,p2)和e(pu1,pzpub-ppub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,不是。

9.根据权利要求7所述的签名验证方法,其特征是:

若f(sm,su)=(smsu)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[smsu]p2的一种方法如下:

签名方有利用su计算得到的群g1中的元pu1=[(su)-1]p1,其中(su)-1是su的模n乘法逆;

若su是由所述私钥生成服务器和私钥生成客户端为避免系统主密钥sm暴露,分别在[1,n-1]内随机选择的整数su0、su1所生成,则所述pu1由所述私钥生成服务器和私钥生成客户端协同计算得到,否则,由签名方的私钥生成客户端计算得到;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出pu1,检查e(p1,ppub)和e(pu1,pzpub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,确定不是。

10.根据权利要求7所述的签名验证方法,其特征是:

若f(sm,su)=(smsu)modn,则签名验证方检查确定pzpub是否是pzpub=[f(sm,su)]p2即pzpub=[smsu]p2的一种方法如下:

签名方有利用su计算得到的群g1中的元pu1=[su]p1;

若su是由所述私钥生成服务器和私钥生成客户端为避免系统主密钥sm暴露,分别在[1,n-1]内随机选择的整数su0、su1所生成,则所述pu1由所述私钥生成服务器和私钥生成客户端协同计算得到,否则,由签名方的私钥生成客户端计算得到;

使用用户的用于签名的sm9标识私钥da对消息m进行数字签名所生成的签名数据中还包含pu1;

对消息m的数字签名进行签名验证时,签名验证方从签名数据中分离出pu1,检查e(p1,pzpub)和e(pu1,ppub)是否相等,若相等,则确定pzpub是pzpub=[f(sm,su)]p2,否则,不是。

11.一种基于权利要求1-5中任一项所述的标识私钥生成方法的标识私钥生成系统,其特征是:

所述标识私钥生成系统包括服务端的标识私钥生成服务器和用户端的标识私钥生成客户端;所述标识私钥生成客户端是一个软件组件或软硬件相结合的组件;所述标识私钥生成服务器和标识私钥生成客户端按所述标识私钥生成方法生成用户标识所对应的用于签名的sm9标识私钥da。

12.一种基于权利要求6所述的数字签名方法的密码装置,其特征是:

所述密码装置包括签名运算单元和密钥存储单元,其中签名运算单元用于完成签名运算,密钥存储单元保存有按所述标识私钥生成方法生成的用户的用于签名的sm9标识私钥da;所述签名运算单元是一个硬件组件或软硬件相结合的组件或软件组件;当需要使用用户的用于签名的sm9标识私钥da针对消息m生成数字签名时,所述密码装置中的签名运算单元作为所述数字签名方法中的签名方,使用存储在所述密钥存储单元中的用户的用于签名的sm9标识私钥da,按所述数字签名方法生成针对消息m的数字签名(h,s)。

技术总结
发明涉及具有抗抵赖能力的标识私钥生成和数字签名方法及密码系统:P1、P2分别为SM9算法的群G1、G2的生成元,n为群的阶;私钥生成服务端有系统主密钥sm及系统主公钥Ppub=[sm]P2;客户端有用户主密钥sU,混合公钥PZpub=[F(sm,sU)]Ppub,F(sm,sU)=(sm sU)mod n或F(sm,sU)=(smsU)mod n;客户端和服务端以F(sm,sU)为主密钥,协同生成用户的SM9私钥dA且服务端得不到dA;签名方以PZpub作为F(sm,sU)对应的主公钥,dA为私钥,采用SM9签名算法生成消息的数字签名(h,S);签名验证方在验证PZpub=[F(sm,sU)]Ppub后,以PZpub为主公钥,采用SM9签名算法对(h,S)作为消息的数字签名的有效性验证。

技术研发人员:龙毅宏
受保护的技术使用者:武汉理工大学
技术研发日:2020.01.07
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-20920.html

最新回复(0)