参考文献:
对于 p p p 次插值多项式,使用通用的 Paterson-Stockmeyer 多项式求值算法,复杂度为 2 p + O ( log p ) \sqrt{2p}+O(\log p) 2p+O(logp)
[INZ21] 利用素域的性质,给出了某些特殊函数的更高效的插值多项式:取模、判断幂次、汉明重量、模二、比较。
奇素数 p ≥ 3 p\ge3 p≥3,素域 Z p \mathbb Z_p Zp,
对于任意的 e ∈ [ 0 , p − 2 ] e \in [0,p-2] e∈[0,p−2],都有
∑ a ∈ G F ( p ) a e = 0 ( m o d p ) \sum_{a \in GF(p)} a^e = 0 \pmod p a∈GF(p)∑ae=0(modp)
对于任意的 a , b ∈ Z p a,b \in \mathbb Z_p a,b∈Zp,都有
( a − b ) p − 1 = ∑ i = 0 p − 1 a i b p − 1 − i ( m o d p ) (a-b)^{p-1} = \sum_{i=0}^{p-1} a^ib^{p-1-i} \pmod p (a−b)p−1=i=0∑p−1aibp−1−i(modp)
根据 Fermat Little Theorem,等性检测的二元多项式:
E Q ( x , y ) = 1 − ( x − y ) p − 1 EQ(x,y) = 1-(x-y)^{p-1} EQ(x,y)=1−(x−y)p−1
任意的函数 f : Z p n → Z p f: \mathbb Z_p^n \to \mathbb Z_p f:Zpn→Zp 都可以唯一表示为多元多项式 P f ( X 1 , ⋯ , X n ) P_f(X_1,\cdots,X_n) Pf(X1,⋯,Xn),各个变元的次数不超过 p − 1 p-1 p−1,具体的插值多项式为
P f ( X 1 , ⋯ , X n ) = ∑ a ⃗ ∈ Z p n f ( a ⃗ ) ∏ i = 1 n ( 1 − ( X i − a i ) p − 1 ) P_f(X_1,\cdots,X_n) = \sum_{\vec a \in \mathbb Z_p^n} f(\vec a) \prod_{i=1}^n (1-(X_i-a_i)^{p-1}) Pf(X1,⋯,Xn)=a∈Zpn∑f(a)i=1∏n(1−(Xi−ai)p−1)
设置 n = 1 n=1 n=1,那么任意的 f : Z p → Z p f: \mathbb Z_p \to \mathbb Z_p f:Zp→Zp 可以插值为:
P f ( X ) = ∑ i = 0 p − 1 f ( a ) ⋅ ( 1 − ( X − a ) p − 1 ) = f ( 0 ) − ∑ i = 1 p − 1 ( ∑ a = 0 p − 1 f ( a ) a p − 1 − i ) ⋅ X i \begin{aligned} P_f(X) &= \sum_{i=0}^{p-1} f(a) \cdot (1-(X-a)^{p-1})\\ &= f(0) - \sum_{i=1}^{p-1} \left( \sum_{a=0}^{p-1} f(a)a^{p-1-i} \right) \cdot X^i \end{aligned} Pf(X)=i=0∑p−1f(a)⋅(1−(X−a)p−1)=f(0)−i=1∑p−1(a=0∑p−1f(a)ap−1−i)⋅Xi
我们希望 P f ( X ) P_f(X) Pf(X) 越稀疏越好。[INZ21] 观察到,假设 ζ k \zeta_k ζk 是本原单位根,满足 k ∣ p − 1 k \mid p-1 k∣p−1,将 Z p ∗ \mathbb Z_p^* Zp∗ 分为 k k k 个子集 { S 0 , ⋯ , S k − 1 } \{S_0,\cdots,S_{k-1}\} {S0,⋯,Sk−1} 的不交并,
S j = ζ k j S 0 , ∀ 0 ≤ j < k S_j = \zeta_k^j S_0,\,\, \forall 0\le j < k Sj=ζkjS0,∀0≤j<k
那么,
对于那些 k ∣ i k \mid i k∣i 的系数索引,
∑ a ∈ S 0 a p − 1 − i = 0 \sum_{a \in S_0} a^{p-1-i} = 0 a∈S0∑ap−1−i=0
假如 f f f 在每个 S j S_j Sj 上都是常数,
f ( a ) = c j , ∀ a ∈ S j f(a) = c_j,\,\, \forall a \in S_j f(a)=cj,∀a∈Sj
那么 P f ( X ) P_f(X) Pf(X) 的所有 X i , k ∣ i X^i,k \mid i Xi,k∣i 的系数都为零
[MS18] 最先给出了 FHEW 的批处理自举,均摊成本 O ( 3 ϵ ⋅ n 1 / ϵ ) , ∀ ϵ > 0 O(3^\epsilon \cdot n^{1/\epsilon}), \forall \epsilon>0 O(3ϵ⋅n1/ϵ),∀ϵ>0,然而结构复杂,没有给出具体实现。之后有若干工作,也给出了批处理的 LWE 自举算法。
[LW23] 直接使用 BFV 的 SIMD 性质(并非 ACC + LUT)来批量自举 LWE 密文。简单来说:
最终,均摊成本是 O ~ ( 1 ) \tilde O(1) O~(1) 多项式乘法。他们选取的参数下,均摊运行时间小于 7 7 7 毫秒。
LWE 方案(MSD 编码):
BFV 方案(MSD 编码):
在算法中,使用了 Pegaus 的同态线性变换:
回顾下 FHEW 怎么计算 NAND Gate,
当然,这个 LUT 的 domain 和 range 都应当缩放为它们在 Z q \mathbb Z_q Zq 上的编码值,并且旋转一定的角度使得它成为 Negacyclic 函数。
[LW23] 采用了 p = 3 p=3 p=3(而不是 p = 4 p=4 p=4),那么
b i − ⟨ a i , s k ⟩ = ⌊ q / 3 ⌉ ⋅ μ i + e i b_i - \langle a_i,sk \rangle = \lfloor q/3\rceil \cdot \mu_i + e_i bi−⟨ai,sk⟩=⌊q/3⌉⋅μi+ei
我们要求 ∣ e i ∣ < ⌊ q / 12 ⌋ |e_i| < \lfloor q/12 \rfloor ∣ei∣<⌊q/12⌋,从而 ∣ e 1 + e 2 ∣ < ⌊ q / 6 ⌋ |e_1+e_2| < \lfloor q/6 \rfloor ∣e1+e2∣<⌊q/6⌋ 解密正确。方便起见,[LW23] 将 c i = ( a i , b i ) c_i=(a_i,b_i) ci=(ai,bi) 的相位旋转 q / 6 q/6 q/6 使得噪声是非负数,得到 c i ′ = ( a i , b i + ⌊ q / 6 ⌋ ) c_i'=(a_i,b_i+\lfloor q/6 \rfloor) ci′=(ai,bi+⌊q/6⌋)
那么,给定 c = c 1 + c 2 c=c_1+c_2 c=c1+c2,
b − ⟨ a , s k ⟩ ∈ { 0 + e 1 + e 2 ∈ [ 0 , ⌊ q / 3 ⌋ ) , μ 1 = μ 2 = 0 ⌊ q / 3 ⌋ + e 1 + e 2 ∈ [ ⌊ q / 3 ⌋ , 2 ⌊ q / 3 ⌋ ) , o t h e r w i s e 2 ⌊ q / 3 ⌋ + e 1 + e 2 ∈ [ 2 ⌊ q / 3 ⌋ , q ) μ 1 = μ 2 = 1 b - \langle a,sk \rangle \in \left\{\begin{aligned} 0+e_1+e_2 &\in [0, \lfloor q/3\rfloor),&& \mu_1=\mu_2=0\\ \lfloor q/3\rfloor+e_1+e_2 &\in [\lfloor q/3\rfloor, 2\lfloor q/3\rfloor),&& otherwise\\ 2\lfloor q/3\rfloor+e_1+e_2 &\in [2\lfloor q/3\rfloor, q)&& \mu_1=\mu_2=1\\ \end{aligned}\right. b−⟨a,sk⟩∈⎩ ⎨ ⎧0+e1+e2⌊q/3⌋+e1+e22⌊q/3⌋+e1+e2∈[0,⌊q/3⌋),∈[⌊q/3⌋,2⌊q/3⌋),∈[2⌊q/3⌋,q)μ1=μ2=0otherwiseμ1=μ2=1
因此,我们定义 NAND Gate 对应的 LUT:
f ( x ) = { 0 , x ∈ [ 2 ⌊ q / 3 ⌋ , q ) ⌊ q / 3 ⌋ , o t h e r w i s e f(x) = \left\{\begin{aligned} 0,&& x \in [2\lfloor q/3\rfloor, q)\\ \lfloor q/3\rfloor,&& otherwise \end{aligned}\right. f(x)={0,⌊q/3⌋,x∈[2⌊q/3⌋,q)otherwise
[LW21] 将它称为 DRaM(Division, Rounding, and Mapping)。我们将它在素域 Z q \mathbb Z_q Zq 上插值为多项式:
P f ( x ) = f ( 0 ) − ∑ i = 1 q − 1 ( ∑ a = 0 q − 1 f ( a ) a q − 1 − i ) ⋅ X i P_f(x) = f(0) - \sum_{i=1}^{q-1} \left( \sum_{a=0}^{q-1} f(a)a^{q-1-i} \right) \cdot X^i Pf(x)=f(0)−i=1∑q−1(a=0∑q−1f(a)aq−1−i)⋅Xi
注意,BFV 可以计算任意的多项式,并没有 Negacyclic 的约束。
现在的计算任务就是:
c ∈ Z q n + 1 ↦ P f ( [ b − ⟨ a , s k ⟩ ] q ) ∈ Z q c \in \mathbb Z_q^{n+1} \mapsto P_f\big([b-\langle a,sk\rangle]_q\big) \in \mathbb Z_q c∈Zqn+1↦Pf([b−⟨a,sk⟩]q)∈Zq
内积运算采取 Pegasus 的同态下线性变换,多项式求值运算采取 Paterson-Stockmeyer 算法。这些运算都是在 BFV Slots 上执行的,最后需要使用 [CHKKS18] 的同态解码算法(可以直接使用 Pegasus 的同态下线性变换,但存在更快的 FFT-style 算法 [HHC19])。
我们设置 BFV 明文空间 t = q t=q t=q 使得它自动模掉 LWE 的密文模数,批处理 N N N 个 LWE 密文(占满 BFV Slots),LWE 的私钥 s k ∈ Z q n sk \in \mathbb Z_q^n sk∈Zqn 被重复打包 N / n N/n N/n 次。具体算法如下:
如果某函数形如:
f ( x ) = { 0 , ∀ x ∈ ( − r , r ) c , o t h e r w i s e f(x) = \left\{\begin{aligned} 0,&& \forall x \in (-r,r)\\ c,&& otherwise \end{aligned}\right. f(x)={0,c,∀x∈(−r,r)otherwise
其中 r ∈ [ 2 , ⌊ q / 2 ⌋ ] , c ∈ Z q r \in [2,\lfloor q/2\rfloor], c \in \mathbb Z_q r∈[2,⌊q/2⌋],c∈Zq 都是常数,那么它对应的 P f P_f Pf 的系数有大约一半是零。因此,我们扭曲 NAND LUT 相位 + ⌊ q / 6 ⌋ +\lfloor q/6 \rfloor +⌊q/6⌋,对应的扭曲 LWE 密文为 ( a , b − 2 ⌊ q / 3 ⌋ − ⌊ q / 6 ⌋ ) (a, b-2\lfloor q/3 \rfloor-\lfloor q/6 \rfloor) (a,b−2⌊q/3⌋−⌊q/6⌋)
在 Pegaus 的同态线性变换中,采取了 BSGS 技巧,需要使用 b f v c t s k bfvct_{sk} bfvctsk 分别旋转 i ⋅ n , ∀ i ∈ [ n ] i \cdot \sqrt n, \forall i \in [\sqrt n] i⋅n,∀i∈[n] 个位置,这个可以被 KeyGen 时预计算(空间换时间)
计算 DRaM 花费了较深的电路,我们直降将 b f v c t 3 bfvct_3 bfvct3 模切换到更低的模数 Q ′ ≪ Q Q' \ll Q Q′≪Q 上,然后再执行后续的 S2C(需要额外计算 Q ′ Q' Q′ 下的旋转密钥 r t k ′ rtk' rtk′)
不再各个 LWE 密文分别 Key-Switch,我们可以在 b f v c t 5 bfvct_5 bfvct5 上执行 RLWE-KS,目标 s → s ′ s \to s' s→s′ 是关于 s k sk sk 的(使得 Extract 恰好是 s k sk sk 加密的)
一个重要的观察是 BFV 是以 SIMD 范式执行的,因此全部的槽都执行同一个 DRaM 多项式:它将 x ∈ [ 2 ⌊ q / 3 ⌋ , q ) x \in [2\lfloor q/3\rfloor, q) x∈[2⌊q/3⌋,q) 映射到 0 0 0,其余的都映射到 ⌊ q / 3 ⌋ \lfloor q/3\rfloor ⌊q/3⌋
虽然 NAND 是完备的,但是只用 NAND 搭建电路,其规模会较大。为了使得不同的槽可以执行任意的 Binary Gates,[LW23] 的思路是 “预处理+后处理”,使得全部的 Gates 都共用这个 DRaM 函数。
算法如下:
这个预处理和后处理的速度都是非常快的(仅仅是 b ∈ Z q b \in \mathbb Z_q b∈Zq 上的加减法),其开销可以忽略。
对于更高精度的函数 f : Z p → Z q f: \mathbb Z_p \to \mathbb Z_q f:Zp→Zq,其中的 p ≥ 3 p \ge 3 p≥3 是任意素数,依旧可以采用上述的算法。唯一的修改就是我们在线构造 P f P_f Pf 多项式,并要求 LWE 密文噪声满足 ∣ e ∣ ≤ ⌊ q / 2 p ⌋ |e| \le \lfloor q/2p \rfloor ∣e∣≤⌊q/2p⌋ 从而解密正确。
算法如下:
易知:
参数:
效率: