参考文献:
对于 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?1?aibp?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?1?f(a)?(1?(X?a)p?1)=f(0)?i=1∑p?1?(a=0∑p?1?f(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?=ζkj?S0?,?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?+e2?2?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?1?f(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? 从而解密正确。
算法如下:
易知:
参数:
效率: