基于同态加密的数字签名协同生成方法及系统技术方案

技术编号:17617906 阅读:542 留言:0更新日期:2018-04-04 08:33
本发明专利技术涉及数字签名协同生成方法:装置1的秘密c、c1和装置2的秘密c2满足有关系:cc1c2mod n=(1+dA)

Co generation method and system for digital signature based on homomorphic encryption

The present invention relates to a method of generating collaborative digital signature: the secret C2 device 1, C1 and 2 C secret device satisfies a relationship: cc1c2mod = n (1+dA)

【技术实现步骤摘要】
基于同态加密的数字签名协同生成方法及系统
本专利技术属于信息安全
,特别是基于同态加密并采用乘积参数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]区间内的整数c、c1,且c、c1中至少c是秘密,第二装置有[1,n‑1]区间内的整数秘密c2,两个装置的秘密满足如下关系:c=((c1c2)

【技术特征摘要】
1.一种基于同态加密的数字签名协同生成方法,其特征是:所述方法涉及两个装置,其中第一装置有[1,n-1]区间内的整数c、c1,且c、c1中至少c是秘密,第二装置有[1,n-1]区间内的整数秘密c2,两个装置的秘密满足如下关系:c=((c1c2)-1(1+dA)-1)modn,其中,dA是用户的SM2私钥,n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶;在初始化阶段预先计算得到dA对应的公钥P,P=[dA]G;将公钥P公开发布;当需要使用用户的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导出的杂凑值;若得到的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(·)是使用第一装置的公钥的加法同态加密的加密运算;第一装置将s1发送给第二装置;第二装置接收到s1后,检查s1是否为零的加密结果,若s1为零的加密结果,则向第一装置返回出错提示;若s1不为零的加密结果,则第二装置利用s1、k2、c2,并使用第一装置的公钥进行加法同态加密的加密运算,计算得到一个密文数s2,且使得s2对应的明文数与(k2+(k1)-1c2c1r)modn模n同余;第二装置计算s2的方式包括:若计算s0采用公式s0=((k1)-1c1r)modn,则:s2=E(k2+z2n)⊕(c2⊙(s1⊕E(z1n))),或s2=E(k2+z2n)⊕((c2+z1n)⊙s1);若计算s0采用公式s0=((k1)-1c1)modn,则:s2=E(k2+z2n)⊕(((c2r)modn)⊙(s1⊕E(z1n))),或s2=E(k2+z2n)⊕((((c2r)modn)+z1n)⊙s1);以上算式中,E(·)表示使用第一装置的公钥的加法同态加密的加密运算,⊕表示同态加密的密文数的加运算,⊙表示同态加密中的明文数与密文数的乘运算,z1、z2是只有第二装置知道的整数,z1、z2的取值范围不限于[1,n-1];第二装置将s2发送给第一装置;第一装置接收到s2后,计算s3=D(s2)modn,s=(ck1s3-r)modn,其中D(·)是使用第一装置的私钥的加法同态加密的解密运算;则(r,s)是生成的针对消息M的数字签名;若上述计算过程中,在计算得到Q、r后,仅检查r是否为零,不检查[r]G+Q是否是SM2椭圆曲线点群的零元,且仅在r=0时重新进行Q、r的计算,则:在计算得到s后,若检查发现(s+r)modn=0,则放弃计算得到的s,重新计算Q、r,重新计算s,重复此过程,直到(s+r)modn≠0。2.根据权利要求1所述的基于同态加密的数字签名协同生成方法,其特征是:完成r的计算后,两个装置计算s的另一种方式如下:第一装置计算s0=E((cc1r)modn)或s0=E(cc1),s1=E(ck1);第一装置将s0、s1发送给第二装置;第二装置接收到s0、s1后,检查s0、s1是否为零的加密结果,若s0和s1中有一个为零的加密结果,则向第一装置返回出错提示;若s0和s1都不为零的加密结果,则第二装置利用s1、s0、k2、c2,使用第一装置的公钥进行加法同态加密的加密,计算得到一个密文数s2,且使得s2对应的明文数与(ck2k1+cc2c1r)modn模n同余,第二装置计算s2的方式包括:若计算s0采用公式s0=E((cc1r)modn),则:s2=E(z3n)⊕(k2⊙(s1⊕E(z2n)))⊕(c2⊙(s0⊕E(z1n))),或s2=E(z3n)⊕((k2+z2n)⊙s1)⊕(c2⊙(s0⊕E(z1n))),或s2=E(z3n)⊕(k2⊙(s1⊕E(z2n)))⊕((c2+z1n)⊙s0),或s2=E(z3n)⊕((k2+z2n)⊙s1)⊕((c2+z1n)⊙s0);若计算s0采用公式s0=E(cc1),则:s2=E(z3n)⊕(k2⊙(s1⊕E(z2n))⊕(((c2r)modn)⊙(s0⊕E(z1n))),或s2=E(z3n)⊕((k2+z2n)⊙s1)⊕(((c2r)modn)⊙(s0⊕E(z1n))),或s2=E(z3n)⊕(k2⊙(s1⊕E(z2n))⊕((((c2r)modn)+z1n)⊙s0);或s2=E(z3n)⊕((k2+z2n)⊙s1)⊕((((c2r)modn)+z1n)⊙s0);以上算式中z1、z2、z3是只有第二装置知道的整数,z1、z2、z3的取值范围不限于[1,n-1];第二装置将s2发送给第一装置;第一装置接收到s2后,计算s3=D(s2)modn,s=(s3-r)modn。3.根据权利要求2所述的基于同态加密的数字签名协同生成方法,其特征是:第二装置检查si,i=0,1,是否为零的加密结果的一种方法如下:第二装置在加法同态加密允许的范围内任选非零整数ui和qi,所述在加法同态加密允许的范围内是指当D(si)在[1,n-1]范围内时,选择的ui和qi使得qiD(si)+ui或qi(D(si)+ui)不超出加法同态加密表示无符号数或补码的范围;若选择的ui和qi使得qiD(si)+ui不超出加法同态加密表示无符号数或补码的范围,则第二装置计算hi=(qi⊙si)⊕E(ui);若选择的ui和qi使得qi(D(si)+ui)不超出加法同态加密表示无符号数或补码的范围,则第二装置hi=qi⊙(si⊕E(ui));第二装置将hi发送给第一装置;第一装置接收到hi后,解密hi,计算得到qi,然后将qi返回第二装置;第二装置接收到第一装置返回的qi后,检查第一装置返回的qi与自己之前选择的qi是否相同,若相同,则确定si不为零的加密结果;若第一装置无法返回通过解密获得的qi,或者返回的qi与第二装置之前选择的qi不同,则确定si为零的加密结果。4.根据权利要求1或2所述的基于同态加密的数字签名协同生成方法,其特征是:若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。5.一种基于权利要求1或2或3的数字签名协同生成系统,其特征是:所述系统包括两个装置,两个装置分别作为所述数字签名协同生成方法中的第一装置和第二装置,所述两个装置按所述数字签名协同生成方法生成使用用户私钥dA针对消息M的SM2数字签名。6.一种基于同态加密的数字签名协同生成方法,其特征是:所述方法涉及两个装置,其中第一装置有[1,n-1]区间内的整数秘密c1,第二装置有[1,n-1]区间内的整数秘密c2、c3、c,两个装置的秘密满足如下关系:c=((c1c2+c3)-1(1+dA)-1)modn,其中dA是用户的SM2私钥,n是SM2密码运算所使用的椭圆曲线点群的阶,也即SM2密码运算所使用的椭圆曲线点群的基点G的阶;在初始化阶段预先计算得到:Gc=[(c1c2+c3)-1]G,P=[dA]G,其中,P是dA对应的公钥;将Gc交由第一装置和第二装置中需要使用Gc的装置保存,将公钥P公开发布;当需要使用用户的SM2私钥dA针对消息M进行数字签名时,两个装置按如下方式进行数字签名的生成:第一装置在[1,n-1]区间内随机选择一个整数k1;第二装置在[1,n-1]区间内随机选择一个整数k2;两个装置在不暴露各自的k1、k2的情况下,通过交互计算得到Q=[k2k...

【专利技术属性】
技术研发人员:龙毅宏
申请(专利权)人:武汉理工大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1