一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于格的分布式门限加法同态加密方法与流程

2021-11-03 21:08:00 来源:中国专利 TAG:


1.本发明涉及基于同态加密的安全多方计算技术领域,更具体地,涉及一种基于格的分布式门限加法同态加密方法。


背景技术:

2.基于属性加密机制是基于身份加密机制的一种扩展,从本质上来说,基于属性加密机制是在基于身份加密机制中引入了访问结构的概念,实现了对解密权限和访问权限的控制。最早的公开研究起源于简单属性加密,后来扩展到属性前面、属性安全协议的等研究内容。与传统密码学相比,属性加密机制极大的丰富了加密策略的灵活性和用户权限的可描述性,从一点的一对一模式扩展到一对多模式,它具有高效灵活的特点;加密代价仅与相应属性个数相关,而与系统中用户的数量无关;用户能否解密一个密文仅取决于他的属性是否满足密文的策略,而与他是否在密文生产前加入这个系统无关;基米策略可支持复杂的访问结构,如门限式、布达尔表达式;加密这不需要知道解密者的身份信息。基于以上优良特点,属性加密机制可以有效地实现非交互的访问控制。
3.当前实现安全多方计算的主流密码技术有门限秘密共享和同态加密等。同态加密允许对密文域数据进行特定的代数运算,其解密的结果和明文域进行同样的计算结果相同或相似。其特性被广泛应用在隐私保护的云服务计算、外包计算、连邦学习场景中,是新兴隐私技术的一个方向。shamir的门限秘密共享方案通过构造一个k

1次多项式,并将多有共享的秘密作为这个多项式的常数项,将秘密分成n个秘密份额分别分给多个参与者。k个或k个以上的参与者合作利用插值公式可以回复出所共享的秘密,但少于k个参与者合作不能得到关于共享秘密的任何信息。blakley独立提出了另一种门限秘密共享方案,他是利用多维空间中的点来建立门限方案,该方案经共享秘密s看成k维空间中的一个点,每个子秘密为包含这个点的k

1维超平面方程,任意k个k

1维超平面的交点刚好确定共享的秘密,而k

1个子秘密即超平面仅能确定其交线,因而得不到共享秘密的任何信息。目前基于shamir秘密共享方案提出的一些基于格的加密方法,由于其本地份额较多,占用内存较大,通信量较多等问题,还需要进一步的完善。


技术实现要素:

4.本发明为克服上述现有技术中的缺陷,提供一种基于格的分布式门限加法同态加密方法,减少了用户端本地的份额数量,减小了整个协议的通信量,同时减少了用户端算法的计算时间。
5.为解决上述技术问题,本发明采用的技术方案是:一种基于格的分布式门限加法同态加密方法,包括:
6.s1.系统初始设置:输入安全参数λ,输出系统参数params={param0,paramss},其中param0是系统初始化相关参数集合,paramss是多秘密共享相关参数集合;
7.s2.用户秘钥生成:输入系统参数params,输出公私钥对(pk
u
,sk
u
);
8.s3.用户私钥份额生成:输入系统参数params、用户u的私钥sk
u0
和用户集合u中的公钥集合{pk
v1
}
v∈u
,输出为加密消息集合{e
uv
}
v∈u
和用户u的公开份额的有序集合
9.s4.系统公钥合成:输入系统参数params,所有用户的公钥集合{pk
u0
}
u∈u
,计算pk=[∑
u∈u
pk
u0
]
q
,输出系统公钥pk;
[0010]
s5.数据加密:输入系统参数params,系统公钥pk,用户u的明文数据m
u
,输出用户u的密文数据c
u
=(c
u0
,c
u1
);
[0011]
s6.加法同态运算:输入系统参数params,用户的密文数据集合{c
u
}
u∈u
,用户的权重系数集合{w
u
}
u∈u
,然后分别计算ct0=[∑
u∈u
c
u0
·
w
u
]
q
、ct1=[∑
u∈u
c
u1
·
w
u
]
q
,最后输出系统密文ct=(ct0,ct1);
[0012]
s7.部分解密:输入系统参数params,系统密文ct,用户u的公钥pk
u
和用户u收到集合u中其他用户的加密消息集合{e
vu
}
v∈u\{u}
,输出用户u的部分解密值pm
u

