具有乘积r参数的SM9数字签名协同生成方法及系统与流程

文档序号:18629935发布日期:2019-09-06 23:29阅读:176来源:国知局

本发明属于信息安全技术领域,特别是具有乘积r参数的sm9数字签名协同生成方法及系统。



背景技术:

sm9是由国家密码管理局颁布的一种基于双线性映射(配对运算)的标识密码算法,其中的双线性映射(配对运算)为:

e:g1×g2→gt时,其中g1、g2是加法循环群,gt是一个乘法循环群,g1、g2、gt的阶是素数n(注:在sm9规范中,g1、g2、gt的阶用的是大写字母n,本专利申请采用小写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(ap,bq)=e(p,q)ab

基于sm9密码算法能实现基于标识的数字签名、密钥交换及数据加密。在sm9密码算法中,使用用户的sm9私钥da针对消息m生成数字签名的过程如下:

计算得到w=g^r,这里符号^表示幂运算(g的r次幂),r是在[1,n-1]区间内随机选择的整数,n是sm9密码算法的群g1、g2、gt的阶,g=e(p1,ppub),p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范);

然后,计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示m和w的字串合并,n为g1、g2、gt的阶(参见sm9规范);

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

针对一些特殊的需求,比如,为了保证非硬件环境下用户私钥使用的安全性,人们提出了一些基于秘密共享(分享)的sm9数字签名生成方法。在这些方法中,多个装置分别保存有用户sm9私钥的秘密份额,或者分别保存有与私钥有关的秘密的秘密份额;在需要使用用户私钥针对一个消息m生成数字签名时,每个装置利用自己的秘密份额与其他装置交互、协同运算,生成针对消息的数字签名。

现有的基于秘密共享的sm9数字签名协同生成方案,通常在密码运算的过程中计算w=g^(a1r1+…+amrm),其中ri是第i个装置在[1,n-1]中随机选择的整数,而ai是常数,i=1,…,m(假设有m个装置);然后计算h=h2(m||w,n),最后m个装置通过协同计算得到s=[(a1r1+…+amrm)-h]da。这种方案通常是没有问题的,但也可能出现一种情况,就是恰好出现(a1r1+…+amrm)modn=0,而出现这样情况恰好被其中一个装置观测到(比如通过检查w是否是单位元),但却不报告,则这个装置就有可能从最终得到的数字签名(h,s)中得到用户的sm9私钥。出现这种情况的概率虽然极小,但是仍然有可能发生,尤其是在ri很难做到是真正随机选择的情况下。

如果基于秘密共享的数字签名协同生成方案能做到所采用的方案是w=g^(ar1…rm),s=[(a1r1…rm)-h]da,即这里的r1,…,rm以及一个常数a是以乘积的形式出现,则不会出现(ar1…rm)modn=0的情况,这样的方案具有更高的安全性。我们在这里把r1,…,rm以及常数a是以乘积形式出现的情形称为乘积r参数的情形,而把生成数字签名过程中r1,…,rm以及常数a以乘积形式出现的sm9数字签名协同生成方法,称为具有乘积r参数的sm9数字签名协同生成方法。



技术实现要素:

本发明的目的是提出具有乘积r参数的sm9数字签名协同生成技术方案,以增强基于秘密共享的sm9数字签名协同生成方案的安全性。

针对本发明的目的,本发明提出的技术方案包括三种具有乘积r参数的sm9数字签名协同生成方法及相应的系统。

在以下对本发明技术方案的描述中,若p、q是加法群g1、g2中的元,则p+q表示p、q在加法群上的加,p-q表示p加上q的逆元(加法逆元),[k]p表示k个p在加法群上的加,即p+p+...+p(共有k个p)(若k是负数,则是|k|个p相加的结果的加法逆元;这里[]符号的使用与sm9规范一致);

省略号“...”,表示多个同样(类型)的数据项或多个同样的运算;

若a、b是乘法群gt中的元,则ab或a·b表示a、b在乘法群gt上的乘(只要不产生无二义性,“·”可以省略),a-1表示a在乘法群中逆元(乘法逆元),at表示t个a在乘法群gt上相乘(t是负数,则是|t|个a相乘的结果的乘法逆元),即幂运算,at的另一种表达方式是a^t;

若c为整数,则c-1表示整数c的模n乘法逆(即cc-1modn=1);如无特别说明,本专利发明中整数的乘法逆都是针对群g1、g2、gt的阶n的模n乘法逆;

多个整数相乘(包括整数符号相乘、常数与整数符号相乘),在不产生二义性的情况下,省略掉乘号“·”,如k1·k2简化为k1k2,3·c,简化为3c;

