秘密数运算转换方法及系统转让专利

申请号 : CN201911070089.8

文献号 : CN110943828B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 龙毅宏

申请人 : 武汉理工大学

摘要 :

第1、第2装置通过同态加法加密将它们的整数秘密b1和b2的相乘项,即b1b2,转化为第1、第2装置在[1,n‑1]内的整数秘密d1、d2的相加项,即d1+d2,且(d1+d2)mod n=(b1b2)mod n,n是一个素数;第1、第2装置通过同态加法加密将它们的整数秘密d1和d2的相加项,即d1+d2,且(d1+d2)mod n非0,转化为第1、第2装置在[1,n‑1]内的整数秘密b1和b2的相乘项,即b1b2,且(d1+d2)mod n=(b1b2)mod n;两个装置利用这两种运算转换对包含两个装置秘密的模n运算式进行转换,可得到仅包含各自秘密的运算式,由此消除运算式中两个装置秘密的耦合。

权利要求 :

1.一种秘密数相乘运算转换为相加运算的方法,其特征是:

所述方法涉及第1装置、第2装置;

第1装置有非0整数秘密b1,第2装置有非0整数秘密b2;

两个装置按如下方式之一将b1与b2的相乘项,即b1b2,转化为第1装置在[1,n-1]内的整数秘密d1和第2装置在[0,n-1]内的整数秘密d2的相加项,即d1+d2,且保持模n运算结果不变,即(d1+d2)mod n=(b1b2)mod n,其中n是一个素数:方式一:

第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=E((a2b2)mod n),其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;

第2装置将c0、c1发送给第1装置;

第1装置检查确定c0、c1是否是0的加密结果,若c0或c1是0的加密结果,则报错,否则,继续进行如下计算:第1装置在[1,n-1]内随机选择一个整数d1作为秘密,计算c2=E(z1n)⊕((-d1)⊙c0)⊕(((b1 mod n)+z0n)⊙c1);

第1装置将c2传递给第2装置;

第2装置计算d2=((a2)-1(D(c2)mod n))mod n,其中D(·)表示使用第2装置的同态加密私钥进行加法同态加密的解密运算,(a2)-1是a2的模n乘法逆;

方式二:

第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=(a2b2)mod n,其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;

第2装置将c0、c1发送给第1装置;

第1装置检查确定c0是否是0的加密结果、c1是否是0,若c0是0的加密结果或c1是0,则报错,否则,继续进行如下计算:第1装置在[1,n-1]内随机选择一个整数d1作为秘密,在[0,n-1]内随机选择一个整数t,计算c2=E(t+z1n)⊕((-d1+z0n)⊙c0),

c3=(b1c1-t)mod n;

第1装置将c2、c3传递给第2装置;

第2装置计算d2=((a2)-1((D(c2)+c3)mod n))mod n,其中D(·)表示使用第2装置的同态加密私钥进行加法同态加密的解密运算,(a2)-1是a2的模n乘法逆;

之后,在需要计算b1b2的模n运算式中使用d1+d2替换b1b2;

在以上计算过程中,⊕表示同态加密的密文数的加运算,⊙表示同态加密中的明文数与密文数的乘运算;

所述z0是第1装置随机选择的整数,或者是第1装置按预定的规则选择的整数,或者是第

1装置按约定或要求固定选择的整数,而所述z1是第1装置随机选择的整数;

所述z0、z1的取值范围不限于[1,n-1],且z0、z1的取值是整数;

对于所述方式一,当c0、c1对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;

对于所述方式二,当c0对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;

所述概率极小指具体应用中所确定的允许的概率;

以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。

2.根据权利要求1所述的秘密数相乘运算转换为相加运算的方法,其特征是:若b是一个装置的整数秘密,a为此装置知道的整数,则ab和a+b也是此装置的整数秘密。

3.一种基于权利要求1或2所述的秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法,其特征是:所述第1装置、第2装置进行协同计算的运算式A是由如下运算项相加构成的模n运算:第1装置的整数秘密项,第2装置的整数秘密项,非保密整数项,第1装置和第2装置的整数秘密相乘项;

所述第1装置、第2装置按所述秘密数相乘运算转换为相加运算的方法,将运算式A中出现的每个第1装置和第2装置的整数秘密的相乘项分别转换为第1装置和第2装置的整数秘密的相加项,转换得到的运算式B为第1装置的整数秘密项,第2装置的整数秘密项,非保密整数项相加构成的模n运算式;

之后,从转换得到的运算式B中分离出模n运算式A1、A2,其中,A1是第1装置的整数秘密项和非保密整数项相加构成的模n运算式,A2是第2装置的整数秘密项和非保密整数项相加构成的模n运算式,且A1中的非保密整数项与A2中的非保密整数项之和的模n余数,与将A中的相乘项转换后得到的运算式B中出现的非保密整数项之和的模n余数相同,分离得到A1、A2满足关系(A1+A2)mod n=B;

最后,运算式A的计算转换为计算(A1+A2)mod n,且(A1+A2)mod n=A,其中运算式A1的值由第1装置利用自己的整数秘密计算得到,运算式A2的值由第2装置利用自己的整数秘密计算得到。

4.一种基于权利要求3所述的运算式转换和计算方法的运算式转换和计算系统,其特征是:所述系统包括第1装置、第2装置,两个装置按所述运算式转换和计算方法将所述运算式A转换为满足关系(A1+A2)mod n=A的所述运算式A1、A2,其中运算式A1的值由第1装置利用自己的整数秘密计算得到,运算式A2的值由第2装置利用自己的整数秘密计算得到。

5.一种秘密相加运算转换为相乘运算的方法,其特征是:

所述方法涉及第1装置、第2装置;

第1装置有整数秘密d1,第2装置有整数秘密d2,且(d1+d2)mod n不为0,其中n是一个素数;

两个装置按如下方式之一将d1和d2的相加项,即d1+d2,转化为第1装置在[1,n-1]内的整数秘密b1和第2装置在[1,n-1]内的整数秘密b2的相乘项,即b1b2,且保持模n运算结果不变,即(d1+d2)mod n=(b1b2)mod n:方式一:

第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=E((a2d2)mod n),其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;

第2装置将c0、c1发送给第1装置;

第1装置检查确定c0、c1是否为0的加密结果,若c0或c1是0的加密结果,则报错,若不是,则继续进行如下计算:第1装置在[1,n-1]内随机选择一个作为秘密的整数b1,计算c2=E(z1n)⊕((((b1)-1d1)mod n)⊙c0)⊕(((b1)-1+z0n)⊙c1),其中(b1)-1是b1的模n乘法逆;

第1装置将c2提交给第2装置;

第2装置计算b2=((a2)-1(D(c2)mod n))mod n,其中(a2)-1是a2的模n乘法逆;

方式二:

第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=(a2d2)mod n;

第2装置将c0、c1发送给第1装置;

第1装置检查确定c0是否为0的加密结果、c1是否为0,若c0是0的加密结果或c1是0,则报错,否则,继续进行如下计算:第1装置在[1,n-1]内随机选择一个作为秘密的整数b1,在[0,n-1]内随机选择一个整数t,计算c2=E(t+z1n)⊕(((((b1)-1d1)mod n)+z0n)⊙c0),c3=((b1)-1c1-t)mod n,其中(b1)-1是b1的模n乘法逆;

第1装置将c2、c3提交给第2装置;

第2装置计算b2=((a2)-1((D(c2)+c3)mod n))mod n,其中(a2)-1是a2的模n乘法逆;

之后,在需要计算d1+d2的模n运算式中使用b1b2替换d1+d2;

在以上计算过程中,⊕表示同态加密的密文数的加运算,⊙表示同态加密中的明文数与密文数的乘运算;

所述z0是第1装置随机选择的整数,或者是第1装置按预定的规则选择的整数,或者是第

1装置按约定或要求固定选择的整数,而所述z1是第1装置随机选择的整数;

所述z0、z1的取值范围不限于[1,n-1],且z0、z1的取值是整数;

对于所述方式一,当c0、c1对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;

对于所述方式二,当c0对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;

所述概率极小指具体应用中所确定的允许的概率;

以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。

6.根据权利要求5所述的秘密相加运算转换为相乘运算的方法,其特征是:若d是一个装置的整数秘密,a为此装置知道的整数,则ad和a+d也是此装置的整数秘密。

7.根据权利要求5所述的秘密相加运算转换为相乘运算的方法,其特征是:第1装置和第2装置在不暴露各自秘密的情况下检查确定(d1+d2)mod n是否为0的一种方法如下:第2装置加密得到t0=E((d2)mod n),将t0提交给第1装置;

第1装置在[1,n-1]中随机选择两个整数q1、q2,在[0,n-1]中随机选择两个整数v0、v1,计算t1=(q1d1+v0)mod n,t2=E(-v0+z2n)⊕(q1⊙t0),t3=(q1q2d1+v1)mod n,t4=E(-v1+z3n)⊕(((q1q2)mod n)⊙t0);

第1装置将t1、t2、t3、t4提交给第2装置;

第2装置计算w1=(t1+D(t2))mod n,w2=(t3+D(t4))mod n;

第2装置检查w1和w2是否为0,若w1或w2为0,则第2装置确定(d1+d2)mod n为0,否则,第2装置确定(d1+d2)mod n不为0;

-1 -1

第2装置计算q3=(w2(w1) )mod n,其中(w1) 是w1的模n乘法逆;

第2装置将q3返回给第1装置;

若第2装置无法返回q3,或者第2装置返回的q3与q2不相等,则第1装置确定(d1+d2)mod n为0;

若第2装置返回q3且返回的q3与q2相等,则第1装置确定(d1+d2)mod n不为0;

所述z2、z3是第1装置随机选择的整数,z2、z3的取值范围不限于[1,n-1],且z2、z3的取值是整数;当t0对应的明文数在[1,n-1]内时,z2、z3的取值使得t2、t4对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得t2、t4对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小,所述概率极小指具体应用中所确定的允许的概率;

以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。

8.根据权利要求5所述的秘密相加运算转换为相乘运算的方法,其特征是:第1装置和第2装置在不暴露各自秘密的情况下检查确定(d1+d2)mod n是否为0的一种方法如下:第2装置加密得到t0=E((d2)mod n),将t0提交给第1装置;

第1装置在[1,n-1]中随机选择两个整数q1、q2,计算t1=E(((q1d1)mod n)+z2n)⊕(q1⊙t0),t2=E(((q1q2d1)mod n)+z3n)⊕(((q1q2)mod n)⊙t0);

第1装置将t1、t2提交给第2装置;

第2装置计算w1=D(t1)mod n,w2=D(t2)mod n;

第2装置检查w1和w2是否为0,若w1或w2为0,则第2装置确定(d1+d2)mod n为0,否则,第2装置确定(d1+d2)mod n不为0;

-1 -1

第2装置计算q3=(w2(w1) )mod n,其中(w1) 是w1的模n乘法逆;

第2装置将q3返回给第1装置;

若第2装置无法返回q3,或者第2装置返回的q3与q2不相等,则第1装置确定(d1+d2)mod n为0;

若第2装置返回q3且返回的q3与q2相等,则第1装置确定(d1+d2)mod n不为0;

所述z2、z3是第1装置随机选择的整数,z2、z3的取值范围不限于[1,n-1],且z2、z3的取值是整数;当t0对应的明文数在[1,n-1]内时,z2、z3的取值使得t1、t2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得t1、t2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小,所述概率极小指具体应用中所确定的允许的概率;

以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。

9.一种基于权利要求5-8中任一项所述的秘密相加运算转换为相乘运算的方法的运算式转换和计算方法,其特征是:所述第1装置、第2装置进行协同计算的运算式A是由如下运算项相加构成的模n运算:第1装置和第2装置协同计算的运算式A为第1装置的整数秘密项,第2装置的整数秘密项,第1装置的整数秘密和第2装置的整数秘密的相乘项,非保密整数项;

运算式A的值不能公开;

第1装置和第2装置在保持模n运算结果不变的情况下,协同将运算式A中出现的每个第

1装置和第2装置的整数秘密的相乘项分别转化为第1装置和第2装置的整数秘密的相加项,转换得到的运算式D为第1装置的整数秘密项,第2装置的整数秘密项,非保密整数项相加构成的模n运算式;

从运算式D中分离出模n运算式D1、D2,其中,D1是第1装置的整数秘密项和非保密整数项相加构成的模n运算式,D2是第2装置的整数秘密项和非保密整数项相加构成的模n运算式,且D1中的非保密整数项与D2中的非保密整数项之和的模n余数,与将D中出现的非保密整数项之和的模n余数相同,分离得到D1、D2满足关系(D1+D2)mod n=D(=A);

之后,第1装置利用自己的整数秘密计算D1得到d1,第2装置利用自己的整数秘密计算D2得到d2;

最后,第1装置和第2装置利用所述秘密相加运算转换为相乘运算的方法,计算得到满足关系(d1+d2)mod n=(b1b2)mod n的第1装置的整数秘密b1,第2装置的整数秘密b2,则得到b1、b2的值与运算式A的值的关系A=(b1b2)mod n,A-1=((b1)-1(b2)-1)mod n,其中A-1是A的模n乘法逆,(b1)-1、(b2)-1分别是b1、b2的模n乘法逆。

10.一种基于权利要求9所述的运算式转换和计算方法的运算式转换和计算系统,其特征是:所述系统包括第1装置、第2装置,两个装置按所述运算式转换和计算方法将所述运算式A转换为满足关系(A1+A2)mod n=A的所述运算式A1、A2,从运算式A1、A2的值协同计算得到第1装置的整数秘密b1,第2装置的整数秘密b2,且得到b1、b2的值与运算式A的值的关系A=(b1b2)mod n,A-1=((b1)-1(b2)-1)mod n,其中A-1是A的模n乘法逆,(b1)-1、(b2)-1分别是b1、b2的模n乘法逆。

说明书 :

秘密数运算转换方法及系统

技术领域

[0001] 本发明属于密码技术领域,特别是秘密数相乘运算转换为相加运算的方法、秘密相加运算转换为相乘运算的方法以及基于这两个方法的运算式转换和计算方法及系统。

背景技术

[0002] 在密码技术应用中由于应用需要,比如对私钥安全保护的需求,常常需要采用基于秘密共享的密码运算,比如,基于秘密共享的ECDSA(Elliptic Curve  Digital Signature)数字签名生成、基于秘密共享的SM2椭圆曲线数字签名生成、基于秘密共享的SM9椭圆曲线数字签名生成、基于秘密共享的SM9标识私钥协同生成等。下面是一些具体例子(当然不是全部的)。
[0003] 1、ECDSA数字签名协同生成
[0004] 设G是椭圆曲线点群的基点,素数n是G的阶(也即椭圆曲线点群的阶),d是用户的私钥,使用用户私钥d对消息M进行数字签名的过程如下:
[0005] 计算kG=(x1,y1),取r=x1 mod n,e=hash(M),之后两个装置通过对d的共享秘密,协同计算s=k-1(e+rd)mod n,从而得到针对消息M的数字签名(r,s)。
[0006] 若采用基于秘密共享的ECDSA数字签名协同生成,则通常或期望的计算方式是:
[0007] 使得k=(k1k2)mod n,其中k1、k2分别是第1装置、第2装置在[1,n-1]内随机选择的作为秘密的整数,使得d=(d1d2)mod n或d=(d1+d2)mod n,其中d1、d2分别是第1装置、第2装置分享(共享)私钥d的秘密份额,然后第1装置、第2装置在不暴露各自秘密的情况下,协同计算得到s=k-1(e+rd)mod n。
[0008] 2、SM2数字签名协同生成
[0009] 设G是椭圆曲线点群的基点,素数n是G的阶(也即椭圆曲线点群的阶),dA是用户的私钥,使用用户私钥dA对消息M进行数字签名过程如下:
[0010] 计算[k]G=(x1,y1),取r=(e+x1)mod n,e是消息M的散列值,计算得到s=((k+r)(1+dA)-1-r)mod n,则(r,s)是针对消息M的数字签名。
[0011] 若采用基于秘密共享的SM2数字签名协同生成,则通常或期望的计算过程是:
[0012] 使得k=(k1k2)mod n,其中k1、k2分别是第1装置、第2装置在[1,n-1]内随机选择的作为秘密的整数;
[0013] 使得(1+dA)-1=(d1d2)mod n或(1+dA)-1=(d1+d2)mod n,其中d1、d2分别是第1装置、第2装置分享的(1+dA)-1的秘密份额,然后在不暴露第1装置、第2装置各自秘密的情况下,计-1算得到s=((k+r)(1+dA) -r)mod n。
[0014] 3、SM9数字签名协同生成
[0015] SM9是国家商用密码管理局颁布的标识密码算法。
[0016] 设有双线映射e:G1×G2→GT时,其中G1、G2是加法循环群,GT是一个乘法循环群,G1、G2、GT的阶是素数n(注:在SM9规范中,G1、G2、GT的阶用的是大写字母N,本专利申请采用小写n);P1为G1中的生成元,Ppub为主公钥(即Ppub=[s]P2,s为主私钥或主密钥,P2为G2中的生成元,参见SM9规范;注意,这里的主私钥或主密钥,主公钥,用户标识私钥使用的符号与SM9规范略有不同)。
[0017] 设dA为用户的SM9标识私钥,使用用户私钥d对消息M进行数字签名过程如下:
[0018] 在[1,n-1]内随机选择一个整数r,计算w=g^r,h=H2(M||w,n),其中g=e(P1,Ppub),^表示幂运算(对^前面的元进行幂运算,^后面的整数是幂运算的次数),H2为SM9中规定的散列函数,M||w表示M和w的字串合并,n为G1、G2、GT的阶(参见SM9规范);
[0019] 计算l=(r-h)mod n,S=[l]dA,则(h,S)为针对消息M的数字签名。
[0020] 若采用基于秘密共享的SM9数字签名协同生成,则通常或期望的计算过程是:
[0021] 在[1,n-1]中随机选择一个整数b作为秘密;第1、第2装置分别有[1,n-1]内的秘密份额d1、d2,且(d1d2)mod n=b(乘积秘密共享)或(d1+d2)mod n=b(求和秘密共享);
[0022] 预先计算有gb=g^b-1,PA=[b-1]dA,其中b-1是b的模n乘法逆;
[0023] 第1装置、第2装置在[1,n-1]内分别随机选择整数r1、r2,协同计算得到w=gb^(r1r2),然后计算h=H2(M||w,n),最后两个装置在不暴露各自秘密的情况下共享协同计算l=(r1r2-(d1d2)h)mod n或l=(r1r2-(d1+d2)h)mod n,然后计算S=[l]PA,从而得到针对消息M的数字签名(h,S)。
[0024] 4、SM9签名私钥协同生成
[0025] 这里涉及的是SM9签名私钥的分割生成(基于秘密共享的私钥生成),用于加密的私钥的分割生成是完全类似的。
[0026] 设私钥生成器(Private Key Generator)的主密钥是s,则一个用户标识ID所对应的用于签名的私钥是:dA=[s(hID+s)-1]P1,其中,s是系统主密钥(主私钥),hID是由用户ID及其他信息计算得到杂凑值(散列值),P1是双线性映射的源域中的两个群中的第一个群G1的生成元,(hID+s)-1是(hID+s)的模n乘法逆,n是P1的阶。
[0027] 假设需要由两个私钥生成器通过秘密分割(共享)方式生成用户私钥,则两个私钥生成器有秘密份额s1、s2,且(s1s2)mod n=s,或者(s1+s2)mod n=s;将dA的计算式变换后有dA=P1-[hID(hID+s)-1]P1;在生成用户私钥dA时,两个私钥生成器协同计算
[0028] dA=P1-[hID(hID+s1s2)-1]P1或dA=P1-[hID(hID+s1+s2)-1]P1。
[0029] 针对以上基于秘密共享的密码运算问题,通常的做法是针对不同的协同计算需求,比如ECDSA数字签名协同生成、SM2数字签名协同生成、SM9数字签名协同生成、SM9私钥分割生成,提出专门的协同计算方案。

发明内容

[0030] 本发明的目的是提出能够同时满足不同协同密码计算需求的通用协同密码计算方法。
[0031] 针对此目的,本发明提出的技术方案包括一种秘密数相乘运算转换为相加运算的方法、一种秘密相加运算转换为相乘运算的方法以及基于这两个方法的运算式转换和计算方法及系统。
[0032] 本发明提出的秘密数相乘运算转换为相加运算的方法具体如下。
[0033] 所述秘密数相乘运算转换为相加运算的方法涉及第1装置、第2装置;
[0034] 第1装置有非0整数秘密b1,第2装置有非0整数秘密b2;
[0035] 两个装置按如下方式之一将b1与b2的相乘项,即b1b2,转化为第1装置在[1,n-1]内的整数秘密d1和第2装置在[0,n-1]内的整数秘密d2的相加项,即d1+d2,且保持模n运算结果不变,即(d1+d2)mod n=(b1b2)mod n,其中n是一个素数:
[0036] 方式一:
[0037] 第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=E((a2b2)mod n),其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;
[0038] 第2装置将c0、c1发送给第1装置;
[0039] 第1装置检查确定c0、c1是否是0的加密结果,若c0或c1是0的加密结果,则报错,否则,继续进行如下计算:
[0040] 第1装置在[1,n-1]内随机选择一个整数d1作为秘密,计算
[0041] c2=E(z1n)⊕((-d1)⊙c0)⊕(((b1 mod n)+z0n)⊙c1);
[0042] 第1装置将c2传递给第2装置;
[0043] 第2装置计算d2=((a2)-1(D(c2)mod n))mod n,其中D(·)表示使用第2装置的同态加密私钥进行加法同态加密的解密运算,(a2)-1是a2的模n乘法逆;
[0044] 方式二:
[0045] 第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=(a2b2)mod n,其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;
[0046] 第2装置将c0、c1发送给第1装置;
[0047] 第1装置检查确定c0是否是0的加密结果、c1是否是0,若c0是0的加密结果或c1是0,则报错,否则,继续进行如下计算:
[0048] 第1装置在[1,n-1]内随机选择一个整数d1作为秘密,在[0,n-1]内随机选择一个整数t,计算
[0049] c2=E(t+z1n)⊕((-d1+z0n)⊙c0),
[0050] c3=(b1c1-t)mod n;
[0051] 第1装置将c2、c3传递给第2装置;
[0052] 第2装置计算d2=((a2)-1((D(c2)+c3)mod n))mod n,其中D(·)表示使用第2装置的同态加密私钥进行加法同态加密的解密运算,(a2)-1是a2的模n乘法逆;
[0053] 之后,在需要计算b1b2的模n运算式中使用d1+d2替换b1b2;
[0054] 在以上计算过程中,⊕表示同态加密的密文数的加运算(对应相应明文数相加后的加密结果),⊙表示同态加密中的明文数与密文数的乘运算(对应多个相同密文数的⊕累加);
[0055] 所述z0是第1装置随机选择的整数,或者是第1装置按预定的规则选择的整数,或者是第1装置按约定或要求固定选择的整数(包括固定取值0),而所述z1是第1装置随机选择的整数;
[0056] 所述z0、z1的取值范围不限于[1,n-1],且z0、z1的取值是整数(可正、可负,可为0);
[0057] 对于所述方式一,当c0、c1对应的明文数在[1,n-1]内时,z0、z1的取值使得c2、c3对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2、c3对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;
[0058] 对于所述方式二,当c0对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;
[0059] 所述概率极小指具体应用中所确定的允许的概率(补数是用非负整数表示正、负整数及0的一种方式,比如,若加法同态加密针对被加密的明文数的模是m,则负数-k表示为m-k);
[0060] 以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。
[0061] 对于以上所述的秘密数相乘运算转换为相加运算的方法,若b是一个装置的整数秘密,a为此装置知道的整数(保密或非保密),则ab和a+b也是此装置的整数秘密。
[0062] 基于以上所述的秘密数相乘运算转换为相加运算的方法,可相应地得到一种运算式转换和计算方法,具体如下:
[0063] 所述第1装置、第2装置进行协同计算的运算式A是由如下运算项相加构成的模n运算:
[0064] 第1装置的整数秘密项(1项或多项由第1装置的整数秘密单独构成的运算项),第2装置的整数秘密项(1项或多项由第2装置的整数秘密单独构成的运算项),非保密整数项(1项或多项非保密整数单独构成的运算项),第1装置和第2装置的整数秘密相乘项(1个或多个相乘项);
[0065] 所述第1装置、第2装置按所述秘密数相乘运算转换为相加运算的方法,将运算式A中出现的每个第1装置和第2装置的整数秘密的相乘项分别转换为第1装置和第2装置的整数秘密的相加项,转换得到的运算式B为第1装置的整数秘密项(1项或多项),第2装置的整数秘密项(1项或多项),非保密整数项(1项或多项,合并后为1项)相加构成的模n运算式;
[0066] 之后,从转换得到的运算式B中分离出模n运算式A1、A2,其中,A1是第1装置的整数秘密项(1项或多项)和非保密整数项(1项或多项)相加构成的模n运算式,A2是第2装置的整数秘密项(1项或多项)和非保密整数项(1项或多项)相加构成的模n运算式,且A1中的非保密整数项与A2中的非保密整数项之和的模n余数,与将A中的相乘项转换后得到的运算式B中出现的非保密整数项之和的模n余数相同,分离得到A1、A2满足关系(A1+A2)mod n=B(=A);
[0067] 最后,运算式A的计算转换为计算(A1+A2)mod n,且(A1+A2)mod n=A,其中运算式A1的值由第1装置利用自己的整数秘密计算得到,运算式A2的值由第2装置利用自己的整数秘密计算得到。
[0068] (至于最后的模n相加运算(A1+A2)mod n由谁计算,取决于具体应用场景,可能由第1或第2装置或两个装置之外的一个装置计算)
[0069] 在以上所述的运算式转换和计算方法的基础上,可构建运算式转换和计算系统,系统包括第1装置、第2装置,两个装置按所述运算式转换和计算方法将所述运算式A转换为满足关系(A1+A2)mod n=A的所述运算式A1、A2,其中运算式A1的值由第1装置利用自己的整数秘密计算得到,运算式A2的值由第2装置利用自己的整数秘密计算得到。
[0070] 本发明提出的秘密相加运算转换为相乘运算的方法具体如下。
[0071] 所述秘密相加运算转换为相乘运算的方法涉及第1装置、第2装置;
[0072] 第1装置有整数秘密d1,第2装置有整数秘密d2,且(d1+d2)mod n不为0,其中n是一个素数;
[0073] 两个装置按如下方式之一将d1和d2的相加项,即d1+d2,转化为第1装置在[1,n-1]内的整数秘密b1和第2装置在[1,n-1]内的整数秘密b2的相乘项,即b1b2,且保持模n运算结果不变,即(d1+d2)mod n=(b1b2)mod n:
[0074] 方式一:
[0075] 第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=E((a2d2)mod n),其中E(·)表示使用第2装置的同态加密公钥进行加法同态加密的加密运算;
[0076] 第2装置将c0、c1发送给第1装置;
[0077] 第1装置检查确定c0、c1是否为0的加密结果,若c0或c1是0的加密结果,则报错,若不是,则继续进行如下计算:
[0078] 第1装置在[1,n-1]内随机选择一个作为秘密的整数b1,计算
[0079] c2=E(z1n)⊕((((b1)-1d1)mod n)⊙c0)⊕(((b1)-1+z0n)⊙c1),其中(b1)-1是b1的模n乘法逆;
[0080] 第1装置将c2提交给第2装置;
[0081] 第2装置计算b2=((a2)-1(D(c2)mod n))mod n,其中(a2)-1是a2的模n乘法逆;
[0082] 方式二:
[0083] 第2装置在[1,n-1]内随机选择一个整数a2,计算c0=E(a2),c1=(a2d2)mod n;
[0084] 第2装置将c0、c1发送给第1装置;
[0085] 第1装置检查确定c0是否为0的加密结果、c1是否为0,若c0是0的加密结果或c1是0,则报错,否则,继续进行如下计算:
[0086] 第1装置在[1,n-1]内随机选择一个作为秘密的整数b1,在[0,n-1]内随机选择一个整数t,计算
[0087] c2=E(t+z1n)⊕(((((b1)-1d1)mod n)+z0n)⊙c0),
[0088] c3=((b1)-1c1-t)mod n,其中(b1)-1是b1的模n乘法逆;
[0089] 第1装置将c2、c3提交给第2装置;
[0090] 第2装置计算b2=((a2)-1((D(c2)+c3)mod n))mod n,其中(a2)-1是a2的模n乘法逆;
[0091] 之后,在需要计算d1+d2的模n运算式中使用b1b2替换d1+d2;
[0092] 在以上计算过程中,⊕表示同态加密的密文数的加运算(对应相应明文数相加后的加密结果),⊙表示同态加密中的明文数与密文数的乘运算(对应多个相同密文数的⊕累加);
[0093] 所述z0是第1装置随机选择的整数,或者是第1装置按预定的规则选择的整数,或者是第1装置按约定或要求固定选择的整数(包括固定取值0),而所述z1是第1装置随机选择的整数;
[0094] 所述z0、z1的取值范围不限于[1,n-1],且z0、z1的取值是整数(可正、可负,可为0);
[0095] 对于以上所述秘密相加运算转换为相乘运算的方法中的方式一,当c0、c1对应的明文数在[1,n-1]内时,z0、z1的取值使得c2、c3对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2、c3对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;
[0096] 对于以上所述秘密相加运算转换为相乘运算的方法中的方式二,当c0对应的明文数在[1,n-1]内时,z0、z1的取值使得c2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得c2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小;
[0097] 所述概率极小指具体应用中所确定的允许的概率;
[0098] 以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。
[0099] 对于以上所述的秘密相加运算转换为相乘运算的方法,若d是一个装置的整数秘密,a为此装置知道的整数(保密或非保密),则ad和a+d也是此装置的整数秘密。
[0100] 对于以上所述的秘密相加运算转换为相乘运算的方法,第1装置和第2装置在不暴露各自秘密的情况下检查确定(d1+d2)mod n是否为0的一种方法如下:
[0101] 第2装置加密得到t0=E((d2)mod n),将t0提交给第1装置;
[0102] 第1装置在[1,n-1]中随机选择两个整数q1、q2,在[0,n-1]中随机选择两个整数v0、v1,计算t1=(q1d1+v0)mod n,t2=E(-v0+z2n)⊕(q1⊙t0),t3=(q1q2d1+v1)mod n,t4=E(-v1+z3n)⊕(((q1q2)mod n)⊙t0);
[0103] 第1装置将t1、t2、t3、t4提交给第2装置;
[0104] 第2装置计算w1=(t1+D(t2))mod n,w2=(t3+D(t4))mod n;
[0105] 第2装置检查w1和w2是否为0,若w1或w2为0,则第2装置确定(d1+d2)mod n为0,否则,第2装置确定(d1+d2)mod n不为0;
[0106] 第2装置计算q3=(w2(w1)-1)mod n,其中(w1)-1是w1的模n乘法逆;
[0107] 第2装置将q3返回给第1装置;
[0108] 若第2装置无法返回q3,或者第2装置返回的q3与q2不相等,则第1装置确定(d1+d2)mod n为0;
[0109] 若第2装置返回q3且返回的q3与q2相等,则第1装置确定(d1+d2)mod n不为0;
[0110] 所述z2、z3是第1装置随机选择的整数,z2、z3的取值范围不限于[1,n-1],且z2、z3的取值是整数(可正、可负,可为0);当t0对应的明文数在[1,n-1]内时,z2、z3的取值使得t2、t4对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得t2、t4对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小,所述概率极小指具体应用中所确定的允许的概率;
[0111] 以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。
[0112] 对于以上所述的秘密相加运算转换为相乘运算的方法,第1装置和第2装置在不暴露各自秘密的情况下检查确定(d1+d2)mod n是否为0的另一种方法如下:
[0113] 第2装置加密得到t0=E((d2)mod n),将t0提交给第1装置;
[0114] 第1装置在[1,n-1]中随机选择两个整数q1、q2,计算t1=E(((q1d1)mod n)+z2n)⊕(q1⊙t0),t2=E(((q1q2d1)mod n)+z3n)⊕(((q1q2)mod n)⊙t0);
[0115] 第1装置将t1、t2提交给第2装置;
[0116] 第2装置计算w1=D(t1)mod n,w2=D(t2)mod n;
[0117] 第2装置检查w1和w2是否为0,若w1或w2为0,则第2装置确定(d1+d2)mod n为0,否则,第2装置确定(d1+d2)mod n不为0;
[0118] 第2装置计算q3=(w2(w1)-1)mod n,其中(w1)-1是w1的模n乘法逆;
[0119] 第2装置将q3返回给第1装置;
[0120] 若第2装置无法返回q3,或者第2装置返回的q3与q2不相等,则第1装置确定(d1+d2)mod n为0;
[0121] 若第2装置返回q3且返回的q3与q2相等,则第1装置确定(d1+d2)mod n不为0;
[0122] 所述z2、z3是第1装置随机选择的整数,z2、z3的取值范围不限于[1,n-1],且z2、z3的取值是整数(可正、可负,可为0);当t0对应的明文数在[1,n-1]内时,z2、z3的取值使得t1、t2对应的明文数不超出加法同态加密的明文数的补数的表示范围,或者使得t1、t2对应的明文数超出加法同态加密的明文数的补数的表示范围的概率极小,所述概率极小指具体应用中所确定的允许的概率;
[0123] 以上计算过程中所使用的加法同态加密针对被加密的明文数进行运算所对应的模m大于n。
[0124] 基于以上所述的秘密相加运算转换为相乘运算的方法,可相应地得到一种运算式转换和计算方法,具体如下:
[0125] 所述第1装置、第2装置进行协同计算的运算式A是由如下运算项相加构成的模n运算:
[0126] 第1装置和第2装置协同计算的运算式A为第1装置的整数秘密项(1项或多项由第1装置的秘密单独构成的运算项),第2装置的整数秘密项(1项或多项由第2装置的秘密单独构成的运算项),第1装置的整数秘密和第2装置的整数秘密的相乘项(1项或多项),非保密整数项(1项和多项非保密整数构成的运算项,合并后1项);
[0127] 运算式A的值不能公开;
[0128] 第1装置和第2装置在保持模n运算结果不变的情况下,协同将运算式A中出现的每个第1装置和第2装置的整数秘密的相乘项分别转化为第1装置和第2装置的整数秘密的相加项,转换得到的运算式D为第1装置的整数秘密项(1项或多项由第1装置的秘密单独构成的运算项),第2装置的整数秘密项(1项或多项由第2装置的秘密单独构成的运算项),非保密整数项(1项和多项非保密整数构成的运算项,合并后1项)相加构成的模n运算式;
[0129] 从运算式D中分离出模n运算式D1、D2,其中,D1是第1装置的整数秘密项(1项或多项)和非保密整数项相加构成的模n运算式,D2是第2装置的整数秘密项(1项或多项)和非保密整数项相加构成的模n运算式,且D1中的非保密整数项与D2中的非保密整数项之和的模n余数,与将D中出现的非保密整数项之和的模n余数相同,分离得到D1、D2满足关系(D1+D2)mod n=D(=A);
[0130] 之后,第1装置利用自己的整数秘密计算D1得到d1,第2装置利用自己的整数秘密计算D2得到d2;
[0131] 最后,第1装置和第2装置利用所述秘密相加运算转换为相乘运算的方法,计算得到满足关系(d1+d2)mod n=(b1b2)mod n的第1装置的整数秘密b1,第2装置的整数秘密b2,则得到b1、b2的值与运算式A的值的关系A=(b1b2)mod n,A-1=((b1)-1(b2)-1)mod n,其中A-1是A-1 -1的模n乘法逆,(b1) 、(b2) 分别是b1、b2的模n乘法逆。
[0132] (最后怎么计算A、A-1,取决于具体应用)
[0133] 基于以上所述的基于秘密相加运算转换为相乘运算的方法得到的运算式转换和计算方法,可构建相应的运算式转换和计算系统,系统包括第1装置、第2装置,两个装置按所述运算式转换和计算方法将所述运算式A转换为满足关系(A1+A2)mod n=A的所述运算式A1、A2,从运算式A1、A2的值协同计算得到第1装置的整数秘密b1,第2装置的整数秘密b2,且得到b1、b2的值与运算式A的值的关系A=(b1b2)mod n,A-1=((b1)-1(b2)-1)mod n,其中A-1是A的模n乘法逆,(b1)-1、(b2)-1分别是b1、b2的模n乘法逆。
[0134] 结合实施例可以看到,基于本发明的方法和系统,能方便地实现各种基于秘密共享的密码协同计算,因此,本发明的方法和系统具有普适性,具有很好的实际应用价值。

