参考文献:
- [GV23] Geelen R, Vercauteren F. Bootstrapping for BGV and BFV Revisited[J]. Journal of Cryptology, 2023, 36(2): 12.
- Bit Extraction and Bootstrapping for BGV/BFV
文章目录
- Bootstrapping for BGV and BFV
- Decryption Function
- BGV
- BFV
- Bootstrapping Procedure
- Homomorphic Linear Transformations
- One-Dimensional Linear Transformations
- Slot-to-Coefficient
- General Case
- Power-of-Two Cyclotomics
- Digit Extraction
- Halevi/Shoup Procedure
- Chen/Han Procedure
- Bootstrapping for BGV/BFV/CKKS
[GV23] 给出了 BGV 和 BFV 的统一自举算法,指出两者复杂度是相同的。
Bootstrapping for BGV and BFV
Decryption Function
稍微滥用符号, r r r 表示 hensel lifting 或者 overflow, e e e 表示待自举密文的模数规模或者加密噪声。
密文模数 q q q,明文模数 p r p^r pr,分圆整数环 R = Z [ X ] / ( Φ m ( X ) ) R=\mathbb Z[X]/(\Phi_m(X)) R=Z[X]/(Φm(X))
BGV
BGV 的密文形如:
c
0
+
c
1
⋅
s
=
m
+
p
r
e
(
m
o
d
q
)
c_0+c_1\cdot s = m+p^re \pmod{q}
c0+c1⋅s=m+pre(modq)
假设
q
≡
1
(
m
o
d
p
e
)
q\equiv1\pmod{p^e}
q≡1(modpe)(这比 [HS15] 的要求松一些),解密可以简化为:
- 缩放 c i ′ ← [ p e − r c i ] q c_i' \gets [p^{e-r}c_i]_q ci′←[pe−rci]q
- 内积 w ← [ c 0 ′ + c 1 ′ ⋅ s ] p e w \gets [c_0' + c_1' \cdot s]_{p^e} w←[c0′+c1′⋅s]pe
- 纠错 m ← [ ⌊ w / p e − r ⌉ ] p r m \gets [\lfloor w/p^{e-r}\rceil]_{p^r} m←[⌊w/pe−r⌉]pr
现在我们确定参数
e
e
e 的合适数值,过大则自举效率很慢,过小则自举结果错误。我们计算
u
=
p
e
−
r
(
c
0
+
c
1
⋅
s
)
=
p
e
−
r
(
m
+
p
r
e
)
+
q
r
u = p^{e-r}(c_0+c_1\cdot s) = p^{e-r}(m+p^re) + qr
u=pe−r(c0+c1⋅s)=pe−r(m+pre)+qr
根据
q
≡
1
(
m
o
d
p
e
)
q\equiv1\pmod{p^e}
q≡1(modpe),那么有
w
=
[
u
]
p
e
=
[
p
e
−
r
m
+
r
]
p
e
w = [u]_{p^e} = [p^{e-r}m + r]_{p^e}
w=[u]pe=[pe−rm+r]pe
这个解密噪声是 MSD 编码的(原始 BGV 的是 LSD 编码)。为了纠错的正确性,需要满足
∥
r
∥
∞
≤
p
e
−
r
/
2
\|r\|_\infty \le p^{e-r}/2
∥r∥∞≤pe−r/2,用它的上界来约束,
∥
r
∥
∞
≤
∥
(
c
0
′
+
c
1
′
s
)
/
q
∥
∞
+
∥
p
e
−
r
m
/
q
∥
∞
+
∥
p
e
e
/
q
∥
∞
\|r\|_\infty \le \|(c_0'+c_1's)/q\|_\infty + \|p^{e-r}m/q\|_\infty + \|p^ee/q\|_\infty
∥r∥∞≤∥(c0′+c1′s)/q∥∞+∥pe−rm/q∥∞+∥pee/q∥∞
简记
d
i
=
c
i
′
/
q
d_i=c_i'/q
di=ci′/q,那么近似要求
∥
d
0
+
d
1
s
∥
∞
+
∥
p
e
e
/
q
∥
∞
<
p
e
−
r
/
2
\|d_0+d_1s\|_\infty + \|p^ee/q\|_\infty < p^{e-r}/2
∥d0+d1s∥∞+∥pee/q∥∞<pe−r/2
根据 [HS15] 的启发式估计,我们再假设
d
i
∈
[
−
0.5
,
0.5
]
d_i \in [-0.5,0.5]
di∈[−0.5,0.5] 是均匀的,那么有:
选定参数 k k k,给定私钥汉明重量 h h h 和分圆次数 m m m 及其分解个数 t t t,确定出 d 1 ⋅ s d_1\cdot s d1⋅s 高概率的启发式上界,求出可满足约束条件的最小的 e e e 取值。
由于 C C C 正比于 h \sqrt h h,因此导致了 p e − r / 2 p^{e-r}/2 pe−r/2 正比于 h \sqrt h h,这使得稠密私钥的所需 e e e 较大,自举效率很低。一种技巧是,自举前执行 Key-Switch 切换到一个稀疏秘密 s ~ \tilde s s~ 上,自举秘钥也相应地修改为 E s ( s ~ ) E_{s}(\tilde s) Es(s~)。由于 s s s 用于加密消息,而 s ~ \tilde s s~ 仅用于执行自举(在最低层),因此后者的密文模数很小,安全性可以保证。
BFV
BFV 的密文形如:
c
0
+
c
1
⋅
s
=
⌊
q
p
r
⋅
m
⌉
+
e
(
m
o
d
q
)
c_0+c_1\cdot s = \left\lfloor\frac{q}{p^r} \cdot m\right\rceil + e \pmod{q}
c0+c1⋅s=⌊prq⋅m⌉+e(modq)
对于
q
q
q 没有要求,解密可以简化为:
- 缩放 c i ′ ← [ ⌊ ( p e / q ) ⋅ c i ⌉ ] p e c_i' \gets [\lfloor(p^e/q)\cdot c_i\rceil]_{p^e} ci′←[⌊(pe/q)⋅ci⌉]pe
- 内积 w ← [ c 0 ′ + c 1 ′ ⋅ s ] p e w \gets [c_0' + c_1' \cdot s]_{p^e} w←[c0′+c1′⋅s]pe
- 纠错 m ← [ ⌊ w / p e − r ⌉ ] p r m \gets [\lfloor w/p^{e-r}\rceil]_{p^r} m←[⌊w/pe−r⌉]pr
对比 BGV 的解密函数,两者仅在第一步的缩放有所不同。
我们确定它的
e
e
e 取值,简记
d
i
=
c
i
′
−
(
p
e
/
q
)
⋅
c
i
d_i=c_i'-(p^e/q)\cdot c_i
di=ci′−(pe/q)⋅ci,简记
ϵ
=
⌊
(
q
/
p
r
)
⋅
m
⌉
−
(
q
/
p
r
)
⋅
m
\epsilon = \lfloor(q/p^r) \cdot m\rceil-(q/p^r) \cdot m
ϵ=⌊(q/pr)⋅m⌉−(q/pr)⋅m,
w
=
[
(
p
e
/
q
)
⋅
(
c
0
+
c
1
s
)
+
(
d
0
+
d
1
s
)
]
p
e
=
[
(
p
e
/
q
)
⋅
(
(
q
/
p
r
)
⋅
m
+
e
+
ϵ
)
+
(
d
0
+
d
1
s
)
]
p
e
=
[
p
e
−
r
m
+
(
d
0
+
d
1
s
)
+
p
e
/
q
⋅
(
e
+
ϵ
)
]
p
e
\begin{aligned} w &= [(p^e/q)\cdot (c_0+c_1s) + (d_0+d_1s)]_{p^e}\\ &= [(p^e/q)\cdot((q/p^r) \cdot m+e+\epsilon) + (d_0+d_1s)]_{p^e}\\ &= [p^{e-r}m+(d_0+d_1s)+p^e/q\cdot(e+\epsilon)]_{p^e} \end{aligned}
w=[(pe/q)⋅(c0+c1s)+(d0+d1s)]pe=[(pe/q)⋅((q/pr)⋅m+e+ϵ)+(d0+d1s)]pe=[pe−rm+(d0+d1s)+pe/q⋅(e+ϵ)]pe
为了纠错的正确性,需要使得噪声项满足约束,可近似为
∥
d
0
+
d
1
s
∥
∞
+
∥
p
e
e
/
q
∥
∞
<
p
e
−
r
/
2
\|d_0+d_1s\|_\infty + \|p^ee/q\|_\infty < p^{e-r}/2
∥d0+d1s∥∞+∥pee/q∥∞<pe−r/2
这和 BGV 的约束完全一样。根据 [HS15] 的启发式估计,确定出满足它的
e
e
e 最小值。也可以用类似的技术降低私钥的汉明重量。
Bootstrapping Procedure
上述的解密函数,经过缩放和内积后,无论是 BGV 还是 BFV,它们的相位都是 MSD 编码的,因此可以统一使用 remove LSD 的自举流程。
Thick 版本:
Thin 版本:
Homomorphic Linear Transformations
One-Dimensional Linear Transformations
[HS15] 将线性映射 Slot-to-Coeff 和 Coeff-to-Slot 分解为若干的一维线性变换。它包括两类,
- E E E-linear transformations:使用了 [HS18] 的 BSGS 矩阵向量乘法技巧,作用在明文槽超立方的某个维度的超列上,不同超列的变换可以不同
- Z p r \mathbb Z_{p^r} Zpr-linear transformations:使用 Frobenius map 实现明文槽 E ≅ Z p r d E \cong \mathbb Z_{p^r}^d E≅Zprd 内的线性变换,再复合上 BSGS 的明文槽之间的线性变换
Slot-to-Coefficient
General Case
[HS15] 使用 BSGS 乘法技巧,以及 Powerful Basis,给出了通用的线性映射。将 m m m 分解为 t t t 个素数幂乘积,迭代执行 t t t 个阶段的多项式的多点求值,每个多点求值都是某个超列上的一维线性变换。
Power-of-Two Cyclotomics
[HS18] 针对二的幂分圆环以及稀疏打包明文,给出了更加高效的线性映射。首先利用自同构加倍/消除各个位置的系数,从而挑选出子环所对应的稀疏系数;然后对这个稀疏的系数执行特化的 Coeff-to-Slot 变换。
Digit Extraction
[GV23] 比较了 [HS15] 和 [CH18] 的数字提取技术的复杂度。假设 v = e − r v=e-r v=e−r 是需要移除的数位个数,那么:
我们令 m , h , v m,h,v m,h,v 都是常数(也就是 e = r + v e=r+v e=r+v 随着 r r r 线性增长),可以发现:
- [HS15] 的乘法深度是关于 r r r 线性的
- [CH18] 的乘法深度是关于 r r r 对数的
- 在较小参数下,[CH18] 的乘法数量更多,但是渐进意义下的复杂度更低
Halevi/Shoup Procedure
[HS15] 采用 lifting polynomial,算法为:
Chen/Han Procedure
[CH18] 采用 lowest digit retain polynomial,算法为:
Bootstrapping for BGV/BFV/CKKS
为了比较不同 BV-like 方案的自举算法,我画了如下的示意图: