SM9数字签名协同生成方法及系统与流程

文档序号:13969112阅读:420来源:国知局

本发明属于信息安全技术领域,特别是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数字签名协同生成方法及系统。

针对本发明的目的,本发明提出的技术方案包括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相加的结果的加法逆元);

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

若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。

本发明的sm9数字签名协同生成方法包括两个方案,具体如下。

方案一、

本发明的sm9数字签名协同生成方法的方案一涉及m个装置,其中m≥2;

m个装置分别标号为第1号到第m号装置;

m个装置分别保存有[1,n-1]区间内的整数秘密c1,c2,…,cm,其中n为sm9密码算法中群g1、g2、gt的阶(为素数),ci是第i号装置保存的秘密,i=1,…,m;

在初始化阶段预先计算得到:

pa=[(c1c2…cm)-1]da,

gc=g^((c1c2…cm)-1),

其中,da是用户的身份标识ida所对应的sm9标识私钥(da是群g1中的元),(c1c2…cm)-1是(c1c2…cm)的模n乘法逆(即(c1c2…cm)modn的模n乘法逆),g=e(p1,ppub),p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,p2为g2中的生成元,参见sm9规范);

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

第1号装置在[1,n-1]区间内随机选择一整数r1,计算g1=gc^r1或者g1=gc^(c1r1);

第1号装置将g1传送给下一个装置即第2号装置;

第i号装置接收到gi-1后,i=2,…,m,在[1,n-1]区间内随机选择一整数ri,计算gi=(gi-1^ci)(gc^ri)或者gi=(gi-1(gc^ri))^ci;

若i=m,则转入计算h,否则,第i号装置将gi传送给下一装置即第i+1号装置,直到第m号装置完成gm的计算;

(各装置计算gi所采用的计算式是独立的,不必相同)

第m号装置取w=gm;

m个装置中的一个装置(通常是第1号或第m号装置):

计算h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示将w转化成字串后与m的字串合并,n为sm9密码算法中群g1、g2、gt的阶;

检查w与g^h是否相等,若w=g^h,则重新进行g1,…,gm的计算,直到w≠g^h;

之后,第1号装置按如下计算s1:

若第1号装置之前计算g1采用的公式是g1=gc^r1,则:

s1=[r1-c1h]pa;

若第1号装置之前计算g1采用的公式是g1=gc^(c1r1),则:

s1=[c1r1-c1h]pa;

(此时的r1与计算g1时的r1相同)

第1号装置将s1发送给下一个装置即第2号装置;

第i号装置接收到si-1后,i=2,…,m,按如下计算si:

若第i号装置之前计算gi采用的公式是gi=(gi-1^ci)(gc^ri),则:

si=[ci]si-1+[ri]pa;

若第1号装置之前计算gi采用的公式是gi=(gi-1(gc^ri))^ci,则:

si=[ci](si-1+[ri]pa);

(此时的ri与计算gi时的ri相同)

若i=m,则取s=sm,(h,s)即为生成的针对消息m的数字签名,否则,第i号装置将si传送给下一装置即第i+1号装置,直到第m号装置完成sm的计算。

对于以上方案一,在初始化阶段,m个装置获得秘密c1,…,cm,及计算得到pa、gc的一种方式如下:

预先知道da的装置(可以是m个装置中的一个装置或m个装置之外的一个装置)在[1,n-1]区间内随机选择m个整数c1,…,cm,计算:

pa=[(c1c2…cm)-1]da,gc=g^((c1c2…cm)-1),其中g=e(p1,ppub);

然后将da销毁,将pa、gc、ci分发给第i号装置,i=1,…,m(也许包括自己)。

对于以上方案一,若da是第1号装置预先知道的,则在初始化阶段,m个装置获得秘密c1,…,cm,及计算得到pa、gc的另一种方式如下:

第1号装置在[1,n-1]区间内随机选择一个整数c1,或者在[1,n-1]区间内固定选取一个其他装置不知的整数c1(即对不同的da固定选取c1的值),计算q1=[(c1)-1]da,u1=g^((c1)-1),其中g=e(p1,ppub),然后将q1、u1发送给下一个装置即第2号装置;

第i号装置接收到qi-1、ui-1后,i=2,…,m,在[1,n-1]区间内随机选择一个整数ci,或者在[1,n-1]区间内固定选取一个其他装置不知的整数ci(即对不同的da固定选取ci的值),计算qi=[(ci)-1]qi-1,ui=ui-1^((ci)-1);

