《全同态加密理论、生态现状与未来展望》系列由lynndell2010@gmail.com和mutourend2010@gmail.com整理原创发布,分为上中下三个系列:
- 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。
- 全同态加密理论、生态现状与未来展望(中1):专注于介绍全同态加密四代算法中第一代第二代FHE算法的衍化历程。
- 全同态加密理论、生态现状与未来展望(中2):专注于介绍全同态加密四代算法中第三代第四代FHE算法的衍化历程。
- 全同态加密理论、生态现状与未来展望(下):专注于介绍当前全同态加密生态现状及未来展望。
整个系列内容可能存在纰漏,希望能得到大家的反馈,有任何问题欢迎邮件联系lynndell2010@gmail.com和mutourend2010@gmail.com,或在本文下方评论留言。
3. 四代全同态加密
3.1 第1代:基于理想格和AGDC
Gentry09的方案涉及了较多的代数数论,方案复杂度较高。
DGHV10方案基于整数,方案简单,便于理解,但计算复杂度高,公钥尺寸非常大。
3.1.1 Gentry09
Fully homomorphic encryption using ideal lattices
理想: I I I是环 R R R的一个子集,包含0(即加法的逆元素),满足以下条件:
-
I I I中两个元素的加法结果仍然在 I I I 中;
-
I I I中的一个元素与 R R R中的一个元素的乘积仍然在 I I I中。
主理想是由一个元素生成的理想,即由 a a a生成的主理想是 a a a的倍数组成的集合。
Gentry09方案: 使用由理想 I I I定义的整数子格 L ( I ) ⊆ Z m L(I) \subseteq \mathbb{Z}^m L(I)⊆Zm。
-
密钥生成: 公钥 B p k B_{pk} Bpk和私钥 B s k B_{sk} Bsk分别是理想格 L ( I ) L(I) L(I)的劣质基与优质基。
-
加密: 消息是一比特, m ∈ { 0 , 1 } m \in \{0, 1\} m∈{0,1}),如下计算
a = m + 2 e ∈ R d \mathbf{a} = m + 2\mathbf{e} \in \mathbb{R}^d a=m+2e∈Rd
其中, e \mathbf{e} e是噪声,即一个随机向量,其系数属于 { 0 , ± 1 } \{0, \pm1\} {0,±1},且 ± 1 \pm1 ±1 取值的概率相等。
密文 c \mathbf{c} c是点 a \mathbf{a} a在平行六面体 P ( B p k ) P(B_{pk}) P(Bpk)中的平移。其中, B p k B_{pk} Bpk 是公钥,即
c = a − ( ⌈ a B p k − 1 ⌋ B p k ) \mathbf{c} = \mathbf{a} - (\lceil \mathbf{a}B_{pk}^{-1} \rfloor B_{pk}) c=a−(⌈aBpk−1⌋Bpk)
其中, ⌈ ⋅ ⌋ \lceil \cdot \rfloor ⌈⋅⌋ 表示四舍五入到最近的整数。 -
解密: 计算
a ′ = c − ( ⌈ c B s k − 1 ⌋ B s k ) \mathbf{a}' = \mathbf{c} - (\lceil \mathbf{c}B_{sk}^{-1} \rfloor B_{sk}) a′=c−(⌈cBsk−1⌋Bsk)
这表示将 c \mathbf{c} c平移到平行六面体 P ( B s k ) \mathcal{P}(B_{sk}) P(Bsk)。其中, B s k B_{sk} Bsk 是私钥。然后输出 a ′ m o d 2 \mathbf{a}' \mod 2 a′mod2 作为解密后的明文。
上述方案由于解密算法的复杂性(即无法同态评估)而无法进行引导自举(bootstrapping 同态解密)。
为了解决该问题,Gentry提出了一个方法,通过对原始的同态加密方案 E E E进行变换,得到一个新的方案 E ∗ E^* E∗。该方案具有相同的同态能力,但具有一个简化的解密函数,从而允许bootstrapping。
为了降低解密算法的复杂性,Gentry证明只需在评估密钥中添加一些关于私钥的"额外信息"。这些额外信息由一组向量 S = { s i ∣ i = 1 , … , S } S = \{s_i | i = 1, \dots, S\} S={si∣i=1,…,S} 组成,从中导出一个子集 T T T。私钥 s k sk sk是 T T T元素的和,评估密钥中包含的公钥信息是集合 S S S。该新方案 E ∗ E^* E∗的安全性基于:集合 T T T是稀疏的且是私有的,因此适用稀疏子集和困难问题(SSSP)。
该方案的安全性基于4个困难问题:
-
稀疏子集和困难问题(SSSP): 已知 n n n个整数 S = { a 1 , . . . , a n } ⊆ Z S=\{a_1,...,a_n\} \subseteq \mathbb{Z} S={a1,...,an}⊆Z,判断是否存在集合 S S S的子集 I I I,满足 ∑ i ∈ I a i = 0 \sum_{i\in I}a_i=0 ∑i∈Iai=0。
-
有界距离解码困难问题(CVP困难问题的变形): 已知一个目标向量 t \mathbf{t} t,使得 dist ( t , L ) < α λ 1 ( L ) \text{dist}(\mathbf{t}, L) < \alpha \lambda_1(L) dist(t,L)<αλ1(L)。其中, λ 1 ( L ) \lambda_1(L) λ1(L) 是格 L L L的第一个最短基向量的长度。求与 t \mathbf{t} t最接近的一个格向量 v ∈ L \mathbf{v} \in L v∈L。
-
理想最短向量困难问题(SVP困难问题的变形): 在格 L L L 中找到一个最短的非零向量。其中, λ 1 ( L ) \lambda_1(L) λ1(L) 是 γ λ 1 ( L ) < λ 2 ( L ) \gamma \lambda_1(L) < \lambda_2(L) γλ1(L)<λ2(L) 且 γ ≥ 1 \gamma \geq 1 γ≥1。换句话说,最短向量的长度保证至少是 λ 2 ( L ) \lambda_2(L) λ2(L) 的 γ \gamma γ 倍小。
-
循环安全,文中未给出证明。
安全问题: CDPR16发现了使用主理想方案的一个漏洞:在给定一个量子多项式时间,或经典的 2 n 2 / 3 − ε 2^{n^{2/3-\varepsilon}} 2n2/3−ε时间算法的情况下,可以进行密钥恢复攻击,攻击目标是基于主理想格的加密构造。Recovering Short Generators of Principal Ideals in Cyclotomic Rings
图3:基于理想格的方案汇总
3.1.2 DGHV10
Fully homomorphic encryption over the integers
该方案是1.2.4节方案实例的一般化
-
密钥生成: 私钥为 p p p,即一个奇数随机整数,以及公钥 ( x 0 , … , x n ) (x_0, \dots, x_n) (x0,…,xn)。 x 0 x_0 x0 是奇数,且 x 0 > x i , ∀ i x_0 > x_i, \forall i x0>xi,∀i
x i = p q i + r i x_i = p q_i + r_i xi=pqi+ri
q i , r i q_i, r_i qi,ri 是随机整数。 -
加密: 消息 m ∈ F 2 m \in \mathbb{F}_2 m∈F2 ,如下计算
c = ( m + 2 r + 2 ∑ i ∈ S x i ) m o d x 0 c = (m + 2r + 2 \sum_{i \in S} x_i) \mod x_0 c=(m+2r+2i∈S∑xi)modx0
其中, r r r 是一个随机整数, S S S 是 { 1 , … , n } \{1, \dots, n\} {1,…,n} 的一个随机子集。 -
解密: 计算 ( c m o d p ) m o d 2 (c \mod p) \mod 2 (cmodp)mod2
该方案的安全性基于稀疏子集和问题(SSSP)以及近似最大公约数(AGCD)困难问题。
-
SSSP困难问题: 已知 n n n个整数 S = { a 1 , . . . , a n } ⊆ Z S=\{a_1,...,a_n\} \subseteq \mathbb{Z} S={a1,...,an}⊆Z,判断是否存在集合 S S S的子集 I I I,满足 ∑ i ∈ I a i = 0 \sum_{i\in I}a_i=0 ∑i∈Iai=0。
-
AGCD困难问题: 已知随机选择的整数集 { x 0 , … , x n } ∈ Z \{x_0, \dots, x_n\} \in \mathbb{Z} {x0,…,xn}∈Z,求解"共同近似除数" p p p。
图 4: 基于 AGCD 困难问题的 FHE 方案汇
3.2 第2代:基于LWE和RLWE
图 5: 第 2 代 FHE:基于 LWE 和 RLWE
3.2.1 预备知识:Kronecker Product
-
张量积是向量积 a ⊗ b \mathbf{a}\otimes \mathbf{b} a⊗b;
-
Kronecker积是矩阵积 A ⊗ B \mathbf{A}\otimes \mathbf{B} A⊗B。
Kronecker积有以下9个性质,最后2个是矩阵性质。
-
A ⊗ ( B + C ) = A ⊗ B + A ⊗ C A\otimes (B+C)=A\otimes B+A\otimes C A⊗(B+C)=A⊗B+A⊗C,要求 B B B和 C C C相同尺寸
-
( A + B ) ⊗ C = A ⊗ C + B ⊗ C (A + B)\otimes C = A \otimes C + B\otimes C (A+B)⊗C=A⊗C+B⊗C,要求 A A A和 B B B相同尺寸
-
k A ⊗ B = A ⊗ k B = k ( A ⊗ B ) kA\otimes B=A\otimes kB= k(A\otimes B) kA⊗B=A⊗kB=k(A⊗B)
-
( A ⊗ B ) ⊗ C = A ⊗ ( B ⊗ C ) (A\otimes B)\otimes C=A\otimes (B\otimes C) (A⊗B)⊗C=A⊗(B⊗C)
-
( A ⊗ B ) ( C ⊗ D ) = ( A C ) ⊗ ( B D ) (A\otimes B)(C\otimes D) = (AC)\otimes (BD) (A⊗B)(C⊗D)=(AC)⊗(BD)
-
( A ⊗ B ) T = A T ⊗ B T (A\otimes B)^T = A^T\otimes B^T (A⊗B)T=AT⊗BT
-
( A ⊗ B ) − 1 = A − 1 ⊗ B − 1 (A\otimes B)^{-1} = A^{-1}\otimes B^{-1} (A⊗B)−1=A−1⊗B−1
-
A ⊗ B ≠ B ⊗ A A\otimes B\neq B\otimes A A⊗B=B⊗A
-
B ⊗ A = P ( A ⊗ B ) Q B\otimes A = P(A\otimes B)Q B⊗A=P(A⊗B)Q, P P P和 Q Q Q是置换矩阵
-
( A B ) T = B T A T (AB)^T=B^T A^T (AB)T=BTAT,矩阵性质
-
( A B ) − 1 = B T A − 1 (AB)^{-1}=B^T A^{-1} (AB)−1=BTA−1,矩阵性质
3.2.2 BV11
Efficient Fully Homomorphic Encryption from (Standard) LWE
-
密钥生成: 选择随机数 s ∈ Z q n \mathbf{s} \in \mathbb{Z}_q^n s∈Zqn,则私钥为 s ˉ = ( − s , 1 ) ∈ Z q n + 1 \bar{\mathbf{s}}=(-\mathbf{s},1)\in \mathbb{Z}_q^{n+1} sˉ=(−s,1)∈Zqn+1。
-
加密: 消息为 m ∈ F 2 m \in \mathbb{F}_2 m∈F2,选择随机矩阵 A ∈ Z q m × n \mathbf{A}\in \mathbb{Z}_q^{m \times n} A∈Zqm×n和噪声 e ∈ Z q n e\in \mathbb{Z}_q^n e∈Zqn, e e e从误差分布 χ \chi χ中随机选择的,计算
c = ( A , b = ⟨ A , s ⟩ + 2 e + m ) ∈ Z q m × n × Z q n \mathbf{c} = (\mathbf{A}, b = \langle \mathbf{A}, \mathbf{s} \rangle + 2\mathbf{e} + m) \in \mathbb{Z}_q^{m \times n} \times \mathbb{Z}_q^n c=(A,b=⟨A,s⟩+2e+m)∈Zqm×n×Zqn
则密文为 c = ( A , b ) \mathbf{c}=(\mathbf{A}, \mathbf{b}) c=(A,b)。 -
解密: 输入私钥 s ˉ = ( − s , 1 ) \bar{\mathbf{s}}=(-\mathbf{s},1) sˉ=(−s,1)和密文 c = ( A , b ) \mathbf{c}=(\mathbf{A}, \mathbf{b}) c=(A,b),如下计算
⟨ c , s ˉ ⟩ = ( b − ⟨ A , s ⟩ m o d q ) m o d 2 = ( ( ⟨ A , s ⟩ + 2 e + m ) − ⟨ A , s ⟩ m o d q ) m o d 2 \begin{aligned} &\langle \mathbf{c}, \bar{\mathbf{s}}\rangle =(\mathbf{b} - \langle \mathbf{A}, \mathbf{s} \rangle \mod q) \mod 2\\ &=\left((\langle \mathbf{A}, \mathbf{s} \rangle + 2\mathbf{e} + m) - \langle \mathbf{A}, \mathbf{s} \rangle\mod q\right) \mod 2 \end{aligned} ⟨c,sˉ⟩=(b−⟨A,s⟩modq)mod2=((⟨A,s⟩+2e+m)−⟨A,s⟩modq)mod2 -
同态加法: c + c ′ = ( A , b ) + ( A ′ , b ′ ) = ( A + A ′ , ⟨ A , s ⟩ + 2 e + m + ⟨ A ′ , s ⟩ + 2 e ′ + m ′ ) = ( A + A ′ , ⟨ A + A ′ , s ⟩ + 2 ( e + e ′ ) + m + m ′ ) = ( A ′ ′ , ⟨ A ′ ′ , s ⟩ + 2 e ′ ′ + m ′ ′ ) = ( A ′ ′ , b ′ ′ ) = c ′ ′ \begin{aligned} &\mathbf{c}+\mathbf{c}' = (\mathbf{A}, \mathbf{b}) + (\mathbf{A}', \mathbf{b}')\\ &=(\mathbf{A}+\mathbf{A}',\langle \mathbf{A}, \mathbf{s} \rangle + 2\mathbf{e} + m+\langle \mathbf{A}', \mathbf{s} \rangle + 2\mathbf{e}' + m')\\ &=(\mathbf{A}+\mathbf{A}',\langle \mathbf{A}+\mathbf{A}', \mathbf{s} \rangle + 2(\mathbf{e}+\mathbf{e}')+m+m')\\ &=(\mathbf{A}'',\langle\mathbf{A}'', \mathbf{s} \rangle + 2\mathbf{e}''+m'')\\ &=(\mathbf{A}'', \mathbf{b}'') \\ &=\mathbf{c}'' \end{aligned} c+c′=(A,b)+(A′,b′)=(A+A′,⟨A,s⟩+2e+m+⟨A′,s⟩+2e′+m′)=(A+A′,⟨A+A′,s⟩+2(e+e′)+m+m′)=(A′′,⟨A′′,s⟩+2e′′+m′′)=(A′′,b′′)=c′′
其中, m ′ ′ = m + m ′ m''=m+m' m′′=m+m′。注意, e ′ ′ = e + e ′ \mathbf{e}''=\mathbf{e}+\mathbf{e}' e′′=e+e′
噪声有积累。同态加法情况下影响较小。 -
**解密:**输入私钥 s ˉ = ( − s , 1 ) \bar{\mathbf{s}}=(-\mathbf{s},1) sˉ=(−s,1)和密文 c ′ ′ = ( A ′ ′ , b ′ ′ ) \mathbf{c}''=(\mathbf{A}'', \mathbf{b}'') c′′=(A′′,b′′),如下计算
m + m ′ : = ⟨ c ′ ′ , s ˉ ˉ ⟩ = ( b ′ ′ − ⟨ A ′ ′ , s ⟩ m o d q ) m o d 2 m+m':=\langle \mathbf{c}'', \bar{\bar{\mathbf{s}}}\rangle =(\mathbf{b}'' - \langle \mathbf{A}'', \mathbf{s} \rangle \mod q) \mod 2 m+m′:=⟨c′′,sˉˉ⟩=(b′′−⟨A′′,s⟩modq)mod2 -
同态乘法: c ⊗ c ′ \mathbf{c}\otimes\mathbf{c}' c⊗c′,称为Kronecker积(Kronecker Product),是外积/张量积从向量到矩阵的推广
-
解密: 私钥 s ˉ \bar{\mathbf{s}} sˉ扩展为新私钥 s ˉ ⊗ s ˉ \bar{\mathbf{s}}\otimes\bar{\mathbf{s}} sˉ⊗sˉ。注意:私钥长度增加了。
如下计算 ⟨ c ⊗ c ′ , s ˉ ⊗ s ˉ ⟩ = ( c ⊗ c ′ ) T ( s ˉ ⊗ s ˉ ) = ( c T ⊗ c ′ T ) ( s ˉ ⊗ s ˉ ) = ( c T s ˉ ) ⊗ ( c ′ T s ˉ ) = ⟨ c , s ˉ ⟩ ⊗ ⟨ c ′ , s ˉ ⟩ = ⟨ c , s ˉ ⟩ ⋅ ⟨ c ′ , s ˉ ⟩ = m ⋅ m ′ \begin{aligned} &\langle \mathbf{c}\otimes \mathbf{c}', \bar{\mathbf{s}}\otimes\bar{\mathbf{s}} \rangle \\ & =(\mathbf{c}\otimes \mathbf{c}')^T (\bar{\mathbf{s}}\otimes\bar{\mathbf{s}})\\ & =(\mathbf{c}^T\otimes \mathbf{c}'^T) (\bar{\mathbf{s}}\otimes\bar{\mathbf{s}})\\ & = (\mathbf{c}^T\bar{\mathbf{s}}) \otimes(\mathbf{c}'^T\bar{\mathbf{s}})\\ & = \langle\mathbf{c},\bar{\mathbf{s}} \rangle \otimes \langle\mathbf{c}',\bar{\mathbf{s}} \rangle\\ & = \langle\mathbf{c},\bar{\mathbf{s}} \rangle \cdot \langle\mathbf{c}',\bar{\mathbf{s}} \rangle\\ & = m\cdot m' \end{aligned} ⟨c⊗c′,sˉ⊗sˉ⟩=(c⊗c′)T(sˉ⊗sˉ)=(cT⊗c′T)(sˉ⊗sˉ)=(cTsˉ)⊗(c′Tsˉ)=⟨c,sˉ⟩⊗⟨c′,sˉ⟩=⟨c,sˉ⟩⋅⟨c′,sˉ⟩=m⋅m′
其中,等号1:内积;等号2:性质6;等号3:性质5;等号4:内积;等号5:Kronecker内积退化;等号6:常规解密。
论文引入了2种新技术:再线性化和维度模缩小。
-
再线性化是必要的,以将乘法密文大小从接近 n 2 / 2 n^2/2 n2/2
降到常规大小,即
n + 1 n + 1 n+1。为了实现这一减少,通过"加密"对称密钥的所有项来转换
c 1 ⋅ c 2 c_1 \cdot c_2 c1⋅c2
的二次方程为线性方程。随后,Brakerski、Gentry和Vaikuntanathan
(Leveled) Fully Homomorphic Encryption without Bootstrapping
将这一技术称为密钥交换(key switching)。在3.2.4节阐述。 -
维度模缩小,即模交换技术,将同态加密方案(SHE)转换为完全同态加密方案,通过将密文 c c c 对模 q q q 的取模转换为密文 c ′ c' c′ 对模 p p p 的取模。其中, p p p 比 q q q 小得多。具体而言,先将 Z q \mathbb{Z}_q Zq 中的每个元素乘以 p / q p/q p/q,然后取最近的整数。此操作的一个有趣副作用是密文中的误差减少。由于采用了模切换,噪声增长较低,这使得可以同态评估解密电路,而无需Gentry提出的压缩方法,使得SSSP假设不再是必需的。在3.2.5节阐述。
3.2.3 BGV14
(Leveled) fully homomorphic encryption without bootstrapping
设 d d d 为 2 的幂, q q q 为奇正整数模数, χ \chi χ 为 R 上的误差分布。其中, R = Z [ x ] / ⟨ x d + 1 ⟩ R = \mathbb{Z}[x]/\langle x^d + 1 \rangle R=Z[x]/⟨xd+1⟩。 设 B B B 为 χ \chi χ 输出元素长度的界限(以极高的概率),并且 B B B 被设置为尽可能小以保持安全性。 对于任意自然数 p p p, R p = Z p [ x ] / ⟨ x d + 1 ⟩ R_p = \mathbb{Z}_p[x]/\langle x^d + 1 \rangle Rp=Zp[x]/⟨xd+1⟩。该方案的工作流程如下:
-
密钥生成: 输入安全参数 λ \lambda λ,随机选择一个小的秘密元素 s ∈ χ s \in \chi s∈χ,并设置私钥 s k = s = ( 1 , s ) ∈ R q 2 sk = \mathbf{s} = (1, s) \in R_q^2 sk=s=(1,s)∈Rq2。随机均匀生成一个 a ′ ∈ R q a' \in R_q a′∈Rq,然后计算 b = a ′ s + 2 e b = a's + 2e b=a′s+2e。其中, e e e 是从 χ \chi χ 中随机选择的误差。 输出 s k sk sk 和公钥 p k = a = ( b , − a ′ ) pk = \mathbf{a} = (b, -a') pk=a=(b,−a′)。以下等式成立
⟨ a , s ⟩ = ⟨ ( b , − a ′ ) , ( 1 , s ) ⟩ = ⟨ ( a ′ s + 2 e , − a ′ ) , ( 1 , s ) ⟩ = 2 e \langle \mathbf{a}, \mathbf{s} \rangle = \langle (b, -a'),(1, s)\rangle= \langle (a's + 2e, -a'),(1, s)\rangle = 2e ⟨a,s⟩=⟨(b,−a′),(1,s)⟩=⟨(a′s+2e,−a′),(1,s)⟩=2e -
加密: 输入公钥 p k ∈ R q 2 pk \in R_q^2 pk∈Rq2 和消息 m ∈ R 2 m \in R_2 m∈R2,将 m m m 转换为向量 m = ( m , 0 ) ∈ R q 2 \mathbf{m} = (m, 0) \in R_q^2 m=(m,0)∈Rq2,并选择噪声 r , e 0 , e 1 ∈ χ r, e_0, e_1 \in \chi r,e0,e1∈χ。输出密文为
c = m + 2 ( e 0 , e 1 ) + a r \mathbf{c} = \mathbf{m} + 2(e_0, e_1) + \mathbf{a}r c=m+2(e0,e1)+ar 展开为:
c = ( c 0 , c 1 ) = ( m + 2 e 0 + b r , 2 e 1 − a ′ r ) ∈ R q 2 \mathbf{c} = (c_0, c_1) = (m + 2e_0 + br, 2e_1 - a'r) \in R_q^2 c=(c0,c1)=(m+2e0+br,2e1−a′r)∈Rq2 -
解密: 输入私钥 s ∈ R q 2 s \in R_q^2 s∈Rq2 和密文 c ∈ R q 2 \mathbf{c} \in R_q^2 c∈Rq2,计算内积 ⟨ c , s ⟩ = c 0 + c 1 s = m + 2 e 0 + b r + ( 2 e 1 − a ′ r ) s = m + 2 e 0 + ( a ′ s + 2 e ) r + ( 2 e 1 − a ′ r ) s = m + 2 e 0 + 2 e 1 s + 2 e r \begin{aligned} &\langle \mathbf{c}, \mathbf{s} \rangle = c_0 + c_1s \\ &= m + 2e_0 + br+ (2e_1 - a'r)s\\ &= m + 2e_0 + (a's + 2e)r+ (2e_1 - a'r)s\\ &= m + 2e_0 + 2e_1s + 2er \end{aligned} ⟨c,s⟩=c0+c1s=m+2e0+br+(2e1−a′r)s=m+2e0+(a′s+2e)r+(2e1−a′r)s=m+2e0+2e1s+2er 并输出 ( ( m + 2 ( e 0 + e 1 s + e r ) ) m o d q ) m o d 2 = m ((m + 2(e_0 + e_1s + er)) \mod q) \mod 2 = m ((m+2(e0+e1s+er))modq)mod2=m。
注意:解密能正常工作是因为 e , e 0 , e 1 e, e_0, e_1 e,e0,e1 和 s s s 足够小(因为它们是 χ \chi χ 的元素)。 -
同态加法: 对应相加 c + c ′ = ( c 0 , c 1 ) + ( c 0 ′ , c 1 ′ ) = ( m + 2 e 0 + b r , 2 e 1 − a ′ r ) + ( m ′ + 2 e 0 ′ + b r ′ , 2 e 1 ′ − a ′ r ′ ) = ( m + m ′ + 2 ( e 0 + e 0 ′ ) + b ( r + r ′ ) , 2 ( e 1 + e 1 ′ ) − a ′ ( r + r ′ ) ) = ( m ′ ′ + 2 e 0 ′ ′ + b r ′ ′ , 2 e 1 ′ ′ − a ′ r ′ ′ ) = ( c 0 ′ ′ , c 1 ′ ′ ) = c ′ ′ \begin{aligned} &\mathbf{c}+\mathbf{c}'=(c_0, c_1)+(c_0', c_1')\\ &=(m + 2e_0 + br, 2e_1 - a'r) + (m' + 2e_0' + br', 2e_1' - a'r')\\ &=\left(m+m' + 2(e_0 +e_0') + b(r+r'), 2(e_1+e_1')-a'(r+r')\right)\\ &=\left(m'' + 2e_0'' + br'', 2e_1''-a'r''\right)\\ &=(c_0'', c_1'')\\ &=\mathbf{c}'' \end{aligned} c+c′=(c0,c1)+(c0′,c1′)=(m+2e0+br,2e1−a′r)+(m′+2e0′+br′,2e1′−a′r′)=(m+m′+2(e0+e0′)+b(r+r′),2(e1+e1′)−a′(r+r′))=(m′′+2e0′′+br′′,2e1′′−a′r′′)=(c0′′,c1′′)=c′′
-
解密: ⟨ c ′ ′ , s ⟩ = c 0 ′ ′ + c 1 ′ ′ s = m ′ ′ + 2 e 0 ′ ′ + b r ′ ′ + ( 2 e 1 ′ ′ − a ′ r ′ ′ ) s = m ′ ′ + 2 e 0 ′ ′ + ( a ′ s + 2 e ) r ′ ′ + ( 2 e 1 ′ ′ − a ′ r ′ ′ ) s = m ′ ′ + 2 e 0 ′ ′ + 2 e 1 ′ ′ s + 2 e r ′ ′ \begin{aligned} &\langle \mathbf{c}'', \mathbf{s} \rangle = c_0'' + c_1''s \\ &= m'' + 2e_0'' + br''+ (2e_1'' - a'r'')s\\ &= m'' + 2e_0'' + (a's + 2e)r''+ (2e_1'' - a'r'')s\\ &= m'' + 2e_0'' + 2e_1''s + 2er'' \end{aligned} ⟨c′′,s⟩=c0′′+c1′′s=m′′+2e0′′+br′′+(2e1′′−a′r′′)s=m′′+2e0′′+(a′s+2e)r′′+(2e1′′−a′r′′)s=m′′+2e0′′+2e1′′s+2er′′ 再 m o d q m o d 2 \mod q \mod 2 modqmod2,则获得 m ′ ′ = m + m ′ m''=m+m' m′′=m+m′。
因此,只要结果中的误差不与模数 q q q重叠,解密就能正常工作。
-
同态乘法: c ⊗ c ′ \mathbf{c} \otimes \mathbf{c}' c⊗c′
-
解密: 私钥 s \mathbf{s} s扩展为新私钥 s ⊗ s \mathbf{s}\otimes\mathbf{s} s⊗s。注意:私钥长度增加了。如下解密:
⟨ c ⊗ c ′ , s ⊗ s ⟩ = ( c ⊗ c ′ ) T ( s ⊗ s ) = ( c T ⊗ c ′ T ) ( s ⊗ s ) = ( c T s ) ⊗ ( c ′ T s ) = ⟨ c , s ⟩ ⊗ ⟨ c ′ , s ⟩ = ⟨ c , s ⟩ ⋅ ⟨ c ′ , s ⟩ = m ⋅ m ′ \begin{aligned} &\langle \mathbf{c}\otimes \mathbf{c}', \mathbf{s}\otimes\mathbf{s} \rangle \\ & =(\mathbf{c}\otimes \mathbf{c}')^T (\mathbf{s}\otimes\mathbf{s})\\ & =(\mathbf{c}^T\otimes \mathbf{c}'^T) (\mathbf{s}\otimes\mathbf{s})\\ & = (\mathbf{c}^T\mathbf{s}) \otimes(\mathbf{c}'^T\mathbf{s})\\ & = \langle\mathbf{c},\mathbf{s} \rangle \otimes \langle\mathbf{c}',\mathbf{s} \rangle\\ & = \langle\mathbf{c},\mathbf{s} \rangle \cdot \langle\mathbf{c}',\mathbf{s} \rangle\\ & = m\cdot m' \end{aligned} ⟨c⊗c′,s⊗s⟩=(c⊗c′)T(s⊗s)=(cT⊗c′T)(s⊗s)=(cTs)⊗(c′Ts)=⟨c,s⟩⊗⟨c′,s⟩=⟨c,s⟩⋅⟨c′,s⟩=m⋅m′
3.2.4 核心技术:密钥交换
解密分析:
⟨
c
⊗
c
′
,
s
⊗
s
⟩
=
⟨
c
,
s
⟩
⋅
⟨
c
′
,
s
⟩
=
(
c
0
+
c
1
s
)
(
c
0
′
+
c
1
′
s
)
=
c
0
c
0
′
+
(
c
0
c
1
′
+
c
1
c
0
′
)
s
+
c
1
c
1
′
s
2
=
d
0
+
d
1
s
+
d
2
s
2
=
⟨
(
d
0
,
d
1
,
d
2
)
,
(
1
,
s
,
s
2
)
⟩
\begin{aligned} &\langle \mathbf{c}\otimes \mathbf{c}', \mathbf{s}\otimes\mathbf{s} \rangle\\ &=\langle\mathbf{c},\mathbf{s} \rangle\cdot \langle\mathbf{c}',\mathbf{s} \rangle\\ &=(c_0 + c_1s)(c_0' + c_1's)\\ &=c_0c_0' + (c_0c_1'+c_1c_0')s+c_1c_1's^2\\ &=d_0 + d_1s + d_2s^2\\ &=\langle(d_0,d_1,d_2),(1,s,s^2)\rangle \end{aligned}
⟨c⊗c′,s⊗s⟩=⟨c,s⟩⋅⟨c′,s⟩=(c0+c1s)(c0′+c1′s)=c0c0′+(c0c1′+c1c0′)s+c1c1′s2=d0+d1s+d2s2=⟨(d0,d1,d2),(1,s,s2)⟩
解密过程可以看系数为
(
d
0
,
d
1
,
d
2
)
(d_0,d_1,d_2)
(d0,d1,d2)的多项式,在横坐标
s
s
s处的求值。
存在问题: 私钥
s
\mathbf{s}
s扩展为新私钥
s
⊗
s
\mathbf{s}\otimes\mathbf{s}
s⊗s,同态乘法一次,则需要私钥扩展一次。
解决方案: 将
s
2
s^2
s2加密到
s
s
s下,可实现密文中的
d
2
s
2
d_2s^2
d2s2转换为
c
ˉ
0
+
c
ˉ
1
s
\bar{c}_0 + \bar{c}_1s
cˉ0+cˉ1s。
具体而言,令消息
m
=
s
2
m=s^2
m=s2,则
m
=
(
s
2
,
0
)
\mathbf{m} = (s^2, 0)
m=(s2,0)。
选择随机数
r
,
e
0
,
e
1
∈
χ
r,e_0,e_1\in \chi
r,e0,e1∈χ,如下加密:
c
=
(
s
2
,
0
)
+
2
(
e
0
,
e
1
)
+
(
b
,
−
a
′
)
r
=
(
s
2
+
2
e
0
+
b
r
,
−
(
a
′
r
−
2
e
1
)
)
≈
(
s
2
+
α
s
,
−
α
)
=
(
β
,
−
α
)
.
\mathbf{c}= (s^2, 0)+2(e_0,e_1)+(b,-a')r=(s^2+2e_0+br,-(a'r-2e_1))\approx (s^2 + \alpha s, -\alpha)= (\beta, -\alpha).
c=(s2,0)+2(e0,e1)+(b,−a′)r=(s2+2e0+br,−(a′r−2e1))≈(s2+αs,−α)=(β,−α).
其中,
α
=
a
′
r
−
2
e
1
\alpha=a'r-2e_1
α=a′r−2e1,
s
2
+
2
e
0
+
b
r
=
s
2
+
2
e
0
+
(
a
′
s
+
2
e
)
r
=
s
2
+
2
e
0
+
a
′
s
r
+
2
e
r
≈
s
2
+
a
′
r
s
−
2
e
1
s
=
s
2
+
α
s
s^2+2e_0+br=s^2+2e_0+(a's+2e)r=s^2+2e_0+a'sr+2er\approx s^2 + a'rs-2e_1s=s^2 + \alpha s
s2+2e0+br=s2+2e0+(a′s+2e)r=s2+2e0+a′sr+2er≈s2+a′rs−2e1s=s2+αs,仅去掉了
2
e
0
2e_0
2e0。
因此,
s
2
≈
β
−
α
s
s^2 \approx \beta - \alpha s
s2≈β−αs,使得扩展密文
(
d
0
,
d
1
,
d
2
)
(d_0,d_1,d_2)
(d0,d1,d2)变成一个正常密文
(
c
0
ˉ
,
c
1
ˉ
)
(\bar{c_0},\bar{c_1})
(c0ˉ,c1ˉ)。
d
0
+
d
1
s
+
d
2
s
2
=
d
0
+
d
1
s
+
β
−
α
s
=
(
d
0
+
β
)
+
(
d
1
−
α
)
s
=
c
0
ˉ
+
c
1
ˉ
s
d_0 + d_1s + d_2s^2=d_0 + d_1s +\beta - \alpha s=(d_0+\beta)+ (d_1- \alpha)s=\bar{c_0}+\bar{c_1}s
d0+d1s+d2s2=d0+d1s+β−αs=(d0+β)+(d1−α)s=c0ˉ+c1ˉs
-
扩展密文 c ⊗ c ′ = ( c 0 , c 1 ) ⊗ ( c 0 ′ , c 1 ′ ) = ( d 0 , d 1 , d 2 ) \mathbf{c}\otimes \mathbf{c}'= (c_0, c_1)\otimes (c_0', c_1')=(d_0,d_1,d_2) c⊗c′=(c0,c1)⊗(c0′,c1′)=(d0,d1,d2),对应的扩展私钥为 s ⊗ s = ( 1 , s , s 2 ) \mathbf{s}\otimes\mathbf{s}=(1,s,s^2) s⊗s=(1,s,s2)。
-
正常密文 ( c 0 ˉ , c 1 ˉ ) (\bar{c_0},\bar{c_1}) (c0ˉ,c1ˉ),对应的正常密钥为 s = ( 1 , s ) \mathbf{s}=(1,s) s=(1,s)。
因此,密钥交换技术把扩展密文变成了正常密文,使得解密密钥不变。
3.2.5 核心技术:模交换
同态乘法: c ⊗ c ′ = ( c 0 , c 1 ) ⊗ ( c 0 ′ , c 1 ′ ) = ( c 0 c 0 ′ , c 0 c 1 ′ , c 1 c 0 ′ , c 1 c 1 ′ ) = ( m + 2 e 0 + b r ) ( m ′ + 2 e 0 ′ + b r ′ ) + ( m + 2 e 0 + b r ) ( 2 e 1 ′ − a ′ r ′ ) + ( m ′ + 2 e 0 ′ + b r ′ ) ( 2 e 1 − a ′ r ) + ( 2 e 1 − a r ) ( 2 e 1 ′ − a ′ r ′ ) \begin{aligned} &\mathbf{c}\otimes\mathbf{c}'=(c_0,c_1)\otimes(c_0',c_1')=(c_0c_0',c_0c_1',c_1c_0',c_1c_1')\\ &=(m+2e_0+br)(m'+2e_0'+br') + (m+2e_0+br)(2e_1'-a'r') \\ & ~~~~~~+ (m'+2e_0'+br')(2e_1-a'r) + (2e_1-ar)(2e_1'-a'r')\\ \end{aligned} c⊗c′=(c0,c1)⊗(c0′,c1′)=(c0c0′,c0c1′,c1c0′,c1c1′)=(m+2e0+br)(m′+2e0′+br′)+(m+2e0+br)(2e1′−a′r′) +(m′+2e0′+br′)(2e1−a′r)+(2e1−ar)(2e1′−a′r′) 噪声为 ( r , e 0 , e 1 ) , ( r ′ , e 0 ′ , e 1 ′ ) ∈ χ (r, e_0, e_1),(r', e_0', e_1') \in \chi (r,e0,e1),(r′,e0′,e1′)∈χ
存在问题: 有两个噪声值为 ∣ ∣ χ ∣ ∣ ||\chi|| ∣∣χ∣∣的密文,相乘后噪声近似为 ∣ ∣ χ ∣ ∣ 2 ||\chi||^2 ∣∣χ∣∣2,则经过 log k \log k logk层同态乘法,噪声积累就达到上限 ∣ ∣ χ ∣ ∣ k m o d q ||\chi||^k\mod q ∣∣χ∣∣kmodq,则不能继续运算了。
解决方案: 每次同态乘法运算完后对噪声乘以 1 / ∣ ∣ χ ∣ ∣ 1/||\chi|| 1/∣∣χ∣∣,则噪声减低为 ∣ ∣ χ ∣ ∣ ||\chi|| ∣∣χ∣∣。此时模缩减为 q / ∣ ∣ χ ∣ ∣ q/||\chi|| q/∣∣χ∣∣。因此,模每缩减一次,则可以进行 log k \log k logk层同态乘法运算。相比原来,仅能进行 log k \log k logk层同态乘法,是指数级提高。
3.2.6 FV12
Somewhat Practical Fully Homomorphic Encryption
令 R = Z [ x ] / ⟨ x d + 1 ⟩ R = \mathbb{Z}[x]/\langle x^d + 1 \rangle R=Z[x]/⟨xd+1⟩。其中, d d d 是 2 的幂。令 q q q 和 p p p 为正整数,令放大因子 Δ = ⌊ q / p ⌋ \Delta = \lfloor q/p \rfloor Δ=⌊q/p⌋ 和 r t ( q ) = q m o d p r_t(q) = q \mod p rt(q)=qmodp。对于任何自然数 t t t,令 R t = Z t [ x ] / ⟨ x d + 1 ⟩ R_t = \mathbb{Z}_t[x]/\langle x^d + 1 \rangle Rt=Zt[x]/⟨xd+1⟩。令 χ \chi χ 是 R q R_q Rq 上的 B 有界概率分布。FV方案的如下:
-
密钥生成: 输入安全参数 λ \lambda λ,输出小的随机数作为私钥 s k = s ∈ χ sk = s \in \chi sk=s∈χ。选择随机数 a ∈ R q a \in R_q a∈Rq,并计算 − ( a ⋅ s + e ) m o d q -(a \cdot s + e) \mod q −(a⋅s+e)modq。其中, e ∈ χ e \in \chi e∈χ 是噪声。输出 s k = s ∈ χ sk=s \in \chi sk=s∈χ和 p k = ( p 0 , p 1 ) = ( − ( a ⋅ s + e ) m o d q , a ) pk = (p_0, p_1) = (-(a \cdot s + e) \mod q, a) pk=(p0,p1)=(−(a⋅s+e)modq,a)。
-
加密: 输入消息 m ∈ R p m \in R_p m∈Rp 和公钥 p k ∈ R q 2 pk \in R_q^2 pk∈Rq2。选择小的随机数 u , e 1 , e 2 ∈ χ u, e_1, e_2 \in \chi u,e1,e2∈χ,如下计算:
c 0 = ( p 0 ⋅ u + e 1 + Δ ⋅ m ) m o d q , c 1 = ( p 1 ⋅ u + e 2 ) m o d q \begin{aligned} &c_0 = (p_0 \cdot u + e_1 + \Delta\cdot m) \mod q,\\ &c_1 = (p_1 \cdot u + e_2) \mod q \end{aligned} c0=(p0⋅u+e1+Δ⋅m)modq,c1=(p1⋅u+e2)modq 输出密文 c = ( c 0 , c 1 ) c = (c_0, c_1) c=(c0,c1)。 -
解密: 输入秘密密钥 s ∈ R q s \in R_q s∈Rq 和密文 c ∈ R q 2 c \in R_q^2 c∈Rq2,如下解密
m : = c ( s ) = ⌈ p ⋅ ( c 0 + c 1 ⋅ s ) m o d q q ⌋ m o d p m:=c(s)=\lceil \frac{p\cdot (c_0 + c_1 \cdot s)\mod q}{q} \rfloor \mod p m:=c(s)=⌈qp⋅(c0+c1⋅s)modq⌋modp
公式展开: p [ c 0 + c 1 ⋅ s ] m o d q q = p [ p 0 ⋅ u + e 1 + Δ ⋅ m + p 1 ⋅ u ⋅ s + e 2 ⋅ s ] m o d q q = p [ − ( a ⋅ s + e ⋅ ) u + e 1 + Δ ⋅ m + a ⋅ u ⋅ s + e 2 ⋅ s ] m o d q q = p [ Δ ⋅ m + e ⋅ u + e 1 + e 2 ⋅ s ] m o d q q = [ q ⋅ m + p e ⋅ u + p e 1 + p e 2 ⋅ s ] m o d q q = m + p [ e ⋅ u + e 1 + e 2 ⋅ s ] m o d q q \begin{aligned} &\frac{p[c_0 + c_1 \cdot s] \mod q}{q}\\ & = \frac{p[p_0 \cdot u + e_1 + \Delta\cdot m + p_1 \cdot u\cdot s + e_2 \cdot s] \mod q}{q}\\ & = \frac{p[-(a \cdot s + e \cdot )u + e_1 + \Delta\cdot m + a \cdot u\cdot s + e_2 \cdot s] \mod q}{q}\\ & = \frac{p[\Delta\cdot m +e \cdot u + e_1+e_2 \cdot s] \mod q}{q}\\ & = \frac{[q\cdot m +pe \cdot u + pe_1+pe_2 \cdot s] \mod q}{q}\\ & = m+\frac{p[e \cdot u + e_1+e_2 \cdot s] \mod q}{q}\\ \end{aligned} qp[c0+c1⋅s]modq=qp[p0⋅u+e1+Δ⋅m+p1⋅u⋅s+e2⋅s]modq=qp[−(a⋅s+e⋅)u+e1+Δ⋅m+a⋅u⋅s+e2⋅s]modq=qp[Δ⋅m+e⋅u+e1+e2⋅s]modq=q[q⋅m+pe⋅u+pe1+pe2⋅s]modq=m+qp[e⋅u+e1+e2⋅s]modq
密文 c c c被视为在 s s s处评估的多项式,即 c ( s ) c(s) c(s),而不是一个具有两个分量的向量。 -
同态加法: c + c ′ = ( c 0 + c 0 ′ , c 1 + c 1 ′ ) = ( c 0 ′ ′ , c 1 ′ ′ ) c + c'=(c_0+c_0', c_1+c_1')=(c_0'',c_1'') c+c′=(c0+c0′,c1+c1′)=(c0′′,c1′′)
-
解密: p [ c 0 ′ ′ + c 1 ′ ′ ⋅ s ] m o d q q = p [ ( c 0 + c 0 ′ ) + ( c 1 + c 1 ′ ) ⋅ s ] m o d q q = p [ ( p 0 ⋅ u + e 1 + Δ ⋅ m + p 1 ⋅ u ⋅ s + e 2 ⋅ s ) + ( p 0 ⋅ u ′ + e 1 ′ + Δ ⋅ m ′ + p 1 ⋅ u ′ ⋅ s + e 2 ′ ⋅ s ) ] m o d q q = p [ − ( a ⋅ s + e ⋅ ) ( u + u ′ ) + ( e 1 + e 1 ′ ) + Δ ⋅ ( m + m ′ ) + a ⋅ ( u + u ′ ) ⋅ s + ( e 2 + e 2 ′ ) ⋅ s ] m o d q q = p [ Δ ⋅ ( m + m ′ ) + e ⋅ ( u + u ′ ) + ( e 1 + e 1 ′ ) + ( e 2 + e 2 ′ ) ⋅ s ] m o d q q = [ q ⋅ ( m + m ′ ) + p e ⋅ ( u + u ′ ) + p ( e 1 + e 1 ′ ) + p ( e 2 + e 2 ′ ) ⋅ s ] m o d q q = ( m + m ′ ) + p [ e ⋅ ( u + u ′ ) + ( e 1 + e 1 ′ ) + ( e 2 + e 2 ′ ) ⋅ s ] m o d q q \begin{aligned} &\frac{p[c_0'' + c_1'' \cdot s] \mod q}{q}\\ &=\frac{p[(c_0+c_0') + (c_1+c_1') \cdot s] \mod q}{q}\\ & = \frac{p[(p_0 \cdot u + e_1 + \Delta\cdot m + p_1 \cdot u\cdot s + e_2 \cdot s)+(p_0 \cdot u' + e_1' + \Delta\cdot m' + p_1 \cdot u'\cdot s + e_2' \cdot s)] \mod q}{q}\\ & = \frac{p[-(a \cdot s + e \cdot )(u+u') + (e_1+e_1') + \Delta\cdot (m+m') + a \cdot (u+u')\cdot s + (e_2+e_2') \cdot s] \mod q}{q}\\ & = \frac{p[\Delta\cdot (m+m') +e \cdot (u+u') + (e_1+e_1')+(e_2+e_2') \cdot s] \mod q}{q}\\ & = \frac{[q\cdot (m+m') +pe \cdot (u+u') + p(e_1+e_1')+p(e_2+e_2') \cdot s] \mod q}{q}\\ & = (m+m')+\frac{p[e \cdot (u+u') + (e_1+e_1')+(e_2+e_2') \cdot s] \mod q}{q}\\ \end{aligned} qp[c0′′+c1′′⋅s]modq=qp[(c0+c0′)+(c1+c1′)⋅s]modq=qp[(p0⋅u+e1+Δ⋅m+p1⋅u⋅s+e2⋅s)+(p0⋅u′+e1′+Δ⋅m′+p1⋅u′⋅s+e2′⋅s)]modq=qp[−(a⋅s+e⋅)(u+u′)+(e1+e1′)+Δ⋅(m+m′)+a⋅(u+u′)⋅s+(e2+e2′)⋅s]modq=qp[Δ⋅(m+m′)+e⋅(u+u′)+(e1+e1′)+(e2+e2′)⋅s]modq=q[q⋅(m+m′)+pe⋅(u+u′)+p(e1+e1′)+p(e2+e2′)⋅s]modq=(m+m′)+qp[e⋅(u+u′)+(e1+e1′)+(e2+e2′)⋅s]modq
-
同态乘法: c ⊗ c ′ = ( c 0 c 0 ′ , c 0 c 1 ′ , c 1 c 0 ′ , c 1 c 1 ′ ) c\otimes c'=(c_0c_0',c_0c_1', c_1c_0', c_1c_1') c⊗c′=(c0c0′,c0c1′,c1c0′,c1c1′)
-
解密: 两个密文的乘积给出的结果是一个二次多项式:
c ( s ) ⋅ c ′ ( s ) = ( c 0 + c 1 ⋅ s ) ⋅ ( c 0 ′ + c 1 ′ ⋅ s ) = c 0 c 0 ′ + ( c 0 c 1 ′ + c 1 c 0 ′ ) s + c 1 c 1 ′ ⋅ s 2 = α 0 + α 1 ⋅ s + α 2 ⋅ s 2 = β 0 + β 1 ⋅ s \begin{aligned} &c(s) \cdot c'(s) \\ &= (c_0 + c_1 \cdot s)\cdot(c_0' + c_1' \cdot s)\\ &= c_0c_0'+(c_0c_1'+ c_1c_0')s + c_1c_1' \cdot s^2\\ &=\alpha_0 + \alpha_1 \cdot s + \alpha_2 \cdot s^2\\ &=\beta_0 + \beta_1 \cdot s \end{aligned} c(s)⋅c′(s)=(c0+c1⋅s)⋅(c0′+c1′⋅s)=c0c0′+(c0c1′+c1c0′)s+c1c1′⋅s2=α0+α1⋅s+α2⋅s2=β0+β1⋅s 最后一步是密钥交换。
3.2.7 LTV13
On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption
-
密钥生成: 选择两个小的随机多项式 f ′ , g ∈ χ f', g \in \chi f′,g∈χ。其中, χ \chi χ是 R = Z [ x ] / ⟨ x d + 1 ⟩ R = \mathbb{Z}[x]/\langle x^d + 1 \rangle R=Z[x]/⟨xd+1⟩上的B有界分布,且 d d d是2的幂。私钥为 f = 2 f ′ + 1 ∈ R f = 2f' + 1 \in R f=2f′+1∈R。其中, f ≡ 1 m o d 2 f \equiv 1 \mod 2 f≡1mod2,且 f f f 在 R q R_q Rq 中是可逆的。 公钥为 h = 2 g f − 1 m o d q ∈ R q h = 2gf^{-1} \mod q \in R_q h=2gf−1modq∈Rq。
-
加密: 输入消息为 m ∈ F 2 m \in \mathbb{F}_2 m∈F2,随机小元素 r , e ∈ χ r,e\in \chi r,e∈χ,如下计算
c = m + h r + 2 e ∈ R q c = m + hr + 2e \in R_q c=m+hr+2e∈Rq
则密文 c c c是卷积多项式环 R q = Z q [ x ] / ⟨ x d + 1 ⟩ R_q = \mathbb{Z}_q[x]/\langle x^d + 1 \rangle Rq=Zq[x]/⟨xd+1⟩中的一个元素。 -
解密: 输入私钥 f f f和密文 c c c,如下解密 ( f c m o d q ) m o d 2 = f ( m + h r + 2 e ) m o d q m o d 2 = f m + f h r + 2 f e m o d q m o d 2 = f m + 2 ( g r + f e ) m o d q m o d 2 = f m + 2 v m o d q m o d 2 = ( 2 f ′ + 1 ) m + 2 v m o d 2 = m \begin{aligned} &(fc \mod q) \mod 2\\ &= f(m + hr + 2e )\mod q\mod 2\\ &= fm + fhr + 2fe \mod q\mod 2\\ &=fm+ 2(gr + fe)\mod q\mod 2\\ &=fm+ 2v\mod q\mod 2\\ &=(2f' + 1)m+ 2v\mod 2\\ &=m \end{aligned} (fcmodq)mod2=f(m+hr+2e)modqmod2=fm+fhr+2femodqmod2=fm+2(gr+fe)modqmod2=fm+2vmodqmod2=(2f′+1)m+2vmod2=m 存在一个关键等式: f c = m f + 2 v ∈ R q fc=mf+ 2v \in R_q fc=mf+2v∈Rq
3.2.8 核心技术:提升维数
上述环LEW加密方案中,私钥的维数为 k k k,令 l = ⌈ log q ⌉ l=\left\lceil {\log q} \right\rceil l=⌈logq⌉。其中, q q q是加密方案的模,则 powerof2 ( s k ) \text{powerof2}(sk) powerof2(sk)的维数为 k l kl kl。
-
加密: 消息为 m ∈ F 2 m \in \mathbb{F}_2 m∈F2,如下加密:
c 1 , 1 : = E n c p k ( m , 0 , . . . , 0 ) , . . . , c 1 , l : = E n c p k ( m ⋅ 2 l − 1 , 0 , . . . , 0 ) c 2 , 1 : = E n c p k ( 0 , m , 0 , . . . , 0 ) , . . . , c 2 , l : = E n c p k ( 0 , m ⋅ 2 l − 1 , 0 , . . . , 0 ) . . . c k , 1 : = E n c p k ( 0 , . . . , 0 , m ) , . . . , c k , l : = E n c p k ( 0 , . . . , 0 , m ⋅ 2 l − 1 ) \begin{array}{l} {{\rm{c}}_{1,1}}: = \rm{Enc}_{pk}(m,0,...,0),...,{{\rm{c}}_{1,l}}: = \rm{Enc}_{pk}(m \cdot {2^{l - 1}},0,...,0)\\ {{\rm{c}}_{2,1}}: = \rm{Enc}_{pk}(0,m,0,...,0),...,{{\rm{c}}_{2,l}}: = \rm{Enc}_{pk}(0,m \cdot {2^{l - 1}},0,...,0)\\ ...\\ {{\rm{c}}_{k,1}}: = \rm{Enc}_{pk}(0,...,0,m),...,{{\rm{c}}_{k,l}}: = \rm{Enc}_{pk}(0,...,0,m \cdot {2^{l - 1}}) \end{array} c1,1:=Encpk(m,0,...,0),...,c1,l:=Encpk(m⋅2l−1,0,...,0)c2,1:=Encpk(0,m,0,...,0),...,c2,l:=Encpk(0,m⋅2l−1,0,...,0)...ck,1:=Encpk(0,...,0,m),...,ck,l:=Encpk(0,...,0,m⋅2l−1)
则密文是 k l × k kl\times k kl×k的矩阵。 -
解密: 使用私钥对密文矩阵中的某个密文解密即可。
3.2.9 LTV13:维数提升+位展开
-
加密: 输入消息为 m ∈ F 2 m \in \mathbb{F}_2 m∈F2,随机小元素 r i , e i ∈ χ r_i,e_i\in \chi ri,ei∈χ,如下计算
c i = m ⋅ 2 i + h r i + 2 e i ∈ R q c_i = m\cdot 2^i + hr_i + 2e_i \in R_q ci=m⋅2i+hri+2ei∈Rq
则密文 c = ( c 1 , . . . , c l ) ∈ R q l \mathbf{c}=(c_1,...,c_l)\in R_q^l c=(c1,...,cl)∈Rql。 -
解密: 输入私钥 f f f和密文中的第一项 c 1 c_1 c1,如下解密
( f c 1 m o d q ) m o d 2 = f ( m + h r 1 + 2 e 1 ) m o d q m o d 2 = f m + f h r 1 + 2 f e 1 m o d q m o d 2 = f m + 2 ( g r 1 + f e 1 ) m o d q m o d 2 = f m + 2 v m o d q m o d 2 = ( 2 f ′ + 1 ) m + 2 v m o d 2 = m \begin{aligned} &(fc_1 \mod q) \mod 2\\ &= f(m + hr_1 + 2e_1 )\mod q\mod 2\\ &= fm + fhr_1 + 2fe_1 \mod q\mod 2\\ &=fm+ 2(gr_1 + fe_1)\mod q\mod 2\\ &=fm+ 2v\mod q\mod 2\\ &=(2f' + 1)m+ 2v\mod 2\\ &=m \end{aligned} (fc1modq)mod2=f(m+hr1+2e1)modqmod2=fm+fhr1+2fe1modqmod2=fm+2(gr1+fe1)modqmod2=fm+2vmodqmod2=(2f′+1)m+2vmod2=m 存在一个关键等式: f c 1 = m f + 2 v ∈ R q fc_1=mf+ 2v \in R_q fc1=mf+2v∈Rq
对关键等式一般化: f c = ( c 1 f , . . . , c l f ) T = ( m f + 2 v , . . . , m ⋅ 2 i f + 2 v ) = m ⋅ Powersof2 ( f ) T + 2 v ∈ R q f\mathbf{c}=(c_1f,...,c_lf)^T =(mf+ 2v,...,m\cdot 2^i f+ 2v) =m\cdot\text{Powersof2}(f)^T+ 2v \in R_q fc=(c1f,...,clf)T=(mf+2v,...,m⋅2if+2v)=m⋅Powersof2(f)T+2v∈Rq -
同态加法: c + c ′ ∈ R q l \mathbf{c}+\mathbf{c}'\in R_q^l c+c′∈Rql
-
解密: 先忽略 m o d q m o d 2 \mod q\mod 2 modqmod2 f ( c + c ′ ) = f c + f c ′ = ( m ⋅ Powersof2 ( f ) T + 2 v ) + ( m ′ ⋅ Powersof2 ( f ) T + 2 v ′ ) = ( m + m ′ ) ⋅ Powersof2 ( f ) T + 2 v + 2 v ′ \begin{aligned} &f(\mathbf{c}+\mathbf{c}')\\ &=f\mathbf{c}+f\mathbf{c}'\\ &=(m\cdot\text{Powersof2}(f)^T+ 2v) + (m'\cdot\text{Powersof2}(f)^T+ 2v')\\ &=(m+m')\cdot\text{Powersof2}(f)^T + 2v + 2v'\\ \end{aligned} f(c+c′)=fc+fc′=(m⋅Powersof2(f)T+2v)+(m′⋅Powersof2(f)T+2v′)=(m+m′)⋅Powersof2(f)T+2v+2v′ 取第一个元素,就是明文。
-
同态乘法:
BitDecomp ( c ) ∙ c ∈ R q l \textbf{BitDecomp}(\mathbf{c})\bullet \mathbf{c}\in R_q^l BitDecomp(c)∙c∈Rql -
解密: ( BitDecomp ( c ) ∙ c ′ ) f = BitDecomp ( c ) ⋅ ( m ′ ⋅ Powersof2 ( f ) T + 2 v ′ ) = m ′ c f + 2 v ′ BitDecomp ( c ) = m ′ ( m ⋅ Powersof2 ( f ) T + 2 v ) + 2 v ′ BitDecomp ( c ) = m ′ m ⋅ Powersof2 ( f ) T + 2 v m ′ + 2 v ′ BitDecomp ( c ) \begin{aligned} &(\textbf{BitDecomp}(\mathbf{c})\bullet \mathbf{c}')f\\ &=\textbf{BitDecomp}(\mathbf{c})\cdot (m'\cdot\text{Powersof2}(f)^T+ 2v')\\ &=m'\mathbf{c}f+2v'\textbf{BitDecomp}(\mathbf{c})\\ &=m'(m\cdot\text{Powersof2}(f)^T+ 2v)+2v'\textbf{BitDecomp}(\mathbf{c})\\ &=m'm\cdot\text{Powersof2}(f)^T+2vm'+2v'\textbf{BitDecomp}(\mathbf{c})\\ \end{aligned} (BitDecomp(c)∙c′)f=BitDecomp(c)⋅(m′⋅Powersof2(f)T+2v′)=m′cf+2v′BitDecomp(c)=m′(m⋅Powersof2(f)T+2v)+2v′BitDecomp(c)=m′m⋅Powersof2(f)T+2vm′+2v′BitDecomp(c)
去掉噪声,取出明文 m m ′ mm' mm′。
相关方案发展脉络如图6所示。
图 6: 第 2 代 FHE:基于 NTRU
参考文献
-
GGH公钥密码系统 Public-key cryptosystems from lattice reduction problems
-
Regev05论文On Lattices, Learning with Errors, Random Linear Codes, and Cryptography
-
Brakerski12论文Fully Homomorphic Encryption without Modulus Switching from Classical GapSVP
-
Micciancio-Regev书 Lattice-based cryptography
-
CR16论文Recovering Short Generators of Principal Ideals in Cyclotomic Rings
-
BV11论文Efficient Fully Homomorphic Encryption from (Standard)LWE
-
LTV13论文On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption
-
TRLWE18论文TFHE: Fast Fully Homomorphic Encryption over the Torus
-
陈智罡 全同态加密:从理论到实践
-
周福才、徐剑 格理论与密码学
-
Google Jeremy Kun 2024.5博客 A High-Level Technical Overview of Fully Homomorphic Encryption
-
Optalysys团队2024年10月博客 Fully Homomorphic Encryption industry leaders join forces to form global FHE Hardware Consortium
-
Fhenix团队2023年10月17日博客 The Holy Grail of Encryption: The Rise of FHE Technology
-
NGC Ventures团队2024年1月12日博客 Introduction to FHE and Blockchain: Implications for Scalability and Privacy
-
Awesome Fully Homomorphic Encryption (FHE) x Blockchain resources, libraries, projects, and more
-
PANews 2024年9月17日文章 全同态加密(FHE)的进展与应用
-
2022年论文《Survey on Fully Homomorphic Encryption, Theory, and Applications》
-
Craig Gentry 2022年论文《Homomorphic encryption: a mathematical survey》
-
2024年12月20日Jorge Myszne,Niobium Microsystems 首席产品官 博客 3 Homomorphic Encryption Trends for 2025
-
HCLTech团队2024年6月研报 Homomorphic encryption: Exploring technology trends and future approach
-
PPS Lab团队2023年10月博客 Arithmetizing FHE in Circom
-
PPS Lab团队2023年10月博客 A primer on the FHEW & TFHE schemes
-
2023年10月论文《A Survey on Implementations of Homomorphic Encryption Schemes》
-
Sunscreen团队2021年8月博客 An Intro to Fully Homomorphic Encryption for Engineers
-
TFHE:2016年论文《Faster Fully Homomorphic Encryption: Bootstrapping in less than 0.1 Seconds》
-
BGV:2011年论文 《Fully Homomorphic Encryption without Bootstrapping》
-
BFV:2012年论文《Somewhat Practical Fully Homomorphic Encryption》
-
CKKS:2016年论文《Homomorphic Encryption for Arithmetic of Approximate Numbers》
-
HomomorphicEncryption.org 2018年slide Building Applications with Homomorphic Encryption
-
Greenfield Capital 2024年7月博客 The muted Seven – 7 things you should consider re confidential compute
-
Sunscreen 2023年8月博客 How SNARKs fall short for FHE
-
2024年4月18日BigBrainVC团队博客 Flawed Homomorphic Encryption
-
2024年Verisense Network slide An Introduction To FHE and Its Application in Rust
-
Vitalik 2020年7月20日博客 Exploring Fully Homomorphic Encryption
-
Sunscreen团队2023年5月博客 Building an FHE compiler for the real world
-
Zama团队2023年5月23日博客 Private Smart Contracts Using Homomorphic Encryption
-
Craig Gentry 2024年6月分享视频 FHE: Past, Present and Future