On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption
文章目录
- 摘要
- 引言
- NTRU加密
- 方案
- 正确性
- 多密钥同态性
- 初步噪声分析
- 安全性
- 多密钥同态加密
- 定义
- 从FHE到MKHE的通用构造方法
- 构造方法概览
- 形式化定义:
- BV11文章的MKHE构造方法
- NTRU多密钥全同态方案
- 形式化定义
- 噪声分析&正确性
- 从SomeWhat转换为全同态
- 模数缩减
- 通过模数缩减和重线性化来得到一个层级的多密钥全同态方案:
- 通过MKHE构造一个on-the-fly多方安全计算
- 基本方案
- 安全性
来自STOC2012的论文。算是第一篇关于多密钥全同态加密的文章。
摘要
我们提出了一个由计算能力强但不被信任的 "云 "服务器辅助的安全多方计算的新概念。在这个概念中,我们称之为实时多方计算(on-the-flyMPC),云可以非交互式地对属于实时选择的任意用户组的数据进行任意的、动态选择的计算。所有用户的输入数据和中间结果都受到保护,不会被云和其他用户窥视。这就扩展了全同态加密(FHE)的标准概念,用户能寻求云的帮助来评估他们自己的加密数据。
我们的贡献有两个方面。
- 我们展示了如何使用一种新型的加密方案实现即时的MPC,我们称之为多密钥FHE,它能够对在多个不相关的密钥下加密的输入进行操作。一个由多钥匙评估产生的密码文本可以使用参与计算的所有用户的密钥联合解密。
- 我们在NTRU的基础上构建了一个多密钥FHE方案。
引言
我们正在快速接近一个新的数字时代,在这个时代,我们在强大的服务器上远程存储我们的数据并进行昂贵的计算,用流行的话说就是 “云”。虽然云在成本和功能上有很多优势,但它也带来了严重的保密性问题,因为存储在云中的数据可能容易被云提供商甚至其他云客户窥探[RTSS09]。由于这些数据通常包含敏感信息(如个人谈话、医疗信息和组织秘密),因此用户在将数据存储在云中之前,会对其进行加密。完全同态加密(FHE)的最新进展[Gen09b, vDGHV10, BV11b, BV11a, GH11a, BGV12]使得在加密数据上进行任意计算成为可能,从而使个人电脑和移动设备作为可信但弱的接口进入强大但不可信的云,而大部分计算是在云上进行的。
FHE只适用于计算涉及单一用户的情况,因为它要求输入在同一密钥下加密。然而,在很多情况下,用户将他们的大型数据存储以加密的形式上传到云端,然后再决定对这些数据进行何种运算。例如,他们可能希望云计算他们的数据库的联合统计信息,在他们的集合中找到共同的文件,在这些文件上进行运算来得到某个结果(除了最终的结果,不泄露任何东西),或者一般来说,多个(相互不信任的)用户汇集他们的数据以计算一个共同的目标函数。
多方的情况要复杂得多,而且有一系列自然但严格的要求。首先,参与计算的参与者和要计算的函数可能是动态选择的,在数据被加密并上传到云端后,就会动态选择。其次,一旦选择了函数,我们不应该期望用户一直在线,因此,云必须能够非交互式地执行大部分的计算(在属于参与者的加密数据上),而根本不需要咨询参与者。最后,所有的计算负担确实应该由云来承担:用户的计算和通信复杂性应该只取决于单个输入和输出的大小,并且应该与计算的函数的复杂性和系统中的用户总数无关,这两者都可能非常大。
实时多方计算:考虑到一个有大量计算能力弱的用户和一个强大的云的环境。一个实时多方计算协议是这样进行的。
- 众多用户各自加密他们的数据并上传到云端,不知道系统中其他用户的身份甚至数量。数据根据用户的公钥进行加密,直接发送至云端(例如,作为加密的电子邮件到达基于云的邮箱)。
- 云决定对即时选择的用户数据的任意动态子集的数据评估一个任意的动态选择的函数。(该选择可能是由一些用户的要求,或作为一项服务,在满足某些标准的各方数据上计算该函数,或由云提供商自主预期的需求,等等)云可以非交互式地执行该计算,而无需用户的任何进一步帮助。其结果仍然是加密的。
- 云和其数据被用于计算的用户子集在解密阶段互动。随后用户追溯性地对函数的选择和对用户数据的选择进行批准,并合作解密得到输出。
NTRU加密
方案
参数:多项式环R=def Z[x]/⟨xn+1⟩R \stackrel{\text { def }}{=} \mathbb{Z}[x] /\left\langle x^{n}+1\right\rangleR= def Z[x]/⟨xn+1⟩, 其中nnn是222的幂次, 奇素数qqq, 在RRR上的BBB -bounded分布χ\chiχ , 其中B≪q.B \ll q .B≪q.
" BBB -bounded"的意思是,从χ\chiχ中取样的多项式的系数大小小于BBB。Rq=def R/qRR_{q} \stackrel{\text { def }}{=} R / q RRq= def R/qR, [⋅]q[\ \cdot\ ]_{q}[ ⋅ ]q 表示用将多项式系数模qqq映射入{−⌊q2⌋,…,⌊q2⌋}\left\{-\left\lfloor\frac{q}{2}\right\rfloor, \ldots,\left\lfloor\frac{q}{2}\right\rfloor\right\}{−⌊2q⌋,…,⌊2q⌋} 中。
- Keygen (1k)\left(1^{k}\right)(1k): 取两个小多项式f′,g←χf^{\prime}, g \leftarrow \chif′,g←χ ,令 f=def 2f′+1f \stackrel{\text { def }}{=} 2 f^{\prime}+1f= def 2f′+1,那么f(mod2)=1f\pmod 2=1f(mod2)=1,计算fff在RqR_qRq下的逆元f−1f^{-1}f−1,令
sk=fand pk=[2gf−1]q\mathrm{sk}=f \quad \text { and } \quad \mathrm{pk}=\left[2 g f^{-1}\right]_{q} sk=f and pk=[2gf−1]q
- Enc(pk,m)(pk, m)(pk,m): m∈{0,1}m \in\{0,1\}m∈{0,1}, 选取小多项式s,e←χs, e \leftarrow \chis,e←χ, 令c=[hs+2e+m]qc=[h s+2 e+m]_{q}c=[hs+2e+m]q
- Dec(sk,c)(sk, c)(sk,c): 计算 μ=[fc]q\mu=[f c]_{q}μ=[fc]q并返回 μ(mod2)\mu \pmod 2μ(mod2).
正确性
[fc]q=[2gs+2fe+fm]q[fc]_q = [2gs+2fe+fm]_q[fc]q=[2gs+2fe+fm]q,注意到g,s,f,eg,s,f,eg,s,f,e都是B-bounded,B≪qB \ll qB≪q,所以2gs+2fe+fm<q/22gs+2fe+fm<q/22gs+2fe+fm<q/2。又因为f≡1(mod2)f \equiv 1 \pmod 2f≡1(mod2),所以m=μ(mod2)m = \mu \pmod 2m=μ(mod2).
多密钥同态性
c1=[h1s1+e1+m1]qc_1 = [h_1s_1+e_1+m_1]_qc1=[h1s1+e1+m1]q, c2=[h2s2+e2+m2]qc_2 =[h_2s_2 + e_2 +m_2]_qc2=[h2s2+e2+m2]q,其中h1=[2g1f1−1]q,h2=[2g2f2−1]qh_1 = [2g_1f_1^{-1}]_q,h_2=[2g_2f_2^{-1}]_qh1=[2g1f1−1]q,h2=[2g2f2−1]q.令cadd=def[c1+c2]qc_{add} \stackrel{def}{=}[c_1+c_2]_qcadd=def[c1+c2]q, cmul=def[c1c2]qc_{mul}\stackrel{def}{=}[c_1c_2]_qcmul=def[c1c2]q.解密的密钥为f1f2f_1f_2f1f2:
f1f2(c1+c2)=2(f1f2e1+f1f2e2+f2g1s1+f1g2s2)+f1f2(m1+m2)=2eadd+f1f2(m1+m2)\begin{aligned} f_{1} f_{2}\left(c_{1}+c_{2}\right) &=2\left(f_{1} f_{2} e_{1}+f_{1} f_{2} e_{2}+f_{2} g_{1} s_{1}+f_{1} g_{2} s_{2}\right)+f_{1} f_{2}\left(m 1+m_{2}\right) \\ &=2 e_{\mathrm{add}}+f_{1} f_{2}\left(m 1+m_{2}\right) \end{aligned} f1f2(c1+c2)=2(f1f2e1+f1f2e2+f2g1s1+f1g2s2)+f1f2(m1+m2)=2eadd+f1f2(m1+m2)
f1f2(c1c2)=2(2g1g2s1s2+g1s1f2(2e2+m2)+g2s2f1(2e1+m1)+f1f2(e1m2+e2m1+2e1e2))+f1f2(m1m2)=2emult+f1f2(m1m2)\begin{array}{r} f_{1} f_{2}\left(c_{1} c_{2}\right)=2\left(2 g_{1} g_{2} s_{1} s_{2}+g_{1} s_{1} f_{2}\left(2 e_{2}+m_{2}\right)+g_{2} s_{2} f_{1}\left(2 e_{1}+m_{1}\right)+\right. \\ \left.f_{1} f_{2}\left(e_{1} m_{2}+e_{2} m_{1}+2 e_{1} e_{2}\right)\right)+f_{1} f_{2}\left(m_{1} m_{2}\right) \\ =2 e_{\mathrm{mult}}+f_{1} f_{2}\left(m 1 m_{2}\right) \end{array} f1f2(c1c2)=2(2g1g2s1s2+g1s1f2(2e2+m2)+g2s2f1(2e1+m1)+f1f2(e1m2+e2m1+2e1e2))+f1f2(m1m2)=2emult+f1f2(m1m2)
分别引入了两个不大的噪声eadd,emulte_{add},e_{mult}eadd,emult,只要噪声控制得当,就可以正确解密。
注意,这样的同态性存在一个问题:即对于某个外包函数,其第iii个参数的次数为did_idi,那么解密时需要的密钥为∏i=1Nfidi\prod_{i=1}^{N}{f_i^{d_i}}∏i=1Nfidi。而这样做无疑会暴露外包函数给接收方。
所以在使用过程中,加入了Brakerski11提出的重线性化技术,使得解密需要的密钥次数从did_idi降低为111,即∏i=1Nfi\prod_{i=1}^{N}{f_i}∏i=1Nfi。
初步噪声分析
g,s,eg,s,eg,s,e都是BBB以内的,fff是2B+12B+12B+1。那么[fc]q[fc]_q[fc]q在2nB2(2nB+1)(2B+1)2nB^2(2nB+1)(2B+1)2nB2(2nB+1)(2B+1)内。这是根据引理2.5算出来的。
Lemma 2.4. Let n∈Nn \in \mathbb{N}n∈N, let ϕ(x)=xn+1\phi(x)=x^{n}+1ϕ(x)=xn+1 and let R=Z[x]/⟨ϕ(x)⟩.R=\mathbb{Z}[x] /\langle\phi(x)\rangle .R=Z[x]/⟨ϕ(x)⟩. For any s,t∈Rs, t \in Rs,t∈R,
∥s⋅t∥≤n⋅∥s∥⋅∥t∥and ∥s⋅t∥∞≤n⋅∥s∥∞⋅∥t∥∞\|s \cdot t\| \leq \sqrt{n} \cdot\|s\| \cdot\|t\| \quad \text { and } \quad\|s \cdot t\|_{\infty} \leq n \cdot\|s\|_{\infty} \cdot\|t\|_{\infty} ∥s⋅t∥≤n⋅∥s∥⋅∥t∥ and ∥s⋅t∥∞≤n⋅∥s∥∞⋅∥t∥∞
Corollary 2.5. Let n∈Nn \in \mathbb{N}n∈N, let ϕ(x)=xn+1\phi(x)=x^{n}+1ϕ(x)=xn+1 and R=Z[x]/⟨ϕ(x)⟩.R=\mathbb{Z}[x] /\langle\phi(x)\rangle .R=Z[x]/⟨ϕ(x)⟩. Let χ\chiχ be a B-bounded distribution over the ring RRR and let s1,…,sk←χ.s_{1}, \ldots, s_{k} \leftarrow \chi .s1,…,sk←χ. Then s=def ∏i=1ksis \stackrel{\text { def }}{=} \prod_{i=1}^{k} s_{i}s= def ∏i=1ksi is (nk−1Bk)\left(n^{k-1} B^{k}\right)(nk−1Bk) -bounded.
这里我觉得原文写错了,和李同学讨论后,感觉噪声最后是2nB2+(2nB+1)(2B+1)2nB^2 + (2nB+1)(2B+1)2nB2+(2nB+1)(2B+1)大小的。
安全性
(修改后的)NTRU加密方案的安全性可以基于两个假设-RLWE假设,(决策性)小多项式比率(DSPR)假设。
Definition 2.13. (THE RLWE ASSUMPTION) For all κ∈N\kappa \in \mathbb{N}κ∈N, let ϕ(x)=ϕκ(x)∈Z[x]\phi(x)=\phi_{\kappa}(x) \in \mathbb{Z}[x]ϕ(x)=ϕκ(x)∈Z[x] be a polynomial of degree n=n(κ)n=n(\kappa)n=n(κ), let q=q(κ)∈Zq=q(\kappa) \in \mathbb{Z}q=q(κ)∈Z be an odd prime integer, let the ringR=def Z[x]/⟨ϕ(x)⟩\operatorname{ring} R \stackrel{\text { def }}{=} \mathbb{Z}[x] /\langle\phi(x)\rangleringR= def Z[x]/⟨ϕ(x)⟩ and Rq=def R/qRR_{q} \stackrel{\text { def }}{=} R / q RRq= def R/qR, and let χ\chiχ denote a distribution over the ring R.R .R.
The Decisional Ring LWE assumption RLWE ϕ,q,χ_{\phi, q, \chi}ϕ,q,χ states that for any ℓ=poly(κ)\ell=\operatorname{poly}(\kappa)ℓ=poly(κ) it holds that
{(ai,ai⋅s+ei)}i∈[ℓ]≈c{(ai,ui)}i∈[ℓ]\left\{\left(a_{i}, a_{i} \cdot s+e_{i}\right)\right\}_{i \in[\ell]} \stackrel{c}{\approx}\left\{\left(a_{i}, u_{i}\right)\right\}_{i \in[\ell]} {(ai,ai⋅s+ei)}i∈[ℓ]≈c{(ai,ui)}i∈[ℓ]
where sss is sampled from the noise distribution χ,ai\chi, a_{i}χ,ai are uniform in RqR_{q}Rq, the “error polynomials” eie_{i}ei are sampled from the error distribution χ\chiχ, and finally, the ring elements uiu_{i}ui are uniformly random over RqR_{q}Rq.
Definition 2.14. (DECISIONAL SMALL POLYNOMIAL RATIO ASSUMPTION) Let ϕ(x)∈Z[x]\phi(x) \in \mathbb{Z}[x]ϕ(x)∈Z[x] be a polynomial of degree nnn, let q∈Zq \in \mathbb{Z}q∈Z be a prime integer, and let χ\chiχ denote a distribution over the ring R=def Z[x]/⟨ϕ(x)⟩.R \stackrel{\text { def }}{=} \mathbb{Z}[x] /\langle\phi(x)\rangle .R= def Z[x]/⟨ϕ(x)⟩. The (decisional) small polynomial ratio assumption DSPR ϕ,q,χ_{\phi, q, \chi}ϕ,q,χ says that it is hard to distinguish the following two distributions:
- aaa polynomial h=def [2gf−1]qh \stackrel{\text { def }}{=}\left[2 g f^{-1}\right]_{q}h= def [2gf−1]q, where f′f^{\prime}f′ and ggg are sampled from the distribution χ\chiχ (conditioned on f=def 2f+1f \stackrel{\text { def }}{=} 2 f+1f= def 2f+1 being invertible over RqR_{q}Rq ) and f−1f^{-1}f−1 is the inverse of fff in RqR_{q}Rq.
- a polynomial u sampled uniformly at random over RqR_{q}Rq.
DSPR假设在[SS11b]的文章中有证明为困难问题,RLWE在[LPR10]中。
根据两个假设,可以使用hybrid model进行证明:
- 基于DSPR假设,公钥h=[2gf−1]qh=[2gf^{-1}]_qh=[2gf−1]q与随机选取的hhh不可区分。
- 基于RLWE假设,密文c∗=[hs+2e+m]qc^*=[hs+2e+m]_qc∗=[hs+2e+m]q与c∗=[u+m]qc^*=[u+m]_qc∗=[u+m]q不可区分,其中uuu由RqR_qRq中均匀选取。
多密钥同态加密
定义
Definition 3.1 (Multikey C\mathcal{C}C -Homomorphic Encryption). Let C\mathcal{C}C be a class of circuits. A family {E(N)=(Keygen, Enc, Dec, Eval )}N>0\left\{\mathcal{E}^{(N)}=(\text { Keygen, Enc, Dec, Eval })\right\}_{N>0}{E(N)=( Keygen, Enc, Dec, Eval )}N>0 of algorithms is multikey C\mathcal{C}C -homomorphic if for all integers N>0,E(N)N>0, \mathcal{E}^{(N)}N>0,E(N) has the following properties:
- (pk,sk,ek)←(\mathrm{pk}, \mathrm{sk}, \mathrm{ek}) \leftarrow(pk,sk,ek)← Keygen (1κ):\left(1^{\kappa}\right):(1κ): For a security parameter κ\kappaκ, outputs a public key pk, a secret key sk and a (public) evaluation key ek.
- c←c \leftarrowc← Enc (pk,m):(\mathrm{pk}, m):(pk,m): Given a public key pk and message mmm, outputs a ciphertext c.c .c.
- m:=Dec(sk1,…,skN,c):m:=\operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c\right):m:=Dec(sk1,…,skN,c): Given NNN secret keys sk1,…,skN\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}sk1,…,skN and a ciphertext ccc, outputs a message mmm.
- c:=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)):c:=\operatorname{Eval}\left(C,\left(c_{1}, p k_{1}, e k_{1}\right), \ldots,\left(c_{\ell}, p k_{\ell}, e k_{\ell}\right)\right):c:=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)): Given a (description of) a boolean circuit CCC along with ℓ\ellℓ tuples (ci,pki,eki)\left(c_{i}, \mathrm{pk}_{i}, \mathrm{ek}_{i}\right)(ci,pki,eki), each comprising of a ciphertext cic_{i}ci, a public key pki\mathrm{pk}_{i}pki, and an evaluation key ek i_{i}i, outputs a ciphertext c.c .c.
Correctness: Let c :=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)).:=\operatorname{Eval}\left(C,\left(c_{1}, \mathrm{pk}_{1}, \mathrm{ek}_{1}\right), \ldots,\left(c_{\ell}, \mathrm{pk}_{\ell}, \mathrm{ek}_{\ell}\right)\right) .:=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)). Then
Dec(sk1′,…,skN′,c)=C(m1,…,mℓ)\operatorname{Dec}\left(\mathrm{sk}_{1}^{\prime}, \ldots, \mathrm{sk}_{N}^{\prime}, c\right)=C\left(m_{1}, \ldots, m_{\ell}\right)Dec(sk1′,…,skN′,c)=C(m1,…,mℓ)
Compactness: Let c:=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)).c:=\operatorname{Eval}\left(C,\left(c_{1}, \mathrm{pk}_{1}, \mathrm{ek}_{1}\right), \ldots,\left(c_{\ell}, \mathrm{pk}_{\ell}, \mathrm{ek}_{\ell}\right)\right) .c:=Eval(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)). There exists a polynomial PPP
such that ∣c∣≤P(κ,N).|c| \leq P(\kappa, N) .∣c∣≤P(κ,N). In other words, the size of ccc is independent of ℓ\ellℓ and ∣C∣.|C| .∣C∣. Note, however, that we allow the evaluated ciphertext to depend on the number of keys NNN.
紧凑性保证了密文的大小与电路深度以及运算次数无关,但在本文的多公钥方案中,密文的大小与参与方数量有关。
从FHE到MKHE的通用构造方法
本文认为对于常数个参与方来说,所有的FHE方案都可以直接变为MKHE方案。理由如下:
定义Enc~\widetilde{\mathrm{Enc}}Enc为对于xxx的逐比特加密:
Enc~(pk,x)=def (Enc(pk,x[1]),…,Enc(pk,x[∣x∣]))\widetilde{\operatorname{Enc}}(\mathrm{pk}, x) \stackrel{\text { def }}{=}(\operatorname{Enc}(\mathrm{pk}, x[1]), \ldots, \operatorname{Enc}(\mathrm{pk}, x[|x|])) Enc(pk,x)= def (Enc(pk,x[1]),…,Enc(pk,x[∣x∣]))
对于k∈Nk\in \mathbb{N}k∈N,定义洋葱加密、解密,这里用Enc\mathrm{Enc}Enc来代替Enc~\widetilde{\mathrm{Enc}}Enc:
Enc∗(pk,x)=def Enc(pk,x)Enc* (pk1,…,pkk,x)=def Enc∗(pk1,…,pkk−1,Enc(pkk,x))=Enc(pk1,Enc (pk2,…,Enc((pkk,x)))Dec∗(sk,x)=defDec(sk,x)Dec∗(sk1,…,skk,x)=def Dec∗(sk2,…,pkk,Dec(sk1,x))=Dec(skk,Dec(skk−1,…,Dec(sk1,x)))\begin{aligned} \operatorname{Enc}^{*}(\mathrm{pk}, x) & \stackrel{\text { def }}{=} \operatorname{Enc}(\mathrm{pk}, x) \\ \text { Enc* }\left(\mathrm{pk}_{1}, \ldots, \mathrm{pk}_{k}, x\right) & \stackrel{\text { def }}{=} \operatorname{Enc}^{*}\left(\mathrm{pk}_{1}, \ldots, \mathrm{pk}_{k-1}, \operatorname{Enc}\left(\mathrm{pk}_{k}, x\right)\right) \\ &\ = \operatorname{Enc}\left(\mathrm{pk}_{1}, \text { Enc }\left(\mathrm{pk}_{2}, \ldots, \operatorname{Enc}\left(\left(\mathrm{pk}_{k}, x\right)\right)\right)\right.\\ \operatorname{Dec}^{*}(\mathrm{~s} \mathrm{k}, x)&\ \stackrel{\text{def}}{=} \operatorname{Dec}(\mathrm{sk}, x) \\ \operatorname{Dec}^{*}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{k}, x\right) & \stackrel{\text { def }}{=} \operatorname{Dec}^{*}\left(\mathrm{sk}_{2}, \ldots, \mathrm{pk}_{k}, \operatorname{Dec}\left(\mathrm{sk}_{1}, x\right)\right) \\ &\ =\operatorname{Dec}\left(\mathrm{sk}_{k}, \operatorname{Dec}\left(\mathrm{sk}_{k-1}, \ldots, \operatorname{Dec}\left(\mathrm{sk}_{1}, x\right)\right)\right) \end{aligned} Enc∗(pk,x) Enc* (pk1,…,pkk,x)Dec∗( sk,x)Dec∗(sk1,…,skk,x)= def Enc(pk,x)= def Enc∗(pk1,…,pkk−1,Enc(pkk,x)) =Enc(pk1, Enc (pk2,…,Enc((pkk,x))) =defDec(sk,x)= def Dec∗(sk2,…,pkk,Dec(sk1,x)) =Dec(skk,Dec(skk−1,…,Dec(sk1,x)))
洋葱加密具有两个性质:
- 正确性:Dec∗(sk1,…,skk\operatorname{Dec}^{*}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{k}\right.Dec∗(sk1,…,skk, Enc* (pk1,…,pkk,m))=m\left.\left(\mathrm{pk}_{1}, \ldots, \mathrm{pk}_{k}, m\right)\right)=m(pk1,…,pkk,m))=m
- 密文扩张:如果加密算法Enc\mathrm{Enc}Enc的密文长度为λ\lambdaλ,那么洋葱加密Enc∗(pk1,…,pkk,m)\mathrm{Enc}^*\left(\mathrm{pk}_{1}, \ldots, \mathrm{pk}_{k}, m\right)Enc∗(pk1,…,pkk,m)的密文长度为λk\lambda^kλk
构造方法概览
给定一个密文ci←Enc(pki,mi)c_i\gets \mathrm{Enc}(pk_i,m_i)ci←Enc(pki,mi),先通过cic_ici构造一个mim_imi的洋葱加密ziz_izi,使得zi≈Enc∗(pk1,...,pkN,mi)z_i \approx \mathrm{Enc}^*(pk_1,...,pk_N,m_i)zi≈Enc∗(pk1,...,pkN,mi)。
具体方法为:
- 在cic_ici上同态地执行函数Enc∗(pki+1,…,pkN,⋅)\mathrm{Enc}^* \left(\mathrm{pk}_{i+1}, \ldots, \mathrm{pk}_{N},\ \cdot\ \right)Enc∗(pki+1,…,pkN, ⋅ )来得到zi~≈Enc∗(pki,...,pkN,mi)\tilde{z_i}\approx\mathrm{Enc}^*(pk_i,...,pk_N,m_i)zi~≈Enc∗(pki,...,pkN,mi)。
- 对于zi~\tilde{z_i}zi~继续执行加密得到zi=Enc∗(pk1,...,pki−1,zi~)z_i=\mathrm{Enc}^*\left(pk_1,...,pk_{i-1},\tilde{z_i}\right)zi=Enc∗(pk1,...,pki−1,zi~)
对每个密文cic_ici运行上述的构造方法来得到z1,...,zNz_1,...,z_Nz1,...,zN,在z1,...zNz_1,...z_Nz1,...zN上进行运算来得到
c≈Enc∗(pk1,..,pkN,C(m1,...,mN))c\approx \mathrm{Enc}^*(pk_1,..,pk_N,C(m_1,...,m_N)) c≈Enc∗(pk1,..,pkN,C(m1,...,mN))
最后解密得到
Dec∗(sk1,...,skN,c)=C(m1,...,mN)\mathrm{Dec}^*(sk_1,...,sk_N,c)=C(m_1,...,m_N) Dec∗(sk1,...,skN,c)=C(m1,...,mN)
这种构造方法的缺点显而易见,密文大小为λN\lambda^NλN,且同态地运行加密算法需要很大的开销。因此他只能支持N=O(1)N=O(1)N=O(1)的情况。
形式化定义:
GMK: generic multikey construction
- GMK.Keygen (1κ):\left(1^{\kappa}\right):(1κ): Run Keygen (1κ)\left(1^{\kappa}\right)(1κ)
- GMK.Enc(pk, m):m):m): Run Enc(pk,m).
- GMK.Dec (sk1,…,skN,c):\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c\right):(sk1,…,skN,c): Output Dec* (sk1,…,skN,c)\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c\right)(sk1,…,skN,c)
- GMK.Eval (C,(c1,pk1,ek1),…,(cN,pkN,ekN)):\left(C,\left(c_{1}, \mathrm{pk}_{1}, \mathrm{ek}_{1}\right), \ldots,\left(c_{N}, \mathrm{pk}_{N}, \mathrm{ek}_{N}\right)\right):(C,(c1,pk1,ek1),…,(cN,pkN,ekN)): For i∈[N]i \in[N]i∈[N], define
Gi(x)=def Enc∗(pki+1,…,pkN,x;r)G_{i}(x) \stackrel{\text { def }}{=} \operatorname{Enc}^{*}\left(\mathrm{pk}_{i+1}, \ldots, \mathrm{pk}_{N}, x ; r\right) Gi(x)= def Enc∗(pki+1,…,pkN,x;r)
for some fixed and valid randomness rrr and recursively define
C(k)(x1,…,xN)=def {C(x1,…,xN)for k=NEval (ekk+1,C(k+1),x1,…,xN)for k<NC^{(k)}\left(x_{1}, \ldots, x_{N}\right) \stackrel{\text { def }}{=}\left\{\begin{array}{ll} C\left(x_{1}, \ldots, x_{N}\right) & \text { for } k=N \\ \text { Eval }\left(\mathrm{ek}_{k+1}, C^{(k+1)}, x_{1}, \ldots, x_{N}\right) & \text { for } k<N \end{array}\right. C(k)(x1,…,xN)= def {C(x1,…,xN) Eval (ekk+1,C(k+1),x1,…,xN) for k=N for k<N
For i∈[N]i \in[N]i∈[N], compute
z~i=def Eval (eki,Gi,ci),zi=def Enc∗(pk1,…,pki−1,z~i)\widetilde{z}_{i} \stackrel{\text { def }}{=} \text { Eval }\left(\mathrm{ek}_{i}, G_{i}, c_{i}\right) \quad, \quad z_{i} \stackrel{\text { def }}{=} \mathrm{Enc}^{*}\left(\mathrm{pk}_{1}, \ldots, \mathrm{pk}_{i-1}, \widetilde{z}_{i}\right) zi= def Eval (eki,Gi,ci),zi= def Enc∗(pk1,…,pki−1,zi)
and output the ciphertext c=def c \stackrel{\text { def }}{=}c= def Eval (ek1,C(1),z1,…,zN)\left(\mathrm{ek}_{1}, C^{(1)}, z_{1}, \ldots, z_{N}\right)(ek1,C(1),z1,…,zN).
BV11文章的MKHE构造方法
在Brakerski11类型的文章中,解密是由两个向量内积得到的⟨c,s⟩(mod2)\langle \mathbf{c},\mathbf{s}\rangle \pmod 2⟨c,s⟩(mod2)。
- 加法:给定相同长度的c1,c2\mathbf{c}_1,\mathbf{c}_2c1,c2,定义cadd=defc1+c2\mathbf{c}_{add}\stackrel{\text{def}}{=}\mathbf{c}_1+\mathbf{c}_2cadd=defc1+c2。cadd\mathbf{c}_{add}cadd可由密钥s\mathbf{s}s解密:
⟨c1+c2,s⟩=⟨c1,s⟩+⟨c2,s⟩\langle \mathbf{c}_1+\mathbf{c}_2,\mathbf{s}\rangle = \langle \mathbf{c}_1,\mathbf{s} \rangle + \langle \mathbf{c}_2,\mathbf{s} \rangle ⟨c1+c2,s⟩=⟨c1,s⟩+⟨c2,s⟩
- 乘法:给定任意长度的c1,c2\mathbf{c}_1,\mathbf{c}_2c1,c2,定义cmul=defc1⊗c2\mathbf{c}_{mul}\stackrel{\text{def}}{=} \mathbf{c}_1 \otimes \mathbf{c}_2cmul=defc1⊗c2,密文cmul\mathbf{c}_{mul}cmul可以由密钥s⊗s\mathbf{s}\otimes\mathbf{s}s⊗s解密:
⟨c1⊗c2,s⊗s⟩=⟨c1,s⟩⋅⟨c2,s⟩\left\langle\mathbf{c}_{1} \otimes \mathbf{c}_{2}, \mathbf{s} \otimes \mathbf{s}\right\rangle=\left\langle\mathbf{c}_{1}, \mathbf{s}\right\rangle \cdot\left\langle\mathbf{c}_{2}, \mathbf{s}\right\rangle ⟨c1⊗c2,s⊗s⟩=⟨c1,s⟩⋅⟨c2,s⟩
这样BV11类型的方案来构造MKHE非常简单,给定c1,c2\mathbf{c}_1,\mathbf{c}_2c1,c2分别是由s1,s2\mathbf{s}_1,\mathbf{s}_2s1,s2加密的密文。
- 加法:⟨(c1,c2),(s1,s2)⟩=⟨c1,s1⟩+⟨c2,s2⟩\left\langle\left(\mathbf{c}_{1}, \mathbf{c}_{2}\right),\left(\mathbf{s}_{1}, \mathbf{s}_{2}\right)\right\rangle=\left\langle\mathbf{c}_{1}, \mathbf{s}_{1}\right\rangle+\left\langle\mathbf{c}_{2}, \mathbf{s}_{2}\right\rangle⟨(c1,c2),(s1,s2)⟩=⟨c1,s1⟩+⟨c2,s2⟩
- 乘法:⟨c1⊗c2,s1⊗s2⟩=⟨c1,s1⟩⋅⟨c2,s2⟩\left\langle\mathbf{c}_{1} \otimes \mathbf{c}_{2}, \mathbf{s}_{1} \otimes \mathbf{s}_{2}\right\rangle=\left\langle\mathbf{c}_{1}, \mathbf{s}_{1}\right\rangle \cdot\left\langle\mathbf{c}_{2}, \mathbf{s}_{2}\right\rangle⟨c1⊗c2,s1⊗s2⟩=⟨c1,s1⟩⋅⟨c2,s2⟩
但这篇文章没有提出怎么对多公钥的密文进行重现性化,也就是说,每次的evaluation计算会将密文的长度扩张两倍。这篇文章将如何多多公钥的RLWE类型方案进行重线性化作为一个未解的问题,后面Chen Hao19的年的文章里面有解决这个问题。
NTRU多密钥全同态方案
如之前所说,NTRU的方案天然满足多密钥同态性质:
[f1f2(c1+c2)]q=[2f1f2e1+2f1f2e2+2f2g1s1+2f1g2s2+f1f2(m1+m2)]q=m1+m2(mod2)[f1f2(c1⋅c2)]q=[4g1g2s1s2+2g1s1f2(2e2+m2)+2g2s2f1(2e1+m1)+2f1f2(e1m2+e2m1+2e1e2)+f1f2(m1m2)]q=m1⋅m2(mod2)\begin{array}{ll} {\left[f_{1} f_{2}\left(c_{1}+c_{2}\right)\right]_{q}=\left[2 f_{1} f_{2} e_{1}+2 f_{1} f_{2} e_{2}+2 f_{2} g_{1} s_{1}+2 f_{1} g_{2} s_{2}+f_{1} f_{2}\left(m_{1}+m_{2}\right)\right]_{q}} \\ =m_1+m_2 \pmod 2\\ {\left[f_{1} f_{2}\left(c_{1} \cdot c_{2}\right)\right]_{q} =\left[4 g_{1} g_{2} s_{1} s_{2}+2 g_{1} s_{1} f_{2}\left(2 e_{2}+m_{2}\right)+2 g_{2} s_{2} f_{1}\left(2 e_{1}+m_{1}\right)+\right.} \\ \left.\quad 2 f_{1} f_{2}\left(e_{1} m_{2}+e_{2} m_{1}+2 e_{1} e_{2}\right)+f_{1} f_{2}\left(m_{1} m_{2}\right)\right]_{q} \\ =m_{1} \cdot m_{2}\pmod 2 \end{array} [f1f2(c1+c2)]q=[2f1f2e1+2f1f2e2+2f2g1s1+2f1g2s2+f1f2(m1+m2)]q=m1+m2(mod2)[f1f2(c1⋅c2)]q=[4g1g2s1s2+2g1s1f2(2e2+m2)+2g2s2f1(2e1+m1)+2f1f2(e1m2+e2m1+2e1e2)+f1f2(m1m2)]q=m1⋅m2(mod2)
但是他也存在着一些问题:比如两个密文c=c1c2c=c_1c_2c=c1c2,c′=c2c3c'=c_2c_3c′=c2c3
考虑两个密文的加法:
[f1f2f3⋅(c+c′)]q=[f3(f1f2⋅c)+f1(f2f3⋅c′)]q=2(f3e+f1e′)+f1f2f3(m+m′)\left[f_{1} f_{2} f_{3} \cdot\left(c+c^{\prime}\right)\right]_{q}=\left[f_{3}\left(f_{1} f_{2} \cdot c\right)+f_{1}\left(f_{2} f_{3} \cdot c^{\prime}\right)\right]_{q}=2\left(f_{3} e+f_{1} e^{\prime}\right)+f_{1} f_{2} f_{3}\left(m+m^{\prime}\right) [f1f2f3⋅(c+c′)]q=[f3(f1f2⋅c)+f1(f2f3⋅c′)]q=2(f3e+f1e′)+f1f2f3(m+m′)
可以由密钥f1f2f3f_1f_2f_3f1f2f3进行解密,但是乘法:
[f1f22f3⋅(c⋅c′)]q=[(f1f2⋅c)⋅(f2f3⋅c′)]q=2Emult+f1f22f3(m⋅m′)\left[f_{1} f_{2}^{2} f_{3} \cdot\left(c \cdot c^{\prime}\right)\right]_{q}=\left[\left(f_{1} f_{2} \cdot c\right) \cdot\left(f_{2} f_{3} \cdot c^{\prime}\right)\right]_{q}=2 E_{\mathrm{mult}}+f_{1} f_{2}^{2} f_{3}\left(m \cdot m^{\prime}\right) [f1f22f3⋅(c⋅c′)]q=[(f1f2⋅c)⋅(f2f3⋅c′)]q=2Emult+f1f22f3(m⋅m′)
需要用密钥f1f22f3f_1f_2^2f_3f1f22f3来进行解密。也就是说他的解密密钥的大小会与要执行的乘法次数成线性关系。因此需要使用一个重线性化技术,将所有需要fi2f_i^2fi2解密的密文变为只需要fif_ifi解密的密文。
形式化定义
- SH.Keygen (1κ):\left(1^{\kappa}\right):(1κ): Sample f′,g←χf^{\prime}, g \leftarrow \chif′,g←χ and set f:=2f′+1f:=2 f^{\prime}+1f:=2f′+1 so that f≡1(mod2)f \equiv 1(\bmod 2)f≡1(mod2). If fff is not invertible in RqR_{q}Rq, resample f′f^{\prime}f′; otherwise let f−1f^{-1}f−1 be the inverse of fff in RqR_{q}Rq. Set
pk=def h:=[2gf−1]q∈Rq,sk=def f∈R\mathrm{pk} \stackrel{\text { def }}{=} h:=\left[2 g f^{-1}\right]_{q} \in R_{q} \quad, \quad \mathrm{sk} \stackrel{\text { def }}{=} f \in R pk= def h:=[2gf−1]q∈Rq,sk= def f∈R
Sample s~,e~←χ⌈logq⌉\widetilde{\mathbf{s}}, \widetilde{\mathbf{e}} \leftarrow \chi^{\lceil\log q\rceil}s,e←χ⌈logq⌉ and compute ek =def [hs~+2e~+Pow (f)]q∈Rq[logq]\stackrel{\text { def }}{=}[h \widetilde{\mathbf{s}}+2 \widetilde{\mathbf{e}}+\text { Pow }(f)]_{q} \in R_{q}^{[\log q]}= def [hs+2e+ Pow (f)]q∈Rq[logq]. Output the key
tuple (pk,sk, ek).
- SH.Enc (pk,m):(\mathrm{pk}, m):(pk,m): Sample s,e←χ.s, e \leftarrow \chi .s,e←χ. Output the ciphertext c:=hs+2e+m∈Rqc:=h s+2 e+m \in R_{q}c:=hs+2e+m∈Rq.
- SH.Dec(sk 1,…,skN,c):\left._{1}, \ldots, \mathrm{sk}_{N}, c\right):1,…,skN,c): Parse ski=fi\mathrm{sk}_{i}=f_{i}ski=fi for i∈[N].i \in[N] .i∈[N]. Compute μ=[f1⋯fN⋅c]q∈Rq\mu=\left[f_{1} \cdots f_{N} \cdot c\right]_{q} \in R_{q}μ=[f1⋯fN⋅c]q∈Rq and
output m:=μ(mod2)m:=\mu(\bmod 2)m:=μ(mod2). - SH.Eval (C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)):\left(C,\left(c_{1}, p k_{1}, e k_{1}\right), \ldots,\left(c_{\ell}, p k_{\ell}, e k_{\ell}\right)\right):(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)): 在ℓ\ellℓ个输入上执行深度为DDD的布尔电路C:{0,1}ℓ→{0,1}C:\{0,1\}^{\ell} \rightarrow\{0,1\}C:{0,1}ℓ→{0,1}。下面的方案展示了如何对{0,1}\{0,1\}{0,1}上的两个输入做同台的加和乘。
- 给定两个密文 c,c′c, c^{\prime}c,c′,假定他们相应的公钥分别为集合K,K′K, K^{\prime}K,K′。加法为
cadd=[c+c′]q∈Rqc_{\mathrm{add}}=\left[c+c^{\prime}\right]_{q} \in R_{q} cadd=[c+c′]q∈Rq
输出密文的公钥集合为Kadd =K∪K′K_{\text {add }}=K \cup K^{\prime}Kadd =K∪K′。
- 给定两个密文 c,c′c, c^{\prime}c,c′,假定他们相应的公钥分别为集合K,K′K, K^{\prime}K,K′。乘法为:
先计算c0=[c⋅c′]q∈Rqc_{0}=\left[c \cdot c^{\prime}\right]_{q} \in R_{q}c0=[c⋅c′]q∈Rq
- If K∩K′=∅K \cap K^{\prime}=\emptysetK∩K′=∅, let cmult =c0c_{\text {mult }}=c_{0}cmult =c0
- Otherwise, let K∩K′={pki1,…,pkit}.K \cap K^{\prime}=\left\{\mathrm{pk}_{i_{1}}, \ldots, \mathrm{pk}_{i_{t}}\right\} .K∩K′={pki1,…,pkit}. For j∈[t]j \in[t]j∈[t], compute cj=c_{j}=cj=
[⟨Bit(cj−1),ekij⟩]q\left[\left\langle\operatorname{Bit}\left(c_{j-1}\right), \mathrm{ek}_{i_{j}}\right\rangle\right]_{q}[⟨Bit(cj−1),ekij⟩]q, and let cmult =ctc_{\text {mult }}=c_{t}cmult =ct at the end of the iteration.
记公钥表示方法:S⊆[N]S \subseteq[N]S⊆[N], fS=def ∏i∈Sfi.f_{S} \stackrel{\text { def }}{=} \prod_{i \in S} f_{i} .fS= def ∏i∈Sfi.。注意到c0c_0c0是一个对应公钥为fKfK′f_{K} f_{K^{\prime}}fKfK′的密文,我们的目的是把他变为对应公钥为fK∪K′f_{K \cup K^{\prime}}fK∪K′的密文,其中
fKfK′(∏j∈K∩K′fj)−1=fK∪K′f_{K} f_{K^{\prime}}\left(\prod_{j \in K \cap K^{\prime}} f_{j}\right)^{-1}=f_{K \cup K^{\prime}} fKfK′⎝⎛j∈K∩K′∏fj⎠⎞−1=fK∪K′
相当于是将密钥中的fi12…fit2f_{i_{1}}^{2} \ldots f_{i_{t}}^{2}fi12…fit2 替换为 fi1…fitf_{i_{1}} \ldots f_{i_{t}}fi1…fit。
噪声分析&正确性
主要考虑的是乘法的情况。令K∩K′={i1,…,it}K \cap K^{\prime}=\left\{i_{1}, \ldots, i_{t}\right\}K∩K′={i1,…,it},定义F0=def fKfK′F_{0} \stackrel{\text { def }}{=} f_{K} f_{K^{\prime}}F0= def fKfK′, 对于j∈[t]j \in[t]j∈[t], 定义Fj=Fj−1⋅fij−1F_{j}=F_{j-1} \cdot f_{i_{j}}^{-1}Fj=Fj−1⋅fij−1 ,那么 Ft=fK∪K′F_{t}=f_{K \cup K^{\prime}}Ft=fK∪K′。
首先看到对于c0c_0c0,有:
[F0⋅c0]q=[(fK⋅c)(fK′⋅cK)]q=(2e+m)(2e′+m′)\left[F_{0} \cdot c_{0}\right]_{q}=\left[\left(f_{K} \cdot c\right)\left(f_{K^{\prime}} \cdot c_{K}\right)\right]_{q}=(2 e+m)\left(2 e^{\prime}+m^{\prime}\right)[F0⋅c0]q=[(fK⋅c)(fK′⋅cK)]q=(2e+m)(2e′+m′)
对于cj=[⟨Bit(cj−1),ekij⟩]qc_{j}=[\langle\operatorname{Bit}\left(c_{j-1}\right),\mathrm{ek}_{i_{j}}\rangle]_{q}cj=[⟨Bit(cj−1),ekij⟩]q来说
[Fj⋅cj]q=[Fj⋅⟨Bit(cj−1),hijs~+2e~+Pow(fij)⟩]q=[Fj⋅⟨Bit(cj−1),hijs~⟩+Fj⋅⟨Bit(cj−1),2e~⟩+Fjcj−1fij]q=Fjfij−1⋅⟨Bit(cj−1),2gijs~⟩+Fj⋅⟨Bit(cj−1),2e~⟩+Fj−1cj−1\begin{aligned}\left[F_{j} \cdot c_{j}\right]_{q} &=\left[F_{j} \cdot\left\langle\operatorname{Bit}\left(c_{j-1}\right), h_{i_{j}} \widetilde{\mathbf{s}}+2 \widetilde{\mathbf{e}}+\operatorname{Pow}\left(f_{i_{j}}\right)\right\rangle\right]_{q} \\ &=\left[F_{j} \cdot\left\langle\operatorname{Bit}\left(c_{j-1}\right), h_{i_{j}} \widetilde{\mathbf{s}}\right\rangle+F_{j} \cdot\left\langle\operatorname{Bit}\left(c_{j-1}\right), 2 \widetilde{\mathbf{e}}\right\rangle+F_{j} c_{j-1} f_{i_{j}}\right]_{q} \\ &=F_{j} f_{i_{j}}^{-1} \cdot\left\langle\operatorname{Bit}\left(c_{j-1}\right), 2 g_{i_{j}} \widetilde{\mathbf{s}}\right\rangle+F_{j} \cdot\left\langle\operatorname{Bit}\left(c_{j-1}\right), 2 \widetilde{\mathbf{e}}\right\rangle+F_{j-1} c_{j-1} \end{aligned}[Fj⋅cj]q=[Fj⋅⟨Bit(cj−1),hijs+2e+Pow(fij)⟩]q=[Fj⋅⟨Bit(cj−1),hijs⟩+Fj⋅⟨Bit(cj−1),2e⟩+Fjcj−1fij]q=Fjfij−1⋅⟨Bit(cj−1),2gijs⟩+Fj⋅⟨Bit(cj−1),2e⟩+Fj−1cj−1
得出结论:
[Fj⋅cj]q=[F0⋅c0]q+emult[F_j\cdot c_j]_q = [F_0\cdot c_0]_q + e_{mult}[Fj⋅cj]q=[F0⋅c0]q+emult
此处emult≤(nB)2NE2e_{mult}\le (nB)^{2N}E^2emult≤(nB)2NE2,这个噪声是怎么得到的就省略了,直接看结论。
其中EEE是初始噪声,在之前我们也提到过,E≤3(nB)2E \leq 3(n B)^{2}E≤3(nB)2,因此对于DDD深度的电路来说,NTRU方案的噪声为:
((nB)2NE)2D≤((3nB)2D⋅(2N+2))\left((n B)^{2 N} E\right)^{2^{D}} \leq\left((3 n B)^{2^{D} \cdot(2 N+2)}\right)((nB)2NE)2D≤((3nB)2D⋅(2N+2))
所以NTRU的电路深度为D<loglogq−loglogn−logN−O(1)D<\log \log q-\log \log n-\log N-O(1)D<loglogq−loglogn−logN−O(1),当我们取B=poly(n)B=\operatorname{poly}(n)B=poly(n) , N=O(nδ)N=O\left(n^{\delta}\right)N=O(nδ) ,q=2nεq=2^{n^{\varepsilon}}q=2nε时,深度为:D<(ε−δ)logn−loglogn−O(1)D<(\varepsilon-\delta) \log n-\log \log n-O(1)D<(ε−δ)logn−loglogn−O(1)。
从SomeWhat转换为全同态
总的来说,要将SomeWhat HE方案转换为FHE方案还是需要使用Gentry09提出的Bootstrapping方案。思路就是同态地执行解密电路:
在原本的FHE定义[BV11]中,Bootstraping的定义为:
DEFINITION 3.73.73.7 (bootstrappable encryption scheme). Let HE\mathrm{HE}HE be C\mathcal{C}C -homomorphic, and let fadd f_{\text {add }}fadd and fmult f_{\text {mult }}fmult be the the augmented decryption functions of the scheme defined asa sas
fadd c1,c2(s)=HE⋅Decs(c1)XORHE.Decs(c2)f_{\text {add }}^{c_{1}, c_{2}}(s)=\mathrm{HE} \cdot \mathrm{Dec}_{s}\left(c_{1}\right) XOR\ \mathrm{HE} . \operatorname{Dec}_{s}\left(c_{2}\right) fadd c1,c2(s)=HE⋅Decs(c1)XOR HE.Decs(c2)
and
fmult c1,c2(s)=HE.Decs(c1)ANDHE.Decs(c2),f_{\text {mult }}^{c_{1}, c_{2}}(s)=\mathrm{HE.Dec}_{s}\left(c_{1}\right) A N D \ \mathrm{HE.Dec}_{s}\left(c_{2}\right), fmult c1,c2(s)=HE.Decs(c1)AND HE.Decs(c2),
where c1,c2c_{1}, c_{2}c1,c2 are either properly encrypted ciphertexts of the scheme, or outputs of the homomorphic evaluation function, applied to such. Then E\mathcal{E}E is bootstrappable if
{fadd c1,c2,fmult c1,c2}c1,c2⊆C\left\{f_{\text {add }}^{c_{1}, c_{2}}, f_{\text {mult }}^{c_{1}, c_{2}}\right\}_{c_{1}, c_{2}} \subseteq \mathcal{C} {fadd c1,c2,fmult c1,c2}c1,c2⊆C
而本文对其进行了到MKHE下的扩展,定义如下:
Definition 3.3 (Multikey Bootstrappable Schemes). Let E=\mathcal{E}=E= {E(N)=(Keygen, Enc, Dec, Eval )}N>0\left\{\mathcal{E}^{(N)}=(\text { Keygen, Enc, Dec, Eval })\right\}_{N>0}{E(N)=( Keygen, Enc, Dec, Eval )}N>0 be a family of multikey C-homomorphic encryption schemes, and let fadd f_{\text {add }}fadd and fmult f_{\text {mult }}fmult be the the augmented decryption functions of the scheme defined as
fadd c1,c2(sk1,…,skN)=Dec(sk1,…,skN,c1)XORDec(sk1,…,skN,c2)fmult c1,c2(sk1,…,skN)=Dec(sk1,…,skN,c1)ANDDec(sk1,…,skN,c2)\begin{array}{l} f_{\text {add }}^{c_{1}, c_{2}}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}\right)=\operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c_{1}\right) \quad X O R \quad \operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c_{2}\right) \\ f_{\text {mult }}^{c_{1}, c_{2}}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}\right)=\operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c_{1}\right) \quad A N D \quad \operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c_{2}\right) \end{array} fadd c1,c2(sk1,…,skN)=Dec(sk1,…,skN,c1)XORDec(sk1,…,skN,c2)fmult c1,c2(sk1,…,skN)=Dec(sk1,…,skN,c1)ANDDec(sk1,…,skN,c2)
Then E\mathcal{E}E is bootstrappable if {fadd c1,c2,fmult c1,c2}c1,c2⊆C.\left\{f_{\text {add }}^{c_{1}, c_{2}}, f_{\text {mult }}^{c_{1}, c_{2}}\right\}_{c_{1}, c_{2}} \subseteq \mathcal{C} .{fadd c1,c2,fmult c1,c2}c1,c2⊆C. Namely, the scheme can homomorphically evaluate fadd f_{\text {add }}fadd and fmult f_{\text {mult }}fmult .
但本文的MKHE的NTRU方案不能直接应用Bootstrapping算法,以为多密钥解密电路的复杂度为clogNlognc \log{N}\log{n}clogNlogn,其中c>1c>1c>1,而根据之前的噪声分析,本文的MKHE的电路深度仅为εlogn\varepsilon \log nεlogn,其中ε<1\varepsilon<1ε<1。所以需要一种增加电路深度的方法,这里采用了[BGV12]的模数缩减方法。
模数缩减
p<qp<qp<q,将一个RqR_qRq中的密文ccc变为RpR_pRp中的c′c'c′。他们满足
[fc]p=[fc′]q(mod2)[f c]_{p}=\left[f c^{\prime}\right]_{q}(\bmod 2) [fc]p=[fc′]q(mod2)
具体方法是取c′c'c′为RpR_pRp中最接近(p/q)⋅c(p/q)\cdot c(p/q)⋅c的元素,使得c′≡c(mod2)c'\equiv c \pmod 2c′≡c(mod2)。使得原本密文中的噪声变为B⋅(p/q)B\cdot (p/q)B⋅(p/q)。
使用这样的一个模数缩减机制,对于一个深度为DDD的电路,我们可以取一个递减的模数q0,...,qDq_0,...,q_Dq0,...,qD,在每次乘法之后进行一次模数递减。只要令D>DdecD>D_{dec}D>Ddec,就可以进行bootstrapping操作了。
通过模数缩减和重线性化来得到一个层级的多密钥全同态方案:
方案额外增加了一个参数DDD,代表这个需要进行同态运算的电路的深度,根据深度生成DDD个递减的模数q0,...,qDq_0,...,q_Dq0,...,qD。
在原本的方案中,我们公钥为h=2gf−1h=2gf^{-1}h=2gf−1,私钥为fff,那么扩展到一个DDD层的全同态加密方案后,需要生成DDD个不同的公私钥对(h(d),f(d)),d∈{0,...,D}\left( h^{(d)},f^{(d)}\right), d\in \{0,...,D\}(h(d),f(d)),d∈{0,...,D},密文由公钥pk=defh(0)pk\stackrel{def}{=}h^{(0)}pk=defh(0)加密,第ddd层的密文由私钥sk(d)=deff(d)sk^{(d)}\stackrel{def}{=}f^{(d)}sk(d)=deff(d)解密。
重线性化现在不仅要将f2f^2f2项变为fff,同时还要进行模数缩减,也就是说,将解密密钥从(f(d−1))2(f^{(d-1)})^2(f(d−1))2变为f(d)f^{(d)}f(d)。
方案构造:
- LH.Keygen (1κ):\left(1^{\kappa}\right):(1κ): For every i∈{0,…,D}i \in\{0, \ldots, D\}i∈{0,…,D}, sample g(i),u(i)←χg^{(i)}, u^{(i)} \leftarrow \chig(i),u(i)←χ and set f(i):=2u(i)+1f^{(i)}:=2 u^{(i)}+1f(i):=2u(i)+1 so that f(i)≡1(mod2).f^{(i)} \equiv 1(\bmod 2) .f(i)≡1(mod2). If f(i)f^{(i)}f(i) is not invertible in RqiR_{q_{i}}Rqi, resample u(i)u^{(i)}u(i); otherwise, let (f(i))−1\left(f^{(i)}\right)^{-1}(f(i))−1
be the inverse of f(i)f^{(i)}f(i) in Rq.R_{q} .Rq. Let h(i)=def [2g(i)(f(i))−1]qi∈Rqih^{(i)} \stackrel{\text { def }}{=}\left[2 g^{(i)}\left(f^{(i)}\right)^{-1}\right]_{q_{i}} \in R_{q_{i}}h(i)= def [2g(i)(f(i))−1]qi∈Rqi, and set
pk=def h(0)∈Rq0,sk=def f(D)∈RqD\mathrm{pk} \stackrel{\text { def }}{=} h^{(0)} \in R_{q_{0}} \quad, \quad \mathrm{sk} \stackrel{\text { def }}{=} f^{(D)} \in R_{q_{D}} pk= def h(0)∈Rq0,sk= def f(D)∈RqD
For all i∈[D]i \in[D]i∈[D], sample s~γ(i),e~γ(i),s~ζ(i),e~ζ(i)←χ⌈logq⌉\widetilde{\mathbf{s}}_{\gamma}^{(i)}, \widetilde{\mathbf{e}}_{\gamma}^{(i)}, \widetilde{\mathbf{s}}_{\zeta}^{(i)}, \widetilde{\mathbf{e}}_{\zeta}^{(i)} \leftarrow \chi^{\lceil\log q\rceil}sγ(i),eγ(i),sζ(i),eζ(i)←χ⌈logq⌉ and compute
γ(i):=[h(i)s~γ(i)+2e~γ(i)+Pow(f(i−1))]qi∈Rqi[logqi⌉ζ(i):=[h(i)s~ζ(i)+2e~ζ(i)+Pow((f(i−1))2)]qi∈Rqi[logqi]\begin{array}{l} \gamma^{(i)}:=\left[h^{(i)} \widetilde{\mathbf{s}}_{\gamma}^{(i)}+2 \widetilde{\mathbf{e}}_{\gamma}^{(i)}+\operatorname{Pow}\left(f^{(i-1)}\right)\right]_{q_{i}} \in R_{q_{i}}^{\left[\log q_{i}\right\rceil} \\ \zeta^{(i)}:=\left[h^{(i)} \widetilde{\mathbf{s}}_{\zeta}^{(i)}+2 \widetilde{\mathbf{e}}_{\zeta}^{(i)}+\operatorname{Pow}\left(\left(f^{(i-1)}\right)^{2}\right)\right]_{q_{i}} \in R_{q_{i}}^{\left[\log q_{i}\right]} \end{array} γ(i):=[h(i)sγ(i)+2eγ(i)+Pow(f(i−1))]qi∈Rqi[logqi⌉ζ(i):=[h(i)sζ(i)+2eζ(i)+Pow((f(i−1))2)]qi∈Rqi[logqi]
Set ek =def {γ(i),ζ(i)}i∈[D]\stackrel{\text { def }}{=}\left\{\gamma^{(i)}, \zeta^{(i)}\right\}_{i \in[D]}= def {γ(i),ζ(i)}i∈[D], and output the key tuple (pk,sk,ek)(pk,sk,ek)(pk,sk,ek).
LH.Enc (pk,m):(\mathrm{pk}, m):(pk,m): Sample s,e←χ.s, e \leftarrow \chi .s,e←χ. Output the ciphertext c:=[hs+2e+m]q0∈Rq0c:=[h s+2 e+m]_{q_{0}} \in R_{q_{0}}c:=[hs+2e+m]q0∈Rq0.
LH.Dec (sk1,…,skN,c):\left(s k_{1}, \ldots, s k_{N}, c\right):(sk1,…,skN,c): Assume w.loo.g. that c∈RqDc \in R_{q_{D}}c∈RqD. Parse sk i=fi_{i}=f_{i}i=fi for i∈[N]i \in[N]i∈[N]. Let μ:=[f1⋯fN⋅c]qD∈RqD.\mu:=\left[f_{1} \cdots f_{N} \cdot c\right]_{q_{D}} \in R_{q_{D}} .μ:=[f1⋯fN⋅c]qD∈RqD. Output m′:=μ(mod2)m^{\prime}:=\mu(\bmod 2)m′:=μ(mod2)
LH.Eval (C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ))\left(C,\left(c_{1}, p k_{1}, e k_{1}\right), \ldots,\left(c_{\ell}, p k_{\ell}, e k_{\ell}\right)\right)(C,(c1,pk1,ek1),…,(cℓ,pkℓ,ekℓ)) :
- Given two ciphertexts c,c∈Rqdc, c \in R_{q_{d}}c,c∈Rqd with corresponding public-key sets K,K′K, K^{\prime}K,K′, compute c0=[c+c′]qd∈Rqdc_{0}=\left[c+c^{\prime}\right]_{q_{d}} \in R_{q_{d}}c0=[c+c′]qd∈Rqd and let K∪K′={pki1,…,pkit}.K \cup K^{\prime}=\left\{\mathrm{pk}_{i_{1}}, \ldots, \mathrm{pk}_{i_{t}}\right\} .K∪K′={pki1,…,pkit}. For j=1,…,rj=1, \ldots, rj=1,…,r, parse ek ij=_{i_{j}}=ij= {γij(δ),ζij(δ)}δ∈[D]\left\{\gamma_{i_{j}}^{(\delta)}, \boldsymbol{\zeta}_{i_{j}}^{(\delta)}\right\}_{\delta \in[D]}{γij(δ),ζij(δ)}δ∈[D] and compute
cj=[⟨Bit(cj−1),γij(d)⟩]q∈Rqdc_{j}=\left[\left\langle\operatorname{Bit}\left(c_{j-1}\right), \gamma_{i_{j}}^{(d)}\right\rangle\right]_{q} \in R_{q_{d}} cj=[⟨Bit(cj−1),γij(d)⟩]q∈Rqd
Finally, reduce the modulus: let cadd c_{\text {add }}cadd be the integer vector closest to (qd+1/qd)⋅ct\left(q_{d+1} / q_{d}\right) \cdot c_{t}(qd+1/qd)⋅ct such that cadd≡ct(mod2).c_{\mathrm{add}} \equiv c_{t}(\bmod 2) .cadd≡ct(mod2). Output cadd∈Rqd+1c_{\mathrm{add}} \in R_{q_{d+1}}cadd∈Rqd+1 as an encryption of the sum of the underlying messages. Output the set Kadd =def K∪K′K_{\text {add }} \stackrel{\text { def }}{=} K \cup K^{\prime}Kadd = def K∪K′ as its corresponding public-key set.
- Given two ciphertexts c,c∈Rqdc, c \in R_{q_{d}}c,c∈Rqd with corresponding public-key sets K,K′K, K^{\prime}K,K′, compute c0=[c+c′]qd∈Rqdc_{0}=\left[c+c^{\prime}\right]_{q_{d}} \in R_{q_{d}}c0=[c+c′]qd∈Rqd and let K∪K′={pki1,…,pkit}.K \cup K^{\prime}=\left\{\mathrm{pk}_{i_{1}}, \ldots, \mathrm{pk}_{i_{t}}\right\} .K∪K′={pki1,…,pkit}. For j=1,…,rj=1, \ldots, rj=1,…,r, parse ek ij=_{i_{j}}=ij=
{γij(δ),ζij(δ)}δ∈[D]\left\{\gamma_{i_{j}}^{(\delta)}, \boldsymbol{\zeta}_{i_{j}}^{(\delta)}\right\}_{\delta \in[D]}{γij(δ),ζij(δ)}δ∈[D] and compute cjc_{j}cj as follows:
∗*∗ If pkij∈K∩K′\mathrm{pk}_{i_{j}} \in K \cap K^{\prime}pkij∈K∩K′, let
cj=[⟨Bit(cj−1),γij(d)⟩]q∈Rqdc_{j}=\left[\left\langle\operatorname{Bit}\left(c_{j-1}\right), \gamma_{i_{j}}^{(d)}\right\rangle\right]_{q} \in R_{q_{d}} cj=[⟨Bit(cj−1),γij(d)⟩]q∈Rqd
Otherwise, let
cj=[⟨Bit(cj−1),ζij(d)⟩]q∈Rqdc_{j}=\left[\left\langle\operatorname{Bit}\left(c_{j-1}\right), \boldsymbol{\zeta}_{i_{j}}^{(d)}\right\rangle\right]_{q} \in R_{q_{d}} cj=[⟨Bit(cj−1),ζij(d)⟩]q∈Rqd
Finally, reduce the modulus: let cmult c_{\text {mult }}cmult be the integer vector closest to (qd+1/qd)⋅ct\left(q_{d+1} / q_{d}\right) \cdot c_{t}(qd+1/qd)⋅ct such that cmult ≡ct(mod2)c_{\text {mult }} \equiv c_{t}(\bmod 2)cmult ≡ct(mod2). Output cmult ∈Rqd+1c_{\text {mult }} \in R_{q_{d+1}}cmult ∈Rqd+1 as an encryption of the product of the underlying messages. Output the set Kmult =def K∪K′K_{\text {mult }} \stackrel{\text { def }}{=} K \cup K^{\prime}Kmult = def K∪K′ as its corresponding public-key set.
这样的方案满足如下性质:
Lemma 3.6. Let χ\chiχ is a BBB -bounded distribution for B=poly(n)B=\operatorname{poly}(n)B=poly(n), let q0=2nεq_{0}=2^{n^{\varepsilon}}q0=2nε for ε∈(0,1)\varepsilon \in(0,1)ε∈(0,1) and for d∈[D]d \in[D]d∈[D], let qd−1/qd=8n(nB)2N+2.q_{d-1} / q_{d}=8 n(n B)^{2 N+2} .qd−1/qd=8n(nB)2N+2. Then the encryption scheme ELH=(\mathcal{E}_{\mathrm{LH}}=(ELH=( LH.Keygen, LH.Enc, LH.Dec, LH.Eval) described above is multikey homomorphic for NNN keys and circuits of depth DDD as long as ND=O(nε/logn)N D=O\left(n^{\varepsilon} / \log n\right)ND=O(nε/logn)
证明过程省略,引理3.6也就表示,可以通过改变n的大小来对增加深度DDD。
通过MKHE构造一个on-the-fly多方安全计算
基本方案
Let {E(N)=(Keygen, Enc, Dec, Eval )}N>0\left\{\mathcal{E}^{(N)}=(\text { Keygen, Enc, Dec, Eval })\right\}_{N>0}{E(N)=( Keygen, Enc, Dec, Eval )}N>0 be a multikey fully-homomorphic family of encryption schemes. The following construction is an on-the-fly MPC protocol secure against semi-malicious adversaries. The protocol is defined as follows:
Step 1: For i∈[U]i \in[U]i∈[U], party PiP_{i}Pi samples a key tuple (pki,ski,eki)←\left(\mathrm{pk}_{i}, \mathrm{sk}_{i}, \mathrm{ek}_{i}\right) \leftarrow(pki,ski,eki)← Keygen (1κ)\left(1^{\kappa}\right)(1κ) and encrypts its input xix_{i}xi under pki:ci←Enc(pki,xi).\mathrm{pk}_{i}: c_{i} \leftarrow \operatorname{Enc}\left(\mathrm{pk}_{i}, x_{i}\right) .pki:ci←Enc(pki,xi). It sends (pki,eki,ci)\left(\mathrm{pk}_{i}, \mathrm{ek}_{i}, c_{i}\right)(pki,eki,ci) to the server SSS.
At this point a function FFF, represented as a circuit CCC, has been selected on inputs {xi}i∈V\left\{x_{i}\right\}_{i \in V}{xi}i∈V for some V⊆UV \subseteq UV⊆U. Let N=∣V∣.N=|V| .N=∣V∣. For ease of notation, assume w.l.o.g. that V=[N].V=[N] .V=[N]. The parties proceed as follows.
Step 2: The server SSS computes c:=Eval(C,(c1,pk1,ek1),…,(cN,pkN,ekN))c:=\operatorname{Eval}\left(C,\left(c_{1}, \mathrm{pk}_{1}, \mathrm{ek}_{1}\right), \ldots,\left(c_{N}, \mathrm{pk}_{N}, \mathrm{ek}_{N}\right)\right)c:=Eval(C,(c1,pk1,ek1),…,(cN,pkN,ekN)) and broadcasts ccc to
parties P1,…,PNP_{1}, \ldots, P_{N}P1,…,PN
Step 3: The parties P1,…,PNP_{1}, \ldots, P_{N}P1,…,PN run a secure MPC protocol ΠDECSM{\Pi_{\mathrm{DEC}} }^\mathrm{SM}ΠDECSM to compute the function gc(sk1,…,skN)=def Dec(sk1,…,skN,c)g_{c}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}\right) \stackrel{\text { def }}{=} \operatorname{Dec}\left(\mathrm{sk}_{1}, \ldots, \mathrm{sk}_{N}, c\right)gc(sk1,…,skN)= def Dec(sk1,…,skN,c)
安全性
如上述方法构造的MPC方案在半诚实敌手模型下安全。使用混合模型证明安全性
Hybrid 0: 真实世界
Hybrid 1: 将step3中的 ΠDECSM\Pi_{\mathrm{DEC}}^{SM}ΠDECSM 改为模拟器SΠDECSM\mathcal{S}_{\Pi_{\mathrm{DEC}}}^{\mathrm{SM}}SΠDECSM,和ASM\mathcal{A}^{\mathrm{SM}}ASM交互。
Hybrid 2: 将SΠDECSM\mathcal{S}_{\Pi_{\mathrm{DEC}}}^{\mathrm{SM}}SΠDECSM返回的Dec(s~k1,…,sk~N,c)\operatorname{Dec}\left(\widetilde{\mathrm{s}} \mathrm{k}_{1}, \ldots, \widetilde{\mathrm{sk}}_{N}, c\right)Dec(sk1,…,skN,c)改为返回f(x~1,…,x~N)f\left(\widetilde{x}_{1}, \ldots, \widetilde{x}_{N}\right)f(x1,…,xN)
Hybrid 3.k: 将前k个密文改为Enc(0)Enc(0)Enc(0)。返回f(x~1,…,x~N)f\left(\widetilde{x}_{1}, \ldots, \widetilde{x}_{N}\right)f(x1,…,xN)
首先根据MPC方案的安全性,0和1不可区分,1和2的不可区分在于没改变任何输入输出。2就相当于3.0,3.k-1和3.k的不可区分性来自于加密方案的语义安全。
On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption相关推荐
- 什么是多方计算multi-party computation (MPC)
文章目录 什么是多方计算multi-party computation (MPC) MPC和TEE比较 外包计算 安全模型 MPC问题分类 其他参考 什么是多方计算multi-party comput ...
- A Glance at Secure Multiparty Computation for Privacy Preserving Data Mining论文总结
A Glance at Secure Multiparty Computation for Privacy Preserving Data Mining论文总结 Abstract I. INTRODU ...
- bfv同态加密_同态加密综述
目前大部分内容翻译自维基百科, 后续会根据调研情况不断丰富. 基本概念 同态加密(Homomorphic encryption) 是一种可以支持在密文上进行计算的加密方式, 对在密文上计算得到的结果进 ...
- 【Paper Reading】BatchCrypt: Efficient Homomorphic Encryption for Cross-Silo Federated Learning
BatchCrypt: Efficient Homomorphic Encryption for Cross-Silo Federated Learning 原文来源:[ATC 2020] Batch ...
- 隐私计算 — 联邦学习 — Overview
目录 文章目录 目录 前言 联邦学习 联邦学习与分布式机器学习的区别 联邦学习的网络拓扑类型 客户端-服务器拓扑 对等网络拓扑 联邦学习的数据分区类型 横向联邦学习 纵向联邦学习 联邦迁移学习(Fed ...
- 联邦学习((Federated Learning,FL)
每日一诗: 题竹(十三岁应试作于楚王孙园亭) --明*张居正 绿遍潇湘外,疏林玉露寒. 凤毛丛劲节,只上尽头竿. 近期在阅读联邦学习领域相关文献,简单介绍如下文.本文仅供学习,无其它用途.如有错误,敬 ...
- 【论文阅读】查询搜索中的安全和效率权衡(ACM 10.1145)
英文标题: Privacy and Efficiency Tradeoffs for Multiword Top K Searchwith Linear Additive Rank Scoring 中 ...
- 加密数据机器学习_机器学习加密数据不再是幻想
加密数据机器学习 At Intuit, the proud maker of TurboTax, QuickBooks, and Mint, we're the trusted stewards of ...
- 联邦学习的隐忧:来自梯度的深度泄露
作者 | Ligeng Zhu and Song Han 编译 | 对外经济贸易大学金融科技实验室 头图 | 下载于视觉中国 [编者按]数据交易流通是数据要素市场建立的关键环节.为了在推动数据流动的同 ...
最新文章
- 技术图文:Python描述符 (descriptor) 详解
- No valid host was found. There are not enough hosts available
- 信息系统项目管理师算职称吗
- 转载: 8天学通MongoDB——第七天 运维技术
- 工厂设计模式–一种有效的方法
- ambari mysql error code: 1665_ambari安装中常见的问题
- 【OJ】2020蓝桥杯模拟赛题解(Java语言描述)
- c2java Greedy 之任务调度
- mysql+5.6+左连接_第5章 索引与算法
- 【已解决】wordpress文章页面如何去掉特色图像
- 超低代码拓荒记 | 工业互联网新边疆
- 整理Java基础知识--数组2
- 怎么分行显示java程序,月光软件站 - 编程文档 - Java - 如何在J2ME的低级界面中轻松实现各种文字的自然分行显示...
- 7 vsphere 分配许可_vCenter server 5.5中添加ESXi5.5主机并分配许可密钥
- R和RStudio一起安装在D盘
- 欲望无限--《贝奥武夫》给我们的启示
- 微信 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}
- 外网访问redis cluster的大坑
- Personal views on domain change of several theorems and applications
- 关于文献阅读和寻找新的科研题目