若i=m,则取pa=qm,gc=um,否则,第i号装置将发送给下一个装置即第i+1号装置,直到完成qm、um计算;

最后,第m号装置将pa、gc分发给其他m-1个装置,第1号装置将da销毁。

实际上,计算pa、gc中的装置顺序是不重要的;若是第i号装置预先知道da,可以采用类似的传递方式计算。

对于以上方案一,若用户的sm9标识私钥da同时用于数据解密,则当数据解密过程中需要计算e(da,v)时,其中v是群g2中的一个元,所述m个装置按如下方式进行e(da,v)的协同计算:

第1号装置计算v1=e(pa,v)^c1,将v1发送给下一个装置即第2号装置;

第i号装置接收vi-1到后,i=2,…,m,计算vi=vi-1^ci;

若i=m,则vm即为e(da,v),否则,第i号装置将vi发送给下一个装置即第i+1号装置,直到i=m。

方案二、

本发明的sm9数字签名协同生成方法的方案二同样涉及m个装置,其中m≥2;

m个装置分别标号为第1号到第m号装置;

m个装置分别保存有或者通过保存的秘密导出有[1,n-1]区间内的整数秘密c1,c2,…,cm,其中,n为sm9密码算法中群g1、g2、gt的阶(为素数),ci是第i号装置保存的或通过保存的秘密导出的秘密,i=1,…,m,且(c1+c2+…+cm)modn≠0;

在初始化阶段预先计算得到:

pa=[(c1+c2+…+cm)-1]da,

gc=g^((c1+c2+…+cm)-1),

其中,da是用户的身份标识ida所对应的sm9标识私钥(da是群g1中的元),(c1+c2+…+cm)-1是(c1+c2+…+cm)的模n乘法逆(即(c1+c2+…+cm)modn的模n乘法逆),g=e(p1,ppub),p1为g1中的生成元,ppub为主公钥(即ppub=[s]p2,s为主私钥或主密钥,参见sm9规范);

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

第i号装置在[1,n-1]区间内随机选择一整数ri,计算gi=gc^ri,

i=1,…,m;

m个装置中的一个装置(可以是其中任一个装置):

计算w=g1g2…gm,h=h2(m||w,n),其中h2为sm9中规定的散列函数,m||w表示将w转化成字串后与m的字串合并,n为sm9密码算法中群g1、g2、gt的阶;

检查w与g^h是否相等,若w=g^h,则重新进行g1,…,gm的计算,直到w≠g^h;

之后,第i号装置计算si=[(ri-cih)]pa,i=1,…,m;

(此时的ri与计算gi时的ri相同)

之后,m个装置中的一个装置计算s=s1+s2+…+sm;

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

对于以上方案二,在初始化阶段,m个装置获得秘密c1,…,cm,及计算得到pa、gc的一种方式如下:

预先知道da的装置(可以是m个装置中的一个装置或m个装置之外的一个装置)在[1,n-1]区间内随机选择m个整数c1,…,cm,且使得

(c1+c2+…+cm)modn≠0,计算:

pa=[(c1+c2+…+cm)-1]da,gc=g^((c1+c2+…+cm)-1),其中g=e(p1,ppub);

然后将da销毁,将pa、gc、ci分发给第i号装置,i=1,…,m(也许包括自己)。

对于以上方案二,若用户的sm9标识私钥da同时用于数据解密,则当数据解密过程中需要计算e(da,v)时,其中v是群g2中的一个元,所述m个装置按如下方式进行e(da,v)的协同计算:

第i号装置计算vi=e(pa,v)^ci,i=2,…,m;

一个装置计算v=v1v2…vm,则v=e(da,v)。

方案二的变形方案、

针对以上所述sm9数字签名协同生成方法的方案二的一种变形如下:

在初始化阶段,预先知道da的装置(可以是m个装置中的一个装置或m个装置之外的一个装置)在[1,n-1]区间内随机选择一个整数c和m个整数b1,b2,…,bm,且使得(b1+b2+…+bm)modn=1,计算:

pa=[c-1]da,gc=g^(c-1),其中g=e(p1,ppub);

di=[bi]da,i=1,…,m;

然后将da,c,b1,…,bm销毁,将pa、gc、di分发给第i号装置,i=1,…,m(也许包括自己);

