参考资料:
2014 年,Alperin 和 Peikert 提出了一种快速 Bootstrapping 方案。他们将加法群 Z q Z_q Zq 嵌入到对称群 S q S_q Sq (置换矩阵 { 0 , 1 } q × q \{0,1\}^{q \times q} {0,1}q×q 的乘法群)上。利用 GSW 乘法噪声增长的非对称性,采用右结合的乘法链其噪声增长是拟加性的(quasi-additive)。另外,他们给出了 GSW 的更简单的变体,可以证明两者是等价的。
本文重点关注如何快速自举,它可以兼容所有的基于 LWE 的 FHE。由于解密算法是:
D e c ( s , c ) : = ⌊ ⟨ s , c ⟩ ⌉ 2 Dec(s,c) := \lfloor \langle s,c \rangle \rceil_2 Dec(s,c):=⌊⟨s,c⟩⌉2
这里 ⌊ x ⌉ 2 : = ⌊ 2 / q ⋅ x ⌉ \lfloor x \rceil_2 := \lfloor 2/q \cdot x \rceil ⌊x⌉2:=⌊2/q⋅x⌉ 是从 Z q Z_q Zq 到 Z 2 Z_2 Z2 的模切换,或者说是 MSB 的提取。那么,自举的关键就是:
根据 Cayley’s Theorem,任意的有限群 G G G 都可以嵌入(injective homomorphism)到对称群 S ∣ G ∣ S_{|G|} S∣G∣ 中。而这个对称群同构于 ∣ G ∣ |G| ∣G∣ 阶的置换矩阵乘法群,置换 π \pi π 对应的置换矩阵为:
P π : = [ e π ( 1 ) , e π ( 2 ) , ⋯ , e π ( ∣ G ∣ ) ] P_\pi := [e_{\pi(1)},e_{\pi(2)},\cdots,e_{\pi(|G|)}] Pπ:=[eπ(1),eπ(2),⋯,eπ(∣G∣)]
因此,任意的加法群 ( Z r , + ) (Z_r,+) (Zr,+) 都可以嵌入到对称群 S r S_r Sr 中,也就是 r × r r \times r r×r 的置换矩阵的乘法群。嵌入映射为:将元素 x ∈ Z r x \in Z_r x∈Zr 映射到位移 x x x 的循环置换(the permutation that cyclically rotates by x positions)。
我们定义 π : i → i + 1 ( m o d r ) \pi:i \to i+1 \pmod r π:i→i+1(modr) 为循环位移置换,将 x x x 次置换的复合 π ∘ ⋯ ∘ π \pi \circ \cdots \circ \pi π∘⋯∘π 简记为 π x \pi^x πx。容易看出,循环置换 P π x P_{\pi^x} Pπx 可以被简化表示为一个 { 0 , 1 } r \{0,1\}^r {0,1}r 的指示向量 e x e_x ex(indicator vector),其第 x x x 个分量是 1 1 1,其他分量都为 0 0 0,而对应的置换矩阵就是将 e x e_x ex 作为第一列,其他列依次是 e x e_x ex 的循环移位(cyclic shift)。
此时, Z r Z_r Zr 与 S r S_r Sr 上的运算对应关系为:
对于一个较大的模数 q q q,直接将 Z q Z_q Zq 嵌入到 S q S_q Sq 效率很低。优化思路是利用 CRT,如果让 q = ∏ i r i q = \prod_i r_i q=∏iri,其中 r i r_i ri 是规模 O ~ ( 1 ) \tilde O(1) O~(1) 的素数幂,那么有
Z q ≅ ∏ i Z r i ⊆ ∏ i S r i Z_q \cong \prod_i Z_{r_i} \subseteq \prod_i S_{r_i} Zq≅i∏Zri⊆i∏Sri
对应的嵌入映射为:
ϕ : x ∈ Z q ↦ ( e x ( m o d r i ) ) i ∈ ∏ i S r i \phi: x \in Z_q \mapsto \left(e_{x \pmod{r_i}}\right)_i \in \prod_i S_{r_i} ϕ:x∈Zq↦(ex(modri))i∈i∏Sri
这样就可以在多个小规模的对称群 S r i S_{r_i} Sri 上执行计算。此时,
Z q Z_q Zq 上的加法,同构于 ∏ i S r i \prod_i S_{r_i} ∏iSri 上的各个分量的置换各自复合,即
( x + y ) : = ( P π x ( m o d r i ) ⋅ e y ( m o d r i ) ) i (x+y) := \left(P_{\pi^{x \pmod{r_i}}} \cdot e_{y \pmod{r_i}}\right)_i (x+y):=(Pπx(modri)⋅ey(modri))i
Z q Z_q Zq 上的相等判定,同构于 ∏ i S r i \prod_i S_{r_i} ∏iSri 上的各个分量的相等判定的乘积(逻辑 AND),即
[ x = v ] : = ∏ i e x ( m o d r i ) ( v ( m o d r i ) ) [x=v] := \prod_i e_{x \pmod{r_i}}^{(v \pmod{r_i})} [x=v]:=i∏ex(modri)(v(modri))
Z q Z_q Zq 上的提取 MSB,同构于 ∏ i S r i \prod_i S_{r_i} ∏iSri 上的一些相等判定的加和(逻辑 OR),即
⌊ x ⌉ 2 : = ∑ v ∈ [ q ] s . t . ⌊ v ⌉ 2 = 1 [ x = v ] \lfloor x \rceil_2 := \sum_{v \in [q]\,s.t.\,\lfloor v \rceil_2=1} [x=v] ⌊x⌉2:=v∈[q]s.t.⌊v⌉2=1∑[x=v]
为了加速,文章选择让 q q q 是 max i r i \max_i r_i maxiri 的指数级大。根据 second Chebyshev function,
ψ ( x ) : = ∑ p k ≤ x log p = log ( ∏ p ≤ x p ⌊ log p x ⌋ ) \psi(x) := \sum_{p^k \le x} \log p = \log\left(\prod_{p \le x} p^{\lfloor \log_p x \rfloor}\right) ψ(x):=pk≤x∑logp=log(p≤x∏p⌊logpx⌋)
因此,所有的小于 x x x 的最大素数幂 r i = p ⌊ log p x ⌋ r_i = p^{\lfloor \log_p x \rfloor} ri=p⌊logpx⌋ 的乘积 q = ∏ i r i q=\prod_i r_i q=∏iri 大小为 exp ( ψ ( x ) ) \exp(\psi(x)) exp(ψ(x))。已知 ψ ( x ) = x + O ( x / log x ) \psi(x)=x+O(x/\log x) ψ(x)=x+O(x/logx),并且对于所有的 x ≥ 7 x \ge 7 x≥7 都有一个非渐进界 ψ ( x ) ≥ 3 x / 4 \psi(x)\ge 3x/4 ψ(x)≥3x/4,所以有
q ≥ exp ( 3 x / 4 ) ≥ exp ( 3 / 4 ⋅ max i r i ) q \ge \exp(3x/4) \ge \exp(3/4 \cdot \max_i r_i) q≥exp(3x/4)≥exp(3/4⋅imaxri)
选取很小的界 x x x,就可以用一些最大素数幂 r i ≤ x r_i \le x ri≤x 合成出一个指数级大的模数 q q q。
本文给出了 GSW 的一个对称版本的更简单变体。
给定模数 q q q,令 l = ⌈ log q ⌉ l = \lceil \log q \rceil l=⌈logq⌉,定义 gadget column vector g = ( 1 , 2 , 4 , ⋯ , 2 l − 1 ) ∈ Z l g = (1,2,4,\cdots,2^{l-1}) \in Z^l g=(1,2,4,⋯,2l−1)∈Zl,它的倒数第二个分量为 2 l − 2 ∈ [ q / 4 , q / 2 ) 2^{l-2} \in [q/4,q/2) 2l−2∈[q/4,q/2) 就是 GSW 中所谓 “big coefficient”。
根据 MP12,存在一个随机的可有效计算的函数 g − 1 : Z q → Z l g^{-1}:Z_q \to Z^l g−1:Zq→Zl,使得 x ← g − 1 ( a ) x \leftarrow g^{-1}(a) x←g−1(a) 是一个满足 a = ⟨ g , x ⟩ a=\langle g,x \rangle a=⟨g,x⟩ 的参数 O ( 1 ) O(1) O(1) 的亚高斯随机变量。具体地,就是使用随机版本的 Babai nearest-plane 算法,给定格 Λ ⊥ ( g t ) : = { z ∈ Z l : ⟨ g , x ⟩ ≡ 0 ∈ Z q } \Lambda^\perp(g^t) := \{z \in Z^l: \langle g,x \rangle \equiv 0 \in Z_q\} Λ⊥(gt):={z∈Zl:⟨g,x⟩≡0∈Zq} 的一组 “好” 的基底 S S S,每次迭代中第 i i i 次个基向量对应的系数服从中心零的 { c i − 1 , c i } , c i ∈ 1 q Z ∩ [ 0 , 1 ) \{c_i-1,c_i\},\,c_i \in \frac{1}{q} Z \cap [0,1) {ci−1,ci},ci∈q1Z∩[0,1) 上二值分布。
对于向量和矩阵,定义 gadget matrix G = g t ⊗ I n ∈ Z q n × n l G = g^t \otimes I_n \in Z_q^{n \times nl} G=gt⊗In∈Zqn×nl,对应的 G − 1 : Z q n × m → Z q n l × m G^{-1}: Z_q^{n \times m} \to Z_q^{nl \times m} G−1:Zqn×m→Zqnl×m 就是对于每个 entry 独立的使用 g − 1 g^{-1} g−1 算法。那么给定 A = G ⋅ X A = G \cdot X A=G⋅X, X ← G − 1 ( A ) X \leftarrow G^{-1}(A) X←G−1(A) 是一个参数 O ( 1 ) O(1) O(1) 的亚高斯随机向量(与任意的固定单位向量的内积是亚高斯的)。
在 GSW 中,密文 C ∈ { 0 , 1 } n l × n l C \in \{0,1\}^{nl \times nl} C∈{0,1}nl×nl 是二元方阵,秘密 s ∈ Z q n l s \in Z_q^{nl} s∈Zqnl 是结构化向量(有个 “big coefficient”),它是个近似特征向量 s t C ≈ μ s t ( m o d q ) s^tC \approx \mu s^t \pmod q stC≈μst(modq)。本文中的 GSW 变体,密文 C ∈ Z q n × n l C \in Z_q^{n \times nl} C∈Zqn×nl 是长矩阵,秘密 s ∈ Z n s \in Z^{n} s∈Zn 是非结构化的短向量,关系为 s t C ≈ μ ⋅ s t G ( m o d q ) s^tC \approx \mu \cdot s^tG \pmod q stC≈μ⋅stG(modq)。两者是等价的。
对称的 GSW 变体:
在 L W E n − 1 , q , χ LWE_{n-1,q,\chi} LWEn−1,q,χ 假设下,上述方案是 IND-CPA 安全的。
由于同态乘法的非对称噪声增长,我们令算符 ⊡ \boxdot ⊡ 是右结合的( right associative)。对于一个关于密文 C i , i = 1 , ⋯ , k C_i, i=1,\cdots,k Ci,i=1,⋯,k 的乘法链,
C ← ( ⊡ i ∈ [ k ] C i ) ⊡ G = C 1 ⊡ ( ⋯ ( C k ⊡ G ) ) ∈ C C \leftarrow \left(\boxdot_{i \in [k]} C_i\right) \boxdot G = C_1 \boxdot(\cdots(C_k \boxdot G)) \in \mathcal C C←(⊡i∈[k]Ci)⊡G=C1⊡(⋯(Ck⊡G))∈C
这里的 G = 0 + 1 ⋅ G ∈ C G = \textbf{0}+1 \cdot G \in \mathcal C G=0+1⋅G∈C 是个零噪声的 1 1 1 的密文。由于 μ ∈ { 0 , 1 } \mu \in \{0,1\} μ∈{0,1},因此 C C C 的噪声为 ∑ i ∈ [ k ] e i t X i \sum_{i \in [k]} e_i^t X_i ∑i∈[k]eitXi,这是参数 O ( ∥ e i ∥ ) O(\|e_i\|) O(∥ei∥) 的亚高斯随机变量(拟加性)。
现在,我们基于上述的对称 GSW 方案,构造关于对称群 S r S_r Sr 的同态方案(不是 FHE):
这个方案有如下的同态运算(对于任意的 π , σ ∈ S r \pi,\sigma \in S_r π,σ∈Sr,而不仅仅那 r r r 个循环置换):
对于同构于 Z r \mathbb Z_r Zr 的循环置换子群 C r ⊆ S r C_r \subseteq S_r Cr⊆Sr,可以只对指示向量对应的那一列加密。对于 x , y ∈ Z r x,y \in \mathbb Z_r x,y∈Zr,密文 C x , C y ∈ C r C^x,C^y \in \mathcal C^r Cx,Cy∈Cr,此时的计算复杂度降低了 r r r 因子:
类似的,由于同态乘法的非对称噪声增长,我们令算符 ∘ \circ ∘ 也是右结合的( right associative)。对于一个关于密文 C i , i = 1 , ⋯ , k C_i, i=1,\cdots,k Ci,i=1,⋯,k 的复合链,
C ← ( ◯ i ∈ [ k ] C i ) ∘ J = C 1 ∘ ( ⋯ ( C k ∘ J ) ) ∈ C r C \leftarrow \left(\bigcirc _{i \in [k]} C_{i}\right) \circ J = C_1 \circ(\cdots(C_k \circ J)) \in \mathcal C^{r} C←(◯i∈[k]Ci)∘J=C1∘(⋯(Ck∘J))∈Cr
这里 J ∈ C r J \in \mathcal C^{r} J∈Cr 是零噪声的恒等置换 I r I_{r} Ir 的 HEPerm 密文(对角线 entry 是 1 ⋅ G 1 \cdot G 1⋅G,其他的 entry 都是 0 ⋅ G 0 \cdot G 0⋅G,将第一列作为指示向量的密文)。由于 P σ P^\sigma Pσ 是置换阵,因此 C C C 的噪声矩阵的第 i i i 行服从参数 O ( ∥ e i ∥ ) O(\|e_i\|) O(∥ei∥) 的亚高斯分布,其中 e i ∈ E k r e_i \in \mathcal E^{kr} ei∈Ekr 是 [ E 1 ∣ ⋯ ∣ E k ] [E_1|\cdots|E_k] [E1∣⋯∣Ek] 的第 i i i 行。
现在,我们可以使用 HEPerm 来对任意的 LWE 方案 执行自举了!
定义群嵌入(group embedding),
ϕ : ( Z q , + ) → ( S : = ∏ i = 1 t S r i , ∘ ) \phi: (\mathbb Z_q,+) \to (S:=\prod_{i=1}^t S_{r_i}, \circ) ϕ:(Zq,+)→(S:=i=1∏tSri,∘)
令 ϕ i \phi_i ϕi 是它的第 i i i 分量。我们为 HEPerm(或者说它的部件 GSW)选取一个足够大的模数 Q ≫ q Q \gg q Q≫q,以保证 Bootstrapping 之后的噪声比率很小。
令 LWE 的私钥是 s ∈ Z q d s \in \mathbb Z_q^d s∈Zqd,密文是二元向量 c ∈ { 0 , 1 } d c \in \{0,1\}^d c∈{0,1}d,解密函数为
D e c ( s , c ) : = f ( ⟨ s , c ⟩ ) Dec(s,c) := f(\langle s,c \rangle) Dec(s,c):=f(⟨s,c⟩)
其中 f : Z q → { 0 , 1 } f:\mathbb Z_q \to \{0,1\} f:Zq→{0,1} 是某种解码函数。
令 s k ← χ n sk \leftarrow \chi^n sk←χn 是 HEPerm 的对称秘钥,自举方案如下:
B o o t G e n ( s , s k ) BootGen(s,sk) BootGen(s,sk):将 s s s 的每个分量 s j s_j sj 嵌入到 S S S 中,然后对每个 S r i S_{r_i} Sri 上的置换 ϕ i ( s j ) \phi_i(s_j) ϕi(sj) 用 HEPerm 加密,作为 bootstrapping key,
b k : = { C i j ← H E P e r m . E n c ( s k , ϕ i ( s j ) ) ∈ C r i : i ∈ [ t ] , j ∈ [ d ] } bk := \{ C_{ij} \leftarrow HEPerm.Enc(sk,\phi_i(s_j)) \in \mathcal C^{r_i}: i \in [t], j \in [d] \} bk:={Cij←HEPerm.Enc(sk,ϕi(sj))∈Cri:i∈[t],j∈[d]}
由于 t , r i = O ( log λ ) t,r_i = O(\log \lambda) t,ri=O(logλ) 且 d = O ~ ( λ ) d = \tilde O(\lambda) d=O~(λ),因此 b k ∈ ( ∏ i = 1 t C r i ) d bk \in \left(\prod_{i=1}^t \mathcal C^{r_i}\right)^d bk∈(∏i=1tCri)d 包含 O ~ ( λ ) \tilde O(\lambda) O~(λ) 个 GSW 密文。
B o o t s t r a p ( b k , c ∈ { 0 , 1 } d ) Bootstrap(bk,c \in \{0,1\}^d) Bootstrap(bk,c∈{0,1}d):
内积运算,转化为 subset-sum,即 ⟨ s , c ⟩ = ∑ j : c j = 1 s j ∈ Z q \langle s,c \rangle = \sum_{j:c_j=1} s_j \in \mathbb Z_q ⟨s,c⟩=∑j:cj=1sj∈Zq,在对称群 S : = ∏ i = 1 t S r i S:=\prod_{i=1}^t S_{r_i} S:=∏i=1tSri 下的复合链为
C i ← ( ◯ j ∈ [ d ] s . t . c j = 1 C i j ) ∘ J ∈ C r i C_i \leftarrow \left(\bigcirc _{j \in [d]\, s.t.\, c_j=1} C_{ij}\right) \circ J \in \mathcal C^{r_i} Ci←(◯j∈[d]s.t.cj=1Cij)∘J∈Cri
回顾下算符 ∘ \circ ∘ 是右结合的,其中 J ∈ C r i J \in \mathcal C^{r_i} J∈Cri 是恒等置换 I r i I_{r_i} Iri 的无噪声 HEPerm 密文。
解码运算,转化为 equality test,即 f ( x ) = ∑ v : f ( v ) = 1 [ x = v ] ∈ { 0 , 1 } f(x) = \sum_{v:f(v)=1} [x=v] \in \{0,1\} f(x)=∑v:f(v)=1[x=v]∈{0,1},在对称群 S : = ∏ i = 1 t S r i S:=\prod_{i=1}^t S_{r_i} S:=∏i=1tSri 下的相等判定为
C ← ⊞ v ∈ [ q ] s . t . f ( v ) = 1 ( ( ⊡ i ∈ [ t ] E q ( C i , ϕ i ( v ) ) ) ⊡ G ) ∈ C C \leftarrow \boxplus_{v \in [q]\, s.t.\, f(v)=1} \left(\left(\boxdot_{i \in [t]} Eq(C_i, \phi_i(v))\right) \boxdot G\right) \in \mathcal C C←⊞v∈[q]s.t.f(v)=1((⊡i∈[t]Eq(Ci,ϕi(v)))⊡G)∈C
回顾下 E q ( C π , σ ) ∈ C Eq(C^\pi, \sigma) \in \mathcal C Eq(Cπ,σ)∈C,算符 ⊡ \boxdot ⊡ 是右结合的,而 G G G 是整数 1 1 1 的无噪声 GSW 密文。
在自举之前,由于我们的 GSW 对密文格式有要求,因此需要对 LWE 密文做一些预处理,包括:维度约减、模约减、二进制分解。在自举结束后,选取 GSW 密文的倒数第二列作为 LWE 密文(GSW 密文就是由 LWE 密文组成的向量),并做密钥切换,从 s k sk sk 下的 LWE 密文回到 s s s 下的 LWE 密文。
2015 年,Ducas 等人提出了 FHEW 方案。与上述的 HEPerm 相似,FHEW 采用一个与原始 LWE 方案不同的加密方案,构造出一个同态累加器(Homomorphic Accumulator),然后用它来 refresh 密文。另外,FHEW 还提出了一种新的 NAND 门,只需要用到加法同态,而不需要乘法同态,噪声增长率较低。
FHEW 定义了一个 randomized rounding 函数 χ : R → Z \chi:\mathbb R \to \mathbb Z χ:R→Z,对于任意的 x ∈ R x \in \mathbb R x∈R 和任意的 n ∈ Z n \in \mathbb Z n∈Z,都有 χ ( x + n ) = χ ( x ) + n \chi(x+n) = \chi(x)+n χ(x+n)=χ(x)+n,其中 χ ( x ) − x \chi(x)-x χ(x)−x 叫做 χ ( x ) \chi(x) χ(x) 的 rounding error。不知道本人理解的对不对, χ ( x ) \chi(x) χ(x) 是一族关于实数 x x x 的噪声分布,对于每个固定的 x x x 都有一个固定的分布 χ ( x ( m o d 1 ) ) \chi(x \pmod 1) χ(x(mod1));特别当 x ∈ Z x \in \mathbb Z x∈Z 时,对应于 χ ( 0 ) \chi(0) χ(0)。
我们说实数域 R \mathbb R R 上的随机变量 X X X 是参数 α > 0 \alpha>0 α>0 的亚高斯(subgaussian),如果对于任意的 t ∈ R t \in \mathbb R t∈R 都满足
E [ exp ( 2 π t X ) ] ≤ e x p ( π α 2 t 2 ) E[\exp(2\pi tX)] \le exp(\pi \alpha^2 t^2) E[exp(2πtX)]≤exp(πα2t2)
进一步地,它的尾部(tail)满足
P r [ ∣ X ∣ ≥ t ] ≤ 2 exp ( − π t 2 / α 2 ) , ∀ t ≥ 0 Pr[|X| \ge t] \le 2\exp(-\pi t^2/\alpha^2),\forall t \ge 0 Pr[∣X∣≥t]≤2exp(−πt2/α2),∀t≥0
所有的 B - B\text{ -} B - bounded 对称随机变量 X X X 都是参数 B 2 π B \sqrt{2\pi} B2π 的亚高斯。扩展到随机向量 x \bf x x,如果它的所有 one-dimensional marginals ⟨ u , x ⟩ \bf \langle u,x \rangle ⟨u,x⟩(其中 u \bf u u 是单位向量)是参数 α \alpha α 的亚高斯。扩展到随机矩阵 X \bf X X,如果它的所有 one-dimensional marginals u t X v \bf u^tXv utXv(其中 u , v \bf u,v u,v 是单位向量)是参数 α \alpha α 的亚高斯。
对于 2 2 2 的幂次 N N N, Φ 2 N ( X ) = X N + 1 \Phi_{2N}(X)=X^N+1 Φ2N(X)=XN+1 是分园多项式(cyclotomic
polynomial)。令 R = Z [ X ] / ( X N + 1 ) R = \mathbb Z[X]/(X^N+1) R=Z[X]/(XN+1) 是分园环(cyclotomic ring),对应的商环 R q = R / q R R_q=R/qR Rq=R/qR。对于 a = a 0 + a 1 x + ⋯ + a N − 1 x N − 1 ∈ R a=a_0 + a_1x + \cdots + a_{N-1}x^{N-1} \in R a=a0+a1x+⋯+aN−1xN−1∈R,简记
a ⃗ : = [ a 0 a 1 ⋮ a N − 1 ] ∈ Z N , a ⇒ : = [ a 0 − a N − 1 ⋯ − a 1 a 1 a 0 ⋯ − a 2 ⋮ ⋮ ⋯ ⋮ a N − 1 a N − 2 ⋯ a 0 ] ∈ Z N × N \vec a := \begin{bmatrix} a_0\\ a_1\\ \vdots\\ a_{N-1} \end{bmatrix} \in \mathbb Z^N,\, \mathop{a}\limits^{\Rightarrow} := \begin{bmatrix} a_0 & -a_{N-1} & \cdots & -a_1\\ a_1 & a_0 & \cdots & -a_2\\ \vdots & \vdots & \cdots & \vdots\\ a_{N-1} & a_{N-2} & \cdots & a_{0} \end{bmatrix} \in \mathbb Z^{N \times N} a:= a0a1⋮aN−1 ∈ZN,a⇒:= a0a1⋮aN−1−aN−1a0⋮aN−2⋯⋯⋯⋯−a1−a2⋮a0 ∈ZN×N
其实 a ⇒ ⋅ b ⃗ = a ⋅ b → \mathop{a}\limits^{\Rightarrow} \cdot \vec b = \overrightarrow{a \cdot b} a⇒⋅b=a⋅b,这就是环 R R R 上的多项式乘积罢了(文章中使用的全是矩阵乘,却不使用多项式乘积)。扩展到向量和矩阵,对于 A ∈ R w × k A \in R^{w \times k} A∈Rw×k,令 A ⇒ ∈ Z w N × k N \mathop{A}\limits^{\Rightarrow} \in \mathbb Z^{wN \times kN} A⇒∈ZwN×kN 就是对于每个 entry 单独地应用 ⋅ ⇒ \mathop{\cdot}\limits^{\Rightarrow} ⋅⇒ 算符。我们说一个随机多项式 a ∈ R a \in R a∈R 是亚高斯的,如果 a ⃗ \vec a a 是亚高斯的随机向量。
我们描述一个基于 LWE 的对称加密方案,它可以用标准的转化技术得到非对称加密。秘钥 $ s \in \mathbb Z_qn,q=n{O(1)}$,消息 m ∈ Z t , t ≥ 2 m \in \mathbb Z_t,t \ge 2 m∈Zt,t≥2,随机园整函数满足 ∣ χ ( x ) − x ∣ < q / 2 t |\chi(x)-x| < q/2t ∣χ(x)−x∣<q/2t
对称加密方案:
Modulus Switching,从模数 Q Q Q 到模数 q q q 的 (scaled) randomized rounding function [ ⋅ ] Q : q : Z Q → Z q [\cdot]_{Q:q}:\mathbb Z_Q \to \mathbb Z_q [⋅]Q:q:ZQ→Zq 定义为
[ x ] Q : q : = ⌊ q x / Q ⌋ + B [x]_{Q:q} := \lfloor qx/Q \rfloor + B [x]Q:q:=⌊qx/Q⌋+B
其中 B ∈ { 0 , 1 } B \in \{0,1\} B∈{0,1} 是服从 P r [ B = 1 ] = q x / Q − ⌊ q x / Q ⌋ Pr[B=1]=qx/Q-\lfloor qx/Q \rfloor Pr[B=1]=qx/Q−⌊qx/Q⌋ 的二值分布,容易看出 E ( [ x ] Q : q ) = q x / Q E([x]_{Q:q})=qx/Q E([x]Q:q)=qx/Q,并且园整错误 [ x ] Q : q − q x / Q [x]_{Q:q}-qx/Q [x]Q:q−qx/Q 是参数 2 π \sqrt{2\pi} 2π 的亚高斯。对于 ( a , b ) ∈ L W E z t / q ( m ) (a,b) \in LWE_z^{t/q}(m) (a,b)∈LWEzt/q(m),计算模 q q q 下的新密文
M o d S w i t c h ( a , b ) : = ( ( [ a i ] Q : q ) i , [ b ] Q : q ) ModSwitch(a,b) := (\left([a_i]_{Q:q}\right)_i,[b]_{Q:q}) ModSwitch(a,b):=(([ai]Q:q)i,[b]Q:q)
Key Switching,设置 base 为 B k s B_{ks} Bks,从密钥 z ∈ Z q N z \in \mathbb Z_q^N z∈ZqN 到密钥 s ∈ Z q N s \in \mathbb Z_q^N s∈ZqN 的 switching key R : = { k i j v } \mathfrak R := \{k_{ijv}\} R:={kijv} 定义为
k i j v ← L W E s q / q ( v z i B k s j ) , i = 1 , ⋯ , N , j = 0 , ⋯ , d k s − 1 , v = 0 , ⋯ , B k s − 1 k_{ijv} \leftarrow LWE_s^{q/q}(vz_iB_{ks}^j),\, i = 1,\cdots,N,\, j=0,\cdots,d_{ks}-1,\, v =0,\cdots,B_{ks}-1 kijv←LWEsq/q(vziBksj),i=1,⋯,N,j=0,⋯,dks−1,v=0,⋯,Bks−1
其中 d k s = ⌈ log B k s q ⌉ d_{ks} = \lceil \log_{B_{ks}}q \rceil dks=⌈logBksq⌉,并且 t = q t=q t=q 使得 k i j v k_{ijv} kijv 是噪声比率为 1 / 2 1/2 1/2 的 not typically decryptable 的密文。对于 ( a , b ) ∈ L W E z t / q ( m ) (a,b) \in LWE_z^{t/q}(m) (a,b)∈LWEzt/q(m),首先做分解 a i = ∑ j a i j B k s j a_i = \sum_j a_{ij} B_{ks}^j ai=∑jaijBksj,然后计算 s s s 下的新密文
K e y S w i t c h ( ( a , b ) , R ) : = ( 0 , b ) − ∑ i , j k i , j , a i j KeySwitch\left((a,b),\mathfrak R\right) := (0,b) - \sum_{i,j} k_{i,j,a_{ij}} KeySwitch((a,b),R):=(0,b)−i,j∑ki,j,aij
可以验证 b ′ = b − a z + a ′ s − E b'=b-az+a's-E b′=b−az+a′s−E,从而 b ′ − a ′ s ≈ b − a z ≈ m q / t b'-a's \approx b-az \approx mq/t b′−a′s≈b−az≈mq/t,前后两者加密了同一个明文。
本文提出了一种新的 NAND 计算方式。思路是,用 Z \mathbb Z Z 上的仿射变换来拟合 NAND 运算:
m 0 m_0 m0 | m 1 m_1 m1 | m 0 + m 1 m_0+m_1 m0+m1 | 5 4 − 1 2 ( m 0 + m 1 ) \dfrac{5}{4}-\dfrac{1}{2}(m_0+m_1) 45−21(m0+m1) |
---|---|---|---|
0 0 0 | 0 0 0 | 0 0 0 | 5 / 4 5/4 5/4 |
0 0 0 | 1 1 1 | 1 1 1 | 3 / 4 3/4 3/4 |
1 1 1 | 0 0 0 | 1 1 1 | 3 / 4 3/4 3/4 |
1 1 1 | 1 1 1 | 2 2 2 | 1 / 4 1/4 1/4 |
只需要在就近取整,就可以得到 m 0 ∧ ˉ m 1 m_0 \bar\wedge m_1 m0∧ˉm1 的结果了。将明文空间 Z t \mathbb Z_t Zt 设置为 t = 4 t=4 t=4,并设置一个更小的错误界 E = q / 16 E = q/16 E=q/16,那么对于 m i ∈ { 0 , 1 } m_i \in \{0,1\} mi∈{0,1},计算密文 c i ∈ L W E s 4 / q ( m i , q / 16 ) c_i \in LWE_s^{4/q}(m_i,q/16) ci∈LWEs4/q(mi,q/16),另外计算无噪声密文 ( 0 , 5 q 8 ) ∈ L W E s 2 / q ( 5 4 , 0 ) (0,\dfrac{5q}{8}) \in LWE_s^{2/q}(\dfrac{5}{4},0) (0,85q)∈LWEs2/q(45,0),并将 L W E s 4 / q ( m i , q / 16 ) LWE_s^{4/q}(m_i,q/16) LWEs4/q(mi,q/16) 视为 L W E s 2 / q ( 1 2 m i , q / 16 ) LWE_s^{2/q}(\dfrac{1}{2}m_i,q/16) LWEs2/q(21mi,q/16)
计算 m 0 ∧ ˉ m 1 = 1 − m 0 m 1 = ⌊ 5 4 − 1 2 ( m 0 + m 1 ) ⌉ m_0 \bar\wedge m_1 = 1-m_0m_1 = \left\lfloor \dfrac{5}{4}-\dfrac{1}{2}(m_0+m_1) \right\rceil m0∧ˉm1=1−m0m1=⌊45−21(m0+m1)⌉ 的同态与非门:
H o m N A N D : L W E s 4 / q ( m 0 , q / 16 ) × L W E s 4 / q ( m 1 , q / 16 ) → L W E s 2 / q ( m 0 ∧ ˉ m 1 , q / 4 ) ( a , b ) ← H o m N A N D ( ( a 0 , b 0 ) , ( a 1 , b 1 ) ) : = ( − a 0 − a 1 , 5 q 8 − b 0 − b 1 ) HomNAND: LWE_s^{4/q}(m_0,q/16) \times LWE_s^{4/q}(m_1,q/16) \to LWE_s^{2/q}(m_0 \bar\wedge m_1,q/4)\\ (a,b) \leftarrow HomNAND((a_0,b_0),\, (a_1,b_1)) := (-a_0-a_1,\, \dfrac{5q}{8}-b_0-b_1) HomNAND:LWEs4/q(m0,q/16)×LWEs4/q(m1,q/16)→LWEs2/q(m0∧ˉm1,q/4)(a,b)←HomNAND((a0,b0),(a1,b1)):=(−a0−a1,85q−b0−b1)
于是 NAND 门只需要同态加法,不需要采用同态乘法,因此输入密文的噪声界从以前的 O ( q ) O(\sqrt q) O(q) 扩大到了 O ( q ) O(q) O(q)。可以验证,
b − a s = 5 q 8 − ( b 0 − a 0 s ) − ( b 1 − a 1 s ) = q 2 ( 5 4 − 1 2 ( m 0 + m 1 ) ) − ( e 0 + e 1 ) = q 2 ( m 0 ∧ ˉ m 1 ± 1 4 ) − ( e 0 + e 1 ) = q 2 ( m 0 ∧ ˉ m 1 ) ± q 8 − ( e 0 + e 1 ) \begin{aligned} b-as &= \dfrac{5q}{8} - (b_0-a_0s) - (b_1-a_1s)\\ &= \dfrac{q}{2}\left(\dfrac{5}{4}-\dfrac{1}{2}(m_0+m_1)\right) - (e_0+e_1)\\ &= \dfrac{q}{2}\left(m_0 \bar\wedge m_1 \pm \dfrac{1}{4}\right) - (e_0+e_1)\\ &= \dfrac{q}{2}\left(m_0 \bar\wedge m_1\right) \pm \dfrac{q}{8} - (e_0+e_1)\\ \end{aligned} b−as=85q−(b0−a0s)−(b1−a1s)=2q(45−21(m0+m1))−(e0+e1)=2q(m0∧ˉm1±41)−(e0+e1)=2q(m0∧ˉm1)±8q−(e0+e1)
噪声 ∣ q 8 − ( e 0 + e 1 ) ∣ < q 8 + 2 × q 16 = q 4 |\dfrac{q}{8} - (e_0+e_1)| < \dfrac{q}{8} + 2 \times \dfrac{q}{16} = \dfrac{q}{4} ∣8q−(e0+e1)∣<8q+2×16q=4q,因此可以正确解密。
为了继续进行 NAND 运算,我们需要一个刷新函数:
R e f r e s h : L W E s 2 / q ( m , q / 4 ) → L W E s 4 / q ( m , q / 16 ) Refresh:\, LWE_s^{2/q}(m,q/4) \to LWE_s^{4/q}(m,q/16) Refresh:LWEs2/q(m,q/4)→LWEs4/q(m,q/16)
这个函数就是 Bootstrapping 的作用,每次 NAND 计算后都立刻刷新密文,因此计算瓶颈在 Refresh 上。
FHEW 选取一个可以与 LWE 加密方案不同的另一个加密方案 E ( ⋅ ) E(\cdot) E(⋅),要求它对于 ( a , b ) ∈ L W E s 2 / q ( m ) (a,b) \in LWE_s^{2/q}(m) (a,b)∈LWEs2/q(m) 满足如下运算关系
⌊ 2 q ( b − a ⋅ E ( s ) ) ⌉ ( m o d 2 ) = E ( m ) \left\lfloor \dfrac{2}{q}(b-a \cdot E(s))\right\rceil \pmod 2 = E(m) ⌊q2(b−a⋅E(s))⌉(mod2)=E(m)
关键是计算 b − a ⋅ E ( s ) = E ( b − a ⋅ s ) b-a \cdot E(s) = E(b-a \cdot s) b−a⋅E(s)=E(b−a⋅s),这只是密文的同态数乘,可以被视为一些密文的加法。方案 E E E 被用来构造同态累加器(Homomorphic Accumulator),它是一个算法四元组 ( E , I n i t , I n c r , m s b E x t r a c t ) (E,Init,Incr,msbExtract) (E,Init,Incr,msbExtract),
我们说这个同态累加器是 E - correct \mathcal E\text{ - correct} E - correct 的,如果 c ∉ L W E s t / q ( ∑ i v i , E ( l ) ) c \notin LWE_s^{t/q}(\sum_i v_i, \mathcal E(l)) c∈/LWEst/q(∑ivi,E(l)) 的概率可忽略。对于 t = 4 t=4 t=4,要求 E ( l ) ≤ q / 16 \mathcal E(l) \le q/16 E(l)≤q/16
然后利用上述的同态累加器,可以实现 refresh 函数。首先预计算 refreshing key K : = { K i j c } \mathcal K := \{K_{ijc}\} K:={Kijc},
K i j c : = E ( c s i B r j ( m o d q ) ) , i = 1 , ⋯ , n , j = 0 , ⋯ , d r − 1 , c = 0 , ⋯ , B r − 1 K_{ijc} := E(cs_iB_r^j \pmod q),\, i = 1,\cdots,n,\, j=0,\cdots,d_{r}-1,\, c =0,\cdots,B_{r}-1 Kijc:=E(csiBrj(modq)),i=1,⋯,n,j=0,⋯,dr−1,c=0,⋯,Br−1
其中 d r = ⌈ log B r q ⌉ d_{r} = \lceil \log_{B_{r}}q \rceil dr=⌈logBrq⌉,这儿的 LWE 密钥 s ∈ Z q n s \in \mathbb Z_q^n s∈Zqn 的各个系数被 power 为 ( s i B r j ) j (s_i B_r^j)_j (siBrj)j,然后枚举了所有的 B r B_r Br 进制下的所有取值。由于 D e c o m p o s e ( a i ) ⋅ P o w e r ( s i ) = a i ⋅ s i Decompose(a_i) \cdot Power(s_i) = a_i \cdot s_i Decompose(ai)⋅Power(si)=ai⋅si,因此可以根据 a i = ∑ j a i j B r j a_i = \sum_j a_{ij} B_r^j ai=∑jaijBrj 挑选出对应的 K i , j , a i j K_{i,j,a_{ij}} Ki,j,aij 计算同态加法。
初始化 b + q / 4 b+q/4 b+q/4,这使得循环末尾
v = q / 4 + b − a ⋅ s = m q / 2 + ( e + q / 4 ) v = q/4 + b-a \cdot s = mq/2 + (e+q/4) v=q/4+b−a⋅s=mq/2+(e+q/4)
由于 ∣ e ∣ < q / 4 |e|∣e∣<q/4
,因此 e ′ = e + q / 4 ∈ ( 0 , q / 2 ) e'=e+q/4 \in (0,q/2) e′=e+q/4∈(0,q/2),如果 v ∈ ( 0 , q / 2 ) v \in (0,q/2) v∈(0,q/2) 那么 m = 0 m=0 m=0,如果 v ∈ ( q / 2 , q ) v \in (q/2,q) v∈(q/2,q) 那么 m = 1 m=1 m=1,这就把提取 b − a s b-as b−as 的 MSB 转化为了测试 v v v 的范围(与 HEPerm 类似)。
FHEW 使用 Ring-GSW 来实例化同态累加器。LWE 的模数 q = 2 k q=2^k q=2k,消息域大小 t = 4 t=4 t=4。GSW 的模数 Q Q Q 满足 Q = B g d g Q=B_g^{d_g} Q=Bgdg,其中 base B g B_g Bg 是 3 3 3 的幂次(这使得 ∀ K ≥ 3 , N = 2 K , X N + 1 = ( X N / 2 + X N / 4 − 1 ) ( X N / 2 − X N / 4 − 1 ) \forall K \ge 3,N=2^K,X^N+1 = (X^{N/2}+X^{N/4}-1) (X^{N/2}-X^{N/4}-1) ∀K≥3,N=2K,XN+1=(XN/2+XN/4−1)(XN/2−XN/4−1),从而 R Q R_Q RQ 几乎是一个域)。额外设置一个参数 u = ⌊ Q / 2 t ⌋ u = \lfloor Q/2t \rfloor u=⌊Q/2t⌋ 或者 u = ⌈ Q / 2 t ⌉ u = \lceil Q/2t \rceil u=⌈Q/2t⌉,它们在 Z Q \mathbb Z_Q ZQ 中是可逆的,且误差 ∣ u − Q / 2 t ∣ < 1 |u-Q/2t|<1 ∣u−Q/2t∣<1。
设置环 R = Z [ X ] / ( X N + 1 ) R = \mathbb Z[X]/(X^N+1) R=Z[X]/(XN+1),使得 q ∣ 2 N q\mid 2N q∣2N,那么它有 q q q 次本原单位根 Y : = X 2 N / q Y := X^{2N/q} Y:=X2N/q,因此 Z q ≅ ⟨ Y ⟩ \mathbb Z_q \cong \langle Y \rangle Zq≅⟨Y⟩ 是单位根循环群 G = ⟨ X ⟩ ≅ Z 2 N G = \langle X \rangle \cong \mathbb Z_{2N} G=⟨X⟩≅Z2N 的子循环群。消息 m ∈ Z q m \in \mathbb Z_q m∈Zq 可以直接编码到指数上为 Y m ∈ R Y^m \in R Ym∈R,其向量表示为 { − 1 , 0 , 1 } N \{-1,0,1\}^N {−1,0,1}N 上的 one-hot 向量。为了提取 m m m 的 MSB,我们构造一个 testing vector
t : = − ∑ v = 1 q / 2 − 1 Y ⃗ v ∈ { − 1 , 0 , 1 } N t := - \sum_{v=1}^{q/2-1} \vec Y^v \in \{-1,0,1\}^N t:=−v=1∑q/2−1Yv∈{−1,0,1}N
如果 0 ≤ m < N 0 \le m < N 0≤m<N 那么 t ⋅ Y ⃗ m = − 1 t \cdot \vec Y^m = -1 t⋅Ym=−1,如果 N ≤ m < 2 N N \le m < 2N N≤m<2N 那么 t ⋅ Y ⃗ m = + 1 t \cdot \vec Y^m = +1 t⋅Ym=+1,这其实就是挨个测试了 E q ( m , v ) , ∀ M S B ( v ) = 0 Eq(m,v),\forall MSB(v)=0 Eq(m,v),∀MSB(v)=0
FHEW 的基于 RGSW 的同态累加器:
由于 GSW 密文就是由 LWE 密文组成的向量,因此提取 MSB 对应的 LWE 密文,就是挑选出对应的列向量:
Refresh 的主要的计算量集中在累加阶段,可以用 FFT/NTT 来加速: