参考文献:
[MS18] 为了实现均摊 FHEW 自举,提出了 Ring packing 技术:将多个 LWE 密文(行矢)堆叠为 ( A , b ) (A,b) (A,b),然后按列转化为多项式 a j ( x ) , b ( x ) a_j(x), b(x) aj(x),b(x),使用 Key-Switch 执行同态线性解密 A ⋅ E ( s ) + b A\cdot E(s)+b A⋅E(s)+b(私钥被加密在多项式的常数项),最终获得打包了 μ ( x ) = ∑ j μ j x j \mu(x)=\sum_j \mu_jx^j μ(x)=∑jμjxj 的单个 RLWE 密文。虽然它是 Coeff Packing 的,但是 [MS18] 中的同态 InvDFT 的目标是加速同态的多项式乘法(线性解密部分),而非 SIMD 打包并行。但是其中的 SwK 是对于 LWE 私钥的各个分量分别用 RLWE 加密的 R L W E s ′ ( s i ⋅ g j ) RLWE_{s'}(s_i \cdot g_j) RLWEs′(si⋅gj),规模大、速度慢。计算过程中不需要用到同态旋转(主要的开销是秘钥切换),仅仅是对于 E ( s ) E(s) E(s) 的同态线性运算。
[LHH+21] 提出的 Chimera 也使用类似的堆叠技术,将 TLWE 打包转换到 RLWE 密文上。不过它将堆叠出的矩阵 C = ( A , b ) C=(A,b) C=(A,b) 直接乘以 InvDFT,于是 ( I n v D F T ⋅ C ) ⋅ s = I n v D F T ( μ ( x ) ) (InvDFT \cdot C) \cdot s=InvDFT(\mu(x)) (InvDFT⋅C)⋅s=InvDFT(μ(x)),这就将各个 μ j \mu_j μj 编码到了明文槽。它的 SwK 也是各个私钥分量分别被加密在系数上 R G S W s ′ ( s i ) RGSW_{s'}(s_i) RGSWs′(si),规模很大(GB 级别)
[CDKS21] 提出了新的 LWE 的 Key-Switch 技术(后文简记 KS),将 LWE 密文嵌入到 RLWE 密文上,对应的 SwK 将LWE 私钥作为单个多项式做 RLWE 加密 R L W E s ′ ( s ( x ) ⋅ g j ) RLWE_{s'}(s(x) \cdot g_j) RLWEs′(s(x)⋅gj),从而极大的提高了 KS 的速度(两个数量级)。需要使用分圆域的自同构的某些特殊性质,消除一些杂项。推广这个 KS 过程,可以获得 LWE 打包到 RLWE 的过程,不过它也是 Coeff Packing 的(还应该使用 Coeff-to-Slot 过程将它们编码到明文槽)。令 N N N 是 RLWE 的维度,打包 n = N n=N n=N 个 LWE 密文,复杂度为 O ( N ) O(N) O(N) 次同态自同构, O ( N ) O(N) O(N) 次同态数乘。
之后的 Pegasus 也使用密文堆叠技术,对于私钥 s s s 的密文做线性变换,来实现 LWE-to-RLWE 过程。同态线性变换过程中,采取对角线乘法(旋转+阿达玛),LWE 私钥作为一个整体被加密在明文槽上 R L W E s ′ ( E c d ( s , Δ ) ) RLWE_{s'}(Ecd(s,\Delta)) RLWEs′(Ecd(s,Δ)),规模大大减小(MB 级别),同态解密的结果直接在明文槽上。令 N N N 是 RLWE 的维度,打包 n = N n=N n=N 个 LWE 密文,复杂度为 O ( N ) O(\sqrt{N}) O(N) 次同态旋转(由若干个自同构组成,完全分裂的二的幂分圆环只需要一个), O ( N ) O(N) O(N) 次同态数乘。
令 m = 2 L + 1 m=2^{L+1} m=2L+1 是二的幂, N = ϕ ( m ) = 2 L N=\phi(m)=2^L N=ϕ(m)=2L 也是二的幂,分圆域 K = Q ( ζ m ) ≅ Q [ X ] / ( X N + 1 ) K=\mathbb Q(\zeta_m) \cong \mathbb Q[X]/(X^N+1) K=Q(ζm)≅Q[X]/(XN+1),分圆整数环 R = Z [ ζ m ] ≅ Z [ X ] / ( X N + 1 ) R=\mathbb Z[\zeta_m] \cong \mathbb Z[X]/(X^N+1) R=Z[ζm]≅Z[X]/(XN+1),为了区分不同维度我们记为 K N , R N K_N,R_N KN,RN
根据代数理论,域扩张 K / Q K/\mathbb Q K/Q 都是 Galois 扩张,Galois 群 G a l ( K / Q ) ≅ Z m ∗ = { 1 , 3 , ⋯ , 2 N − 1 } Gal(K/\mathbb Q) \cong \mathbb Z_m^*=\{1,3,\cdots,2N-1\} Gal(K/Q)≅Zm∗={1,3,⋯,2N−1},自同构:
τ d : ζ m → ζ m d , ∀ d ∈ Z m ∗ \tau_d: \zeta_m \to \zeta_m^d, \forall d\in\mathbb Z_m^* τd:ζm→ζmd,∀d∈Zm∗
域的迹:
T r K / Q : a ∈ K ↦ ∑ τ ∈ G a l ( K / Q ) τ ( a ) ∈ Q Tr_{K/\mathbb Q}: a \in K \mapsto \sum_{\tau \in Gal(K/\mathbb Q)} \tau(a) \in \mathbb Q TrK/Q:a∈K↦τ∈Gal(K/Q)∑τ(a)∈Q
根据代数知识, T r K / Q Tr_{K/\mathbb Q} TrK/Q 是 Q \mathbb Q Q-线性映射,并且满足
对于分圆塔:
K = K N ≥ K N / 2 ≥ ⋯ ≥ K 1 = Q K=K_N \ge K_{N/2} \ge \cdots \ge K_1=\mathbb Q K=KN≥KN/2≥⋯≥K1=Q
其中 K n , n = 2 l K_n,n=2^l Kn,n=2l 可以作为 K N K_N KN 的子域( R n ≤ R N R_n \le R_N Rn≤RN 类似),设置 Y = X N / n Y=X^{N/n} Y=XN/n,
K n = { ∑ i ∈ [ n ] a i Y i : a i ∈ Q } ⊆ K N K_n = \left\{\sum_{i \in [n]} a_i Y^i: a_i \in \mathbb Q\right\} \subseteq K_N Kn=⎩ ⎨ ⎧i∈[n]∑aiYi:ai∈Q⎭ ⎬ ⎫⊆KN
基于分圆塔,可以将迹分解:
T r K / Q = T r K 2 / K 1 ∘ ⋯ ∘ T K N / K N / 2 Tr_{K/\mathbb Q} = Tr_{K_2/K_1} \circ \cdots \circ T_{K_N/K_{N/2}} TrK/Q=TrK2/K1∘⋯∘TKN/KN/2
易知,相邻的域扩张的次数为 2 2 2,仅包含一个非凡自同构(另一个是恒等映射):
G a l ( K 2 l / K 2 l − 1 ) = { τ 1 ∣ K 2 l , τ 2 l + 1 ∣ K 2 l } , 1 ≤ l ≤ L Gal(K_{2^l}/K_{2^{l-1}}) = \{\tau_1|_{K_{2^l}},\,\, \tau_{2^l+1}|_{K_{2^l}}\},\,\, 1 \le l \le L Gal(K2l/K2l−1)={τ1∣K2l,τ2l+1∣K2l},1≤l≤L
其中的 τ 2 l + 1 ∣ K 2 l \tau_{2^l+1}|_{K_{2^l}} τ2l+1∣K2l 是自同构映射 τ 2 l + 1 ∈ G a l ( K / Q ) \tau_{2^l+1} \in Gal(K/\mathbb Q) τ2l+1∈Gal(K/Q) 限制在 K 2 l ⊆ K N K_{2^l} \subseteq K_N K2l⊆KN 上,容易验证它是 K 2 l K_{2^l} K2l 的 K 2 l − 1 K_{2^{l-1}} K2l−1-自同构。进一步的,简记 n = 2 l n=2^l n=2l, Y = X N / n Y=X^{N/n} Y=XN/n 是 K n / Q K_n/\mathbb Q Kn/Q 的扩张元,那么有:
T r K n / K n / 2 ( Y i ) = { 2 Y i , ∀ 2 ∣ i 0 , ∀ 2 ∤ i Tr_{K_{n}/K_{n/2}}(Y^i) = \left\{\begin{aligned} 2Y^i, &&\forall 2\mid i\\ 0, &&\forall 2\nmid i\\ \end{aligned}\right. TrKn/Kn/2(Yi)={2Yi,0,∀2∣i∀2∤i
因此,映射 μ ∈ K n ↦ T r K n / K n / 2 ( μ ) ∈ K n / 2 \mu \in K_n \mapsto Tr_{K_{n}/K_{n/2}}(\mu) \in K_{n/2} μ∈Kn↦TrKn/Kn/2(μ)∈Kn/2,记号 a ∥ b a\|b a∥b 表示 “恰好整除”,
我们定义 [ N ] = { 0 , 1 , ⋯ , N − 1 } [N]=\{0,1,\cdots,N-1\} [N]={0,1,⋯,N−1} 的一组划分(子域的系数索引),
I k : = { i ∈ [ N ] : 2 k ∥ i } , 0 ≤ k < L I_k := \{ i \in [N]: 2^k\|i \},\,\, 0 \le k< L Ik:={i∈[N]:2k∥i},0≤k<L
特别地设置 I L = { 0 } I_L=\{0\} IL={0},容易验证 [ N ] = ⋃ k I k [N] = \bigcup_k I_k [N]=⋃kIk
对于 d = 2 l + 1 , 1 ≤ l ≤ L d=2^l+1, 1\le l \le L d=2l+1,1≤l≤L,简记 i = 2 k j ∈ I k i=2^kj \in I_k i=2kj∈Ik,其中 j j j 是奇数,
i ⋅ d = 2 k + l j + 2 k j = { 2 k ( 2 l j + j ) ∈ I k ∀ 0 ≤ k ≤ L 2 k j = i ( m o d 2 N ) , ∀ k > L − l 2 L + 2 k j = N + i ( m o d 2 N ) , k = L − l i \cdot d = 2^{k+l}j + 2^kj = \left\{\begin{array}{ll} 2^k(2^lj+j) \in I_k &\forall 0 \le k \le L\\ 2^kj = i \pmod{2N}, &\forall k>L-l\\ 2^L+2^kj = N+i \pmod{2N}, &k=L-l\\ \end{array}\right. i⋅d=2k+lj+2kj=⎩ ⎨ ⎧2k(2lj+j)∈Ik2kj=i(mod2N),2L+2kj=N+i(mod2N),∀0≤k≤L∀k>L−lk=L−l
因此, τ d : ζ i → ζ i ⋅ d \tau_d: \zeta^i \to \zeta^{i\cdot d} τd:ζi→ζi⋅d 是对各个索引 I k I_k Ik 做了符号置换(signed permutation), ∀ i ∈ I k , ∃ r ∈ I k , τ d ( X i ) = ± X r \forall i \in I_k,\exist r \in I_k,\tau_d(X^i) = \pm X^r ∀i∈Ik,∃r∈Ik,τd(Xi)=±Xr。特别地对于 k ≥ L − l k \ge L-l k≥L−l 的那些 I k I_k Ik,
τ d ( X i ) = { X i , ∀ i ∈ ⋃ k > L − l I k − X i , ∀ i ∈ I L − l . . . o t h e r w i s e \tau_d(X^i) = \left\{\begin{aligned} X^i, &&\forall i \in \bigcup_{k>L-l}I_k\\ -X^i, &&\forall i \in I_{L-l}\\ ... &&otherwise \end{aligned}\right. τd(Xi)=⎩ ⎨ ⎧Xi,−Xi,...∀i∈k>L−l⋃Ik∀i∈IL−lotherwise
因此,映射 μ ∈ K N ↦ μ + τ d ( μ ) ∈ K N \mu \in K_N \mapsto \mu+\tau_d(\mu) \in K_N μ∈KN↦μ+τd(μ)∈KN,
LWE 密文 ( b , a ) ∈ Z q 1 + N (b,a) \in \mathbb Z_q^{1+N} (b,a)∈Zq1+N,私钥 s ∈ Z N s \in \mathbb Z^N s∈ZN,线性解密获得相位(不考虑纠错),
μ 0 = b + ⟨ a , s ⟩ ( m o d q ) \mu_0 = b+\langle a,s \rangle \pmod q μ0=b+⟨a,s⟩(modq)
执行 KS 时,抽象思路是 K = { L W E s ′ ( s i ) } K=\{LWE_{s'}(s_i)\} K={LWEs′(si)},然后同态解密获得 L W E s ′ ( μ 0 ) LWE_{s'}(\mu_0) LWEs′(μ0),但是这么做的复杂度太高了。[CDKS21] 提出了一种新的 KS 过程:
那么,获得的 ( b , a ( x ) ) ∈ R N , q 2 (b,a(x)) \in R_{N,q}^2 (b,a(x))∈RN,q2 可以视为 s ( x ) s(x) s(x) 加密的 RLWE 密文,容易验证 μ ( x ) = b + a ( x ) s ( x ) ∈ R N , q \mu(x) = b+a(x)s(x) \in R_{N,q} μ(x)=b+a(x)s(x)∈RN,q,它的常数项 μ [ 0 ] \mu[0] μ[0] 恰好就是 μ 0 \mu_0 μ0 了。
因此我们可以使用 K = { R L W E s ′ ( s ( x ) ⋅ g i ) } K=\{RLWE_{s'}(s(x) \cdot g_i)\} K={RLWEs′(s(x)⋅gi)} 作为 SwK,执行 RLWE 的秘钥切换,最后提取出常数项对应的 LWE 密文。其中的 g = ( g 1 , ⋯ , g d ) g=(g_1,\cdots,g_d) g=(g1,⋯,gd) 是 Gadget Vector,可使用 [BGV12] 的 Base decomposition 或者 [BEHZ16] 的 Prime decomposition(用于兼容 RNS 系统)。
具体算法为:
LWE Key-Switch 的噪声为 e k s = ⟨ g − 1 ( c 1 ) , e ⟩ e_{ks} = \langle g^{-1}(c_1), e \rangle eks=⟨g−1(c1),e⟩,其中 e ← χ σ e \gets \chi_\sigma e←χσ 是 SwK 的噪声。为了兼容 RNS 系统,我们使用素数分解 g − 1 : a ↦ { [ a ] q i ∈ R N , q i } g^{-1}: a \mapsto \{[a]_{q_i} \in R_{N,q_i}\} g−1:a↦{[a]qi∈RN,qi},那么可以计算出 e k s e_{ks} eks 各个系数的方差
V k s ≤ 1 12 N σ 2 ⋅ ∑ i q i 2 V_{ks} \le \frac{1}{12}N\sigma^2 \cdot \sum_i q_i^2 Vks≤121Nσ2⋅i∑qi2
易知 LWE-to-LWE 的噪声就是 Key-Switch 的噪声。
上述的 LWE-to-LWE 过程中,产生的 c t ′ ct' ct′ 并非是有效 RLWE 密文(相位只有常数项是有意义的,其他位置都是无效数据)。[CDKS21] 使用迹 T r K / Q Tr_{K/\mathbb Q} TrK/Q 来消除 X i , i ≠ 0 X^i,i \neq 0 Xi,i=0 的系数,只保留常数项(缩放因子 N N N)。
直接计算 T r K / Q Tr_{K/\mathbb Q} TrK/Q 需要分别计算各个 τ d , d ∈ Z m ∗ \tau_d, d\in \mathbb Z_m^* τd,d∈Zm∗,共计需要 N N N 个自同构映射(每一次都需要做 KS 过程)。因此,借助分圆塔将 T r K / Q Tr_{K/\mathbb Q} TrK/Q 分解,成为 L = log N L=\log N L=logN 个相邻分圆域的迹 T r K 2 l / K 2 l − 1 Tr_{K_{2^l}/K_{2^{l-1}}} TrK2l/K2l−1 的组合,这样就只需要计算 log N \log N logN 个非凡自同构。
具体算法为:
为了消除 N N N 缩放因子,可以预先对输入的 LWE 密文缩放 [ N − 1 ] q [N^{-1}]_q [N−1]q 因子,从而上述算法的输出自然地消除了它们。
因为自同构 τ d \tau_d τd 是保长的,因此不会导致噪声过度膨胀。同态迹的噪声是
V a r ≤ 1 3 ( ( N n ) 2 − 1 ) ⋅ V k s Var \le \frac{1}{3}((\frac{N}{n})^2-1) \cdot V_{ks} Var≤31((nN)2−1)⋅Vks
选取 n = 1 n=1 n=1,LWE-to-RLWE 的噪声就是 V a r ≤ 1 3 ( N 2 − 1 ) ⋅ V k s Var \le \frac{1}{3}(N^2-1) \cdot V_{ks} Var≤31(N2−1)⋅Vks
假如我们希望将相位是 μ j , j ∈ [ n ] \mu_j, j \in [n] μj,j∈[n] 的多个 LWE 密文打包到单个 RLWE 密文中:直接使用上述的转换得到 c t j ct_j ctj,然后计算 c t ′ = ∑ j ∈ [ n ] c t j ⋅ Y j , Y = X N / n ct' = \sum_{j \in [n]} ct_j \cdot Y^j, Y=X^{N/n} ct′=∑j∈[n]ctj⋅Yj,Y=XN/n,那么它的相位就是:
μ ′ = N ⋅ ∑ j ∈ [ n ] μ j Y j ∈ R n ⊆ R N \mu' = N \cdot \sum_{j \in [n]} \mu_j Y^j \in R_n \subseteq R_N μ′=N⋅j∈[n]∑μjYj∈Rn⊆RN
然而上述算法的计算效率和噪声增长都不算好。[CDKS21] 提出了 FFT-style 递归算法:假设 n = 2 l n=2^l n=2l,为了计算 μ ′ \mu' μ′,可以将 μ j \mu_j μj 分为大小 2 l − 1 2^{l-1} 2l−1 的两组,分别计算出
μ e v e n ′ = N / 2 ⋅ ∑ j ∈ [ n / 2 ] μ 2 j Y 2 j ∈ R n / 2 μ o d d ′ = N / 2 ⋅ ∑ j ∈ [ n / 2 ] μ 2 j + 1 Y 2 j ∈ R n / 2 \begin{aligned} \mu_{even}' &= N/2 \cdot \sum_{j \in [n/2]} \mu_{2j} Y^{2j} \in R_{n/2}\\ \mu_{odd}' &= N/2 \cdot \sum_{j \in [n/2]} \mu_{2j+1} Y^{2j} \in R_{n/2}\\ \end{aligned} μeven′μodd′=N/2⋅j∈[n/2]∑μ2jY2j∈Rn/2=N/2⋅j∈[n/2]∑μ2j+1Y2j∈Rn/2
但是实际上我们只需要计算出 μ e v e n , μ o d d ∈ R N \mu_{even},\mu_{odd} \in R_N μeven,μodd∈RN,使得它们的 Y 2 j Y^{2j} Y2j 系数组成了 μ e v e n ′ , μ o d d ′ ∈ R n / 2 \mu_{even}',\mu_{odd}' \in R_{n/2} μeven′,μodd′∈Rn/2,然后将 μ o d d \mu_{odd} μodd 旋转 Y Y Y 加到 μ e v e n \mu_{even} μeven 上,并使用自同构 τ d , d = 2 l + 1 \tau_{d}, d=2^l+1 τd,d=2l+1 来消除 μ o d d \mu_{odd} μodd 那些恰好被旋转到 μ e v e n ′ \mu_{even}' μeven′ 位置上的杂项:
μ = ( μ e v e n + Y ⋅ μ o d d ) + τ d ( μ e v e n − Y ⋅ μ o d d ) \mu = (\mu_{even} + Y \cdot \mu_{odd}) + \tau_d(\mu_{even} - Y \cdot \mu_{odd}) μ=(μeven+Y⋅μodd)+τd(μeven−Y⋅μodd)
由于 − Y ⋅ μ o d d -Y \cdot \mu_{odd} −Y⋅μodd 的有效系数 − μ 2 j + 1 -\mu_{2j+1} −μ2j+1 是在 Y 2 j + 1 Y^{2j+1} Y2j+1 上,因此 τ d \tau_d τd 将它们取反为 μ 2 j + 1 \mu_{2j+1} μ2j+1 ,而那些被旋转到 Y 2 j Y^{2j} Y2j 的杂项 − e -e −e 则保持不变,正好和 Y ⋅ μ o d d Y \cdot \mu_{odd} Y⋅μodd 添加到 μ e v e n \mu_{even} μeven 上的杂项 e e e 相互消除。最终,相位 μ ∈ R N \mu \in R_N μ∈RN 的那些 Y j Y^j Yj 的系数恰好是 N ⋅ μ j N \cdot \mu_j N⋅μj,只要再消除其他的杂项就可以得到 μ ′ ∈ R n \mu' \in R_n μ′∈Rn,这里可以使用 T r K N / K n Tr_{K_N/K_n} TrKN/Kn 来消除它们。
具体算法为:
这个算法 Step 2 需要 n − 1 n-1 n−1 次自同构,step 3 需要 log ( N / n ) \log(N/n) log(N/n) 次自同构,均摊成本为 n + log ( N / n ) − 1 n \frac{n+\log(N/n)-1}{n} nn+log(N/n)−1,只要打包的 LWEs 够多 n = Ω ( log N ) n=\Omega(\log N) n=Ω(logN),均摊成本仅为 O ( 1 ) O(1) O(1)(但是打包 n ≥ 2 10 n \ge 2^{10} n≥210 个 LWEs 的延迟应该挺高了?)
注意到 μ j \mu_j μj 是打包在系数上的,一般 FHE 可能需要使得消息是打包在明文槽里的,这可以使用 [GHS12] [HS15] [HHC19] 的 Coeff-to-Slot 技术进行转换。[CDKS21] 说这些转换的速度特别快(真的么?秒的量级吧,不算快),因此主要开销还是在 LWEs-to-RLWE 上面。
可以证明 LWEs-to-RLWE 的噪声也是 V a r ≤ 1 3 ( N 2 − 1 ) ⋅ V k s Var \le \frac{1}{3}(N^2-1) \cdot V_{ks} Var≤31(N2−1)⋅Vks
三种转换的效率和噪声:
优势:
对于云计算场景,我们使用对称版本的 LWE 加密方案,那么多个密文的 a j ∈ Z q N a_j \in \mathbb Z_q^N aj∈ZqN 完全可以被替代为随机种子, a j = P R F ( s e e d , j ) a_j=PRF(seed,j) aj=PRF(seed,j),这导致了 Rate 高达 1 − o ( 1 ) 1-o(1) 1−o(1) 的对称加密。在同态运算之前,需要同态解密,因为 LWE-based 是 FHE 友好的(只需要部分的同态解密,不必纠错),直接使用上述的 LWEs-to-RLWE 就可以转化为合适的 FHE 密文(这三种转换都是保护相位的,通用于任意的 FHE 方案)
Pegasus 是阿里团队 [LHH+21] 提出的一种混合方案:使用 CKKS 计算多项式(word-wise),使用 TFHE 计算非多项式(bit-wise)。他们使用了 [CHKKS19] 的 Full RNS CKKS(效率更高),[MP21] 的三元秘密 TFHE(更加安全)
MP-FFT 和 RNS-NTT 的效率对比:
Pegasus 使用了四种核心算法:
Pegasus 的基本计算逻辑是:
[MP21] 的 LUT 算法仅支持很小的域,需要限制 q ∣ 2 n q\mid 2n q∣2n,但是 ∣ Δ v i ∣ ≤ 2 10 |\Delta v_i| \le 2^{10} ∣Δvi∣≤210 对于 CKKS 方案是远远不够的。Pegasus 采用缩放技术,执行 LUT 获得近似结果。
使用 TFHE/FHEW 自举时,它只能计算模 2 n 2n 2n(累加器的维度 n n n),但是往往模数 q ≫ 2 n q \gg 2n q≫2n,给定 LWE 密文 ( b , a ) ∈ Z q 1 + n ‾ (b,a) \in \mathbb Z_{q}^{1+\underline n} (b,a)∈Zq1+n,Pegasus 将密文缩放为:
b ~ = ⌊ 2 n q ⋅ b ⌉ ∈ Z 2 n , a ~ = ⌊ 2 n q ⋅ a ⌉ ∈ Z 2 n n ‾ \tilde b = \left\lfloor \frac{2n}{q}\cdot b \right\rceil \in \mathbb Z_{2n},\,\, \tilde a = \left\lfloor \frac{2n}{q}\cdot a \right\rceil \in \mathbb Z_{2n}^{\underline n} b~=⌊q2n⋅b⌉∈Z2n,a~=⌊q2n⋅a⌉∈Z2nn
(缩放的)线性解密可以如下计算:
b ~ + ⟨ a ~ , s ‾ ⟩ ( m o d 2 n ) ≈ ⌊ 2 n q ⋅ μ ⌉ ∈ Z \tilde b + \langle\tilde a,\underline s\rangle \pmod{2n} \approx \left\lfloor \frac{2n}{q}\cdot \mu \right\rceil \in \mathbb Z b~+⟨a~,s⟩(mod2n)≈⌊q2n⋅μ⌉∈Z
Pegasus 丢弃了一半的相位空间(文中没有任何解释,烦啊),以换取函数 T T T 不必是反循环的。为了正确计算函数 T ( μ ) , μ ∈ [ − q / 4 , q / 4 ) T(\mu), \mu \in [-q/4,q/4) T(μ),μ∈[−q/4,q/4),我们应当对函数进行恰当缩放,
T ~ ( x ) = T ( q 2 n x ) , x ∈ [ − n / 2 , n / 2 ) ∩ Z \tilde T(x) = T\left(\frac{q}{2n}x\right),\,\, x \in [-n/2,n/2) \cap \mathbb Z T~(x)=T(2nqx),x∈[−n/2,n/2)∩Z
假如 T ( μ ) T(\mu) T(μ) 在区间 [ − q / 4 , q / 4 ) [-q/4,q/4) [−q/4,q/4) 上是 κ \kappa κ-Lipschitz 的,那么近似误差 ∥ T ( μ ) − T ~ ( ⌊ 2 n / q ⋅ μ ⌉ ) ∥ ≤ κ q / 4 n \|T(\mu)-\tilde T(\lfloor 2n/q\cdot \mu \rceil)\| \le \kappa q/4n ∥T(μ)−T~(⌊2n/q⋅μ⌉)∥≤κq/4n,只要 T T T 足够平滑,那么这个误差影响不大。
我们要求输入的 LWE 密文,它所加密的相位满足 μ = Δ m + e ∈ [ − q / 4 , q / 4 ) \mu=\Delta m+e \in [-q/4,q/4) μ=Δm+e∈[−q/4,q/4)(注意不是 Z q \mathbb Z_q Zq 整个空间,只有一半),给定 m ∈ R m \in \mathbb R m∈R 的函数 T : R → R T: \mathbb R \to \mathbb R T:R→R,希望输出的 LWE 密文对 Δ T ( m ) \Delta T(m) ΔT(m) 加密,令 k = ⌊ 2 n / q ⋅ μ ⌉ ∈ [ − n / 2 , n / 2 ) k=\lfloor 2n/q\cdot \mu \rceil \in [-n/2,n/2) k=⌊2n/q⋅μ⌉∈[−n/2,n/2),因此我们构造 LUT 如下:
t k = Δ T ( q 2 n Δ k ) , k = − n / 2 , ⋯ , 0 , ⋯ , n / 2 − 1 t_k=\Delta T\left(\frac{q}{2n\Delta} k\right),\,\, k=-n/2,\cdots,0,\cdots,n/2-1 tk=ΔT(2nΔqk),k=−n/2,⋯,0,⋯,n/2−1
将这 n n n 个数值写到多项式 f ∈ R n f \in R_n f∈Rn 的系数上(注意反序和符号): f − k = t k , ∀ k ≤ 0 f_{-k} = t_k, \forall k \le 0 f−k=tk,∀k≤0 以及 f n − k = − t k , ∀ k > 0 f_{n-k}=-t_k,\forall k>0 fn−k=−tk,∀k>0
使用 [MP21] 的三元秘密的 TFHE 变体,完整的 LUT 算法为:
哎!论文写的令人迷惑,也很少给出合理的解释。我感觉到处是错误,难道是我理解错了?
主要的思路挺好,它的细节就不要钻研了。。。
Chimera 使用的同态线性运算需要几百 GB 的公钥,计算效率极低。Pegasus 给出了新的算法,它只需要几十 MB 的公钥。
Chimera 试图将 l l l 个 LWE 密文打包到单个 RLWE 密文的明文槽中,它采取了 [MS18] 的 LWE 密文(行矢)堆叠的方案, a j a_j aj 组成的矩阵 A A A 的形状为 l × n ‾ l \times \underline n l×n,我们称 l > n ‾ l > \underline n l>n 是 “高”,称 l < n ‾ l < \underline n l<n 是 “矮”。接下来,我们将 s s s 编码加密在明文槽上 E c d ( s , Δ ) Ecd(s,\Delta) Ecd(s,Δ),对它做同态线性变换 μ = A s + b ( m o d q ) \mu = As+b \pmod q μ=As+b(modq),同态解密出相位的编码 E c d ( μ , Δ ) Ecd(\mu,\Delta) Ecd(μ,Δ)
[HS14] 提出了矩阵-向量乘法的对角线算法,它更加适合方阵的计算。Chimera 使用瓷砖技术(tiling),将 “高矩阵”、“短矩阵” 都抽象地排列为方阵(实际算法中不需要真的构造出方阵),然后采取 [HS18] 的对角线乘法和 BSGS 算法,计算明文槽的任意线性变换。
具体地,我们要求 l , n ‾ < n ‾ l,\underline n < \overline n l,n<n 都是二的幂次,给定矩阵 M ∈ R l × n ‾ M \in \mathbb R^{l \times \underline n} M∈Rl×n,给定 z ∈ Z n ‾ z \in \mathbb Z^{\underline n} z∈Zn 的重复码 E c d ( z ∥ ⋯ ∥ z , Δ ) Ecd(z\|\cdots\|z,\Delta) Ecd(z∥⋯∥z,Δ) 的 RLWE 加密,其中的 z z z 恰好重复了 n ‾ / n ‾ \overline n/\underline n n/n 次(没有Padding,这保持同态移位的正确性),
明文槽的同态线性变换,算法如下:
综合上述的技术,Pegasus 的整体协议是:
其中的 g d i g i t [ i ] = B i g_{digit}[i]=B^i gdigit[i]=Bi 是 [BGV12] 数字分解, g r n s [ i ] = q ′ q / q i ⋅ [ ( q / q i ) − 1 ] q i g_{rns}[i]=q'q/q_i\cdot[(q/q_i)^{-1}]_{q_i} grns[i]=q′q/qi⋅[(q/qi)−1]qi 是 [BEHZ16] 素数分解。它们都是 Gadget Vector,前者用于 LWE-to-LWE,后者用于 LUT 自举(文中也没解释这么选的原因)。
进一步的优化:
计算非多项式函数:
机器学习:
参数设置以及效率测试: