基于多装置协同的SM2数字签名生成方法及系统与流程

文档序号:12691902阅读:439来源:国知局

本发明属于信息安全技术领域,特别是基于多装置协同的SM2数字签名生成方法及系统。



背景技术:

在公开密钥密码体制中,为了保障用户私钥的安全性,用户的私钥通常是存储在专门的密码硬件中使用,如存储在USB Key、SmartCard中使用,且私钥不能从密码硬件中导出。但是,在有些情况下,比如,由于成本的原因,或者由于没有合适的密码硬件(如移动通信终端),使得用户无法依赖密码硬件来存储私钥、以及使用私钥进行密码运算。对于这种情况,目前最常用的方法是使用纯软件的密码模块,并将用户私钥保存在用户计算装置本地的永久存储介质中(如个人电脑的磁盘、移动通信终端内的电子盘),并通过PIN(Personal Identification Number)码对私钥进行保护。当需要使用用户私钥时,软件密码模块从用户计算装置的永久存储介质读取用户私钥(必要时要求用户输入PIN码),然后进行密码运算。这种采用纯软件密码模、将用户私钥保存在用户计算装置本地的方式存在用户私钥泄露的风险,比如,攻击者通过木马窃取保存在用户计算装置中的用户私钥,破解用户保护私钥的PIN码,从而获得用户私钥;而且这种采用纯软件密码模块的方式,用户私钥最终需以明文形式导入到内存中使用,这样攻击者有可能通过一定的攻击方式,窃取存放在内存中的用户私钥。如何在不采用密码硬件的情况下,安全存储和使用用户私钥具有现实的需求,对此问题的解决具有很好的实际应用意义。

对此问题常见的解决方案是,将用户私钥通过一定的方式分割成多份,每份称为秘密份额,然后将每份秘密份额存储到不同的计算装置中,尤其是将部分秘密份额存放在安全保护措施到位、安全条件好的专业的密码服务机构的在线密码服务系统中;当密码应用程序、系统需要使用用户私钥进行密码运算时,如进行数字签名或数据解密时,多个计算装置分别使用自己的秘密份额进行密码运算,最后将各装置计算的结果合并,形成最后的、使用用户私钥进行密码运算的结果(数字签名或数据解密的结果)。这里,对用户私钥进行的秘密分割可以是普通秘密分割,也可以是门限秘密分割。

SM2是由国家密码管理局颁布的一种椭圆曲线公钥密码算法(参见《SM2椭圆曲线公钥密码算法》规范,国家密码管理局,2010年12月),基于此算法能实现数字签名、密钥交换及数据加密。但是,由于SM2算法独特的数字签名运算方式,通常的秘密共享(分割)方式及对应的基于秘密共享的密码运算方式,无法适合于使用SM2私钥进行数字签名的情形。



技术实现要素:

本发明的目的是提出在没有密码硬件的情况下也能安全使用用户的SM2私钥进行数字签名的方法。

针对本发明的目的,本发明提出的技术方案是两个基于多装置协同的SM2数字签名生成方法(方案)。

在以下对本发明技术方案的描述中,若P、Q是椭圆曲线点群中的元素(点),则P+Q表示P、Q的点加,[k]P表示k个椭圆曲线点P的点加,即P+P+...+P(共有k个P);省略号“...”,表示多个同样(类型)的数据项或多个同样的运算;c-1表示整数c的模n乘法逆(即c(c)-1mod n=1);多个整数相乘(包括整数符号相乘、常数与整数符号相乘),在不产生二义性的情况下,省略掉乘号“·”,如k1·k2简化为k1k2,3·c,简化位3c;mod n表示模n运算(modulo operation),对应于《SM2椭圆曲线公钥密码算法》规范(国家密码管理局,2010年12月)中的modn;还有,模n运算的算子mod n的优先级是最低的,如a+b mod n等同于(a+b)mod n,a-b mod n等同于(a-b)mod n,ab mod n等同于(ab)mod n。

本发明的方案一具体如下。

生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;

在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:

在区间[1,n-1]中随机选择两个整数b和a,其中n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶(SM2密码运算所使用的椭圆曲线点群是指由基点G生成的循环群;本发明中的b、a不是椭圆曲线方程的参数b、a);

给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是bi,i=1,2,…,m,bi是区间[1,n-1]内的整数(对于普通秘密共享,bi就是秘密份额;对于门限秘密共享,bi是从秘密份额导出的秘密数);

m个装置的秘密份额或者从秘密份额导出的秘密数与b满足关系:

b-1=(b1+b2+…+bm)mod n,其中b-1是b的模n乘法逆(即bb-1mod n=1)(这里b-1是被共享的秘密,对b-1的秘密分割可以是普通秘密分割,也可以是门限秘密分割);

计算c=(1+dA)-1dAb mod n,w=a(dA)-1mod n,其中dA是用户的SM2私钥,(dA)-1是dA的模n乘法逆,(1+dA)-1是(1+dA)的模n乘法逆(即dA(dA)-1mod n=1,(1+dA)-1(1+dA)mod n=1);

计算Gb=[ba]G([b·a]G),其中G是SM2椭圆曲线点群的基点;

将c、w、Gb分发给所有m个装置;

(m个装置都不保存dA、b、a;进行以上初始化操作的可以是一个专门的密钥管理系统,或用户计算装置中的一个密码模块、密钥管理工具)

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

首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);

之后,每个装置计算si=c(wki-bir)mod n,其中i=1,2,…,m,si对应装置i所进行的计算;

最后,m个装置中的一个装置(任一个)计算得到s=(s1+s2+…+sm)mod n;则(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。

在上述数字签名生成过程中,r、e、si,i=1,2,…,m,根据计算的需要在m个装置之间传送(如通过网络传送)。

在以上所述方案中,若参数c仅分发给装置m(其他装置都没有),则以上所述方案作如下相应改变:

在完成Q、r的计算后,装置i,i=1,2,…,m-1,计算si=(wki-bir)mod n,将si发送给装置m(装置1到装置m-1都进行此计算、操作);

装置m计算sm=(wkm-bmr)mod n,然后利用自己计算的sm,以及接收到的s1,s2,…sm-1,计算s=(c(s1+s2+…+sm))mod n,则(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。

对于以上所述方案(包括作了改变的方案),在针对消息M进行数字签名时,m个装置按如下方式,或者按与如下方式等同的方式,通过交互计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点):

m个装置中的每个装置在区间[1,n-1]中随机选择一个整数ki,计算得到Qi=[ki]Gb,其中,i=1,2,…,m,分别表示装置i随机选择的整数ki,所进行的计算及计算得到的Qi

之后,由m个装置中的一个装置(任一个装置)计算Q=Q1+Q2+…+Qm,此时,Q=[k1+k2+…+km]Gb(计算过程中Q1,Q2,…,Qm可在装置间传递);

若进行Q=Q1+Q2+…+Qm计算的是装置j,其中j=1,或2,…,或m,则在完成Q的计算后,装置j检查Q是否是SM2椭圆曲线点群的零元(无穷远点),若是,则装置j重新选择kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,重复此过程,直到Q不是零元;若Q不是零元,则装置j取(x1,y1)=Q,计算r=(e+x1)mod n;

若计算得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),则Q、r的计算完成;否则,装置j重新在区间[1,n-1]中随机选择一个整数kj,然后重新计算Qj、Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,重复此过程,直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);

或者,若r=0或[r]G+Q是SM2椭圆曲线点群的零元(无穷远点),则所有m个装置一起从头重新进行Q、r的计算(即每个装置重新选择ki,计算Qi=[ki]Gb,其中i=1,2,…,m,表示装置i的Qi和ki,其中一个装置重新计算Q=Q1+Q2+…+Qm、重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n),直到r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点);

所述等同的方式,即同样能得到Q=[k1+k2+…+km]Gb、并在Q不是SM2椭圆曲线点群的零元时依据Q计算得到r,且使得r、Q满足r≠0且[r]G+Q不是SM2椭圆曲线点群的零元的方式。

在以上Q、r的计算过程中,若计算Q=Q1+Q2+…+Qm、r=(e+x1)mod n的装置(即前面的所述装置j),在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元(无穷远点),且仅在r=0时重新进行Q、r计算(只要r≠0就不重新进行Q、r计算),则:

