基于同态加密的数字签名协同生成方法及系统与流程

文档序号:14078442阅读:425来源:国知局

本发明属于信息安全技术领域,特别是基于同态加密并采用乘积参数k的数字签名协同生成方法及系统。



背景技术:

sm2是由国家密码管理局颁布的一种椭圆曲线公钥密码算法(参见《sm2椭圆曲线公钥密码算法》规范,国家密码管理局,2010年12月),基于此算法能实现数字签名、密钥交换及数据加密。但是,由于sm2算法独特的数字签名运算方式,通常的秘密共享(分割)方式及对应的基于秘密共享的密码运算方式,无法适合于使用sm2私钥进行数字签名的情形。针对此问题,人们提出了一些相应的技术方案,简单的说明如下。

使用用户的sm2私钥da针对一个消息m进行数字签名时需要计算得到r、s,其中r=(e+x1)modn,其中n是sm2椭圆曲线的基点g的阶,e是从用户标识和消息m导出的杂凑值(即散列值)(按sm2算法,e是从用户标识ida等参数导出的杂凑值za同消息m合并后的数据的杂凑值,参见sm2规范),x1取自(x1,y1)=q,而q=[k]g,这里g是sm2椭圆曲线的基点;s=((1+da)-1(k+r)-r)modn,这里k是[1,n-1]区间内随机选择的一个整数,在此申请中,k被称为参数k或k参数。

当采用秘密共享(分割)方式进行数字签名生成时,通常的做法是将秘密(1+da)-1分割后,将分割后的秘密给多个装置,分割后的每份秘密称为秘密份额;当需要使用用户的sm2私钥da针对一个消息m进行数字签名时,每个装置使用自己的秘密份额以及独立选择的参数k,在不暴露各自的秘密份额的情况下,通过协同计算生成针对消息m的数字签名(不暴露各自的秘密份额这点非常关键)。

当有两个装置时,为了计算得到数字签名,两个装置通常需要计算q=[k1+k2]r或q=[k1k2+k3]r,这里k1、k2分别由两个装置在生成数字签名时在[1,n-1]区间内随机选择,k3是两个装置中的一个装置在[1,n-1]区间内随机选择的整数,而r是基点g或从g得到的另一个椭圆曲线点。但是这种方式存在的潜在风险是,若某个装置在计算q的过程中恰好碰到q是零元(无穷远点),但它秘而不报,而是另选一个k参数,则此装置就可能破解另一个装置的秘密份额。比如,假设k1、k2分别是第一、第二装置随机选择的整数,而由第一装置完成q=[k1+k2]r的计算,而此时计算得到的q恰好是零元(无穷远点),则第一装置知道了第二装置选择的k2,但第一装置不报告这点,而是另选一个k1,然后计算得到q;这样,在协同生成数字签名的过程中或生成数字签名后,第一装置就可以利用它知道的k2,破解第二装置的秘密份额。当q=[k1k2+k3]r时,同样的情况也会发生(无论是哪个装置选择两个k参数,无论最后是哪个装置计算q)。

但是,如果计算q采用的计算式q=[k1k2]r,其中k1、k2是两个装置在生成数字签名时在[1,n-1]区间内随机选择的整数,那么q就不可能为零元,那么就不会出现在计算q的过程中一个装置得到另个装置选择的参数k的情况。这种计算q=[k1k2]r的方式称为采用了乘积k参数。但是,在数字签名协同生成过程中采用乘积k参数并非一个简单的事,不是说想采用乘积k就能做到的,因为在采用乘积k参数协同生成数字签名的过程中,需要避免泄露敏感信息,而这点是不容易做到的,这是本专利发明要解决的主要问题。

另外,现有技术方案普遍采用的秘密共享方案是将用户的sm2私钥da对应的秘密(1+da)-1分割成多份,即d1,…,dm,每份称为秘密份额,而这些秘密份额与(1+da)-1满足关系是(d1d2…dm)modn=(1+da)-1或(d1d2…dm)modn=(1+da)(这两者其实是等价的),或(d1+d2+…+dm)modn=(1+da)-1,然后将此多份秘密份额分别交给m个装置保存;当需要使用用户私钥da针对一个消息进行数字签名时,由m个装置分别使用d1,…,dm通过协同计算得到针对消息的数字签名。但是,这种直接保存、使用秘密份额的方式存在如下问题:

一是,每个装置保存、使用的是与秘密(1+da)-1直接相关的秘密份额,一旦泄露,就为攻击者破解(1+da)-1(即da)提供了有用的信息,增大了私钥da破解的风险(虽然个别装置秘密份额的泄露不意味私钥被破解,但增大了私钥被破解的风险);

二是,《中华人民共和国电子签名法》要求电子签名生成数据由签名者控制,而将私钥的秘密分成多份分别由多个装置保存并不完全符合此要求。

避免每个装置直接保存、使用秘密(1+da)-1的秘密份额,更好地满足《中华人民共和国电子签名法》的要求这是本专利发明要解决的另一个问题。



技术实现要素:

本发明的目的是提出基于同态加密并采用乘积k参数且不直接保存、使用秘密(1+da)-1的秘密份额的数字签名协同生成方法以及相应的系统,以便提高基于协同计算的sm2数字签名生成方法的安全性,降低私钥破解的风险,并更好地满足《中华人民共和国电子签名法》对电子签名生成数据的要求。

针对本发明的目的,本发明提出的技术方案是基于同态加密的数字签名协同生成方法及系统。

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

本发明的基于同态加密的数字签名协同生成方法又包括两个方案,具体描述如下。

方案一、

数字签名协同生成方法的方案一涉及两个装置,其中第一装置有[1,n-1]区间内的整数c、c1,且c、c1中至少c是秘密(c1为秘密或不为秘密),第二装置有[1,n-1]区间内的整数秘密c2,两个装置的秘密满足如下关系:

c=((c1c2)-1(1+da)-1)modn,

其中,da是用户的sm2私钥,n是sm2密码运算所使用的椭圆曲线点群的阶,也即sm2密码运算所使用的椭圆曲线点群的基点g的阶(sm2密码运算所使用的椭圆曲线点群是指由基点g生成的循环群);

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

p=[da]g,

其中,da是用户的sm2私钥,g是sm2密码运算所使用的椭圆曲线点群的基点,p是da对应的公钥;

将公钥p公开发布;

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

第一装置在[1,n-1]区间内随机选择一个整数k1;第二装置在[1,n-1]区间内随机选择一个整数k2;两个装置在不暴露各自的k1、k2及秘密的情况下,通过交互计算得到q=[(c2c1)-1k2k1]g;

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

若得到的r、q满足:r≠0且[r]g+q不是sm2椭圆曲线点群的零元(无穷远点),则继续计算数字签名,否则,重新计算q和r,直到r≠0且[r]g+q不是sm2椭圆曲线点群的零元(无穷远点);

完成r的计算后,两个装置按如下方式进行s的计算:

第一装置计算s0=((k1)-1c1r)modn或s0=((k1)-1c1)modn,s1=e(s0),其中,e(·)是使用第一装置的公钥的加法同态加密的加密运算;

(此时的k1与计算q时的k1相同)

第一装置将s1发送给第二装置;

第二装置接收到s1后,检查s1是否为零的加密结果,若s1为零的加密结果,则向第一装置返回出错提示;若s1不为零的加密结果,则第二装置利用s1、k2、c2,使用第一装置的公钥进行加法同态加密的加密运算,计算得到一个密文数s2,且使得s2对应的明文数与(k2+(k1)-1c2c1r)modn模n同余(即具有相同的模n余数);第二装置计算s2的方式包括(但不限于):

若计算s0采用公式s0=((k1)-1c1r)modn,则:

若计算s0采用公式s0=((k1)-1c1)modn,则:

以上算式中,e(·)表示使用第一装置的公钥的加法同态加密的加密运算,⊕表示同态加密的密文数的加运算(对应相应明文数相加后的加密结果),⊙表示同态加密中的明文数与密文数的乘运算(对应多个相同密文数的⊕累加),z1、z2是只有第二装置知道的整数,z1、z2的取值范围不限于[1,n-1](z1、z2是在计算过程中随机选择或生成的,或者由第二装置按预定的规则选择的,z1、z2的取值对第一装置保密,z1、z2可正、可负,可为0;当s1对应的明文数的取值在[1,n-1]范围内时,z1、z2的取值使得s2对应的明文数不超出加法同态加密的明文数的补码的表示范围,或者使得s2对应的明文数超出加法同态加密的明文数的补码的表示范围的概率极小);

第二装置将s2发送给第一装置;

第一装置接收到s2后,计算s3=d(s2)modn,s=(ck1s3-r)modn,其中d(·)是使用第一装置的私钥的加法同态加密的解密运算;

(此时,s3=(k2+(k1)-1c2c1r)modn,s=(c(k2k1+c2c1r)-r)modn)

则(r,s)是生成的针对消息m的数字签名;

(在以上过程中,针对加法同态加密中运算数的正、负以模m补码表示,比如,1到[m/2]的整数为正整数,[m/2]+1到m-1的整数为负整数,其中[m/2]表示m/2取整)

若上述计算过程中,在计算得到q、r后,仅检查r是否为零,不检查[r]g+q是否是sm2椭圆曲线点群的零元(无穷远点),且仅在r=0时重新进行q、r的计算,则:

在计算得到s后,若检查发现(s+r)modn=0,则放弃计算得到的s,重新计算q、r,重新计算s,重复此过程,直到(s+r)modn≠0。

对于以上方案一,完成r的计算后,两个装置计算s的另一种方式如下:

第一装置计算s0=e((cc1r)modn)或s0=e(cc1),s1=e(ck1);

(此时的k1与计算q时的k1相同)

第一装置将s0、s1发送给第二装置;

第二装置接收到s0、s1后,检查s0、s1是否为零的加密结果,若s0和s1中有一个为零的加密结果,则向第一装置返回出错提示;若s0和s1都不为零的加密结果,则第二装置利用s1、s0、k2、c2,使用第一装置的公钥进行加法同态加密的加密,计算得到一个密文数s2,且使得s2对应的明文数与(ck2k1+cc2c1r)modn模n同余(即具有相同的模n余数),第二装置计算s2的方式包括(但不限于):

若计算s0采用公式s0=e((cc1r)modn),则:

若计算s0采用公式s0=e(cc1),则:

以上算式中z1、z2、z3是只有第二装置知道的整数,z1、z2、z3的取值范围不限于[1,n-1](z1、z2、z3是在计算过程中随机选择或生成的,或者由第二装置按预定的规则选择的,z1、z2、z3的取值对第一装置保密,z1、z2、z3可正、可负,可为0;当s0、s1对应的明文数的取值在[1,n-1]范围内时,z1、z2、z3的取值使得s2对应的明文数不超出加法同态加密的明文数的补码的表示范围,或者使得s2对应的明文数超出加法同态加密的明文数的补码的表示范围的概率极小);

第二装置将s2发送给第一装置;

第一装置接收到s2后,计算s3=d(s2)modn,s=(s3-r)modn。

(此时,s3=c(k1k2+c2c1r)modn,s=(c(k2k1+c2c1r)-r)modn)

在以上方案一中,第二装置检查si,i=0,1,是否为零的加密结果的一种方法如下:

第二装置在加法同态加密允许的范围内任选非零整数ui和qi,所述在加法同态加密允许的范围内是指当d(si)(即si对应的明文数)在[1,n-1]范围内时,选择的ui和qi使得qid(si)+ui或qi(d(si)+ui)不超出加法同态加密表示无符号数或补码的范围;

若选择的ui和qi使得qid(si)+ui不超出加法同态加密表示无符号数或补码的范围,则第二装置计算

若选择的ui和qi使得qi(d(si)+ui)不超出加法同态加密表示无符号数或补码的范围,则第二装置

第二装置将hi发送给第一装置;

第一装置接收到hi后,解密hi,计算得到qi(即计算(d(hi)-ui)/gi,或d(hi)/(gi+ui),其中gi是si加密前的数),然后将qi返回第二装置;

第二装置接收到第一装置返回的qi后,检查第一装置返回的qi与自己之前选择的qi是否相同,若相同,则确定si不为零的加密结果;若第一装置无法返回通过解密获得的qi,或者返回的qi与第二装置之前选择的qi不同,则确定si为零的加密结果。

在以上方案一中,若da是预先知道的,则在初始化阶段,预选知道da的装置在[1,n-1]中随机选取c1、c2,计算得到c=((c1c2)-1(1+da)-1)modn,p=[da]g,将c、c1交由第一装置保存,将c2交由第二装置保存,将公钥p发布,将da销毁;

所述预先知道da的装置是所述两个装置中的一个装置或者是所述两个装置之外的一个装置。

在以上方案一中,若da不是预先知道的,则在初始化阶段,两个装置按如下方式选取c、c1、c2,计算得到用户私钥da对应的公钥p:

第一装置在[1,n-1]区间内随机选择一个整数c,固定或随机选择一个整数c1;

第二装置在[1,n-1]区间内随机选择整数c2;

第一装置计算p1=[(cc1)-1]g,将p1发送给第二装置;

第二装置计算p=[(c2)-1]p1-g;

则计算得到的p=[da],且c、c1、c2满足关系c=((c1c2)-1(1+da)-1)modn;

或者,

第二装置计算p2=[(c2)-1]g,将p2发送给第二装置;

第一装置计算p=[(cc1)-1]p2-g;

则计算得到的p=[da],且c、c1、c2满足关系c=((c1c2)-1(1+da)-1)modn。

在以上计算过程中,两个装置按如下方式计算得到q=[(c2c1)-1k2k1]g:

第二装置在[1,n-1]区间内随机选择一个整数k2,计算g2=[(c2)-1k2]g,将计算得到g2的发送给第一个装置;

第一装置在[1,n-1]区间内随机选择一个整数k1,计算q=[(c1)-1k1]g2;

则计算得到的q为q=[(c2c1)-1k2k1]g;

或者,

第一装置在[1,n-1]区间内随机选择一个整数k1,计算g1=[(c1)-1k1]g,将计算得到g1的发送给第二个装置;

第二装置在[1,n-1]区间内随机选择一个整数k2,计算q=[(c2)-1k2]g1;

则计算得到的q为q=[(c2c1)-1k2k1]g。

基于以上方案一,可构建相应的数字签名协同生成系统,系统包括两个装置,两个装置分别作为所述数字签名协同生成方法中的第一装置和第二装置,所述两个装置按所述数字签名协同生成方法的方案一生成使用用户私钥da针对消息m的sm2数字签名。

方案二、

数字签名协同生成方法的方案二同样涉及两个装置,其中第一装置有[1,n-1]区间内的整数秘密c1,第二装置有[1,n-1]区间内的整数秘密c2、c3、c,两个装置的秘密满足如下关系:

c=((c1c2+c3)-1(1+da)-1)modn,

其中da是用户的sm2私钥,n是sm2密码运算所使用的椭圆曲线点群的阶,也即sm2密码运算所使用的椭圆曲线点群的基点g的阶(sm2密码运算所使用的椭圆曲线点群是指由基点g生成的循环群);

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

gc=[(c1c2+c3)-1]g,

p=[da]g,

其中,da是用户的sm2私钥,g是sm2密码运算所使用的椭圆曲线点群的基点,p是da对应的公钥;

将gc交由第一装置和第二装置中需要使用gc的装置保存,将公钥p公开发布;

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

第一装置在[1,n-1]区间内随机选择一个整数k1;第二装置在[1,n-1]区间内随机选择一个整数k2;两个装置在不暴露各自的k1、k2的情况下,通过交互计算得到q=[k2k1]gc;

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

若得到的r、q满足:r≠0且[r]g+q不是sm2椭圆曲线点群的零元(无穷远点),则继续计算数字签名,否则,重新计算q和r,直到r≠0且[r]g+q不是sm2椭圆曲线点群的零元(无穷远点);

完成r的计算后,两个装置按如下方式进行s的计算:

第一装置计算s0=e((c1r)modn)或s0=e(c1),s1=e(k1),其中,e(·)是使用第一装置的公钥的加法同态加密的加密运算;

第一装置将s0、s1发送给第二装置;

第二装置接收到s0、s1后,检查s0、s1是否为零的加密结果,若s0和s1中有一个为零的加密结果,则向第一装置返回错误提示;若s0和s1皆不为零的加密结果,则第二装置在[1,n-1]中随机选择一个整数k21和k22,令k22=(k2(k21)-1)modn,其中(k21)-1为k21的模n乘法逆,然后第二装置利用s1、s0、k22、k21、c2,使用第一装置的公钥的加法同态加密的加密运算,计算得到一个密文数s2,且使得计算得到的s2对应的明文数与

(k22k1+(k21)-1c2c1r)modn模n同余(有相同的模n余数);第二装置计算s2的方式包括(但不限于):

若计算s0采用公式s0=e((c1r)modn),则:

若计算s0采用公式s0=e(c1),则:

以上算式中,e(·)表示使用第一装置的公钥的加法同态加密的加密运算,表示同态加密的密文数的加运算(对应相应明文数相加后的加密结果),⊙表示同态加密中的明文数与密文数的乘运算(对应多个相同密文数的累加),z1、z2、z3是只有第二装置知道的整数(z1、z2、z3是在计算过程中随机选择或生成的,或者由第二装置按预定的规则选择的,z1、z2、z3的取值对第一装置保密,z1、z2、z3的取值范围不限于[1,n-1],z1、z2、z3可正、可负,可为0;当s0、s1对应的明文数的取值在[1,n-1]范围内时,z1、z2、z3的取值使得s2对应的明文数不超出加法同态加密的明文数的补码的表示范围,或者使得s2对应的明文数超出加法同态加密的明文数的补码的表示范围的概率极小);

第二装置将s2发送给第一装置;

第一装置接收到s2后,计算s3=d(s2)modn,其中d(·)是使用第一装置私钥的加法同态加密的解密运算;

(此时,s3=(k22k1+(k21)-1c2c1r)modn)

第一装置将s3发送给第二装置;

第二装置接收到s3后,检查s3是否为零,若s3为零则报错,否则,计算s=(c(k21s3+c3r)-r)modn;

(此时,s=(c(k2k1+(c2c1+c3)r)-r)modn)

则(r,s)是生成的针对消息m的数字签名;

(同样地,在以上过程中,针对加法同态加密中运算数的正、负以模m补码表示,比如,1到[m/2]的整数为正整数,[m/2]+1到m-1的整数为负整数,其中[m/2]表示m/2取整)

若上述计算过程中,在计算得到q、r后,仅检查r是否为零,不检查[r]g+q是否是sm2椭圆曲线点群的零元(无穷远点),且仅在r=0时重新进行q、r的计算,则:

在计算得到s后,若检查发现(s+r)modn=0,则放弃计算得到的s,重新计算q、r,重新计算s,重复此过程,直到(s+r)modn≠0。

检查si,i=0,1,是否为零的加密结果的方法同前。

对于以上方案二,若da是预先知道的,则在初始化阶段,预先知道da的装置按如下方式选取或计算c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p=[da]g:

在[1,n-1]区间内随机选择整数c1、c2,在[0,n-1]区间内随机选择整数c3,且使得选择的c1、c2、c3满足(c1c2+c3)modn≠0(注:选择c2=c3是允许的);

计算c=((c1c2+c3)-1(1+da)-1)modn,其中(c1c2+c3)-1为(c1c2+c3)modn的模n乘法逆(即(c1c2+c3)-1(c1c2+c3)modn=1);

计算gc=[(c1c2+c3)-1]g,p=[da]g;

预先知道da的装置将c1交由第一装置保存,将c2、c3、c交由第二装置保存,将gc交给计算q过程中需要使用gc的装置,将公钥p公开发布,将da销毁;

所述预先知道da的装置是所述两个装置中的一个装置或者是所述两个装置之外的一个装置。

对于以上方案二,若da不是预先知道的,则在初始化阶段,两个装置选取c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p的一种方式如下:

第二装置在[1,n-1]区间内随机选择整数c2、c3、c,计算t=((c2)-1c3)modn,然后将计算得到的t发送给第一装置;或者,第二装置在[1,n-1]区间内随机选择整数c、c2,在[1,n-1]区间内随机或固定选择一个整数t(注:固定选择t为整数1是允许的),计算c3=(tc2)modn,然后将t发送给第一装置;