当需要生成使用用户的sm9标识私钥da针对消息m的数字签名时,m个装置,第i号装置按如下方式计算si:

si=[ri]pa+[-h]di,i=1,…,m;

其他计算、操作不变,包括计算协同计算w以及计算h、s的方式不变。

门限方案、

在以上方案二的基础上可以得出一种sm9数字签名门限生成方法,所述sm9数字签名门限生成方法包括k个装置,k个装置采用(m,k)门限秘密共享的方式进行数字签名的协同生成,k>m≥2;

在初始化阶段,预先知道da的装置(k个装置中的一个装置或k个装置之外的一个装置),在[1,n-1]区间内随机选择一个整数c,然后按门限秘密共享方式将c分割为k份秘密份额,计算pa=[c-1]da,gc=g^(c-1),其中g=e(p1,ppub),然后将da销毁,将pa、gc以及k份门限秘密份额分别分发给k个装置(可能包含自己);

当需要使用用户的sm9标识私钥生成针对消息m的数字签名时,k个装置中的m个装置形成一个组合,组合中的m个装置分别被标号为第1号到第m号装置,组合中的每个装置分别利用其门限秘密并依据当前组合,计算得到(导出)应用前述sm9数字签名协同生成方法的方案二所需的秘密份额(即c1,…,cm),然后m个装置应用前述sm9数字签名协同生成方法的方案二,生成针对消息m的数字签名。

(m个装置组合中的第i号装置所使用的秘密ci,i=1,..,m,是第i号装置依据其针对c的门限秘密份额以及当前生成数字签名的m个装置组合计算得到或导出的秘密,比如,对于针对c采用shamir门限秘密共享,若模n上的m-1次多项为f(x),则k个装置中的第j个装置的门限秘密为yj=f(j),j=1,2,…,k;当第j个装置与其他m-1个装置组合进行数字签名时,第j个装置对应的秘密为(ajyj)modn,其中aj是依据m个装置组合计算得到的参数,若k个装置中的第j个装置是作为生成数字签名的m个装置组合中的第i号装置,则ci=(ajyj)modn)。

在以上sm9数字签名协同生成方法包括方案一、方案二以及方案二的变形方案的基础上,可构建sm9数字签名协同生成系统,系统包括m个装置,所述m个装置按所述sm9数字签名协同生成方法生成针对消息的数字签名。

在以上sm9数字签名门限生成方法的基础上,可构建sm9数字签名门限生成系统,系统包括k个装置,k>m≥2,所述k个装置按所述sm9数字签名门限生成方法生成针对消息的数字签名。

从以上描述可以看到,通过本发明的方法,当需要使用用户标识私钥da对消息进行数字签名时,m个装置可以协同生成针对消息的数字签名,而且本发明方法也支持数字签名的门限生成,即由k个装置中的m个装置通过门限秘密共享(门限密码运算)生成针对消息的数字签名。

附图说明

无。

具体实施方式

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

实施例1、

此实施例包括m个分别标号为第1号到第m号的装置,m个装置中的一个装置或m个装置之外的一个装置预先知道da,在初始化阶段,m个装置通过如下获得秘密c1,…,cm,及计算得到pa、gc:

预先知道da的装置在[1,n-1]区间内随机选择m个整数c1,…,cm,计算:

pa=[(c1c2…cm)-1]da,gc=g^((c1c2…cm)-1),其中g=e(p1,ppub);

然后将da销毁,将pa、gc、ci分发给第i号装置,i=1,…,m(也许包括自己);

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

实施例2、

此实施例包括m个分别标号为第1号到第m号的装置,其中第1号装置预先知道da是的,在初始化阶段,m个装置按如下方式获得秘密c1,…,cm,及计算得到pa、gc:

第1号装置在[1,n-1]区间内随机选择一个整数c1,计算q1=[(c1)-1]da,u1=g^((c1)-1),其中g=e(p1,ppub),然后将q1、u1发送给下一个装置即第2号装置;

第i号装置接收到qi-1、ui-1后,i=2,…,m,在[1,n-1]区间内随机选择一个整数ci,计算qi=[(ci)-1]qi-1,ui=ui-1^((ci)-1);

若i=m,则取pa=qm,gc=um,否则,第i号装置将发送给下一个装置即第i+1号装置,直到完成qm、um计算;

第m号装置将pa、gc分发给其他m-1个装置,第1号装置将da销毁;

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