根据s1,s2,…,sm计算s的装置(m个装置中的任一个装置),若检查发现(s+r)mod n=0,则放弃计算得到的s,数字签名生成过程中计算Q、r的装置j,其中j=1,或2,…,或m,重新在区间[1,n-1]中随机选择一个整数kj,重新计算Qj,重新计算Q=Q1+Q2+…+Qm,重新判断Q是否是零元,以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s,重复此过程直到最后计算得到的s满足(s+r)mod n≠0;

或者根据s1,s2,…,sm计算s的装置,若检查发现(s+r)mod n=0,则所有m个装置一起从头重新进行Q、r的计算(每个装置重新选择ki、计算Qi=[ki]Gb,其中i=1,2,…,m,分别表示装置i选择的ki和计算的Qi,然后其中的一个装置重新计算Q=Q1+Q2+…+Qm、确定Q是否为零元、以及在Q不是零元时重新计算r=(e+x1)mod n,之后每个装置i重新计算si,i=1,2,…m,然后由一个装置根据s1,s2,…,sm计算s),直到最后计算得到的s满足(s+r)mod n≠0。

对于以上方案一中,用户的公钥仍然是[dA]G,在进行秘密分割前计算得到,并公开发布。

本发明的方案二具体如下。

同样地,生成SM2数字签名时有m个装置参与,其中m大于或等于2;m个装置分别被称为装置1,装置2,…,装置m;

相应地,在生成数字签名前,针对参与数字签名生成的m个装置进行如下初始化操作:

在区间[1,n-1]中随机选择三个整数b、a、h,且h-1ba mod n≠

(dA)-1(1+dA)mod n,其中b、a保密,h不保密(故通常h取1即可),h-1是h的模n乘法逆(即h-1h mod n=1),n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶(本发明中的b、a不是椭圆曲线方程的参数b、a);

给m个装置中的每个装置分配1份秘密份额,其中装置i的秘密份额或者从装置i的秘密份额导出的秘密数是bi,i=1,2,…,m,bi是区间[1,n-1]内的整数(对于普通秘密共享,bi就是秘密份额;对于门限秘密共享,bi是从秘密份额导出的秘密数);

m个装置的秘密份额或者从秘密份额导出的秘密数与b及用户的SM2私钥dA满足关系:

b-1dA mod n=(b1+b2+…+bm)mod n,其中b-1是b的模n乘法逆(即bb-1mod n=1)(这里b-1dA mod n是被共享的秘密,对b-1dA mod n的秘密分割可以是普通秘密分割,也可以是门限秘密分割);

计算c=(1+dA)-1b mod n,w=adA mod n,其中,(1+dA)-1是(1+dA)的模n乘法逆(即dA(dA)-1mod n=1,(1+dA)-1(1+dA)mod n=1);

计算Gb=[h(1+dA)-badA]G,其中G是SM2椭圆曲线点群的基点;

将c、w、h、Gb分发给所有m个装置;

(m个装置都不保存dA、b、a;进行以上初始化操作的可以是一个专门的密钥管理系统,或用户计算装置中的一个密码模块、密钥管理工具)

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

首先,m个装置通过交互,计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),其中ki是计算Q的过程中装置i在区间[1,n-1]中随机选择的一个整数,i=1,2,…,m,x1取自(x1,y1)=Q,e是从用户标识和消息M导出的杂凑值(即散列值)(按SM2算法,e是从用户标识IDA等参数导出的杂凑值ZA同消息M合并后的数据的杂凑值,参见SM2规范);

之后,每个装置计算si=(hki-c(wki+bir))mod n,其中i=1,2,…,m,si对应装置i所进行的计算;

最后,m个装置中的一个装置(任一个)计算得到s=(s1+s2+…+sm)mod n;则(r,s)即为使用用户的SM2私钥dA对消息M的数字签名。

在上述数字签名生成过程中,r、e、si,i=1,2,…,m,根据计算的需要在m个装置之间传送(如通过网络传送)。

在以上方案二中,若针对m个装置的初始化设置是:

在区间[1,n-1]中随机选择的三个整数b、a和h,其中b、a保密,h不保密,且h-1ba mod n≠(dA)-1(1+dA)mod n;

m个装置的秘密份额或者从秘密份额导出的秘密数与b及用户的SM2私钥dA满足关系:

b-1(1+dA)-1mod n=(b1+b2+…+bm)mod n(这里b-1(1+dA)-1mod n是被共享的秘密,对b-1(1+dA)-1mod n的秘密分割可以是普通秘密分割,也可以是门限秘密分割);

计算c=dAb mod n,w=a(1+dA)-1mod n;

计算Gb=[h(1+dA)-badA]G;

将h、c、w、Gb分发给所有m个装置;

则当需要使用用户的SM2私钥dA针对消息M进行数字签名时,所述m个装置首先按与所述SM2数字签名生成方法相同的交互方式和计算方式,计算得到Q、r,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点),之后,每个装置同样计算si=(hki-c(wki+bir))mod n,其中i=1,2,…,m,si对应装置i所进行的计算,最后,m个装置中的一个装置同样计算s=(s1+s2+…+sm)mod n,生成针对消息M的数字签名(r,s)。

对于以上所述方案二(包括作了改变的方案),在针对消息M进行数字签名时,m个装置按与方案一同样的方式,通过交互计算得到Q=[k1+k2+…+km]Gb,r=(e+x1)mod n,且得到的r、Q满足:r≠0且[r]G+Q不是SM2椭圆曲线点群的零元(无穷远点)。

对于以上所述方案二,用户的公钥仍然是[dA]G,在进行秘密分割前计算得到,并公开发布。

从以上发明内容并结合实施例可以看到,基于本发明的SM2数字签名生成方法,当用户没有硬件密码装置存放SM2私钥时,可以将与用户的私钥dA相关的秘密数据,分别存放在不同装置中,如用户的计算装置(如个人电脑、移动终端)、一个或多个密码服务系统的密码服务器中;在需要使用用户的SM2私钥对消息进行数字签名时,多个装置使用各自拥有的秘密数据(秘密份额或从秘密份额导出的数据)进行运算,通过交互生成最终的数字签名,而且在交互过程中,每个装置都不泄露自己的秘密数据;除非攻击者能同时获得分布在不同装置中的足够数量的秘密份额,否则,攻击者无法恢复用户私钥;由于攻击者要同时获得分布在不同装置中的、足够数量的秘密份额的可能性非常低,或者几乎不可能,比如攻击者很难获得专业密码服务机构的密码服务系统中的秘密份额,这就大大提高了在没有密码硬件的情况下,用户SM2私钥使用的安全性。

与现有的技术方案相比,本发明的方法简单,不但适合于两方共享秘密,而且适合于多装置共享秘密,不但适合于普通的秘密分割(共享),而且适合于门限秘密分割(共享)。本发明的巧妙之处在于,引入了两个与用户SM2私钥无关的随机数b、a!

具体实施方式

下面结合实施例对本发明作进一步的描述。以下实施例只表示本发明几种可能的实施方式,不是全部可能的实施方式,不作为对本发明的限定。

对于本发明的方案一,要分割、共享的秘密是[1,n-1]中随机选择的一个整数b的模n乘法逆b-1。对b-1的秘密分割有普通秘密分割和门限秘密共享分割。若是普通秘密分割,则很简单。若有m个装置,则在区间[1,n-1]中随机选择m-1个整数,b1,b2,…,bm-1,计算bm=(b-1-(b1+b2+…+bm-1))mod n,若bm≠0,则b1,b2,…,bm即是所需的秘密分割,否则,重新选择b1,b2,…,bm-1,直到bm≠0。

实际上,对于普通秘密分割,还有一种选择b并实现b-1秘密分割的方法,这就是在区间[1,n-1]中随机选择m个整数b1,b2,…,bm,若(b1+b2+,…,+bm)mod n≠0,则令b=((b1+b2+,…,+bm)mod n)-1(即(b1+b2+,…,+bm)mod n的模n乘法逆),b1,b2,…,bm就是b-1的秘密分割,而b相当于在区间[1,n-1]中随机选择的整数,否则,重新选择b1,b2,…,bm,直到(b1+b2+,…,+bm)mod n≠0,然后计算b。