[0013]
s8.最终解密:输入系统参数params,系统密文ct=(ct0,ct1),用户的部分解密值集合p1={pm
u
}
u∈v
,其中|p1|≥th,系统公开份额集合os
sys
,集合u中所有用户公开份额集合和输出由最终解密值组成的多项式m。
[0014]
进一步的,具体设置多项式次数d、多项式系数模数q、明文多项式模数t、不可约分圆多项式f(x)、整数多项式环rq表示所有元素系数模q的环r、正态分布χ、均匀分布μ、环r上任意元素混合加密体制
[0015]
hpke={hpke.gen,hpke.enc,hpke.dec}和多秘密共享方案multiss=
[0016]
{multiss.setup,multiss.split,multiss.recover};其中hpke.gen是密钥生成算法,输入为安全参数,输出为加解密的密钥对;hpke.enc为加密算法,输入为加密密钥和明文,输出为密文;hpke.dec为解密算法,输入为密文和解密密钥,输出为明文;multiss.setup为系统初始化算法,输入为安全参数,输出为系统参数;multiss.split为秘密分发算法,输入为系统参数和有序的秘密集合,输出为秘密份额集合和用户公开份额;multiss.recover为秘密重构算法,输入为系统参数和秘密份额集合,输出为有序的秘密集合;
[0017]
然后随机选择对于paramss={n,th,m,u,v,plist,glist,blist,os
sys
},则执行算法multiss.setup(1
λ
)

paramss可得;其中q为大整数素数,为参与者的数量,th为门限值,m为一次要共享的秘密数量,要求m≥th;所有参与者的集合为u,满足门限数量的用户集合为v,即n≥|v|≥th;然后在[n 2m th,q

1]中随机选择n个互不相同的整数p1,p2,p3,

,p
n
作为个参与者的个人身份标识,其集合记为plist;设区间[m,m n

1]中连续n个整数g1,g2,g3,

,g
n
为系统公开份额的标识,其集合记为glist;最后在[0,q

1]范围内随机选择n个随机整数k1,k2,k3,

,k
n
,称其系统公开份额,其集合记为os
sys

[0018]
进一步的,所述的秘密分发算法multiss.split由秘密分发者负责执行,输入系统参数paramss和有序的秘密集合mlist,输出秘密份额集合slist和用户公开份额os
u
;设待共享的m个秘密具体为c1,c2,c3,

,c
m
,具体步骤如下:
[0019]
插值生成n m

1次多项式h(x):根据m个秘密组成的数值对(0,c1),(1,c2),(2,
c3),

(m

1,c
m
),以及n个系统公开份额的数值对(g1,k1),(g2,k2),(g3,k3),

,(g
n
,k
n
)共n m个数值对,利用拉格朗日多项式插值算法,计算得到n m

1次多项式h(x)=a0 a1x a2x2

a
n m
‑1x
n m
‑1;
[0020]
生成参与者的秘密份额集合slist:利用得到的n m

1次多项式h(x),分别计算参与者的秘密份额;将用户的个人身份标识p
i
作为自变量输入多项式h(x),得到的函数值h(p
i
)即为参与者的秘密份额,设其集合为slist;
[0021]
当m>th时,需生成秘密分发者的公开份额集合os
u
:设区间[m n,m 2n

th

1]中连续m

th个整数b1,b2,b3,

,b
m

th
为秘密分发者公开份额的标识,其集合记为blist;将秘密分发者公开份额的标识集合blist分别输入多项式h(x)得到对应的值h(b
i
),其集合记作os
u

[0022]
进一步的,所述的秘密重构算法multiss.recover由任何有秘密恢复需求的一方执行,输入系统参数paramss、秘密份额集合slist,要求集合中的数量不少于th和秘密分发者的公开份额集合os
u
,输出有序的秘密集合mlist,具体步骤如下:
[0023]
插值恢复n m

1次多项式h(x):根据秘密份额集合slist,得到不少于th个数值对(p
i
,h(p
i
));根据系统公开份额os
sys
,得到n个数值对(g
n
,k
n
);若m>th时,则还需结合秘密分发者的公开份额集合os
u
,得到m

th个数值对(b
i
,h(b
i
));利用一共不少于m n个数值对,使用拉格朗日多项式插值算法,恢复h(x);
[0024]
生成有序的秘密集合mlist:分别计算c
i
=h(i

1)来恢复秘密,其中i=1,2,

,m,该集合记作mlist。
[0025]
进一步的,所述的步骤s2具体包括:首先从系数是{

1,0,1}的多项式环r3中均匀随机地选择一个多项式然后按照χ分布选择一个噪声多项式设置且运行运行得到hpke体制的加解密密钥对,设置sk
u
=(sk
u0
,k
u1
)和pk
u
=(pk
u0
,pk
u1
),输出公私钥对(pk
u
,sk
u
)。
[0026]
进一步的,所述的步骤s3具体包括:
[0027]
首先选择一个噪声对于sk
u0
和中的每m个连续系数,执行秘密分发算法multiss.split,完整共享整个私钥和噪声都是需要分别执行次多秘密共享算法,得到关于用户u的私钥和噪声的秘密份额的有序集合和用户公开份额的有序集合和这四个有序集合中分别都包含个元素;然后以几个集合u中的每一个用户为单位,分别执行如下流程:
[0028]
a)把发送给用户v的两个秘密份额有序集合{ssk
uv
,seu
uv
}打包为消息s
uv
,其中ssk
uv
为关于私钥的秘密份额集合,seu
uv
为关于噪声的秘密份额集合,假设用户v的身份标识为p0,则,则
[0029]
b)利用用户v的公钥pk
v1
,运行加密算法hpke.enc(pk
v1
,s
uv
)获得加密消息e
uv
;最后输出为包含各个用户的加密消息集合{e
uv
}
v∈u
和用户u的公开份额的有序集合其中用户u自己的份额留在本地。
[0030]
进一步的,所述的步骤s5具体包括:首先将明文数据m
u
作为系数嵌入一个最高次
为d的多项式x
u
,然后随机选择两个噪声分别计算输出用户u的密文数据c
u
=(c
u0
,c
u1
)。
[0031]
进一步的,所述的步骤s7具体包括:首先运行解密算法hpke.dec(sk
u1
,e
vu
),得到消息集合{s
vu
}
v∈u\{u}
,逐个解析消息后,得到关于私钥的秘密份额有序集合的集合{ssk
vu
}
v∈u\{u}
和关于噪声的秘密份额有序集合的集合{seu
vu
}
v∈u\{u}
,两者分别包含n

1个集合元素,每个集合元素又由个秘密份额有序组成;加上用户u共享本地私钥和噪声时保留给自身的两种秘密份额有序集合,对其分别汇总为总份额有序集合;计算ssk
uv
=∑
v∈u
ssk
vu
,seu
uv
=∑
v∈u
seu
vu
,然后执行部分解密值计算方法,将有序集合ssk
u
进行模m间隔嵌入d次多项式得到sk,将有序集合seu
u
进行模m连续嵌入d次多项式得到se;从密文ct中取出ct0,计算pm
u
=[ct0·
sk se]
q
,最后输出用户u的部分解密值pm
u

[0032]
进一步的,所述的步骤s8具体包括:首先对于用户公开份额集合h2和h3,其中分别包含n个集合元素,每个集合元素由个用户公开份额集合有序组成,分别将这n个集合元素按顺序对应相加,即计算和得到用户份额汇总集合:
[0033][0034][0035]
此时sh0和sh1都分别由个份额集合有序组成,每个份额集合包含m

th个份额,然后根据i=1,2,

,m

th,每次从sh0和sh1中分别取出集合和然后根据步骤s7中的部分解密方法计算关于用户公开份额的部分解密值,其中有序集合执行模m间隔嵌入,执行模m连续嵌入;执行m

th次后,得到关于用户公开份额的部分解密值集合p2;
[0036]
同样对于系统公开份额集合{k1,k2,k3,

,k
n
},根据i=1,2,

,n,计算k
i
=n*k
i
,构造元素数量为的两个集合的两个集合
[0037]
根据步骤s7汇总的部分解密方法,计算关于系统公开份额的部分解密值,其中集合执行模m间隔嵌入,执行模m连续嵌入;执行n次后,得到关于系统公开份额的部分解密值集合p3,合并三个部分解密值集合p1、p2、p3得到p={pm
i
},其对应的标识集合简写为a={a1,

,ai},i∈[1,|p|],其中每一项对应的拉格朗日插值基函数为la
ai
(x);
[0038]
对于i=1,2,3,

,|p|,对应的将集合{la
ai
(0),la
ai
(1),...,la
ai
(m

1)}对d次多项式进行模m间隔嵌入得到l
i
;然后计算由最终解密值组成的多项式m,其中:
[0039][0040]
进一步的,

对于任何集合x,定义|x|为集合x中元素的数量;如果x是一个向量,则|x|是这个向量的维度;
[0041]

对于给定的最高次为d的不可约分圆多项式f(x),定义一个整数多项式环为环r上所有的元素都是向量,也称为多项式;rq表示所有元素系数模q的环r,其中表示从r
q
上按照均匀分布选择一个环r上任意元素其第i项的系数为a
i
,即满足公式其中x为自变量;其无穷范数满足公式对于r的拓展因子δ
r
满足公式
[0042]

对于任意整数h>1,定义为整数集合表示一个整数环{0,1,2

,q

1},对于任意[x]
h
=xmodh;对于任意[x]意味着向下取整,[x]意味着向上取整,[x]意味着取最近的整数;对于任意x∈r,意味着对中的所有系数都进行模h操作;
[0043]

对于给定的安全参数λ,如果对于所有都满足negl(λ)=o(1/λ
c
),则称函数negl(λ)是可忽略的;
[0044]

对于给定的参概率分布使用表示x从中随机采样;对于集合x,用x

x表示x是从集合中均匀采样得到的;对于整数上的分布χ,如果满足取值范围在[

,b]范围内,则称其界限为b;
[0045]

对于将元素数量为m的集合set嵌入最高次为d的多项式poly,要求m能被d 1整除,且d≤m2‑
1;包括以下两种方式:
[0046]
1)模m连续嵌入:当多项式poly其中的第i项满足i%m=1(i=1,

,d 1)时,将有序集合set中排在首位的元素嵌入对应项的系数,并在之后的每一项都嵌入相同系数,直到新的项再次满足i%m=1时,从集合删除上一元素,将重新排在首位的元素嵌入对应项,重复执行,直到遍历整个多项式结束;
[0047]
2)模m间隔嵌入:当多项式poly其中的第i项满足i%m=1(i=1,

,d 1)时,将有序集合set中排在首位的元素嵌入对应项的系数,并从集合删除该元素,重复执行,直到遍历整个多项式结束;
[0048]

对于整数集合{a,b,c,d},本文约定其对应的拉格朗日基函数,设自变量为x,集合为{la
a
(x),la
b
(x),la
c
(x),la
d
(x)},具体为:
[0049][0050][0051]
与现有技术相比,有益效果是:本发明提供的一种基于格的分布式门限加法同态加密方法,减少了用户端本地的份额数量,进一步减小了整个协议的通信量,同时减少了用户端算法的计算时间,允许用户端利用轻量级计算设备参与整个协议。
附图说明
[0052]
图1是本发明的方法流程示意图。
具体实施方式
[0053]
在本实施例中,首先对于本实施例中多次出现的部分符号和算法进一统一约定。约定如下:
[0054]
(1)对于任何集合x,定义|x|为集合x中元素的数量;如果x是一个向量,则|x|是这个向量的维度。
[0055]
(2)对于给定的最高次为d的不可约分圆多项式f(x),定义一个整数多项式环为环r上所有的元素都是向量,也称为多项式。rq表示所有元素系数模q的环r,其中表示从r
q
上按照均匀分布选择一个环r上任意元素其第i项的系数为a
i
,即满足公式(1),其中x为自变量;其无穷范数满足公式(2);对于r的拓展因子δ
r
满足公式(3):
[0056][0057][0058][0059]
(3)对于任意整数h>1,定义为整数集合表示一个整数环{0,1,2

,q

1},对于任意[x]
h
=xmodh;对于任意[x]意味着向下取整,[x]意味着向上取整,「x」意味着取最近的整数;对于任意x∈r,意味着对中的所有系数都进行模h操作。
[0060]
(4)对于给定的安全参数λ,如果对于所有都满足negl(λ)=o(1/λ
c
),则称函数negl(λ)是可忽略的。如果某事件发生的概率为negl(λ),则指它发生的概率可以忽略不计。
[0061]
(5)对于给定的参概率分布d,本文使用表示x从中随机采样;对于集合x,用x

x表示x是从集合中均匀采样得到的;对于整数上的分布χ,如果满足取值范围在[

b,b]范围内,则称其界限为b。
[0062]
(6)对于混合加密体制hpke={hpke.gen,hpke.enc,hpke.dec},其中密钥生成算法是hpke.gen,输入为安全参数,输出为加解密的密钥对;加密算法是hpke.enc,输入为加密密钥和明文,输出为密文;解密算法是hpke.dec,输入为密文和解密密钥,输出为明文。
[0063]
(7)对于将元素数量为m的集合set嵌入最高次为d的多项式poly(要求m能被d 1整除,且d≤m2‑
1),约定有以下两种方法:
[0064]
a)模m连续嵌入:当多项式poly其中的第i项满足i%m=1(i=1,

,d 1)时,将有序集合set中排在首位的元素嵌入对应项的系数,并在之后的每一项都嵌入相同系数,直到
新的项再次满足i%m=1时,从集合删除上一元素,将重新排在首位的元素嵌入对应项,重复执行,直到遍历整个多项式结束。
[0065]
举例:set={a,b,c},poly的最高次为d=8,则嵌入后的多项式(自变量为x):
[0066]
poly=a ax ax2 bx3 bx4 bx5 cx6 cx7 cx8。
[0067]
b)模m间隔嵌入:当多项式poly其中的第i项满足i%m=1(i=1,

,d 1)时,将有序集合set中排在首位的元素嵌入对应项的系数,并从集合删除该元素,重复执行,直到遍历整个多项式结束。
[0068]
举例:set={a,b,c},poly的最高次为d=8,则嵌入后的多项式(自变量为x):
[0069]
poly=a 0x 0x2 bx3 0x4 0x5 cx6 0x7 0x8。
[0070]
(8)对于整数集合{a,b,c,d},约定其对应的拉格朗日基函数(设自变量为x)集合为{la
a
(x),la
b
(x),la
c
(x),la
d
(x)},具体为:
[0071][0072][0073]
(9)对于多秘密共享方案
[0074]
multiss={multiss.setup,multiss.split,multiss.recover},其中系统初始化算法是multiss.setup,输入为安全参数,输出为系统参数;秘密分发算法是multiss.split,输入为系统参数和有序的秘密集合,输出为秘密份额集合和用户公开份额;秘密重构算法是multiss.recover,输入为系统参数和秘密份额集合,输出为有序的秘密集合。
[0075]
a)系统初始化算法:multiss.setup
[0076]
本算法输入安全参数λ,输出系统参数paramss={q,n,th,m,u,v,plist,glist,os
sys
},其中q为大整数素数,为参与者的数量,th为门限值,m为一次要共享的秘密数量,要求m≥th。所有参与者的集合为u,满足门限数量的用户集合为v,即n≥|v|≥th。然后在[n 2m th,q

1]中随机选择n个互不相同的整数p1,p2,p3,

,p
n
作为个参与者的个人身份标识,其集合记为plist;设区间[m,m

1]中连续n个整数g1,g2,g3,

,g
n
为系统公开份额的标识,其集合记为glist;最后在[0,q

1]范围内随机选择n个随机整数k1,k2,k3,

,k
n
,称其系统公开份额,其集合记为os
sys

[0077]
b)秘密分发算法:multiss.split
[0078]
本算法由秘密分发者负责执行,输入系统参数paramss和有序的秘密集合mlist,输出秘密份额集合slist和用户公开份额os
u
。设待共享的m个秘密具体为c1,c2,c3,

,c
m
,具体步骤如下:
[0079]
1、插值生成n m

1次多项式h(x):根据m个秘密组成的数值对(0,c1),(1,c2),(2,c3),

(m

1,c
m
),以及n个系统公开份额的数值对(g1,k1),(g2,k2),(g3,k3),

,(g
n
,k
n
)共n m个数值对,利用拉格朗日多项式插值算法,计算得到n m

1次多项式h(x)=a0 a1x a2x2

a
n m
‑1x
n m
‑1;
[0080]
2、生成参与者的秘密份额集合slist:利用得到的n m

1次多项式h(x),分别计算参与者的秘密份额;将用户的个人身份标识p
i
作为自变量输入多项式h(x),得到的函数值h
(p
i
)即为参与者的秘密份额,设其集合为slist;
[0081]
3、当m>th时,需生成秘密分发者的公开份额集合os
u
:设区间[m n,m 2n

th

1]中连续m

th个整数b1,b2,b3,

,b
m