具体实施方式

[0135] 对于加法同态加密算法,目前有许多的这类算法(或支持加法同态的同态加密算),可以从中选择一个算法即可。在实施加法同态加密算法时,实施的加法同态加密针对加密前的明文数的模m要远大于n,若m的二进制位数是L,而n的二进制位数是S,则L至少是S的两倍。
[0136] 下面结合实施例及其应用对本发明作进一步的描述,以下实施例及其应用不代表全部可能的实施例及其应用,不作为对本发明的限定。
[0137] 实施例1、
[0138] 此实施例中,两个装置利用秘密数相乘运算转换为相加运算的方法在不暴露各自秘密的情况下,协同生成用户的SM2私钥dA,生成用户公钥PA=[dA]G,生成第1、第2装置的秘密份额d1、d2,且(d1+d2)mod n=(1+dA)-1,其中G是椭圆曲线点群的基点,具体如下。
[0139] 第1装置在[1,n-1]内随机选择一个整数c1,第2装置在[1,n-1]内随机选择一个整数c2;第1装置计算Q1=[c1]G,第2装置计算Q2=[c2]Q1-G;第1装置以(c1)-1为秘密b1,第2装置以(c2)-1为秘密b2,然后两个装置利用秘密数相乘运算转换为相加运算的方法,得到第1装置在[1,n-1]内的整数秘密d1,第2装置在[0,n-1]内的整数秘密d2,则两个装置隐含生成了用户私钥dA,Q2为用户私钥dA对应的公钥PA,且d1、d2分别为第1装置、第2装置的秘密份额,且(d1+d2)mod n=(1+dA)-1。
[0140] 实施例2、
[0141] 此实施例将本发明的从秘密数相乘运算转换为相加运算的方法得到的运算式转换和计算方法用于ECDSA数字签名的协同生成。
[0142] 设G是椭圆曲线点群的基点,素数n是G的阶(也即椭圆曲线点群的阶),d是用户的私钥。
[0143] 设第1装置、第2装置分别有[1,n-1]内的整数秘密d1、d2,且d1、d2与用户私钥d满足关系(d1d2)mod n=d(乘积秘密分享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2)。
[0144] 当使用用户私钥d对消息M进行数字签名,两个装置按如下方式进行数字签名的协同生成:
[0145] 第1装置、第2装置分别在[1,n-1]内随机选择作为秘密的整数k1、k2,协同计算得到-1(k1k2)G=(x1,y1),取r=x1 mod n,e=hash(M),之后两个装置需协同计算s=(k1k2) (e+r(d1d2))mod n=(e(k1k2)-1+r(d1d2)(k1k2)-1)mod n。
[0146] 对此,两个装置以(e(k1k2)-1+r(d1d2)(k1k2)-1)mod n为计算式A(有两个乘积项),以e(k1)-1、rd1(k1)-1为第1装置的秘密,以(k2)-1、d2(k2)-1为第2装置的秘密,利用前述基于秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为s,由此得到针对消息M的数字签名(r,s)。
[0147] 实施例3、
[0148] 此实施例与实施例2的差别在于第1装置、第2装置在[1,n-1]内的整数秘密d1、d2与用户私钥d的关系为(d1+d2)mod n=d(求和秘密分享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2)。
[0149] 计算得到r、e之后,两个装置需协同计算s=(k1k2)-1(e+r(d1+d2))mod n=(e(k1k2)-1+rd1(k1k2)-1+rd2(k1k2)-1)mod n。
[0150] 对此,两个装置以(e(k1k2)-1+rd1(k1k2)-1+rd2(k1k2)-1)mod n为计算式A(有三个乘积项),以e(k1)-1、rd1(k1)-1、r(k1)-1为第1装置的秘密,以(k2)-1、d2(k2)-1为第2装置的秘密,利用前述基于秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为s,由此得到针对消息M的数字签名(r,s)。
[0151] 实施例4、
[0152] 此实施例将本发明的从秘密数相乘运算转换为相加运算的方法得到的运算式转换和计算方法用于SM2数字签名的协同生成。
[0153] 设G是椭圆曲线点群的基点,素数n是G的阶(也即椭圆曲线点群的阶),dA是用户的私钥;
[0154] 设第1装置、第2装置分别有[1,n-1]内的整数秘密d1、d2,且d1、d2与用户私钥dA满足关系(d1d2)mod n=(1+dA)-1(乘积秘密分享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2)。
[0155] 当使用用户私钥dA对消息M进行数字签名,两个装置按如下方式进行数字签名的协同生成:
[0156] 第1装置、第2装置分别在[1,n-1]内随机选择作为秘密的整数k1、k2,协同计算得到[k1k2]G=(x1,y1),取r=(x1+e)mod n,其中e是消息M的散列值,之后两个装置需协同计算s=(((k1k2)+r)(d1d2)-r)mod n。
[0157] 对此,两个装置以((k1k2)(d1d2)+r(d1d2)-r)mod n为计算式A(有两个乘积项,一个非保密整数项),以k1d1、rd1为第1装置的秘密,以k2d2、d2为第2装置的秘密,利用前述基于秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为s,由此得到针对消息M的数字签名(r,s)。
[0158] 实施例5、
[0159] 此实施例与实施例4的差别在于第1装置、第2装置在[1,n-1]内的整数秘密d1、d2与用户私钥dA的关系为(d1+d2)mod n=(1+dA)-1(求和秘密分享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2)。
[0160] 两个装置需协同计算s=(((k1k2)+r)(d1+d2)-r)mod n。
[0161] 对此,两个装置以((k1k2)d1+(k1k2)d2+rd1+rd2-r)mod n为计算式A(有两个乘积项,两个单独的秘密项,一个非保密整数项),以k1d1、k1、rd1为第1装置的秘密,以k2、k2d2、rd2为第2装置的秘密,利用前述基于秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为s,由此得到针对消息M的数字签名(r,s)。
[0162] 实施例6、
[0163] 此实施例将本发明的从秘密数相乘运算转换为相加运算的方法得到的运算式转换和计算方法用于SM9数字签名的协同生成。
[0164] 设有双线映射e:G1×G2→GT时,其中G1、G2是加法循环群,GT是一个乘法循环群,G1、G2、GT的阶是素数n(注:在SM9规范中,G1、G2、GT的阶用的是大写字母N,本专利申请采用小写n);P1为G1中的生成元,Ppub为主公钥(即Ppub=[s]P2,s为主私钥或主密钥,P2为G2中的生成元,参见SM9规范;注意,这里的主私钥或主密钥,主公钥,用户标识私钥使用的符号与SM9规范略有不同)。
[0165] 当使用用户私钥dA对消息M进行数字签名,两个装置按如下方式进行数字签名的协同生成:
[0166] 在[1,n-1]中随机选择一个整数b作为秘密;第1、第2装置分别有[1,n-1]内的秘密份额d1、d2,且(d1d2)mod n=b(乘积秘密共享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2);
[0167] 预先计算有gb=g^b-1,PA=[b-1]dA,其中b-1是b的模n乘法逆;
[0168] 第1装置、第2装置在[1,n-1]内分别随机选择整数r1、r2,协同计算得到w=gb^(r1r2),然后计算h=H2(M||w,n),之后两个装置需协同计算
[0169] l=(r1r2-(d1d2)h)mod n。
[0170] 对此,两个装置以(r1r2-(d1d2)h)mod n为计算式A(有两个乘积项),以r1、-hd1为第1装置的秘密,以r2、d2为第2装置的秘密,利用前述秘基于密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为l,然后计算S=[l]PA,由此得到针对消息M的数字签名(h,S)。
[0171] 实施例7、
[0172] 此实施例与实施例6的差别在于第1装置、第2装置在[1,n-1]内的整数秘密d1、d2与秘密b的关系为(d1+d2)mod n=b(求和秘密分享)(注意:这里的d1、d2不是秘密相乘运算转换为相加运算中的d1、d2),两个装置需协同计算l=(r1r2-(d1+d2)h)mod n。
[0173] 对此,两个装置以(r1r2-hd1-hd2)mod n为计算式A(有1个乘积项,两个单独秘密项),以r1、-hd1为第1装置的秘密,以r2、-hd2为第2装置的秘密,利用前述基于秘密数相乘运算转换为相加运算的方法的运算式转换和计算方法得到仅包含第1装置秘密的所述运算式A1,仅包含第2装置秘密的所述运算式A2,之后第1装置计算得到A1的值,第2装置计算得到A2的值,之后两个装置中的一个装置,或之外的一个装置计算得到(A1+A2)mod n的值,以此值为l,然后计算S=[l]PA,由此得到针对消息M的数字签名(h,S)。
[0174] 实施例8、
[0175] 此实施例将前述秘密相加运算转换为相乘运算的方法用于SM9签名私钥的分割生成(基于秘密共享的私钥生成)(用于加密的私钥的分割生成是完全类似的)。
[0176] 设私钥生成器(Private Key Generator)的主密钥是s,则一个用户标识ID所对应的用于签名的私钥是:dA=[s(hID+s)-1]P1,其中,s是系统主密钥(主私钥),hID是由用户ID及其他信息计算得到杂凑值(散列值),P1是双线性映射的源域中的两个群中的第一个群G1的生成元,(hID+s)-1是(hID+s)的模n乘法逆,n是P1的阶。
[0177] 两个私钥生成器有秘密份额s1、s2,且(s1+s2)mod n=s;两个私钥生成器按如下方式进行用户私钥dA的分割生成:
[0178] 将dA的计算式变换后有dA=P1-[hID(hID+s)-1]P1=P1-[hID(hID+s1+s2)-1]P1;
[0179] 第1装置以hID+s1为秘密,第2装置以s2为秘密,先检验确定((hID+s1)+s2)mod n是否为0,若为0则报错,否则继续;
[0180] 两个装置利用前述秘密相加运算转换为相乘运算的方法,得到第1装置的秘密b1,第2装置的秘密b2,且(b1b2)mod n=((hID+s1)+s2)mod n;
[0181] 之后第1装置计算Q1=[hID(b1)-1]P1,第2装置计算Q2=P1-[(b2)-1]Q1,则Q2即为dA。
[0182] 实施例9、
[0183] 此实施例与实施例8的差别在于两个私钥生成器有秘密份额s1、s2与主密钥满足关系(s1s2)mod n=s;两个装置预先利用前述乘积秘密运算转化为相加秘密运算的方法,得到第1装置在[1,n-1]内的秘密d1,第2装置在[0,n-1]内的秘密d2,且(d1+d2)mod n=(s1s2)mod n=s;之后,两个装置按实施例8中的方式生成用户ID所对应的私钥dA。
[0184] 实施例10、
[0185] 此实施例假设两个装置需要协同计算[(a+bw1+cw2+ds1s2)-1]G,其中w1、s1为第1装置的整数常数秘密,w2、s2为第2装置的整数常数秘密,a、b、c、g为每次计算时取值不同的非保密整数,G是阶为n的椭圆曲线点群中的点,(a+bw1+cw2+gs1s2)-1是(a+bw1+cw2+gs1s2)mod n的模n乘法逆。
[0186] w1、s1、w2、s2为整数常数秘密,a、b、c、g为每次计算时取值不同的非保密整数,这意味着(a+bw1+cw2+gs1s2)mod n的值是需要保密的,不能公开的(否则,w1、s1、w2、s2会被破解)。
[0187] 为了得到[(a+bw1+cw2+ds1s2)-1]G,两个装置以(a+bw1+cw2+gs1s2)mod n作为运算式A,先利用前述秘密相乘运算转化相加运算的方法将运算式A:(a+bw1+cw2+gs1s2)mod n转化为运算式D:(a+bw1+cw2+g(d1+d2))mod n,然后从运算式D得到运算式D1:(a1+bw1+gd1)mod n,D2:(a2+cw2+gd2)mod n,其中(a1+a2)mod n=a;
[0188] 之后,第1装置利用自己的整数秘密计算D1得到d1,第2装置利用自己的整数秘密计算D2得到d2;之后,第1装置和第2装置利用所述秘密相加运算转换为相乘运算的方法,得到满足关系(d1+d2)mod n=(b1b2)mod n的第1装置的整数秘密b1,第2装置的整数秘密b2;
[0189] 最后,第1装置计算Q1=[(b1)-1]G,第2装置计算Q=[(b2)-1)]Q1,则Q即为[(a+bw1+cw2+gs1s2)-1]G。
[0190] 其他未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。