若采用门限秘密共享分割,则可以采用Shamir或拉格朗日秘密共享方案。此时,本发明中进行数字签名操作处理的m个装置,仅是全部p个装置中的m个(p≥m),即采用(m,p)的门限方案;初始化时,按门限秘密共享算法,将秘密b-1在所有p个装置中分享;而在应用本发明的方法时,m个装置的秘密数据b1,b2,…,bm,是参与数字签名生成的m个装置中的每个装置依据自身的门限秘密(秘密份额),针对此时的m个装置计算得到的秘密数(若p>m,那么,针对不同的m个装置,每个装置依据门限秘密份额进行恢复秘密的操作时,每个装置依据秘密份额计算得到的秘密数是不同的,它取决于恢复私钥时参与的装置是哪m个,对于熟悉Shamir或拉格朗日秘密共享方案的人而言,这些是很容易理解的)。

以上秘密分割方法,只是对b-1分割的几种可能方案,不是全部的方案。

对于本发明的方案二,要分割、共享的秘密是b-1dA mod n或b-1(1+dA)-1mod n,对b-1dA mod n或b-1(1+dA)-1mod n进行普通秘密分割或门限秘密分割的方法与方案一中对b-1进行秘密分割的方法一样或类似,仅仅是秘密不同而已。

以下是本发明的一些实施例,这些实施例同时适用于本发明的方案一、方案二。

实施例1、

在此实施例中,m=2,采用普通秘密共享方案,用户的计算装置(如个人电脑、移动通信终端)是本发明的SM2数字签名生成方法中的两个装置中的一个(装置1或装置2),本发明方法中的另一个装置是密码服务系统中的密码服务器(作为装置2或装置1);用户的计算装置和密码服务器都不保存用户的SM2私钥dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的秘密份额b1、b2,一份保存在用户计算装置中,另一份保存在密码服务器中;当用户计算装置中的密码应用程序或系统要使用用户的SM2私钥dA对消息进行签名时,用户计算装置(实际上通常是用户计算装置中的密码模块)与密码服务系统的密码服务器交互,应用本发明的方法、使用秘密份额b1、b2生成消息的数字签名。

实施例2、

在此实施例中,m=2,采用普通秘密共享,两个装置中一个装置是一个机构的密码服务系统中的密码服务器,另一个装置是另一个机构的密码服务系统中的密码服务器;用户计算装置以及两个机构的密码服务器都不保存用户的SM2私钥dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的两份秘密份额b1、b2,分别保存在两个机构的密码服务系统的密码服务器中;当用户计算装置中的密码应用程序或系统要使用用户的SM2私钥dA对消息进行签名时,用户计算装置(实际上通常是用户计算装置中的密码模块)将请求发送到一个密码服务系统,之后两个密码服务系统的密码服务器通过交互,应用本发明的方法、使用秘密份额b1、b2生成消息的数字签名,然后将生成的签名被返回给用户计算装置;在数字签名生成过程中,分属两个机构的密码服务系统中的密码服务器中的任一个可以都作为本发明的数字签名生成方法中的装置1,而另一个作为装置2。

实施例3、

在此实施例中,m=3,采用普通秘密共享,其中一个装置是一个机构的密码服务系统中的密码服务器A,另一个装置是另一个机构的密码服务系统中的密码服务器B,还有一个装置是用户的计算装置(如个人电脑、移动终端);密码服务器A、B和用户计算装置中的任一个可作为装置1、装置2或3;用户计算装置以及两个机构的密码服务系统的密码服务器都不保存用户的SM2私钥dA;b-1或b-1dA mod n或b-1(1+dA)-1mod n的3份秘密份额b1、b2、b3,被分别保存在密码服务器A、B,以及用户计算装置中;当用户计算装置中的密码应用程序要使用用户的SM2私钥dA对消息进行签名时,用户计算装置、密码服务器A、密码服务器B通过交互,应用本发明的方法、使用秘密份额b1、b2、b3生成消息的数字签名。

实施例4、

在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。

三个装置中的一个是一个机构的密码服务系统中的密码服务器,另两个装置,一个是用户的个人电脑,另一个是用户的移动终端;b-1或b-1dA mod n或b-1(1+dA)-1mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器、用户的个人电脑、用户的移动终端;在应用本发明的方法时,假设本发明中的装置1始终是密码服务器,而本发明中的装置2或者是用户的个人电脑,或者是用户的移动终端,取决于用户的哪个装置参与数字签名的生成过程。