th
为秘密分发者公开份额的标识,其集合记为blist;将秘密分发者公开份额的标识集合blist分别输入多项式h(x)得到对应的值h(b
i
),其集合记作os
u

[0082]
c)秘密重构算法:multiss.recover
[0083]
本算法可由任何有秘密恢复需求的一方执行,输入系统参数paramss、秘密份额集合slist,要求集合中的数量不少于th和秘密分发者的公开份额集合os
u
,输出有序的秘密集合mlist,具体步骤如下:
[0084]
插值恢复n m

1次多项式h(x):根据秘密份额集合slist,得到不少于th个数值对(p
i
,h(p
i
));根据系统公开份额os
sys
,得到n个数值对(g
n
,k
n
);若m>th时,则还需结合秘密分发者的公开份额集合os
u
,得到m

th个数值对(b
i
,h(b
i
));利用一共不少于m n个数值对,使用拉格朗日多项式插值算法,恢复h(x);
[0085]
生成有序的秘密集合mlist:分别计算c
i
=h(i

1)来恢复秘密,其中i=1,2,

,m,该集合记作mlist
[0086]
本实施例提供的一种基于格的分布式门限加法同态加密方法,包括以下步骤:系统初始设置、用户密钥生成、用户私钥份额生成、系统公钥合成、数据加密、加法同态运算、部分解密和最终解密;
[0087]
步骤1.系统初始设置:dtahe.setup
[0088]
本步骤输入安全参数λ,输出系统参数params={param0,paramss},其中param0是系统初始化相关参数集合,paramss是多秘密共享相关参数集合。对于具体设置多项式次数d、多项式系数模数q、明文多项式模数t、正态分布χ、均匀分布μ和多秘密共享方案multiss={multiss.setup,multiss.split,multiss.recover},然后随机选择对于paramss={n,th,m,u,v,plist,glist,blist,os
sys
},则执行算法multiss.setup(1
λ
)

paramss可得。具体的如表1所示。
[0089]
表1方案具体参数一览表
[0090][0091][0092]
步骤2.用户密钥生成:dtahe.keygen
[0093]
本步骤输入系统参数params,输出公私钥对(pk
u
,sk
u
),首先从系数是{

1,0,1}的多项式环r3中均匀随机地选择一个多项式然后按照χ分布选择一个噪声多项式设置且运行(pk
u1
,sk
u1
)

hpke.gen(1
λ
)得到hpke体制的加解密密钥对,设置sk
u
=(sk
u0
,sk
u1
)和pk
u
=(pk
u0
,pk
u1
),输出公私钥对(pk
u
,sk
u
)。
[0094]
步骤3.用户私钥份额生成:dtahe.sharegen
[0095]
本步骤输入系统参数params、用户u的私钥sk
u0
和用户集合u中的公钥集合{pk
v1
}
v∈u
,输出为加密消息集合{e
uv
}
v∈u
和用户u的公开份额的有序集合和用户u的公开份额的有序集合
[0096]
首先随机选择一个噪声对于sk
u0
和中的每m个连续系数,执行算法
multiss.split,完整共享整个私钥和噪声都是需要分别执行次多秘密共享算法,得到关于用户u的私钥和噪声的秘密份额的有序集合和用户公开份额的有序集合和这四个有序集合中分别都包含个元素,其中:
[0097][0098][0099][0100][0101]
然后以集合u中的每一个用户为单位,分别执行如下流程:
[0102]
a)把发送给用户v的两个秘密份额有序集合{ssk
uv
,seu
uv
}打包为消息s
uv
,其中ssk
uv
为关于私钥的秘密份额集合,seu
uv
为关于噪声的秘密份额集合,假设用户v的身份标识为p0,则,则
[0103]
b)利用用户v的公钥pk
v1
,运行加密算法hpke.enc(pk
v1
,s
uv
)获得加密消息e
uv
。最后输出为包含各个用户的加密消息集合{e
uv
}
v∈u
(用户u自己的份额留在本地)和用户u的公开份额的有序集合
[0104]
步骤4.系统公钥合成:dtahe.comkey
[0105]
本步骤输入系统参数params,所有用户的公钥集合{pk
u0
}
u∈u
,计算pk=[∑
u∈u
pk
u0
]
q
,输出系统公钥pk。
[0106]
步骤5.数据加密算法:dtahe.dataenc
[0107]
本步骤输入系统参数params,系统公钥pk,用户u的明文数据m
u
,输出用户u的密文数据c
u
=(c
u0
,c
u1
)。
[0108]
首先将明文数据m
u
作为系数嵌入一个最高次为d的多项式x
u
,然后随机选择两个噪声分别计算分别计算输出用户u的密文数据c
u
=(c
u0
,c
u1
)。
[0109]
步骤6.加法同态运算:dtahe.evaladd
[0110]
本步骤输入系统参数params,用户的密文数据集合{c
u
}
u∈u
,用户的权重系数集合{w
u
}
u∈u
,然后分别计算ct0=[∑
u∈u
c
u0
·
w
u
]
q
、ct1=[∑
u∈u
c
u1
·
w
u
]
q
,最后输出系统密文ct=(ct0,ct1)。
[0111]
步骤7.部分解密:dtahe.pardec
[0112]
本步骤输入系统参数params,系统密文ct,用户u的公钥pk
u
和用户u收到集合u中其他用户的加密消息集合{e
vu
}
v∈u\{u}
,输出用户u的部分解密值pm
u