实施例3、

此实施例包括m个分别标号为第1号到第m号的装置,其中第1号装置是用户装置,第1号装置预先用户的sm9标识私钥da,余下的m-1个装置是提供密码服务的密码服务器,在初始化阶段,m个装置按如下方式获得秘密c1,…,cm,及计算得到pa、gc:

第1号装置在[1,n-1]区间内随机选择一个整数c1,计算q1=[(c1)-1]da,u1=g^((c1)-1),其中g=e(p1,ppub),然后将q1、u1发送给下一个装置即第2号装置;

第i号装置接收到qi-1、ui-1后,i=2,…,m,在[1,n-1]区间内固定选取一个其他装置不知的整数ci(即对不同的da固定选取ci的值),计算qi=[(ci)-1]qi-1,ui=ui-1^((ci)-1);

若i=m,则取pa=qm,gc=um,否则,第i号装置将发送给下一个装置即第i+1号装置,直到完成qm、um计算;

第m号装置将pa、gc分发给m个装置,第1号装置将da销毁;

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

实施例4、

此实施例包括m个分别标号为第1号到第m号的装置,m个装置中的一个装置或m个装置之外的一个装置预先知道da,在初始化阶段,m个装置通过如下获得秘密c1,…,cm,及计算得到pa、gc:

预先知道da的装置在[1,n-1]区间内随机选择m个整数c1,…,cm,且使得(c1+c2+…+cm)modn≠0,计算:

pa=[(c1+c2+…+cm)-1]da,gc=g^((c1+c2+…+cm)-1),其中g=e(p1,ppub);

然后将da销毁,将pa、gc、ci分发给第i号装置,i=1,…,m(也许包括自己);

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

实施例5、

此实施例包括m个分别标号为第1号到第m号的装置,m个装置中的一个装置或m个装置之外的一个装置预先知道da;

在初始化阶段,预先知道da的装置(可以是m个装置中的一个装置或m个装置之外的一个装置)在[1,n-1]区间内随机选择一个整数c和m个整数b1,…,bm,且使得(b1+b2+…+bm)modn=1,计算:

pa=[c-1]da,gc=g^(c-1),其中g=e(p1,ppub);

di=[bi]da,i=1,…,m;

然后将da,c,b1,…,bm销毁,将pa、gc、di分发给第i号装置,i=1,…,m(也许包括自己);

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

实施例6、

此实施例包括k个装置,k个装置中的一个装置或之外的一个装置预先知道用户的sm9标识私钥da,k个装置采用(m,k)门限秘密共享的方式进行数字签名的协同生成,k>m≥2;在初始化阶段预先知道da的装置在k个装置中按门限秘密共享方案共享一个秘密,以及计算得到pa、gc:

预先知道da的装置在[1,n-1]区间内随机选择一个整数c,然后将c按门限秘密共享方式分割为k份秘密份额;计算pa=[c-1]da,gc=g^(c-1),其中g=e(p1,ppub);然后将da销毁,将pa、gc以及k份门限秘密份额分别分发给k个装置;

当需要使用用户的sm9标识私钥生成针对消息m的数字签名时,k个装置中的m个装置形成一个组合,采用前述sm9数字签名门限生成方法生成针对消息的数字签名。

依据本发明的方法可以构建相应的sm9数字签名协同生成系统。

若不采用门限秘密共享的方案,则系统包括m个装置,m≥2,这m个装置都是提供密码服务的密码服务器,或者m个装置中的一个装置是用户装置,其余的m-1个装置是提供密码服务的密码服务器,当需要使用用户的sm9标识私钥针对消息进行数字签名时,m个装置通过实施本发明的sm9数字签名协同生成方法的方案一或方案二或方案二的变形方案,包括实施前述实施例1-5,协同生成使用用户的sm9标识私钥、针对消息的数字签名。

若采用(m,k)门限秘密共享的方案,k>m≥2,则系统包括k个装置,这k个装置都是提供密码服务的密码服务器,或者k个装置中的一个装置是用户装置,其余的k-1个装置是提供密码服务的密码服务器,当需要使用用户的sm9标识私钥针对消息进行数字签名时,此k个装置中的m个装置利用门限秘密共享份额,实施本发明的sm9数字签名门限生成方法,包括实施前述实施例6,协同生成使用用户的sm9标识私钥、针对消息的数字签名。

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

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