支持混合秘密共享的SM2数字签名协同生成方法及系统与流程

文档序号:18406100发布日期:2019-08-10 00:24阅读:285来源:国知局

本发明属于信息安全技术领域,特别是一种支持混合秘密共享的sm2数字签名协同生成方法及系统。



背景技术:

sm2是由国家密码管理局颁布的一种椭圆曲线公钥密码算法(参见《sm2椭圆曲线公钥密码算法》规范,国家密码管理局,2010年12月),基于此算法能实现数字签名、密钥交换及数据加密。但是,由于sm2算法独特的数字签名运算方式,通常的秘密共享(分割)方式及对应的通常的基于秘密共享的密码运算方式无法适合于使用sm2私钥进行数字签名的情形。针对此问题,本专利申请的发明人曾提出了相应的基于秘密共享的数字签名生成方案,但有关方案仅支持求和秘密共享(秘密份额的和构成了秘密)或乘积秘密共享(秘密份额的乘积构成了秘密),不支持求和与乘积混合的秘密共享方式(混合秘密共享),这就是本专利申请的发明要解决的问题。



技术实现要素:

本发明的目的是提出一种支持求和与乘积混合的秘密共享的sm2数字签名协同生成方法及系统。

针对本发明的目的,本发明提出的技术方案包括支持混合秘密共享的sm2数字签名协同生成方法及系统。

在以下对本发明技术方案的描述中,若p、q是椭圆曲线点群中的元素(点),则p+q表示p、q的点加,[k]p表示k个椭圆曲线点p的点加,即p+p+...+p(共有k个p,即点p与整数k的数乘,若k为负数则表示|k|个p点相加后的点的逆元);省略号“...”,表示多个同样(类型)的数据项或多个同样的运算([k]p是《sm2椭圆曲线公钥密码算法》中约定的点的数乘表示);

c-1表示整数c的模n乘法逆(即cc-1modn=1),如无特别说明,本专利申请的整数逆,都是指模n乘法逆;多个整数相乘(包括整数符号相乘、常数与整数符号相乘),在不产生二义性的情况下,省略掉乘号“·”,如k1·k2简化为k1k2,3·c,简化位3c;

modn表示模n运算(modulooperation),对应于《sm2椭圆曲线公钥密码算法》规范中的modn;还有,模n运算的算子modn的优先级是最低的,如a+bmodn等同于(a+b)modn,a-bmodn等同于(a-b)modn,abmodn等同于(ab)modn。

本发明的支持混合秘密共享的sm2数字签名协同生成方法,具体如下。

所述方法涉及m个装置,其中m≥2;

m个装置分别标号为第1号到第m号装置;m个装置分别保存有在[1,n-1]区间内随机选择的整数秘密c1,c2,…,cm,其中n为sm2椭圆曲线点群的阶,也是sm2椭圆曲线点群的基点g的阶,ci是第i号装置保存的秘密,i=1,…,m;

在初始化阶段按如下方式计算得到秘密c(在将c1,c2,…,cm分配给m个装置之前或之后,由m个装置中的一个装置或m个装置之外的装置或m个装置完成初始化操作):

第1步:设置t1=c1,进入第2步;

第i步:i=2,…m,计算ti=(ti-1+ci)modn,或ti=(citi-1)modn;

若i=m,则令c=tm,完成c的计算,否则进入第i+1步,直到第m步计算得到tm;

以上计算c的过程中每步独立选择计算公式;每一步的计算公式的选择不依赖其他步的公式的选择,随机选择或者主观任意选择或者依据设计要求选择;

之后,取gb=[(1+da)]g,b=(c-1(1+da)-1)modn,w=1,h=1,

或者,取gb=[(1+da)]g,b=(-c-1da(1+da)-1)modn,w=1,h=0,

或者,取gb=[c-1]g,b=1,w=(c-1(1+da)-1)modn,h=1,

或者,取gb=[-c-1da]g,b=1,w=(-c-1da(1+da)-1)modn,h=0,

其中c-1是c的模n乘法逆,(1+da)-1是(1+da)的模n乘法逆,da是用户的sm2私钥;

完成初始化后,将gb、b、w、h分发给m个装置,m个装置都不保存da、c;

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

第1号装置在[1,n-1]内随机选择一个整数k1,计算q1=[k1]gb,然后将q1传送给第2号装置;

第i号装置,i=2,…,m,在[1,n-1]内随机选择一个整数ki,并按如下方式计算qi:

若计算ti时采用的公式是ti=(ti-1+ci)modn,则qi=qi-1+[ki]gb;

若计算ti时采用的公式是ti=(citi-1)modn,则qi=[ci]qi-1+[ki]gb;

若i=m,则令q=qm,转入后续处理,否则,第i号装置将qi传送给第i+1号装置,直到第m号装置完成qm计算;

m个装置中的一个装置计算r=(e+x1)modn,其中x1取自(x1,y1)=q,e是从用户标识和消息m导出的杂凑值(即散列值)(按sm2算法,e是从用户标识ida等参数导出的杂凑值za同消息m合并后的数据的杂凑值,参见sm2规范);

(这里r是非保密数据,根据需要可在两个装置之间传递)

之后,第1号装置计算s1=(k1+c1br)modn,这里k1与计算q1时的k1相同;

第1号装置将s1传送给第2号装置;

第i号装置,i=2,…,m,按如下方式计算si:

若计算qi采用的公式是qi=qi-1+[ki]gb,则si=(si-1+ki+cibr)modn;

若计算qi采用的公式是qi=[ci]qi-1+[ki]gb,则si=(cisi-1+ki)modn,这里ki与计算qi时的ki相同;

若i=m,则计算得到sm后,转入后续计算,否则,第i号装置将si传送给第i+1号装置,直到第m号装置计算得到sm;

m个装置中的一个装置计算s=(wsm-hr)modn,(r,s)即是针对消息m的数字签名。

对于以上所述sm2数字签名协同生成方法,在ti计算时,i=2,…,或m,若出现ti=0,则重新在[1,n-1]内选择整数秘密c1,…,ci,重新设置t1,重新计算tj,j=2,…,i,直到ti≠0,i=2,…,m。

对于以上所述sm2数字签名协同生成方法,若用户的sm2私钥da是在计算得到c后生成,则生成用户的sm2私钥da的方式包括在[1,n-1]中随机选择一个整数作为da,或者按如下方式:

若b=(c-1(1+da)-1)modn,则在[1,n-1]中固定或任意选择(主观任意或随机选择)一个整数作为b,以满足b=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥;

若b=(-c-1da(1+da)-1)modn,则在[1,n-1]中固定或任意选择(主观任意或随机选择)一个整数作为b,以满足b=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥;

若w=(c-1(1+da)-1)modn,则在[1,n-1]中固定或任意选择(主观任意或随机选择)一个整数作为w,以满足w=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥;

若w=(-c-1da(1+da)-1)modn,则在[1,n-1]中固定或任意选择(主观任意或随机选择)一个整数作为w,以满足w=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥。

对于以上所述sm2数字签名协同生成方法,若第i号装置完成qi计算后,i=1,…,或m,检查发现qi是零元(无穷远点),则第1号到第i号装置重新选取kj,重新计算qj,j=1,…,i,直到qi不是零元,i=1,…,m。

对于以上所述sm2数字签名协同生成方法,若在生成针对消息m的数字签名过程中,检查发现r为整数0,则m个装置重新计算qi,i=1,…,m,重新计算q、r,直到r≠0。

对于以上所述sm2数字签名协同生成方法,若在生成针对消息m的数字签名过程中,检查发现[r]g+q是sm2椭圆曲线点群的零元(无穷远点),则m个装置重新计算qi,i=1,…,m,重新计算q、r,直到[r]g+q不是sm2椭圆曲线点群的零元;

或者,若在生成针对消息m的数字签名后,检查发现(s+r)modn=0,则m个装置重新计算qi,i=1,…,m,重新计算q、r,重新计算si,i=1,…,m,重新计算s,直到(s+r)mod≠0。

对于以上所述sm2数字签名协同生成方法,在针对消息m的数字签名生成过程中,若第i号装置(不必所有装置)在qi和si的计算式中同时用aiki替代ki,i=1,…,或m,则所述sm2数字签名协同生成方法仍然成立,其中ai是在[1,n-1]中固定选择或任意选择(主观任意或随机选择)的一个整数,ai对外保密或不保密(若ai是随机选择的整数,则ai是每次计算qi时在[1,n-1]中随机选择的整数,或者是初始化时在[1,n-1]中随机选择的整数)。

对于以上所述sm2数字签名协同生成方法,若取w=(c-1(1+da)-1)modn或w=(-c-1da(1+da)-1)modn,且取cm=1且计算tm采用算式tm=(cmtm-1)modn,且将w作为秘密由第m号装置保存(其他装置没有w),且由第m号装置计算s=(wsm-hr)modn,则所述sm2数字签名协同生成方法仍然成立。

对于以上所述sm2数字签名协同生成方法,若取w=(c-1(1+da)-1)modn或w=(-c-1da(1+da)-1)modn,且取cm=1且计算tm采用算式tm=(cmtm-1)modn,且将w作为秘密由第m号装置保存(其他装置没有w),且由第m号装置计算s=(wsm-hr)modn,且用户的sm2私钥da是在计算得到c后生成,则生成用户的sm2私钥da的方式包括在[1,n-1]中随机选择一个整数作为da,或者按如下方式:

若w=(c-1(1+da)-1)modn,则在[1,n-1]中随机选择一个整数作为w,以满足w=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥;

若w=(-c-1da(1+da)-1)modn,则在[1,n-1]中随机选择一个整数作为w,以满足w=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥。

基于对于以上所述sm2数字签名协同生成方法,可构建sm2数字签名协同生成系统,系统包括m个装置,其中m大于或等于2,所述m个装置按所述sm2数字签名生成方法,协同生成使用用户的sm2私钥da针对消息m的数字签名。

从以上描述可以看到,本发明的sm2数字签名协同生成方法和系统支持混合秘密共享,即计算共享秘密c的过程既包含与c1,…,cm中元素的模n和,又包含与c1,…,cm中元素的模n乘积。

具体实施方式

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

实施例1、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m个整数c1,…,cm,然后按前述秘密c的递进计算方法计算得到c;取gb=[(1+da)]g,b=(c-1(1+da)-1)modn,w=1,h=1,其中c-1是c的模n乘法逆,(1+da)-1是(1+da)的模n乘法逆,da是用户的sm2私钥;将c1,…,cm分别分发给第1号到第m号装置,将gb、b分发给需要的装置(w、h不用分发,只需采用w=1、h=1对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法生成针对消息m的数字签名。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例2、

此实施例与实施例1的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以满足b=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中,b是在[1,n-1]中固定选择或任意选择(主观任选或随机选择)的整数。

实施例3、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m个整数c1,…,cm,然后按前述秘密c的递进计算方法计算得到c;gb=[(1+da)]g,b=(-c-1da(1+da)-1)modn,w=1,h=0,其中c-1是c的模n乘法逆,(1+da)-1是(1+da)的模n乘法逆,da是用户的sm2私钥;将c1,…,cm分别分发给第1号到第m号装置,将gb、b分发给需要的装置(w、h不用分发,只需采用w=1、h=0对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法生成针对消息m的数字签名。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例4、

此实施例与实施例1的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以满足b=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中,b是在[1,n-1]中固定选择或任意选择(主观任选或随机选择)的整数。

实施例5、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m个整数c1,…,cm,然后按前述秘密c的递进计算方法计算得到c;取gb=[c-1]g,b=1,w=(c-1(1+da)-1)modn,h=1,其中c-1是c的模n乘法逆,da是用户的sm2私钥;将c1,…,cm分别分发给第1号到第m号装置,将gb、w分发给需要的装置(b、h不用分发,只需采用b=1、h=1对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法生成针对消息m的数字签名。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例6、

此实施例与实施例3的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以满足w=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中w是在[1,n-1]中固定选择或任意选择(主观任选或随机选择)的整数。

实施例7、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m个整数c1,…,cm,然后按前述秘密c的递进计算方法计算得到c;取gb=[-c-1da]g,b=1,w=(-c-1da(1+da)-1)modn,h=0,其中c-1是c的模n乘法逆,da是用户的sm2私钥;将c1,…,cm分别分发给第1号到第m号装置,将gb、w分发给需要的装置(b、h不用分发,只需采用b=1、h=0对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法生成针对消息m的数字签名。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例8、

此实施例与实施例3的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以w=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中w是在[1,n-1]中固定选择或任意选择(主观任选或随机选择)的整数。

实施例9、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m-1个整数c1,…,cm-1,取cm=1,然后按前述秘密c的递进计算方法计算得到c,其中计算tm采用计算式tm=(cmtm-1)modn;取gb=[c-1]g,b=1,w=(c-1(1+da)-1)modn,h=1,其中c-1是c的模n乘法逆,(1+da)-1是(1+da)的模n乘法逆,da是用户的sm2私钥;将c1,…,cm-1分别分发给第1号到第m-1号装置,将w分发给第m号装置作为秘密保存(其他装置没有w),将gb分发给需要的装置(b、h不用分发,只需采用b=1、h=1对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法中生成针对消息m的数字签名,其中由第m号装置计算s=(wsm-hr)modn。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例10、

此实施例与实施例6的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以满足w=(c-1(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中,w是在[1,n-1]中随机选择的整数。

实施例11、

此实施例包括m个分别标号为第1号到第m号的装置,m≥2;在初始化阶段,m个装置中的一个装置或m个装置之外的一个装置在[1,n-1]区间内随机选择m-1个整数c1,…,cm-1,取cm=1,然后按前述秘密c的递进计算方法计算得到c,其中计算tm采用计算式tm=(cmtm-1)modn;取gb=[-c-1da]g,b=1,w=(-c-1da(1+da)-1)modn,h=0,其中c-1是c的模n乘法逆,(1+da)-1是(1+da)的模n乘法逆,da是用户的sm2私钥;将c1,…,cm-1分别分发给第1号到第m-1号装置,将w分发给第m号装置作为秘密保存(其他装置没有w),将gb分发给需要的装置(b、h不用分发,只需采用b=1、h=0对应的计算公式即可),将c、da销毁;当需要使用用户的sm2私钥da针对消息m生成数字签名时,m个装置按前述支持混合秘密共享的sm2数字签名协同生成方法中生成针对消息m的数字签名,其中由第m号装置计算s=(wsm-hr)modn(即s=(wsm)modn)。此实施例中,用户的sm2私钥da由在[1,n-1]中随机选择一个整数生成。

实施例12、

此实施例与实施例6的差别在于:用户的sm2私钥da是在计算得到c后生成的,且以满足w=(-c-1da(1+da)-1)modn且da≠0的da作为用户的sm2私钥,其中,w是在[1,n-1]中随机选择的整数。

基于前述支持混合秘密共享的sm2数字签名协同生成方法构建相应的sm2数字签名协同生成系统,系统包括m个装置,其中m大于或等于2;所述m个装置中的每个装置是一个密码服务器或一个用户计算装置;所述m个装置按所述sm2数字签名生成方法,协同生成使用用户的sm2私钥da针对消息m的数字签名。

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

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