[0113]
部分解密步骤一共分为解密份额、聚合份额、计算部分解密值三个阶段;首先运行解密算法hpke.dec(sk
u1
,e
vu
),得到消息集合{s
vu
}
v∈u\{u}
,逐个解析消息后,得到关于私钥的秘密份额有序集合的集合{ssk
vu
}
v∈u\{u}
和关于噪声的秘密份额有序集合的集合{seu
vv
}
v∈u\{u}
,两者分别包含n

1个集合元素,每个集合元素又由个秘密份额有序组成。加上用户u共享本地私钥和噪声时保留给自身的两种秘密份额有序集合,对其分别汇总为总份额有序集合。具体计算ssk
uv
=∑
v∈u
ssk
vu
,seu
uv
=∑
v∈u
seu
vu
,然后执行部分解密值计算方法,将有序集合ssk
u
进行模m间隔嵌入d次多项式得到sk,将有序集合seu
u
进行模m连续嵌入d次多项式得到se。从密文ct中取出ct0,计算pm
u
=[ct0·
sk se]
q
,最后输出用户u的部分解密值pm
u

[0114]
步骤8.最终解密算法:dtahe.findec
[0115]
本步骤输入系统参数params,系统密文ct=(ct0,ct1),用户的部分解密值集合p1={pm
u
}
u∈v
,其中其中|p1|≥th,系统公开份额集合os
sys
,集合u中所有用户公开份额集合和输出由最终解密值组成的多项式m。
[0116]
最终解密步骤分为聚合用户公开份额、计算用户公开部分解密值、聚合系统公开份额、计算系统公开部分解密值、插值解密数据五个阶段。首先对于用户公开份额集合h2和h3,其中分别包含n个集合元素,每个集合元素由个用户公开份额集合有序组成,分别将这n个集合元素按顺序对应相加,即计算和得到用户份额汇总集合:
[0117][0118][0119]
此时sh0和sh1都分别由个份额集合有序组成,每个份额集合包含m

th个份额。然后根据i=1,2,

,m

th,每次从sh0和sh1中分别取出集合和然后参考dtahe.pardec中的部分解密值计算方法,计算关于用户公开份额的部分解密值,其中有序集合执行模m间隔嵌入,执行模m连续嵌入。执行m

th次后,可以得到关于用户公开份额的部分解密值集合p2。
[0120]
同样对于系统公开份额集合{k1,k2,k3,

,k
n
},根据i=1,2,

,n,计算k
i
=n*k
i
,构造元素数量为的两个集合的两个集合参考dtahe.pardec中的部分解密值计算方法,计算关于系统公开份额的部分解密值,其中集合执行模m间隔嵌入,执行模m连续嵌入。执行n次后,可以得到关于系统公开份额的部分解密值集合p3,合并三个部分解密值集合p1、p2、p3得到={pm
i
},其对应的标识集合简写为a={a1,

,ai},i∈[1,|p|]。其中每一项
对应的拉格朗日插值基函数为la
ai
(x)。
[0121]
对于i=1,2,3,

,|p|,对应的将集合{la
ai
(0),la
ai
(1),...,la
ai
(m

1)}对d次多项式进行模m间隔嵌入得到l
i
。然后计算由最终解密值组成的多项式m,其中:
[0122][0123]
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
[0124]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献