发明内容
为了解决上述背景技术中存在的技术问题,本发明提供基于梅森素数的秘密分享方法、系统、存储介质及设备,基于梅森素数的模运算进行,提高了秘密分享的效率。
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供基于梅森素数的秘密分享方法,其包括:
在进行秘钥生成时,基于门限值和梅森素数,将待分享的秘密分散为每个参与者持有的密钥;
在进行秘密恢复时,获取若干个参与者持有的密钥,基于门限值和梅森素数,恢复出秘密;
其中,在密钥生成中,遇到乘法计算调用模乘算法,遇到加法计算调用模加算法;在秘密恢复中,遇到减法计算调用模减算法,遇到乘法计算调用模乘算法,遇到除法运算时,将除以分母转为乘以分母的逆后,对分母的逆调用模逆算法。
进一步地,所述模加算法的流程为:
获取进行模加算法的两个元素,且两个元素均大于等于0且小于等于所述梅森素数,梅森素数表示为p=2 q -1;
基于CPU的工作环境,对两个元素的和进行进制转换,得到转换结果;
判断转换结果的溢出位是否为1,若是,则转换结果只保留其低q位,并令转换结果加1;否则,转换结果不变;
输出转换结果,即为两个元素的模加结果。
进一步地,所述模乘算法的流程为:
获取进行模乘算法的两个元素,且两个元素均大于等于0且小于等于所述梅森素数,梅森素数表示为p=2 q -1;
基于CPU的工作环境,对两个元素的乘积进行进制转换,得到转换结果;
获取转换结果的低q比特c low 和高q比特c high ;
调用模加算法计算c=(c low +c high ) (mod(p));
输出c,即为两个元素的模乘结果。
进一步地,所述模减算法的流程为:
获取进行模减算法的两个元素,且两个元素均大于等于0且小于等于所述梅森素数,梅森素数表示为p=2 q -1;
基于CPU的工作环境,对两个元素的差进行进制转换,得到转换结果;
判断转换结果的借位位是否为1,若是,则转换结果只保留其低q位,并令转换结果减1;否则,转换结果不变;
输出转换结果,即为两个元素的模减结果。
进一步地,所述模逆算法的流程为:
(1)获取进行模逆算法的元素a,且满足0≤a<p,p为所述梅森素数;
(2)令u=a,v=p,x 1=1,x 2=0;
(3)判断u和v是否均不等于1,若是,则执行步骤(4);否则,执行步骤(9);
(4)判断u是否为偶数,若是,执行步骤(5);否则,执行步骤(6);
(5)更新u,u= u/2;并判断x 1是否为偶数,若是x 1=x 1/2,否则,x 1=(x 1+p)/2;然后返回步骤(4);
(6)判断v是否为偶数,若是,执行步骤(7);否则,执行步骤(8);
(7)更新v,v= v/2;并判断x 2是否为偶数,若是x 2=x 2/2,否则,x 2=(x 2+p)/2;然后返回步骤(6);
(8)如果u≥v,u=u-v,x 1=x 1-x 2;如果u<v,v=v-u,x 2=x 2-x 1;并返回步骤(3);
(9)如果u=1,则返回c=x 1(mod(p));如果v=1,则返回c=x 2(mod(p));
(10)输出c,即为(a -1)(mod(p))的结果。
进一步地,第i个参与者持有的密钥的密钥值为:
keyvalue i = ( msg + i • ra 1 + i 2 • ra 2 + ⋯ + i k-1 • ra k-1 )(mod(p))
其中,msg为待分享的秘密,ra 1 、ra 2 直到ra k-1 为根据所述门限值k,生成的k-1个模p的随机数,p为所述梅森素数。
进一步地,恢复出的秘密表示为:
其中,p为所述梅森素数,k为所述门限值,value i 为用于进行复原秘密的第i个密钥的密钥值,num i 为用于进行复原秘密的第i个密钥的编号。
本发明的第二个方面提供基于梅森素数的秘密分享系统,其包括:
密钥生成模块,其被配置为:在进行秘钥生成时,基于门限值和梅森素数,将待分享的秘密分散为每个参与者持有的密钥;
秘密恢复模块,其被配置为:在进行秘密恢复时,获取若干个参与者持有的密钥,基于门限值和梅森素数,恢复出秘密;
其中,在密钥生成中,遇到乘法计算调用模乘算法,遇到加法计算调用模加算法;在秘密恢复中,遇到减法计算调用模减算法,遇到乘法计算调用模乘算法,遇到除法运算时,将除以分母转为乘以分母的逆后,对分母的逆调用模逆算法。
本发明的第三个方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的基于梅森素数的秘密分享方法中的步骤。
本发明的第四个方面提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的基于梅森素数的秘密分享方法中的步骤。
与现有技术相比,本发明的有益效果是:
本发明提供了基于梅森素数的秘密分享方法,其是基于模运算的,基于梅森素数的模运算效率较高,因此秘密分享的效率有所提高。
本发明提供了基于梅森素数的秘密分享方法,其根据待分享秘密的长度选择不同的梅森素数,可以对任意长度的秘密,实现高效的秘密分享。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
实施例一
本实施例提供了基于梅森素数的秘密分享方法,如图1和图2所示,具体包括以下步骤:
步骤1、密钥生成:即在进行秘钥生成时,基于门限值和梅森素数,将待分享的秘密分散为每个参与者持有的密钥,具体步骤为:
步骤101、获取待分享的秘密(消息)msg、参与者个数n、门限值k和梅森素数p,为每个参与者生成一个编号i,并告知每个参与者自己的编号以及参与者的总数(参与者个数n)。
其中,梅森素数p=2 q -1,根据梅森素数的表达式可知:2 q ≡1(mod(p)),指数q的取值可以为:2、3、5、7、13、17、19、31、61、89、107、127、521、607、1279、2203、2281、3217、4253、4423、9689、9941、11213、19937、21701、23209、44497、86243、110503、132049、216091、756839、859433、1257787、1398269、2976221、3021377、6972593、13466917、20996011、24036583、25964951、30402457、32582657、37156667、42643801、43112609、57885161、74207281、77232917或82589933。
具体的,可以根据待分享的秘密msg的长度选取梅森素数p。
步骤102、对待分享的秘密msg进行处理,即,当待分享的秘密的长度不足时,即,如果msg长度小于梅森素数p的长度,根据选定的梅森素数p的长度,在待分享的秘密msg前进行补0。
步骤103、根据门限值k,生成k-1个模p的随机数,记作ra 1、ra 2、…、ra k-1。
步骤104、基于待分享的秘密msg、梅森素数p和k-1个模p的随机数,生成结构体格式的密钥key i ,包括msg的初始长度、编号i以及密钥值keyvalue i ,并发送给对应编号的编号i的参与者。
其中,密钥值keyvalue i 的生成方法为:将待分享的秘密msg视为多项式的0次项,k-1个模p的随机数作为多项式的其他项,生成n个密钥值,则第i个参与者持有的密钥的密钥值为:
keyvalue i = ( msg + i • ra 1 + i 2 • ra 2 + ⋯ + i k-1 • ra k-1 )(mod(p))
其中,msg为待分享的秘密,ra 1 、ra 2 直到ra k-1 为根据所述门限值k,生成的k-1个模p的随机数,p为所述梅森素数,ra 1、ra 2直到ra k-1的系数i、i 2直到i k-1,可以自定义;在密钥生成中,遇到乘法计算调用模乘算法,即,i • ra 1、i 2 • ra 2直到i k-1 • ra k-1均调用模乘算法ab(mod(p)),其中,i、i 2直到i k-1均看作模乘算法中的一个元素a,ra 1、ra 2直到ra k-1均看作模乘算法中的另一个元素b;在密钥生成中,遇到加法计算调用模加算法,即msg + i • ra 1、msg + i • ra 1的结果加i 2 • ra 2、直到msg + i • ra 1 + i 2 • ra 2 + ⋯ + i k-2 • ra k-2的结果加i k-1 • ra k-1均调用模加算法(a+b)(mod(p))。
在进行模加算法时,对于模加算法中的两个元素
,分别基于CPU的工作环境,进行进制转换。具体的,将模加算法中的两个元素,通过进制转换,表示为2
w 进制形式。假设CPU的工作环境为
w比特,
w一般为32或者64,那么数组长度为
t=⌈
q/
w⌉,因为
q为素数,不一定可以整除
w,所以
t对
q/
w的值向上取整;则大数
a可以表示为
w比特的
t维数组:
a=(
A[
t-1],…,
A[1],
A[0]),
A[
i]表示
a的第
i维
w比特字(
w比特组成的数),比如
q=521,
w=64,那么
t=9,
a为一个521比特的数,那么
A[0]就表示
a的1-64比特,
A[1]就表示
a的65-128比特,依次类推;数学上这个表示对应于整数
a的2
w 进制表示:
a=2(t-1)w A[t-1]+2(t-2)w A[t-2]+⋯+2 w A[1]+A[0]
同理,b的2 w 进制表示:
b=2(t-1)w B[t-1]+2(t-2)w B[t-2]+⋯+2 w B[1]+B[0]
其中,B[i]表示b的第i维w比特字。
则,a+b的2 w 进制表示为:
a+b=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0]
其中,C[i]为进制转换中第i位的系数,模加算法中的C[i]=(A[i]+B[i]+δ i-1)(mod2 w ),这里的δ i 表示低w位向高w位的进位值,且δ -1=0。
模加算法的一般方法为在大数加法的基础上,判断是否有溢出,即a+b≥p,如果有溢出,则进行减p操作;可以根据溢出位是否为1,判断a+b是否溢出,溢出位,即2 q ,根据2 q ≡1(mod(p)),减p即为取c的低q位,然后执行加1操作。
综上,模加算法的流程如下:
(1)获取梅森素数p和进行模加算法的两个元素a和b,且两个元素均大于等于0且小于等于梅森素数,即满足0≤a,b<p;
(2)基于CPU的工作环境,对两个元素的和a+b进行进制转换,得到转换结果,即两个元素的和a+b的2 w 进制表示a+b=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0];
(3)令c=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0];
(4)判断C[t-1]对应2 q 的比特位值(转换结果的溢出位)是否为1;
(5)如果为1,则转换结果c只保留其低q位,并令转换结果加1,即执行c=c+1;如果为0,则转换结果c保持不变;
(6)输出转换结果,即为两个元素的模加结果,即,输出c,即为(a+b)(mod(p))的结果。
在进行模乘算法时,与模加算法相同,对于模乘算法中的两个元素
,分别基于CPU的工作环境,进行进制转换,表示为2
w 进制形式:
a的2
w 进制表示:
a=2(t-1)w A[t-1]+2(t-2)w A[t-2]+⋯+2 w A[1]+A[0]
b的2 w 进制表示:
b=2(t-1)w B[t-1]+2(t-2)w B[t-2]+⋯+2 w B[1]+B[0]
其中,A[i]表示a的第i维w比特字,B[i]表示b的第i维w比特字。
则ab的2 w 进制表示为:
ab=2((2t-1)w) C[2t-1]+2((2t-2)w) C[2t-2]…+2 w C[1]+C[0]
乘法的结果长度为q长度的两倍,因此需要归约算法来计算ab(mod(p))。针对梅森素数的特性2 q ≡1(mod(p)),得出其高q位的归约算法。即将ab的结果分为高q位和低q位,直接对高q位和低q位执行模加算法,即可得到ab(mod(p))的归约值。
综上,模乘算法的流程如下:
(1)获取梅森素数p和进行模乘算法的两个元素a和b,且满足0≤a,b<p
(2)基于CPU的工作环境,对两个元素的乘积进行进制转换,得到转换结果,即,得到ab的2 w 进制表示ab=2((2t-1)w) C[2t-1]+2((2t-2)w) C[2t-2]…+2 w C[1]+C[0];
(3)获取转换结果的低q比特c low 和高q比特c high ,令c low 等于转换结果ab的低q比特,c high 等于ab的高q比特;其中,取c low 和c high 均可以通过移位的方式来实现;
(4)调用模加算法计算c=(c low +c high ) (mod(p));
(5)输出c,即为两个元素的模乘结果,即ab(mod(p))的结果。
步骤2、秘密恢复:在进行秘密恢复时,获取若干个参与者持有的密钥,基于门限值和梅森素数,恢复出秘密。秘密的恢复流程包括:
步骤201、获取多份密钥key i ,即若干个参与者持有的密钥key i ;
步骤202、判断获取的密钥的数量,如果密钥数量小于门限值k,则返回解密失败;
步骤203、当获取的密钥的数量大于等于门限值k时,读取各个密钥的编号以及密钥信息,根据各个密钥的编号,选前k个密钥进行复原秘密,将前k个密钥的编号分别记为num i ,密钥值记为value i ;
步骤204、复原秘密:即将前k个密钥的密钥信息(密钥值)代入k-1次多项式解密,即恢复出的秘密表示为:
其中,p为所述梅森素数,k为所述门限值,value i 为用于进行复原秘密的第i个密钥的密钥值,num i 为用于进行复原秘密的第i个密钥的编号
步骤205、输出秘密msg。
在秘密恢复中,k个或k个以上的参与者合作,利用拉格朗日插值公式可以恢复出所共享的秘密,但少于k个参与者合作不能得到关于共享秘密的任何信息。
在秘密恢复中,遇到减法计算调用模减算法,即,0-
num j 和
num i -
num j 均调用模减算法(
a-b)(
mod(
p));在秘密恢复中,遇到除法运算时,将除以分母转为乘以分母的逆,即将
转化为(0-
num j ) •(
num i -
num j )
-1后,对分母的逆调用模逆算法;在秘密恢复中,遇到乘法计算调用模乘算法,即,
调用模乘算法
ab(
mod(
p))。
在进行模减算法时,与模加算法相同,对于模减算法中的两个元素
,分别基于CPU的工作环境,进行进制转换,表示为2
w 进制形式:
a的2
w 进制表示:
a=2(t-1)w A[t-1]+2(t-2)w A[t-2]+⋯+2 w A[1]+A[0]
b的2 w 进制表示:
b=2(t-1)w B[t-1]+2(t-2)w B[t-2]+⋯+2 w B[1]+B[0]
其中,A[i]表示a的第i维w比特字,B[i]表示b的第i维w比特字。
则a-b的2 w 进制表示为:
a-b=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0]
其中,模减算法中的C[i]=(A[i]-B[i]-η i-1)(mod 2 w ),这里的η i 表示低w位向高w位的借位值,且η -1=0。
模减算法在大数加法的基础上,判断是否有借位,即a-b<0,如果有借位,则进行加p操作;可以根据借位位是否为1,判断a+b是否借位,借位位即2 q ,因为默认大于2 q 也为0,如果有借位,则C[t-1]的最高位也一定为1;则根据2 q ≡1(mod(p)),加p即为取c的低q位,然后执行减1的操作。
模减算法的流程如下:
(1)获取梅森素数p和进行模减算法的两个元素a和b,且满足0≤a,b<p
(2)基于CPU的工作环境,对两个元素的差进行进制转换,得到转换结果,即,得到a-b的2 w 进制表示a-b=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0];
(3)令c=2(t-1)w C[t-1]+2(t-2)w C[t-2]+⋯+2 w C[1]+C[0];
(4)判断C[t-1]的最高比特位值(转换结果的借位位)是否为1;
(5)如果为1,则转换结果c只保留其低q位,并令转换结果减1,即执行c=c-1;如果为0,则转换结果不变,即c保持不变;
(6)输出转换结果,即为两个元素的模减结果,即输出c,即为(a-b)(mod(p))的结果。
在进行模逆算法时,对于
,求模
p的逆可以采用二元求逆法,求逆过程中的除以2的操作可以通过右移一位进行,对于奇数
x,执行(
x+
p)/2时,因为
x是奇数,等价于(
x-1)/2+(
p+1)/2,根据计算机内部右移直接将低位抛弃的特点,将
x右移一位等价于(
x-1)/2,因为(
p+1)=2
q ,所以(
p+1)/2即2
q-1,2
q-1= 2
(t-1)w C[
t-1]+2
(t-2)w C[
t-2]+⋯+2
w C[1]+
C[0],且2
q-1的低位全为0,最高位为1,故只需要将
C[
t-1]与(
x-1)/2的最高位进行一次加法即可。
模逆算法的具体流程如下:
(1)获取梅森素数p和进行模逆算法的元素a,且满足0≤a<p;
(2)令u=a,v=p,x 1=1,x 2=0;
(3)判断u和v是否均不等于1,若是,则执行步骤(4);否则,执行步骤(9);
(4)判断u是否为偶数(even),若是,执行步骤(5);否则,执行步骤(6);
(5)更新u,u= u/2;并判断x 1是否为偶数,若是x 1=x 1/2,否则,x 1=(x 1+p)/2;然后返回步骤(4);
(6)判断v是否为偶数(even),若是,执行步骤(7);否则,执行步骤(8);
(7)更新v,v= v/2;并判断x 2是否为偶数,若是x 2=x 2/2,否则,x 2=(x 2+p)/2;然后返回步骤(6);
(8)如果u≥v,u=u-v,x 1=x 1-x 2;如果u<v,v=v-u,x 2=x 2-x 1;并返回步骤(3);
(9)如果u=1,则返回c=x 1(mod(p));如果v=1,则返回c=x 2(mod(p));
(10)输出c,即为(a -1)(mod(p))的结果。
其中,模逆算法中的u=u-v、x 1=x 1-x 2、v=v-u和x 2=x 2-x 1均调用模减算法。
本发明的基于梅森素数的秘密分享方法是基于模运算的,基于梅森素数p的模运算效率较高,因此秘密分享的效率有所提高。
本发明的基于梅森素数的秘密分享方法根据待分享秘密的长度选择不同的梅森素数,可以对任意长度的秘密,实现高效的秘密分享。
实施例二
本实施例提供了基于梅森素数的秘密分享系统,其具体包括如下模块:
密钥生成模块,其被配置为:在进行秘钥生成时,基于门限值和梅森素数,将待分享的秘密分散为每个参与者持有的密钥;
秘密恢复模块,其被配置为:在进行秘密恢复时,获取若干个参与者持有的密钥,基于门限值和梅森素数,恢复出秘密;
其中,在密钥生成中,遇到乘法计算调用模乘算法,遇到加法计算调用模加算法;在秘密恢复中,遇到减法计算调用模减算法,遇到乘法计算调用模乘算法,遇到除法运算时,将除以分母转为乘以分母的逆后,对分母的逆调用模逆算法。
此处需要说明的是,本实施例中的各个模块与实施例一中的各个步骤一一对应,其具体实施过程相同,此处不再累述。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例一所述的基于梅森素数的秘密分享方法中的步骤。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述实施例一所述的基于梅森素数的秘密分享方法中的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。