第一装置在[1,n-1]区间内随机选择一个整数c1,且选择的c1满足(c1+t)modn≠0;

第一装置计算gt=[(c1+t)-1]g,其中(c1+t)-1为(c1+t)modn的模n乘法逆(即(c1+t)-1(c1+t)modn=1);

第一装置将计算得到的gt发送给第二装置;

第二装置计算gc=[(c2)-1]gt,p=[c-1]gc-g,其中,(c2)-1、c-1分别为c2、c的模n乘法逆;

若p为sm2椭圆曲线点群的零元(无穷远点),则重新选取c1、c2、c3或t、c,计算gc=[(c1c2+c3)-1]g,计算p,直到p不是sm2椭圆曲线点群的零元(无穷远点);

(第二装置随机选择c以及利用选择的c计算p,相当于以一种间接的方式生成私钥da)

计算得到的gc即为[(c1c2+c3)-1]g,p即为公钥[da]g;

第二装置将gc交给计算q过程中需要使用gc的装置(可能是自己),将公钥p发布。

对于以上方案二,若da不是预先知道的,则在初始化阶段,两个装置选取c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p的另一种方式如下:

第一装置在[1,n-1]区间内随机选择一个整数c1;

第二装置在[1,n-1]区间内随机选择整数c2、c3、c;

第一装置计算g0=e(c1),将g0发送给第二装置;

第二装置接收到g0后,检查g0是否为零的加密结果,若是,则向第一装置返回出错提示,若不是,则第二装置利用g0、c2、c3,使用第一装置的公钥的加法同态加密的加密运算,计算得到一个密文数g1,且使得计算得到的g1对应的明文数与(wc2c1+wc3)modn模n同余(有相同的模n余数),其中w是第二装置在[1,n-1]区间内随机选择的整数;

第二装置计算g1的方式包括(但不限于):

其中w1、w2是只有第二装置知道的整数,w1、w2的取值范围不限于[1,n-1](w1、w2在计算过程中由第二装置随机选择或生成的,或者由第二装置按预定的规则选择的,w1、w2的取值对第一装置保密,w1、w2可正、可负,可为0;当c1的取值在[1,n-1]范围内时,w1、w2的取值使得g1对应的明文数不超出加法同态加密的明文数的补码的表示范围,或者使得g1对应的明文数超出加法同态加密的明文数的补码的表示范围的概率极小);

第二装置将g1发送给第一装置;

第一装置接收到g1后,计算g2=d(g1)modn;

(此时g2=w(c1c2+c3)modn)

第一装置检查g2是否为零,若是,则两个装置重新选择c1、c2、c3、c,重新计算g0、g1、g2,直到g2不为零;

若g2不为零,则第一装置计算p1=[(g2)-1]g,将p1发送给第二装置;

第二装置计算gc=[w]p1,则gc即为[(c1c2+c3)-1]g;

第二装置计算p=[(c)-1]gc-g,则p即为公钥[da]g;

第二装置将gc交给计算q过程中需要使用gc的装置(可能是自己),将公钥p发布。

基于以上方案二可构建相应的数字签名协同生成系统,系统包括两个装置,两个装置分别作为所述数字签名协同生成方法中的第一装置到第二装置,所述两个装置按所述数字签名协同生成方法的方案二生成使用用户私钥da针对消息m的sm2数字签名。

基于本发明的数字签名协同生成方法,两个装置在协同计算、生成数字签名的过程中采用了计算q=[(c2c1)-1k2k1]g或q=[k2k1]gc的方案,即采用了乘积k参数,故而不会出现q=[k1+k2]r或q=[k1k2+k3]r为零元(无穷远点)的情况,从而消除了一个装置在计算q的过程中能够得到另一个装置的k参数、进而破解另一个装置的秘密份额的风险,提高了sm2数字签名协同计算的安全性。

另外,与通常的直接分割私钥秘密(1+da)-1,利用分割后的私钥秘密通过协同运算得到数字签名不同,本发明实际上是利用多个密钥c1,c2(以及c3)对私钥秘密(1+da)-1进行加密,然后使用加密后的私钥秘密(即c)以及加密密钥c1,c2(以及c3)通过协同计算得到数字签名,避免了直接保存、使用秘密(1+da)-1的秘密份额。对于本发明,一个装置使用c进行数字签名的生成运算相当于使用加密的(1+da)-1进行数字签名生成运算,两个装置使用c1,c2,c(以及c3)的数字签名协同计算过程实际上是在不暴露c1,c2(以及c3)以及私钥秘密(1+da)-1的情况下对c的解密过程。

基于本发明的方法,无论用户的私钥da是预先已产生的还是非预先已产生的,只要使用c的装置是拥有私钥的用户的装置,比如用户的移动终端,那么,由于其他装置没有接触到用户私钥的任何秘密,因此用户私钥完全在用户的控制之下,很好地满足了《中华人民共和国电子签名法》的要求。

附图说明

无。

具体实施方式

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

实施例1、

此实施例中,da是预先知道的,在初始化阶段,预选知道da的装置在[1,n-1]中随机选取c1、c2,计算得到c=((c1c2)-1(1+da)-1)modn,p=[da]g,将c、c1交由第一装置保存,将c2交由第二装置保存,将公钥p发布,将da销毁;

所述预先知道da的装置是所述两个装置中的一个装置或者是所述两个装置之外的一个装置;

当需要使用用户sm2私钥da针对消息进行数字签名时,两个装置按前述基于同态加密的数字签名协同生成方法中的方案一,通过协同计算生成针对消息的数字签名。

实施例2、

此实施例中,da不是预先知道的,在初始化阶段,两个装置按如下方式选取c、c1、c2,计算得到用户私钥da对应的公钥p:

第一装置在[1,n-1]区间内随机选择一个整数c,固定或随机选择一个整数c1;

第二装置在[1,n-1]区间内随机选择整数c2;

第一装置计算p1=[(cc1)-1]g,将p1发送给第二装置;

第二装置计算p=[(c2)-1]p1-g;

则计算得到的p=[da],且c、c1、c2满足关系c=((c1c2)-1(1+da)-1)modn;

或者,

第二装置计算p2=[(c2)-1]g,将p2发送给第二装置;

第一装置计算p=[(cc1)-1]p2-g;

则计算得到的p=[da],且c、c1、c2满足关系c=((c1c2)-1(1+da)-1)modn;

当需要使用用户sm2私钥da针对消息进行数字签名时,两个装置按前述基于同态加密的数字签名协同生成方法中的方案一,通过协同计算生成针对消息的数字签名。

实施例3、

此实施例中,da是预先知道的,在初始化阶段,预先知道da的装置按如下方式选取或计算c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p:

在[1,n-1]区间内随机选择整数c1、c2,在[0,n-1]区间内随机选择整数c3,且使得选择的c1、c2、c3满足(c1c2+c3)modn≠0(注:选择c2=c3是允许的);

计算c=((c1c2+c3)-1(1+da)-1)modn,其中(c1c2+c3)-1为(c1c2+c3)modn的模n乘法逆(即(c1c2+c3)-1(c1c2+c3)modn=1);

计算gc=[(c1c2+c3)-1]g,p=[da]g;

预先知道da的装置将c1交由第一装置保存,将c2、c3、c交由第二装置保存,将gc交给计算q过程中需要使用gc的装置,将公钥p公开发布,将da销毁;

所述预先知道da的装置是所述两个装置中的一个装置或者是所述两个装置之外的一个装置;

当需要使用用户sm2私钥da针对消息进行数字签名时,两个装置按前述基于同态加密的数字签名协同生成方法中的方案二,通过协同计算生成针对消息的数字签名。

实施例4、

此实施例中,da不是预先知道的,在初始化阶段,两个装置按如下方式选取c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p:

第二装置在[1,n-1]区间内随机选择整数c2、c3、c,计算t=((c2)-1c3)modn,然后将计算得到的t发送给第一装置;或者,第二装置在[1,n-1]区间内随机选择整数c、c2,在[1,n-1]区间内随机或固定选择一个整数t(注:固定选择t为整数1是允许的),计算c3=(tc2)modn,然后将t发送给第一装置;