modn表示模n运算(modulooperation),对应于sm9规范中的modn;还有,模n运算的算子modn的优先级是最低的,如a+bmodn等同于(a+b)modn,a-bmodn等同于(a-b)modn,abmodn等同于(ab)modn。

本发明提出的三个具有乘积r参数的sm9数字签名协同生成方法具体如下。

方案一、

方案一确定的具有乘积r参数的sm9数字签名协同生成方法如下:

方法涉及两个分别标号为第1号和第2号的装置;

第1号装置保存有[1,n-1]区间内的整数秘密c,其中n为sm9密码算法中群g1、g2、gt的阶(为素数);第2号装置保存有秘密pa=[c-1]da,其中da是用户的身份标识ida所对应的sm9标识私钥,c-1为c的模n乘法逆(即c-1cmodn=1);两个装置都不保存有da;([1,n-1]中的整数秘密通常是在[1,n-1]中随机选择的整数,或者是从[1,n-1]中随机选择的整数所导出的整数)

在初始化阶段计算有:

pb=[b]da,其中b是第1号、第2号装置都没有保存的[1,n-1]中的整数秘密;

gb=g^(bc),其中,符号^表示针对符号^前面的元素进行幂运算,符号^后面的元素是幂运算的次数,bc是b和c的模n乘积,g=e(p1,ppub),其中p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范);

当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按如下方式进行数字签名的生成(需要使用用户的sm9标识私钥da、针对消息m进行数字签名的主体可以是调用这两个装置的密码应用程序、系统或密码模块,或者两个装置之一中的密码应用程序、系统):

首先,两个装置通过交互计算得到w=gb^(r1r2),其中r1是第1号装置在[1,n-1]区间内随机选择的整数,r2是第2号装置在[1,n-1]区间内随机选择的整数;

然后,(第1号或第2号装置或其他装置)计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示m和w的字串合并,n为g1、g2、gt的阶;

(h无需保密,可根据需要自由传送)

(第1号或第2号装置或其他装置)检查w与g^h是否相等,若w=g^h,则两个装置重新进行w的计算,直到w≠g^h;

第1号装置计算s1=[r1]pb,将s1发送给第2号装置;

(此时s1=[r1b]da)

接收到s1后,第2号装置检查s1是否为零元,若为零元,则第2号装置报错,中止计算或两个装置重新计算,否则(s1不为零元),第2号装置计算s2=[r2]s1+[-h]pa;

(此时s2=[(r1r2)b-c-1h]da)

第2号装置将s2发送给第1号装置;

第1号装置接收到s2后计算s=[c]s2;

(此时s=[(r1r2)bc-h]da)

最后,第1号装置利用用户的身份标识ida、消息m,验证(h,s)作为消息m的数字签名的有效性,若有效,则(h,s)为生成的针对消息m的数字签名,否则,第1号装置报错,或者两个装置重新进行数字签名的生成。

对于以上所述方案一确定方法,两个装置按如下方式计算得到w=gb^(r1r2):

第2号装置计算g2=gb^r2,将g2发送第1号装置;

第1号装置计算w=g2^r1;

或者,

第1号装置计算g1=gb^r1,将g1发送第2号装置;

第2号装置计算w=g1^r2,之后将w发送第1号装置。

方案二、

方案二确定的具有乘积r参数的sm9数字签名协同生成方法如下:

方法同样涉及两个分别标号为第1号和第2号的装置;

第1号装置保存有秘密pa=[c-1]da,其中da是用户的身份标识ida所对应的sm9标识私钥,c-1为c的模n乘法逆(即c-1cmodn=1),而c是第2号装置保存的[1,n-1]区间内的整数秘密,n为sm9密码算法中群g1、g2、gt的阶(为素数);两个装置都不保存有da;([1,n-1]中的整数秘密通常是在[1,n-1]中随机选择的整数,或者是从[1,n-1]中随机选择的整数所导出的整数)

在初始化阶段计算有:

pb=[b]da,其中b是第1号、第2号装置都没有保存的[1,n-1]中的整数秘密;

gb=g^b,其中,符号^表示针对符号^前面的元素进行幂运算,符号^后面的元素是幂运算的次数,g=e(p1,ppub),其中p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范);

当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按如下方式进行数字签名的生成(需要使用用户的sm9标识私钥da、针对消息m进行数字签名的主体可以是调用这两个装置的密码应用程序、系统或密码模块,或者两个装置之一中的密码应用程序、系统):

首先,两个装置通过交互计算得到w=gb^(r1r2),其中r1是第1号装置在[1,n-1]区间内随机选择的整数,r2是第2号装置在[1,n-1]区间内随机选择的整数;

然后,(第1号或第2号装置或其他装置)计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示m和w的字串合并,n为g1、g2、gt的阶;

(h无需保密,可根据需要自由传送)

(第1号或第2号装置或其他装置)检查w与g^h是否相等,若w=g^h,则两个装置重新进行w的计算,直到w≠g^h;

第1号装置计算s1=[(r1)-1]pa或s1=[(r1)-1h]pa,将s1发送给第2号装置,其中(r1)-1是r1的模n乘法逆(即r1(r1)-1modn=1);

(此时s1=[(cr1)-1]da或s1=[(cr1)-1h]da)

第2号装置接收到s1后,按如下方式计算s2:

若s1的计算式是s1=[(r1)-1]pa,则s2=[r2]pb+[-hc]s1;

若s1的计算式是s1=[(r1)-1h]pa,则s2=[r2]pb+[-c]s1;

(此时s2=[r2b-(r1)-1h]da)

第2号装置将s2发送给第1号装置;

第1号装置接收到s2后计算s=[r1]s2;

(此时s=[(r1r2)b-h]da)

最后,第1号装置利用用户的身份标识ida、消息m,验证(h,s)作为消息m的数字签名的有效性,若有效,则(h,s)为生成的针对消息m的数字签名,否则,第1号装置报错,或者两个装置重新进行数字签名的生成。

对于以上所述方案二确定的方法,两个装置计算得到w=gb^(r1r2)的方式同方案一。

方案三、

方案三确定的具有乘积r参数的sm9数字签名协同生成方法如下:

方法同样涉及两个分别标号为第1号和第2号的装置;

所述方法涉及两个分别标号为第1号和第2号的装置;

用户的身份标识ida所对应的sm9标识私钥da被分成了两份,分别是da1、da2,且满足关系da1+da2=da;

第1号装置保存有秘密(份额)da1以及[1,n-1]区间内的整数秘密c,第2号装置保存有秘密pa2=[c-1]da2(第2号装置不必保存da2),其中,n为sm9密码算法中群g1、g2、gt的阶(为素数),c-1是c的模n乘法逆(即(c-1c)modn=1);两个装置都不保存有da;([1,n-1]中的整数秘密通常是在[1,n-1]中随机选择的一个整数,或者是从[1,n-1]中随机选择的整数所导出的整数)

在初始化阶段计算有:

pb=[b]da,其中b是[1,n-1]中的第1号、第2号装置都没有保存的整数秘密;

gb=g^(bc),其中,符号^表示针对符号^前面的元素进行幂运算,符号^后面的元素是幂运算的次数,g=e(p1,ppub),其中p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范);当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按如下方式进行数字签名的生成(需要使用用户的sm9标识私钥da、针对消息m进行数字签名的主体可以是调用这两个装置的密码应用程序、系统或密码模块,或者两个装置之一中的密码应用程序、系统):

首先,两个装置通过交互计算得到w=gb^(r1r2),其中r1是第1号装置在[1,n-1]区间内随机选择的整数,r2是第2号装置在[1,n-1]区间内随机选择的整数;

然后,(第1号或第2号装置或其他装置)计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示m和w的字串合并,n为g1、g2、gt的阶;

(h无需保密,可根据需要自由传送)

(第1号或第2号装置或其他装置)检查w与g^h是否相等,若w=g^h,则两个装置重新进行w的计算,直到w≠g^h;

第1号装置计算s1=[r1]pb,将s1发送给第2号装置;

(此时s1=[r1b]da)

接收到s1后,第2号装置检查s1是否为零元,若是,则第2号装置报错,中止计算或两个装置重新计算,否则(s1不为零元),第2号装置计算s2=[r2]s1+[-h]pa2;

(此时s2=[(r2r1)b]da+[-c-1h]da2)

第2号装置将s2发送给第1号装置;

接收到s2后,第1号装置检查s2是否为零元,若s2为零元,则第1号装置报错,中止计算或两个装置重新计算,否则(s2不为零元),第1号装置计算s=[c]s2+[-h]da1;

(此时s=[(r1r2)bc-h]da)

则(h,s)为生成的针对消息m的数字签名。

(可选地,第1号装置或其他装置可以利用用户的身份标识ida、消息m,验证(h,s)作为消息m的数字签名的有效性,但这不是必须的)

对于以上所述方案三确定的方法,(初始化阶段)将用户的身份标识ida所对应的sm9标识私钥da分成(秘密份额)da1、da2的方法包括:

知道da的装置在[1,n-1]中随机选择两个整数c1、c2且(c1+c2)modn≠0,然后计算da1=[c1(c1+c2)-1]da,da2=[c2(c1+c2)-1]da,其中(c1+c2)-1是(c1+c2)的模n乘法逆,则da1、da2为所求;

或者,知道da的装置在[2,n-1]中随机选择一个整数t,然后计算da1=[t]da,da2=da-da1,则da1、da2为所求;

或者,知道da的装置在[1,n-1]中随机选择一个整数t,然后计算da1=[t]p1,da2=da-da1,其中p1是sm9双线性映射中的群g1的生成元;若da2不是零元,则da1、da2为所求,若da2是零元,则重新选择t,重新计算da1、da2,直到da2不是零元;

所述知道da的装置是第1号装置、第2号装置中的一个装置,或者两个装置之外的一个装置(比如标识私钥生成系统,或其他密钥服务系统)。

对于以上所述方案三确定的方法,两个装置计算得到w=gb^(r1r2)的方式同方案一。

对于以上方案一、二、三,可构建相应的sm9数字签名协同生成系统,系统包括两个装置,两个装置按前述具有乘积r参数的sm9数字签名协同生成方法的方案一或方案二或方案三生成针对消息的数字签名。

从以上描述可以看到,通过本发明的方法和系统,当需要使用用户标识私钥da对消息进行数字签名时,两个装置可以通过交互协同生成针对消息的数字签名,且协同计算过程采用的是乘积r参数,从而具有较高的安全性。

具体实施方式

下面结合实施例对本发明作进一步的描述。以下实施例仅是本发明列举的几个可能的实施例,不代表全部可能的实施例,不作为对本发明的限定。

实施例1、

此实施例涉及两个分别标号为第1号和第2号的装置。

在初始化阶段,知道da的装置在[1,n-1]中随机选取一个整数c、一个整数b,计算pa=[c-1]da,pb=[b]da,gb=g^(bc);c作为秘密由第1号装置保存,pa作为秘密由第2号装置保存;将b、da销毁;pb和gb由需要使用的装置使用。

这里知道da的装置是第1号、第2号两个装置中的一个装置,或者是两个装置之外的一个装置(如标识私钥生成系统、其他密钥服务系统)。

当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按前述sm9数字签名协同生成方法的方案一生成针对消息m的数字签名。

实施例2、

此实施例涉及两个分别标号为第1号和第2号的装置。

在初始化阶段,知道da的装置在[1,n-1]中随机选取一个整数c、一个整数b,计算pa=[c-1]da,pb=[b]da,gb=g^b;pa作为秘密由第1号装置保存,c作为秘密由第2号装置保存;将b、da销毁;pb和gb由需要使用的装置使用。

这里知道da的装置是第1号、第2号两个装置中的一个装置,或者是两个装置之外的一个装置(如标识私钥生成系统、其他密钥服务系统)。

当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按前述sm9数字签名协同生成方法的方案二生成针对消息m的数字签名。

实施例3、

此实施例涉及两个分别标号为第1号和第2号的装置。

在初始化阶段,知道da的装置在[1,n-1]中随机选取一个整数c、一个整数b,计算pb=[c-1b]da,gb=g^b;

之后,在[1,n-1]中随机选择两个整数c1、c2且(c1+c2)modn≠0,然后计算da1=[c1(c1+c2)-1]da,da2=[c2(c1+c2)-1]da,其中(c1+c2)-1是(c1+c2)的模n乘法逆;

或者,知道da的装置在[2,n-1]中随机选择一个整数t,然后计算da1=[t]da,da2=da-da1;

或者,知道da的装置在[1,n-1]中随机选择一个整数t,然后计算da1=[t]p1,da2=da-da1,其中p1是sm9双线性映射中的群g1的生成元;若da2是零元,则重新选择t,重新计算da1、da2,直到da2不是零元;

计算得到da1、da2后,计算pa2=[c-1]da2;

然后将c、da1作为秘密由第1号装置保存,将pa2作为秘密由第2号装置保存;将b、da、da2销毁;pb和gb由需要使用的装置使用。

这里知道da的装置是第1号、第2号两个装置中的一个装置,或者是两个装置之外的一个装置(如标识私钥生成系统、密钥服务系统)。

当需要使用用户的sm9标识私钥da针对消息m进行数字签名时,两个装置按前述sm9数字签名协同生成方法的方案三生成针对消息m的数字签名。

依据本发明的方法可以构建相应的sm9数字签名协同生成系统,系统包括两个装置,其中一个被标号为第1号装置,另一个被标号为第2号装置,这两个装置可以都是提供密码服务的密码服务器,或者两个装置中的一个装置是用户装置,另一个是提供密码服务的密码服务器,或者两个装置都是用户装置(比如一个台式机、一个移动终端),两个装置通过实施本发明的sm9数字签名协同生成方法的方案一或方案二或方案三,包括实施前述实施例1-3,通过交互协同生成使用用户的sm9标识私钥da、针对消息的数字签名。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1