当用户的个人电脑要使用用户的SM2私钥进行数字签名时,密码服务器、用户的个人电脑(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的b1、b2(或者b1、b2已预先算好、保存,下同),然后使用b1、b2生成消息的数字签名;

当用户的移动终端要使用用户的SM2私钥进行数字签名时,密码服务器、用户的移动终端(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的b1、b2,使用b1、b2生成消息的数字签名(对于门限秘密共享,恢复秘密时的参与方不同,由门限秘密算出的相应的秘密数是不同的)。

实施例5、

在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。

三个装置中的一个是一个机构的密码服务系统的密码服务器A,一个是另一个机构的密码服务系统的密码服务器B,再有一个是用户的计算装置(如个人电脑、移动终端);b-1或b-1dA mod n或b-1(1+dA)-1mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B和用户的计算装置;在应用本发明的方法时,假设本发明中的装置1始终是用户的计算装置,而本发明中的装置2或者是密码服务器A,或者是密码服务器B,取决于哪个密码服务器参与数字签名的生成。

当用户的计算装置要使用用户的SM2私钥进行数字签名时,用户计算装置先尝试与密码服务器A建立连接,若无法与密码服务器A建立连接,则尝试与密码服务器B建立连接。若用户计算装置与密码服务器A成功建立连接,则密码服务器A、用户的计算装置(中的密码模块)根据它们各自拥有的门限秘密(秘密份额)及门限算法,分别算出各自此时的b1、b2,然后使用b1、b2生成消息的数字签名;若用户计算装置与密码服务器A无法建立连接,但之后与密码服务器B成功建立连接,则密码服务器B、用户的计算装置(中的密码模块)根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的b1、b2,使用b1、b2生成消息的数字签名。

实施例6、

在此实施例中,采用(2,3)的门限秘密共享,共三个装置,三个装置中的任两个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=2。

三个装置分别是分属三个机构的密码服务系统的密码服务器A、密码服务器B、密码服务器C;b-1或b-1dA mod n或b-1(1+dA)-1mod n的按门限秘密共享算法生成的3份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B、密码服务器C;在应用本发明的方法时,参与数字签名生成的两个服务器分别对应本发明中的装置1、装置2。

当用户的计算装置要使用用户的SM2私钥进行数字签名时,三个密码服务器中的两个(至于如何选择其中的两个,取决于实施者的方案),根据它们各自拥有的门限秘密及门限算法,分别算出各自此时的b1、b2,然后使用b1、b2生成消息的数字签名。

实施例7、

在此实施例中,采用(3,4)的门限秘密共享,共四个装置,其中任意三个装置可以使用本发明的方法进行数字签名的生成,故应用本发明的方法进行数字签名生成时,对应本发明的m=3。

四个装置中的两个是属于同一个机构的密码服务系统的密码服务器A、B,或者是分属不同机构的密码服务系统的密码服务器A、B,四个装置中的另两个装置,一个是用户的个人电脑,一个是用户的移动终端,用户的两个装置只有一个参与数字签名的生成。b-1或b-1dA mod n或b-1(1+dA)-1mod n的按门限秘密共享算法生成的4份秘密份额(门限秘密)被分别分配给了密码服务器A、密码服务器B、以及用户的个人电脑、移动终端。假定密码服务器A、B是本发明中的装置1、装置2,而生成数字签名时,参与数字签名生成过程的用户装置假定是本发明的装置3。

当用户的一个装置,如个人电脑或移动终端,需要使用用户的SM2私钥生成针对消息的数字签名时,密码服务器A、密码服务器B、用户的装置各自根据自己拥有的门限秘密和门限算法,分别算出针对此时三个装置的秘密数b1、b2、b3,然后通过交互应用本发明方法、使用各自的秘密数b1、b2、b3生成数字签名。

基于本发明的方法,很容易构建实施本发明方法的系统。

基于本发明的SM2数字签名生成方法构建的SM2数字签名生成系统包括m个装置,其中m大于或等于2;m个装置中的每个装置是一个密码服务器或一个用户计算装置;m个装置按本发明的数字签名生成方法,生成使用用户的SM2私钥dA针对消息M的数字签名。

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

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