第一装置在[1,n-1]区间内随机选择一个整数c1,且选择的c1满足(c1+t)modn≠0;

第一装置计算gt=[(c1+t)-1]g,其中(c1+t)-1为(c1+t)modn的模n乘法逆(即(c1+t)-1(c1+t)modn=1);

第一装置将计算得到的gt发送给第二装置;

第二装置计算gc=[(c2)-1]gt,p=[c-1]gc-g,其中,(c2)-1、c-1分别为c2、c的模n乘法逆;

若p为sm2椭圆曲线点群的零元(无穷远点),则重新选取c1、c2、c3、c,计算gc=[(c1c2+c3)-1]g,计算p,直到p不是sm2椭圆曲线点群的零元(无穷远点);

(第二装置随机选择c以及利用选择的c计算p,相当于以一种间接的方式生成私钥da)

计算得到的gc即为[(c1c2+c3)-1]g,p即为公钥[da]g;

第二装置将gc交给计算q过程中需要使用gc的装置(可能是自己),将公钥p发布;

当需要使用用户sm2私钥da针对消息进行数字签名时,两个装置按前述基于同态加密的数字签名协同生成方法中的方案二,通过协同计算生成针对消息的数字签名。

实施例5、

此实施例中,da不是预先知道的,在初始化阶段,两个装置按如下方式选取c1、c2、c3、c,计算得到gc=[(c1c2+c3)-1]g,以及用户私钥da对应的公钥p:

第一装置在[1,n-1]区间内随机选择一个整数c1;

第二装置在[1,n-1]区间内随机选择整数c2、c3、c;

第一装置计算g0=e(c1),将g0发送给第二装置;

第二装置接收到g0后,检查g0是否为零的加密结果,若是,则向第一装置返回出错提示,若不是,则第二装置

第二装置利用g0、c2、c3,使用第一装置的公钥的加法同态加密的加密运算,计算得到一个密文数g1,且使得计算得到的g1对应的明文数与(wc2c1+wc3)modn模n同余(有相同的模n余数),其中w是第二装置在[1,n-1]区间内随机选择的整数;

第二装置计算g1的方式包括(但不限于):

其中w1、w2是只有第二装置知道的整数,w1、w2的取值范围不限于[1,n-1](w1、w2在计算过程中由第二装置随机选择或生成的,或者由第二装置按预定的规则选择的,w1、w2的取值对第一装置保密,w1、w2可正、可负,可为0;当c1的取值在[1,n-1]范围内时,w1、w2的取值使得g1对应的明文数不超出加法同态加密的明文数的补码的表示范围,或者使得g1对应的明文数超出加法同态加密的明文数的补码的表示范围的概率极小);

第二装置将g1发送给第一装置;

第一装置接收到g1后,计算g2=d(g1)modn;

(此时g2=w(c1c2+c3)modn)

第一装置检查g2是否为零,若是,则两个装置重新选择c1、c2、c3、c,重新计算g0、g1、g2,直到g2不为零;

若g2不为零,则第一装置计算p1=[(g2)-1]g,将p1发送给第二装置;

第二装置计算gc=[w]p1,则gc即为[(c1c2+c3)-1]g;

第二装置计算p=[(c)-1]gc-g,则p即为公钥[da]g;

第二装置将gc交给计算q过程中需要使用gc的装置(可能是自己),将公钥p发布;

当需要使用用户sm2私钥da针对消息进行数字签名时,两个装置按前述基于同态加密的数字签名协同生成方法中的方案二,通过协同计算生成针对消息的数字签名。

基于本发明的方法可构建相应的数字签名协同生成系统,此系统包括两个装置,其中一个装置可以是用户的移动终端(作为第一装置或第二装置),另一个是位于网络上的密码服务器(作为第二装置或第一装置),或者两个装置都是位于网络上的密码服务器(分别作为第一装置、第二装置);此两个装置通过实施本发明的基于同态加密的数字签名协同生成方法的两个方案中的一个,生成使用用户的sm2私钥da针对消息的数字签名;所构建的数字签名生成系统可用于前述实例1到实施5。

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

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