参考文献:
- [GHS12] Gentry C, Halevi S, Smart N P. Homomorphic evaluation of the AES circuit[C]//Annual Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 850-867.
- [AP13] Alperin-Sheriff J, Peikert C. Practical bootstrapping in quasilinear time[C]//Annual Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013: 1-20.
- [CS15] Costache A, Smart N P. Which ring based somewhat homomorphic encryption scheme is best?[C]//Topics in Cryptology-CT-RSA 2016: The Cryptographers’ Track at the RSA Conference 2016, San Francisco, CA, USA, February 29-March 4, 2016, Proceedings. Springer International Publishing, 2016: 325-340.
- [CP16] Crockett E, Peikert C. Λολ: Functional Lattice Cryptography[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. 2016: 993-1005.
- [BEHZ16] Bajard J C, Eynard J, Hasan M A, et al. A full RNS variant of FV like somewhat homomorphic encryption schemes[C]//International Conference on Selected Areas in Cryptography. Cham: Springer International Publishing, 2016: 423-442.
- [HPS19] Halevi S, Polyakov Y, Shoup V. An improved RNS variant of the BFV homomorphic encryption scheme[C]//Topics in Cryptology–CT-RSA 2019: The Cryptographers’ Track at the RSA Conference 2019, San Francisco, CA, USA, March 4–8, 2019, Proceedings. Springer International Publishing, 2019: 83-105.
- [KPZ21] Kim A, Polyakov Y, Zucca V. Revisiting homomorphic encryption schemes for finite fields[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the Theory and Application of Cryptology and Information Security, Singapore, December 6–10, 2021, Proceedings, Part III 27. Springer International Publishing, 2021: 608-639.
文章目录
[CS15] 使用了启发式的平均噪声估计,研究了四种同态方案:BGV、BFV(scale-invariant version of BGV)、NTRU、YASHE(scale-invariant version of NTRU),并研究了两种 key-Switching 方案:BV 和 GHS。他们以相似的安全强度( 80 80 80 比特的安全性),给出了密文模数的选取建议,比较了密文规模以及运算效率。发现:对于 t = 2 t=2 t=2 明文模数 YASHE 的效率略高一些,对于较大的明文模数 BGV 的效率要高的多。另外,对于大明文模数 BGV 的噪声控制更好。
[KPZ21] 比较了 BGV 和 BFV,并对两者进行一定程度的修改,尽可能缩小两者的差距。与 [CS15] 的结论不同,在修改了 BFV 的加密方式后,无论什么规模的明文模数,BFV 的噪声控制总是表现的比 BGV 更好。
Original Scheme
分圆整数环 R = Z [ X ] / ( X N + 1 ) \mathcal R=\mathbb Z[X]/(X^N+1) R=Z[X]/(XN+1),中心化余数 [ a ] Q ∈ [ − Q / 2 , Q / 2 ) [a]_Q \in [-Q/2,Q/2) [a]Q∈[−Q/2,Q/2),经典余数 r Q ( a ) ∈ [ 0 , Q ) r_Q(a) \in [0,Q) rQ(a)∈[0,Q)
环常数 δ R \delta_\mathcal R δR,定义为 ∥ a ⋅ b ∥ ∞ ≤ δ R ⋅ ∥ a ∥ ∞ ∥ b ∥ ∞ , ∀ a , b ∈ R \|a\cdot b\|_\infty \le \delta_\mathcal R \cdot \|a\|_\infty\|b\|_\infty,\forall a,b \in \mathcal R ∥a⋅b∥∞≤δR⋅∥a∥∞∥b∥∞,∀a,b∈R
对于分圆环 δ R = N \delta_\mathcal R=N δR=N,但是实际只有指数小的概率可以达到这个界,一般可以使用 δ R = 2 N \delta_\mathcal R=2\sqrt N δR=2N 作为更紧的启发式噪声上界。一般地 N ≤ 2 14 N \le 2^{14} N≤214,从而计算出 δ R ≤ 256 \delta_\mathcal R \le 256 δR≤256 作为经验值。
秘密分布 χ s \chi_s χs 是均匀三元分布,噪声分布 χ e \chi_e χe 是标准差 σ = 3.19 \sigma=3.19 σ=3.19 的截断高斯分布,上界 B e r r = 6 σ B_{err}=6\sigma Berr=6σ 和 B k e y = 1 B_{key}=1 Bkey=1
BGV
私钥
s
←
χ
s
s \gets \chi_s
s←χs 是短的,RLWE 公钥为
p
k
=
(
[
a
s
+
t
e
]
Q
,
[
−
a
]
Q
)
∈
R
Q
2
pk=([as+te]_Q, [-a]Q) \in \mathcal R_Q^2
pk=([as+te]Q,[−a]Q)∈RQ2
要求明密文模数互素,
gcd
(
t
,
Q
)
=
1
\gcd(t,Q)=1
gcd(t,Q)=1,那么
p
k
pk
pk 可以转化为 RLWE 样本
(
[
t
−
1
a
s
+
e
]
Q
,
[
−
t
−
1
a
]
Q
)
([t^{-1}as+e]_Q, [-t^{-1}a]_Q)
([t−1as+e]Q,[−t−1a]Q)
原始 BGV 采取 LSD 编码,加密算法为
E
n
c
(
[
m
]
t
)
=
(
u
⋅
p
k
0
+
t
e
0
+
[
m
]
t
,
u
⋅
p
k
1
+
t
e
1
)
∈
R
Q
2
Enc([m]_t) = \left( u \cdot pk_0+te_0+[m]_t, u \cdot pk_1+te_1\right) \in \mathcal R_Q^2
Enc([m]t)=(u⋅pk0+te0+[m]t,u⋅pk1+te1)∈RQ2
其中
u
←
χ
s
,
e
0
,
e
1
←
χ
e
u \gets \chi_s, e_0,e_1\gets \chi_e
u←χs,e0,e1←χe 都是随机的短元素,新鲜密文的噪声是
v
f
r
e
s
h
=
u
e
+
e
1
s
+
e
0
v_{fresh}=ue+e_1s+e_0
vfresh=ue+e1s+e0
假设
(
c
0
,
c
1
)
(c_0,c_1)
(c0,c1) 的噪声是
v
v
v,那么:
c
0
+
c
1
s
=
[
m
]
t
+
t
v
(
m
o
d
Q
)
c_0+c_1s= [m]_t + tv \pmod Q
c0+c1s=[m]t+tv(modQ)
纠错步骤就是:
[
[
c
0
+
c
1
s
]
Q
]
t
[[c_0+c_1s]_Q]_t
[[c0+c1s]Q]t,为了解密正确,
[
[
m
]
t
+
t
v
]
Q
[[m]_t+tv]_Q
[[m]t+tv]Q(注意不只是
[
t
v
]
Q
[tv]_Q
[tv]Q)不能发生回绕(wrap-around),其中
[
m
]
t
∈
[
−
t
/
2
,
t
/
2
)
[m]_t \in [-t/2,t/2)
[m]t∈[−t/2,t/2)
∥
v
∥
∞
<
Q
2
t
−
1
2
\|v\|_\infty < \dfrac{Q}{2t}-\dfrac{1}{2}
∥v∥∞<2tQ−21
同态加法:简记
r
m
=
(
[
m
]
t
+
[
m
′
]
t
−
[
m
+
m
′
]
t
)
/
t
r_m=([m]_t + [m']_t-[m+ m']_t)/t
rm=([m]t+[m′]t−[m+m′]t)/t,满足
∥
r
m
∥
∞
≤
1
\|r_m\|_\infty \le 1
∥rm∥∞≤1
(
c
0
+
c
1
s
)
+
(
c
0
′
+
c
1
′
s
)
=
(
[
m
]
t
+
t
v
)
+
(
[
m
′
]
t
+
t
v
′
)
=
[
m
+
m
′
]
t
+
t
⋅
r
m
+
t
(
v
+
v
′
)
∥
v
a
d
d
∥
∞
=
∥
v
+
v
′
+
r
m
∥
∞
≤
∥
v
∥
∞
+
∥
v
′
∥
∞
+
1
\begin{aligned} (c_0+c_1s)+(c_0'+c_1's) &= ([m]_t + tv)+([m']_t + tv')\\ &= [m+m']_t + t\cdot r_m + t(v+v')\\ \|v_{add}\|_\infty &= \|v+v'+r_m\|_\infty\\ &\le \|v\|_\infty + \|v'\|_\infty + 1 \end{aligned}
(c0+c1s)+(c0′+c1′s)∥vadd∥∞=([m]t+tv)+([m′]t+tv′)=[m+m′]t+t⋅rm+t(v+v′)=∥v+v′+rm∥∞≤∥v∥∞+∥v′∥∞+1
同态乘法(不执行重现性化):简记
r
m
=
(
[
m
]
t
⋅
[
m
′
]
t
−
[
m
⋅
m
′
]
t
)
/
t
r_m=([m]_t \cdot [m']_t-[m\cdot m']_t)/t
rm=([m]t⋅[m′]t−[m⋅m′]t)/t,满足
∥
r
m
∥
∞
≤
δ
R
t
/
2
\|r_m\|_\infty \le \delta_\mathcal Rt/2
∥rm∥∞≤δRt/2(环乘法导致范数增长
δ
R
\delta_\mathcal R
δR 倍)
(
c
0
+
c
1
s
)
⋅
(
c
0
′
+
c
1
′
s
)
=
(
[
m
]
t
+
t
v
)
⋅
(
[
m
′
]
t
+
t
v
′
)
=
[
m
⋅
m
′
]
t
+
t
⋅
r
m
+
t
(
[
m
]
t
⋅
v
′
+
[
m
′
]
t
⋅
v
+
t
v
v
′
)
∥
v
m
u
l
t
∥
∞
=
∥
[
m
]
t
⋅
v
′
+
[
m
′
]
t
⋅
v
+
t
v
v
′
+
r
m
∥
∞
≤
δ
R
t
2
⋅
(
∥
v
′
∥
∞
+
∥
v
∥
∞
+
2
∥
v
′
∥
∞
⋅
∥
v
∥
∞
+
1
)
\begin{aligned} (c_0+c_1s)\cdot(c_0'+c_1's) &= ([m]_t + tv)\cdot([m']_t + tv')\\ &= [m\cdot m']_t + t \cdot r_m + t([m]_t\cdot v'+[m']_t\cdot v+tvv')\\ \|v_{mult}\|_\infty &= \|[m]_t\cdot v'+[m']_t\cdot v+tvv'+r_m\|_\infty\\ &\le \frac{\delta_\mathcal R t}{2} \cdot(\|v'\|_\infty+\|v\|_\infty + 2\|v'\|_\infty \cdot \|v\|_\infty + 1) \end{aligned}
(c0+c1s)⋅(c0′+c1′s)∥vmult∥∞=([m]t+tv)⋅([m′]t+tv′)=[m⋅m′]t+t⋅rm+t([m]t⋅v′+[m′]t⋅v+tvv′)=∥[m]t⋅v′+[m′]t⋅v+tvv′+rm∥∞≤2δRt⋅(∥v′∥∞+∥v∥∞+2∥v′∥∞⋅∥v∥∞+1)
模切换(任意明文模数):输入
c
t
=
(
c
0
,
c
1
)
ct=(c_0,c_1)
ct=(c0,c1),需要满足条件
∥
[
c
0
+
c
1
s
]
Q
k
∥
∞
<
Q
k
/
2
−
q
k
t
(
1
+
δ
R
B
k
e
y
)
/
2
\|[c_0+c_1s]_{Q_{k}}\|_\infty < Q_k/2-q_kt(1+\delta_\mathcal RB_{key})/2
∥[c0+c1s]Qk∥∞<Qk/2−qkt(1+δRBkey)/2,
δ
=
(
t
[
−
c
0
t
−
1
]
q
k
,
t
[
−
c
1
t
−
1
]
q
k
)
c
t
′
=
[
(
c
0
+
δ
0
,
c
1
+
δ
1
)
q
k
]
Q
k
−
1
\begin{aligned} \delta &= (t[-c_0t^{-1}]_{q_k}, t[-c_1t^{-1}]_{q_k})\\ ct' &= \left[\dfrac{(c_0+\delta_0, c_1+\delta_1)}{q_k}\right]_{Q_{k-1}} \end{aligned}
δct′=(t[−c0t−1]qk,t[−c1t−1]qk)=[qk(c0+δ0,c1+δ1)]Qk−1
易知
δ
≡
0
(
m
o
d
t
)
\delta \equiv 0 \pmod t
δ≡0(modt) 以及
δ
≡
−
c
t
(
m
o
d
q
k
)
\delta \equiv -ct \pmod{q_k}
δ≡−ct(modqk),计算
c
t
′
ct'
ct′ 中的除法就是整除,可被替代为乘以逆元,
(
c
0
′
+
c
1
′
s
)
=
[
q
k
−
1
(
(
c
0
+
δ
0
)
+
(
c
1
+
δ
1
)
s
)
]
Q
k
−
1
=
[
q
k
−
1
m
]
t
+
q
k
−
1
(
t
v
+
δ
0
+
δ
1
s
+
r
m
)
∥
v
′
∥
∞
=
∥
v
∥
∞
/
q
k
+
∥
v
m
s
∥
∞
\begin{aligned} (c_0'+c_1's) &= \left[q_k^{-1}((c_0+\delta_0)+ (c_1+\delta_1)s)\right]_{Q_{k-1}}\\ &= [q_k^{-1}m]_t + q_k^{-1}(tv+\delta_0+\delta_1s+r_m)\\ \|v'\|_\infty &= \|v\|_\infty/q_k+\|v_{ms}\|_\infty \end{aligned}
(c0′+c1′s)∥v′∥∞=[qk−1((c0+δ0)+(c1+δ1)s)]Qk−1=[qk−1m]t+qk−1(tv+δ0+δ1s+rm)=∥v∥∞/qk+∥vms∥∞
其中
∥
v
m
s
∥
∞
≤
(
1
+
δ
R
B
k
e
y
)
/
2
\|v_{ms}\|_\infty \le (1+\delta_\mathcal RB_{key})/2
∥vms∥∞≤(1+δRBkey)/2 是额外引入的小噪声,
c
t
′
ct'
ct′ 加密的是扭曲的消息
[
q
k
−
1
m
]
t
[q_k^{-1}m]_t
[qk−1m]t
[GHS12] 变体:使用 Double-CRT 格式存储密文
- 每次模切换,消息
[
m
]
t
[m]_t
[m]t 都被缩放为
[
q
k
−
1
m
]
t
[q_k^{-1}m]_t
[qk−1m]t
- [BGV12] 选取 q i ≡ 1 ( m o d t ) q_i \equiv 1 \pmod t qi≡1(modt),但是这限制了 RNS 素数的选取
- [GHS12] 追踪这个缩放因子(模切换改变它,简单取模不改变它)
- 或者初始加密 [ Q L m ] t [Q_Lm]_t [QLm]t,那么模切换之后自然地成为 [ Q k m ] t [Q_km]_t [Qkm]t
- 加密之后, v f r a s h v_{frash} vfrash 的规模比 v m s v_{ms} vms 的规模大得多,因此 [GHS12] 建议立即执行一次模切换,这可以降低各个 Q k + 1 / Q k Q_{k+1}/Q_k Qk+1/Qk 的比值,从而获得更小的 Q L Q_L QL
- 并非乘法之后模切换,而是在乘法之前模切换,这对其他运算产生的噪声也做了约简控制
BFV
私钥
s
←
χ
s
s \gets \chi_s
s←χs 是短的,RLWE 公钥为
p
k
=
(
[
a
s
+
e
]
Q
,
[
−
a
]
Q
)
∈
R
Q
2
pk=([as+e]_Q, [-a]Q) \in \mathcal R_Q^2
pk=([as+e]Q,[−a]Q)∈RQ2
在原始 BFV 方案采取 MSD 编码,使用缩放因子
Δ
=
⌊
Q
/
t
⌋
\Delta=\lfloor Q/t\rfloor
Δ=⌊Q/t⌋,加密算法为
E
n
c
(
[
m
]
t
)
=
(
u
⋅
p
k
0
+
e
0
+
Δ
[
m
]
t
,
u
⋅
p
k
1
+
e
1
)
∈
R
Q
2
Enc([m]_t) = \left( u \cdot pk_0+e_0+\Delta[m]_t, u \cdot pk_1+e_1\right) \in \mathcal R_Q^2
Enc([m]t)=(u⋅pk0+e0+Δ[m]t,u⋅pk1+e1)∈RQ2
其中
u
←
χ
s
,
e
0
,
e
1
←
χ
e
u \gets \chi_s, e_0,e_1\gets \chi_e
u←χs,e0,e1←χe 都是随机的短元素,新鲜密文的噪声是
v
f
r
e
s
h
=
u
e
+
e
1
s
+
e
0
v_{fresh}=ue+e_1s+e_0
vfresh=ue+e1s+e0,这和 BGV 是一样的。
我们定义
r
t
(
Q
)
=
Q
−
t
Δ
∈
[
0
,
t
)
r_t(Q) = Q-t\Delta \in [0,t)
rt(Q)=Q−tΔ∈[0,t),假设
(
c
0
,
c
1
)
(c_0,c_1)
(c0,c1) 的噪声是
v
v
v,那么
c
0
+
c
1
s
=
Δ
[
m
]
t
+
v
(
m
o
d
Q
)
c_0+c_1s= \Delta[m]_t + v \pmod Q
c0+c1s=Δ[m]t+v(modQ)
纠错时,计算
⌊
t
Q
[
c
0
+
c
1
s
]
Q
⌉
=
⌊
t
Q
(
Δ
[
m
]
t
+
v
)
⌉
=
⌊
(
1
−
r
t
(
Q
)
Q
)
[
m
]
t
+
t
v
Q
⌉
=
[
m
]
t
+
⌊
−
r
t
(
Q
)
Q
[
m
]
t
+
t
v
Q
⌉
\begin{aligned} \left\lfloor \dfrac{t}{Q}[c_0+c_1s]_Q \right\rceil &= \left\lfloor \dfrac{t}{Q}(\Delta[m]_t + v) \right\rceil \\ &= \left\lfloor \left(1-\dfrac{r_t(Q)}{Q}\right)[m]_t + \dfrac{tv}{Q} \right\rceil\\ &= [m]_t + \left\lfloor -\dfrac{r_t(Q)}{Q}[m]_t + \dfrac{tv}{Q} \right\rceil \end{aligned}
⌊Qt[c0+c1s]Q⌉=⌊Qt(Δ[m]t+v)⌉=⌊(1−Qrt(Q))[m]t+Qtv⌉=[m]t+⌊−Qrt(Q)[m]t+Qtv⌉
由于
[
m
]
t
∈
[
−
t
/
2
,
t
/
2
)
[m]_t \in [-t/2,t/2)
[m]t∈[−t/2,t/2),因此解密正确的条件是:
∥
v
∥
∞
<
Q
2
t
−
r
t
(
Q
)
2
\|v\|_\infty < \dfrac{Q}{2t} - \dfrac{r_t(Q)}{2}
∥v∥∞<2tQ−2rt(Q)
对比 BGV 的解密条件
∥
v
∥
∞
<
Q
2
t
−
1
2
\|v\|_\infty < \dfrac{Q}{2t} - \dfrac{1}{2}
∥v∥∞<2tQ−21,由于
Δ
\Delta
Δ 和
Q
/
t
Q/t
Q/t 之间的差距,原始 BFV 的解密临界值比 BGV 偏小。
对于 t = 2 t=2 t=2,素数 q 1 , ⋯ , q k q_1,\cdots,q_k q1,⋯,qk 都满足 r t ( Q ) = 1 r_t(Q)=1 rt(Q)=1,但是对于一般的 t t t(尤其是较大的,如 t = 2 16 + 1 t=2^{16}+1 t=216+1),余数 r t ( Q ) r_t(Q) rt(Q) 的规模将接近 t / 2 t/2 t/2,对噪声增长有较大的贡献。如果强行设置 q i ≡ 1 ( m o d t ) q_i \equiv 1 \pmod t qi≡1(modt),这限制了 RNS 素数的选取;或者放松一些,使得 r t ( Q ) < N r_t(Q)<\sqrt N rt(Q)<N 是个较小的数,但依旧不能根本上解决问题。
同态加法:简记
r
m
=
(
[
m
]
t
+
[
m
′
]
t
−
[
m
+
m
′
]
t
)
/
t
r_m=([m]_t + [m']_t-[m+ m']_t)/t
rm=([m]t+[m′]t−[m+m′]t)/t 是
t
t
t-overflow,满足
∥
r
m
∥
∞
≤
1
\|r_m\|_\infty \le 1
∥rm∥∞≤1
(
c
0
+
c
1
s
)
+
(
c
0
′
+
c
1
′
s
)
=
(
Δ
[
m
]
t
+
v
)
+
(
Δ
[
m
′
]
t
+
v
′
)
=
Δ
[
m
+
m
′
]
t
+
Δ
t
r
m
+
v
+
v
′
=
Δ
[
m
+
m
′
]
t
−
r
t
(
Q
)
r
m
+
v
+
v
′
∥
v
a
d
d
∥
∞
=
∥
v
+
v
′
−
r
t
(
Q
)
r
m
∥
∞
≤
∥
v
∥
∞
+
∥
v
′
∥
∞
+
r
t
(
Q
)
\begin{aligned} (c_0+c_1s)+(c_0'+c_1's) &= (\Delta[m]_t + v)+(\Delta[m']_t + v')\\ &= \Delta[m+m']_t + \Delta tr_m + v+v'\\ &= \Delta[m+m']_t - r_t(Q)r_m + v+v'\\ \|v_{add}\|_\infty &= \|v+v'-r_t(Q)r_m\|_\infty\\ &\le \|v\|_\infty + \|v'\|_\infty + r_t(Q) \end{aligned}
(c0+c1s)+(c0′+c1′s)∥vadd∥∞=(Δ[m]t+v)+(Δ[m′]t+v′)=Δ[m+m′]t+Δtrm+v+v′=Δ[m+m′]t−rt(Q)rm+v+v′=∥v+v′−rt(Q)rm∥∞≤∥v∥∞+∥v′∥∞+rt(Q)
因此原始 BFV 的噪声增长也比 BGV 更大。
同态乘法(不执行重现性化):注意 BFV 的张量运算是在
Z
\mathbb Z
Z 上的(不要模
Q
Q
Q),然后执行缩放
⌊
t
/
Q
⋅
c
t
t
e
n
s
o
r
⌉
\lfloor t/Q \cdot ct_{tensor}\rceil
⌊t/Q⋅cttensor⌉,最后才模掉
Q
Q
Q,简记
r
m
r_m
rm 是
[
m
]
t
⋅
[
m
′
]
t
[m]_t \cdot [m']_t
[m]t⋅[m′]t 的
t
t
t-overflow,简记
k
m
,
k
m
′
k_m,k_m'
km,km′ 是
c
0
+
c
1
s
,
c
0
′
+
c
1
′
c_0+c_1s,c_0'+c_1'
c0+c1s,c0′+c1′ 的
Q
Q
Q-overflow,易知
∥
k
m
∥
∞
<
δ
R
∥
c
1
∥
∞
∥
s
∥
∞
/
Q
<
δ
R
/
2
\|k_m\|_\infty < \delta_\mathcal R\|c_1\|_\infty\|s\|_\infty/Q < \delta_\mathcal R/2
∥km∥∞<δR∥c1∥∞∥s∥∞/Q<δR/2,
(
c
0
+
c
1
s
)
⋅
(
c
0
′
+
c
1
′
s
)
=
(
Δ
[
m
]
t
+
v
+
Q
k
m
)
⋅
(
Δ
[
m
′
]
t
+
v
′
+
Q
k
m
′
)
=
Δ
2
[
m
]
t
⋅
[
m
′
]
t
+
Δ
[
m
]
t
(
v
′
+
Q
k
m
′
)
+
Δ
[
m
′
]
t
(
v
+
Q
k
m
)
+
(
v
+
Q
k
m
)
(
v
′
+
Q
k
m
′
)
=
Q
t
(
Δ
[
m
⋅
m
′
]
t
+
v
t
e
n
s
o
r
+
Q
⋅
k
t
e
n
s
o
r
)
\begin{aligned} (c_0+c_1s)\cdot(c_0'+c_1's) &= (\Delta[m]_t + v + Qk_m)\cdot(\Delta[m']_t + v' + Qk_m')\\ &= \Delta^2[m]_t \cdot [m']_t + \Delta[m]_t(v'+Qk_m') + \Delta[m']_t(v+Qk_m) + (v+Qk_m)(v'+Qk_m')\\ &= \dfrac{Q}{t}(\Delta[m\cdot m']_t + v_{tensor} + Q\cdot k_{tensor}) \end{aligned}
(c0+c1s)⋅(c0′+c1′s)=(Δ[m]t+v+Qkm)⋅(Δ[m′]t+v′+Qkm′)=Δ2[m]t⋅[m′]t+Δ[m]t(v′+Qkm′)+Δ[m′]t(v+Qkm)+(v+Qkm)(v′+Qkm′)=tQ(Δ[m⋅m′]t+vtensor+Q⋅ktensor)
其中的噪声项
v
t
e
n
s
o
r
,
k
t
e
n
s
o
r
v_{tensor},k_{tensor}
vtensor,ktensor 的公式特别复杂。接着执行
t
/
Q
t/Q
t/Q 缩放,舍入运算额外引入噪声
v
r
v_r
vr,最后模掉
Q
Q
Q 消除了
k
t
e
n
s
o
r
k_{tensor}
ktensor 部分,最终噪声是
v
m
u
l
t
=
v
t
e
n
s
o
r
+
v
r
v_{mult} = v_{tensor}+v_r
vmult=vtensor+vr,它的范数上界公式及其复杂,详见 [KPZ21] 推导。
原始 BFV 不需要缩放/模切换(隐式地嵌入到了同态乘法中),但是如果使用 GHS 秘钥切换,需要从 [ c ] P Q [c]_{PQ} [c]PQ 缩放到 [ c / P ] Q [c/P]_{Q} [c/P]Q,这依旧需要用到 Scale 过程。类似于 BGV 的兼容 Full-RNS 的模切换,计算差距 δ \delta δ 使得 c + δ c+\delta c+δ 被 P P P 整除,但是简单设置 δ = [ [ c ] P ] P Q \delta=[[c]_P]_{PQ} δ=[[c]P]PQ 即可(因为 BFV 是 MSD 编码的,而 BGV 还要考虑对 [ c ] t [c]_t [c]t 的保护)。算法如下:
- 输入 c = ( c 0 , c 1 ) ∈ R P Q c=(c_0,c_1) \in \mathcal R_{PQ} c=(c0,c1)∈RPQ,我们试图计算 c ′ = ⌊ c / P ⌉ c'=\lfloor c/P \rceil c′=⌊c/P⌉(Lift 到 Z \mathbb Z Z 上)
- 计算 δ = ( [ c 0 ] P , [ c 1 ] P ) \delta = ([c_0]_P,[c_1]_P) δ=([c0]P,[c1]P),扩展到 [ δ ] P Q [\delta]_{PQ} [δ]PQ 上(需要使用 RNS Basis Externsion,从基 P P P 到基 Q Q Q)
- 此时 P ∣ ( c + δ ) P \mid (c+\delta) P∣(c+δ),计算出 c ′ = [ ( c + δ ) ⋅ P − 1 ] Q c'=[(c+\delta)\cdot P^{-1}]_Q c′=[(c+δ)⋅P−1]Q,它恰好就是 ( [ c ] P Q + δ ) / P ([c]_{PQ}+\delta)/P ([c]PQ+δ)/P 的精确值(落在 [ − Q / 2 , Q / 2 ) [-Q/2,Q/2) [−Q/2,Q/2) 内,不取模)
Multiply LSD and MSD
事实上,BGV 和 BFV 之间最大的不同,就是所采取的编码方式,这导致了不同的噪声控制技术。[AP13] 证明了 LSD 和 MSD 是等价的,只要 gcd ( t , Q ) = 1 \gcd(t,Q)=1 gcd(t,Q)=1,那么两者之间可以相互转化(BGV 和 BFV 密文的转换)
[CP16] 指出 LSD-form Ciphertext 和 MSD-form Ciphertext 之间存在三种同态乘法,分别是:LSD x LSD、LSD x MSD、MSD x MSD。不过文中介绍的主要是它设计的算法库如何使用(全是他们设计的伪代码),并没有详细介绍原理。LSD x LSD 和 LSD x MSD 的效率类似,而 MSD x MSD 的效率则低得多(要 Lift 到 Z \mathbb Z Z 上,计算缩放和舍入)
这里推导下 LSD x MSD 形式的乘法,
c
(
s
)
=
[
m
]
t
+
t
v
+
Q
k
m
c
′
(
s
)
=
Δ
[
m
′
]
t
+
v
′
+
Q
k
m
′
\begin{aligned} c(s) &= [m]_t + tv + Qk_m\\ c'(s) &= \Delta[m']_t + v' + Qk_m' \end{aligned}
c(s)c′(s)=[m]t+tv+Qkm=Δ[m′]t+v′+Qkm′
类似于 LSD x LSD,张量积可以直接在
R
Q
\mathcal R_Q
RQ 中计算(因为不需要缩放,所以不需要 Lift 到够大的
Z
P
Q
\mathbb Z_{PQ}
ZPQ 上模拟
Z
\mathbb Z
Z),
c
(
s
)
⋅
c
′
(
s
)
=
(
[
m
]
t
+
t
v
)
⋅
(
Δ
[
m
′
]
t
+
v
′
)
=
Δ
(
[
m
⋅
m
′
]
t
+
r
m
t
)
+
[
m
]
t
v
′
+
t
Δ
[
m
′
]
t
v
+
t
v
v
′
(
m
o
d
Q
)
\begin{aligned} c(s) \cdot c'(s) &= ([m]_t + tv)\cdot (\Delta[m']_t + v' )\\ &= \Delta([m \cdot m']_t + r_mt) + [m]_tv' + t\Delta[m']_tv + tvv' \pmod Q \end{aligned}
c(s)⋅c′(s)=([m]t+tv)⋅(Δ[m′]t+v′)=Δ([m⋅m′]t+rmt)+[m]tv′+tΔ[m′]tv+tvv′(modQ)
计算结果是 MSD-form 的,因为
t
Δ
=
Q
−
r
t
(
Q
)
t\Delta=Q-r_t(Q)
tΔ=Q−rt(Q),噪声为
v
t
e
n
s
o
r
=
[
m
]
t
v
′
−
r
t
(
Q
)
(
r
m
+
[
m
′
]
t
v
)
+
t
v
v
′
v_{tensor} = [m]_tv' -r_t(Q)(r_m + [m']_tv) + tvv'
vtensor=[m]tv′−rt(Q)(rm+[m′]tv)+tvv′
噪声增长也与
r
t
(
Q
)
r_t(Q)
rt(Q) 有关,需要控制它。使用下文的技术,可以修改 MSD-form 的加密方式,移除
Δ
\Delta
Δ 导致的
r
t
(
Q
)
r_t(Q)
rt(Q),
c
(
s
)
⋅
c
′
(
s
)
=
(
[
m
]
t
+
t
v
)
⋅
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
)
=
Q
t
(
[
m
⋅
m
′
]
t
+
r
m
t
)
+
[
m
]
t
(
ϵ
′
+
v
′
)
+
Q
[
m
′
]
t
v
+
t
v
(
ϵ
′
+
v
′
)
(
m
o
d
Q
)
v
t
e
n
s
o
r
=
[
m
]
t
(
ϵ
+
v
′
)
+
t
v
(
ϵ
′
+
v
′
)
\begin{aligned} c(s) \cdot c'(s) &= ([m]_t + tv)\cdot (\frac{Q}{t}[m']_t + \epsilon' + v' )\\ &= \frac{Q}{t}([m \cdot m']_t + r_mt) + [m]_t(\epsilon'+v') + Q[m']_tv + tv(\epsilon'+v') \pmod Q\\ v_{tensor} &= [m]_t(\epsilon+v') + tv(\epsilon'+v') \end{aligned}
c(s)⋅c′(s)vtensor=([m]t+tv)⋅(tQ[m′]t+ϵ′+v′)=tQ([m⋅m′]t+rmt)+[m]t(ϵ′+v′)+Q[m′]tv+tv(ϵ′+v′)(modQ)=[m]t(ϵ+v′)+tv(ϵ′+v′)
Modified BFV
Remove Δ \Delta Δ
[KPZ21] 将原始 BFV 使用的
Δ
\Delta
Δ 移除,加密算法修改为更加自然的方式:
E
n
c
(
[
m
]
t
)
=
(
p
k
0
⋅
u
+
e
0
+
⌊
Q
t
[
m
]
t
⌉
,
p
k
1
⋅
u
+
e
1
)
∈
R
Q
2
Enc([m]_t) = \left( pk_0\cdot u+e_0+\left\lfloor\dfrac{Q}{t}[m]_t\right\rceil, pk_1 \cdot u+e_1\right) \in \mathcal R_Q^2
Enc([m]t)=(pk0⋅u+e0+⌊tQ[m]t⌉,pk1⋅u+e1)∈RQ2
其中的
⌊
Q
t
[
m
]
t
⌉
(
m
o
d
Q
)
\left\lfloor\frac{Q}{t}[m]_t\right\rceil \pmod Q
⌊tQ[m]t⌉(modQ) 可以直接在 RNS 下计算:
⌊
Q
t
[
m
]
t
⌉
=
Q
[
m
]
t
−
[
Q
m
]
t
t
=
[
Q
m
]
t
⋅
(
−
t
−
1
)
(
m
o
d
Q
)
\left\lfloor\frac{Q}{t}[m]_t\right\rceil = \frac{Q[m]_t - [Qm]_t}{t} = [Qm]_t \cdot (-t^{-1}) \pmod Q
⌊tQ[m]t⌉=tQ[m]t−[Qm]t=[Qm]t⋅(−t−1)(modQ)
其中的
[
Q
]
t
[Q]_t
[Q]t 和
[
−
t
−
1
]
Q
[-t^{-1}]_Q
[−t−1]Q 的 RNS 表示,都是预计算的。
我们简记
⌊
[
m
]
t
Q
/
t
⌉
=
[
m
]
t
Q
/
t
+
ϵ
\lfloor [m]_tQ/t \rceil = [m]_tQ/t + \epsilon
⌊[m]tQ/t⌉=[m]tQ/t+ϵ,易知
∥
ϵ
∥
∞
≤
1
/
2
\|\epsilon\|_\infty \le 1/2
∥ϵ∥∞≤1/2,假设
v
v
v 是密文噪声,
k
k
k 是线性解密的
Q
Q
Q-overflow,
⌊
t
Q
[
c
0
+
c
1
s
]
Q
⌉
=
⌊
t
Q
(
Q
t
[
m
]
t
+
ϵ
+
v
+
k
Q
)
⌉
=
[
m
]
t
+
t
k
+
⌊
t
Q
(
ϵ
+
v
)
⌉
\begin{aligned} \left\lfloor\dfrac{t}{Q}[c_0+c_1s]_Q\right\rceil &= \left\lfloor\dfrac{t}{Q}\left( \dfrac{Q}{t}[m]_t+\epsilon+v+kQ \right)\right\rceil\\ &= [m]_t + tk + \left\lfloor\dfrac{t}{Q}(\epsilon+v )\right\rceil \end{aligned}
⌊Qt[c0+c1s]Q⌉=⌊Qt(tQ[m]t+ϵ+v+kQ)⌉=[m]t+tk+⌊Qt(ϵ+v)⌉
解密正确的条件是:
∥
t
Q
(
ϵ
+
v
)
∥
∞
<
1
/
2
⟹
∥
v
∥
∞
<
Q
2
t
−
1
2
\left\|\dfrac{t}{Q}(\epsilon+v )\right\|_\infty<1/2 \Longrightarrow \|v\|_\infty < \dfrac{Q}{2t}-\dfrac{1}{2}
Qt(ϵ+v)
∞<1/2⟹∥v∥∞<2tQ−21
这与 BGV 的解密临界值是完全相同的了。同理,同态加法的噪声也与 BGV 的完全一样:
(
c
0
+
c
1
s
)
+
(
c
0
′
+
c
1
′
s
)
=
(
Q
t
[
m
]
t
+
ϵ
+
v
)
+
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
)
=
Q
t
(
[
m
+
m
′
]
t
+
r
m
t
)
+
v
+
v
′
+
ϵ
+
ϵ
′
(
m
o
d
Q
)
∥
v
a
d
d
−
n
e
w
∥
∞
=
∥
v
+
v
′
+
ϵ
+
ϵ
′
∥
∞
≤
∥
v
∥
∞
+
∥
v
′
∥
∞
+
1
\begin{aligned} (c_0+c_1s)+(c_0'+c_1's) &= (\frac{Q}{t}[m]_t +\epsilon + v)+(\frac{Q}{t}[m']_t +\epsilon' + v')\\ &= \frac{Q}{t}([m+m']_t+r_mt) +v+v'+\epsilon+\epsilon' \pmod Q\\ \|v_{add-new}\|_\infty &= \|v+v'+\epsilon+\epsilon'\|_\infty\\ &\le \|v\|_\infty + \|v'\|_\infty + 1 \end{aligned}
(c0+c1s)+(c0′+c1′s)∥vadd−new∥∞=(tQ[m]t+ϵ+v)+(tQ[m′]t+ϵ′+v′)=tQ([m+m′]t+rmt)+v+v′+ϵ+ϵ′(modQ)=∥v+v′+ϵ+ϵ′∥∞≤∥v∥∞+∥v′∥∞+1
同态乘法的噪声,也被移除了
r
t
(
Q
)
r_t(Q)
rt(Q) 导致的噪声增长,
(
c
0
+
c
1
s
)
⋅
(
c
0
′
+
c
1
′
s
)
=
(
Q
t
[
m
]
t
+
ϵ
+
v
+
Q
k
m
)
⋅
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
+
Q
k
m
′
)
=
Q
t
(
Q
t
[
m
]
t
⋅
[
m
′
]
t
+
[
m
]
t
(
ϵ
′
+
v
′
+
Q
k
m
′
)
+
[
m
′
]
t
(
ϵ
+
v
+
Q
k
m
)
)
+
(
ϵ
+
v
+
Q
k
m
)
(
ϵ
′
+
v
′
+
Q
k
m
′
)
=
Q
t
(
Q
t
[
m
⋅
m
′
]
t
+
v
t
e
n
s
o
r
−
n
e
w
+
Q
⋅
k
t
e
n
s
o
r
−
n
e
w
)
∈
R
\begin{aligned} (c_0+c_1s)\cdot(c_0'+c_1's) &= (\frac{Q}{t}[m]_t + \epsilon + v + Qk_m)\cdot(\frac{Q}{t}[m']_t + \epsilon' + v' + Qk_m')\\ &= \frac{Q}{t}\left(\frac{Q}{t}[m]_t \cdot [m']_t + [m]_t(\epsilon'+v'+Qk_m') + [m']_t(\epsilon+v+Qk_m)\right) + (\epsilon+v+Qk_m)(\epsilon'+v'+Qk_m')\\ &= \dfrac{Q}{t}(\dfrac{Q}{t}[m\cdot m']_t + v_{tensor-new} + Q\cdot k_{tensor-new}) \in \mathcal R \end{aligned}
(c0+c1s)⋅(c0′+c1′s)=(tQ[m]t+ϵ+v+Qkm)⋅(tQ[m′]t+ϵ′+v′+Qkm′)=tQ(tQ[m]t⋅[m′]t+[m]t(ϵ′+v′+Qkm′)+[m′]t(ϵ+v+Qkm))+(ϵ+v+Qkm)(ϵ′+v′+Qkm′)=tQ(tQ[m⋅m′]t+vtensor−new+Q⋅ktensor−new)∈R
其中的
v
t
e
n
s
o
r
−
n
e
w
,
k
t
e
n
s
o
r
−
n
e
w
v_{tensor-new},k_{tensor-new}
vtensor−new,ktensor−new 依旧是较为复杂的式子(详见 [KPZ21]),上式在
R
\mathcal R
R(不要取模)中的主项是
Q
2
k
m
k
m
′
Q^2k_mk_m'
Q2kmkm′,缩放
t
/
Q
t/Q
t/Q 之后的主项是
Q
t
k
m
k
m
′
Qtk_mk_m'
Qtkmkm′,紧接着的舍入引入噪声
v
r
v_r
vr,模
Q
Q
Q 消除
k
t
e
n
s
o
r
−
n
e
w
k_{tensor-new}
ktensor−new 的部分,最终的噪声为
v
m
u
l
t
−
n
e
w
=
v
t
e
n
s
o
r
−
n
e
w
+
v
r
v_{mult-new}=v_{tensor-new}+v_r
vmult−new=vtensor−new+vr,它的范数上界是个很复杂的式子(移除了
r
t
(
Q
)
r_t(Q)
rt(Q) 的影响,实际上接近 BGV 的界)
Enc with larger modulus
类似于 GHS-BGV,它加密之后立即模切换,将噪声从 v f r e s h v_{fresh} vfresh 降低到 v m s v_{ms} vms 水平。[KPZ21] 也使用类似的技术,在 Q p Qp Qp 上加密,然后使用 Scale 过程回到 Q Q Q 上。
我们首先在
Q
′
=
Q
p
Q'=Qp
Q′=Qp(噪声比率下降了)上执行
E
n
c
(
[
m
]
t
)
Enc([m]_t)
Enc([m]t),获得密文
c
t
f
r
e
s
h
ct_{fresh}
ctfresh,噪声为
v
f
r
e
s
h
v_{fresh}
vfresh,接着使用 Scale 过程缩放
1
/
p
1/p
1/p,
c
t
s
c
a
l
e
=
⌊
c
t
p
⌉
(
m
o
d
Q
)
∥
v
s
c
a
l
e
∥
∞
≤
∥
v
f
r
e
s
h
∥
∞
p
+
1
2
p
+
1
+
δ
R
B
k
e
y
2
\begin{aligned} ct_{scale} &= \left\lfloor \frac{ct}{p} \right\rceil \pmod Q\\ \|v_{scale}\|_\infty &\le \frac{\|v_{fresh}\|_\infty}{p} + \frac{1}{2p} + \frac{1+\delta_\mathcal R B_{key}}{2} \end{aligned}
ctscale∥vscale∥∞=⌊pct⌉(modQ)≤p∥vfresh∥∞+2p1+21+δRBkey
选取合适的
p
p
p,使得缩放后的噪声降低为
∥
v
s
c
a
l
e
∥
∞
≈
(
1
+
δ
R
B
k
e
y
)
/
2
\|v_{scale}\|_\infty \approx (1+\delta_\mathcal R B_{key})/2
∥vscale∥∞≈(1+δRBkey)/2,使得它接近 Scale 过程本身带来的噪声项。如果采用 GHS Key-Switch,那么
p
p
p 可以复用临时模数
P
P
P 中的某个 RNS 基,从而不影响安全性。
Modified Multiplication
因为 BFV 需要在 Z \mathbb Z Z 上计算 tensor 运算,因此对于 RNS 系统,需要选取一个合适的 P P P(这和 GHS Key-Switch 使用的不同),使得 c t ( s ) ⋅ c t ( s ′ ) ∈ R ct(s) \cdot ct(s') \in \mathcal R ct(s)⋅ct(s′)∈R 的系数不回绕 P Q PQ PQ,并且缩放后的主项 Q t k m k m ′ Qtk_mk_m' Qtkmkm′ 不回绕 P P P,因此需要设置 P > t δ R 3 Q / 4 P > t\delta_\mathcal R^3 Q/4 P>tδR3Q/4。一般地 t ≤ 2 30 , N ≤ 2 14 t \le 2^{30}, N \le 2^{14} t≤230,N≤214,那么 t δ R 3 / 4 ≤ 2 52 t\delta_\mathcal R^3/4 \le 2^{52} tδR3/4≤252。令 Q , P Q,P Q,P 分别分解为 k , l k,l k,l 个规模尽可能大(一般是 2 60 2^{60} 260,令 RNS 中的 NTT 更少) 的素数,实际中设置 l = k + 1 l=k+1 l=k+1 即可。
RNS 下的原始 BFV 乘法:
[KPZ21] 提出,并非两个模数 Q Q Q 下的密文做张量积(它的主项是 Q 2 Q^2 Q2 的倍数,需要 P Q PQ PQ 够大从而不回绕),而是一个是模数 P P P 下的、另一个是模数 Q Q Q 下的,此时密文张量积的主项是 P Q PQ PQ 的倍数,可以被 ( m o d P Q ) \pmod{PQ} (modPQ) 正确地消除,从而 P P P 只需要满足其他较小的项不回绕即可,它的规模可以减小。
给定两个密文
c
,
c
′
∈
R
Q
c,c' \in \mathcal R_Q
c,c′∈RQ,首先对
c
c
c 进行缩放,
c
^
=
⌊
P
Q
c
⌉
∈
R
P
\hat c = \left\lfloor \frac{P}{Q} c \right\rceil \in \mathcal R_P
c^=⌊QPc⌉∈RP
简记
ϵ
^
=
(
c
^
−
P
/
Q
⋅
c
)
(
s
)
\hat \epsilon = (\hat c-P/Q\cdot c)(s)
ϵ^=(c^−P/Q⋅c)(s) 是上述舍入导致的噪声,上界是
(
1
+
δ
R
B
k
e
y
)
/
2
(1+\delta_\mathcal R B_{key})/2
(1+δRBkey)/2,那么
c
^
(
s
)
=
P
t
[
m
]
t
+
P
Q
(
ϵ
+
v
)
+
P
k
m
+
ϵ
^
\hat c(s) = \frac{P}{t}[m]_t + \frac{P}{Q}(\epsilon + v) + Pk_m + \hat \epsilon
c^(s)=tP[m]t+QP(ϵ+v)+Pkm+ϵ^
于是新的密文张量的运算是:
(
P
t
[
m
]
t
+
P
Q
(
ϵ
+
v
)
+
P
k
m
+
ϵ
^
)
⋅
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
+
Q
k
m
′
)
=
P
t
(
Q
t
[
m
⋅
m
′
]
t
+
Q
r
m
+
[
m
]
t
(
ϵ
′
+
v
′
+
Q
k
m
′
)
)
+
(
P
Q
(
ϵ
+
v
)
+
ϵ
^
)
⋅
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
)
+
(
P
Q
(
ϵ
+
v
)
+
ϵ
^
)
⋅
Q
k
m
′
+
P
k
m
⋅
(
Q
t
[
m
′
]
t
+
ϵ
′
+
v
′
)
+
P
Q
k
m
k
m
′
(
m
o
d
P
Q
)
\begin{aligned} &\,\, \left(\frac{P}{t}[m]_t + \frac{P}{Q}(\epsilon + v) + Pk_m + \hat \epsilon\right) \cdot \left(\frac{Q}{t}[m']_t + \epsilon' + v' + Qk_m'\right)\\ &= \frac{P}{t} \left(\frac{Q}{t}[m \cdot m']_t + Qr_m + [m]_t(\epsilon' + v' + Qk_m') \right) +\left(\frac{P}{Q}(\epsilon + v) + \hat \epsilon\right) \cdot \left(\frac{Q}{t}[m']_t + \epsilon' + v'\right) \\ &+ \left(\frac{P}{Q}(\epsilon + v) + \hat \epsilon\right) \cdot Qk_m' + Pk_m \cdot \left(\frac{Q}{t}[m']_t + \epsilon' + v'\right) + PQk_mk_m' \pmod{PQ} \end{aligned}
(tP[m]t+QP(ϵ+v)+Pkm+ϵ^)⋅(tQ[m′]t+ϵ′+v′+Qkm′)=tP(tQ[m⋅m′]t+Qrm+[m]t(ϵ′+v′+Qkm′))+(QP(ϵ+v)+ϵ^)⋅(tQ[m′]t+ϵ′+v′)+(QP(ϵ+v)+ϵ^)⋅Qkm′+Pkm⋅(tQ[m′]t+ϵ′+v′)+PQkmkm′(modPQ)
其中的主项
P
Q
k
m
k
m
′
≡
0
(
m
o
d
P
Q
)
PQk_mk_m' \equiv 0 \pmod{PQ}
PQkmkm′≡0(modPQ) 可被消除,只要其他部分不回绕
P
Q
PQ
PQ 即可。接着对上述的
c
^
t
e
n
s
o
r
\hat c_{tensor}
c^tensor 缩放
t
/
P
t/P
t/P 回到
Q
Q
Q 上,它的噪声比
v
m
u
l
t
−
n
e
w
v_{mult-new}
vmult−new 额外增加了一项(详见 [KPZ21]),但是只要选取
P
≈
Q
P \approx Q
P≈Q 即可使得额外的这项的规模降低为
t
δ
R
3
/
4
t\delta_\mathcal R^3/4
tδR3/4。随着 BFV 的计算(除了新鲜密文的噪声规模仅为
δ
R
/
2
\delta_\mathcal R/2
δR/2),密文中的噪声会远大于这个数(注意 BGV 控制噪声的绝对大小,而 BFV 的噪声则一直在变大),因此额外的噪声项可以被忽略。因此选取
l
=
k
l = k
l=k 即可,这减小了基
P
P
P 的 RNS 系统中的一个分量。
新的 RNS 下的 BFV 乘法:
在原始乘法中,初始时将 c , c ′ c,c' c,c′(degree-1)扩展到 P Q PQ PQ 需要 4 4 4 次 RNS 扩展,缩放 c t e n s o r c_{tensor} ctensor(degree-2)时把 [ δ ] P [\delta]_P [δ]P 扩展到 [ δ ] P Q [\delta]_{PQ} [δ]PQ 需要 3 3 3 次 RNS 扩展,最后 c s c a l e c_{scale} cscale(degree-2)从 P P P 回到 Q Q Q 再需要 3 3 3 次 RNS 扩展,共计 10 10 10 个。[KPZ21] 的乘法中,初始将 c c c 切换到 P P P 需要 2 2 2 次 RNS 扩展,将 c ^ , c ′ \hat c,c' c^,c′ 扩展到 P Q PQ PQ 需要 4 4 4 次 RNS 扩展,最后的缩放 c ^ t e n s o r \hat c_{tensor} c^tensor 的过程需要 3 3 3 次 RNS 扩展,它的结果已经是 Q Q Q 下的(不再需要 RNS 扩展),共计 9 9 9 个。此外,新算法的临时模数 P P P 也略小(一个 RNS 分量)。
Level Multiplication
此外,类似于 [GHS12] 的 BGV 变体,我们可以动态估计噪声,然后在 BFV 乘法的内部执行 ScaleDown 和 ScaleUp,在较小的模数 Q l ≤ Q Q_l \le Q Ql≤Q 上执行同态乘法(RNS 的分量更少,使得 NTT 和 RNS Basis Extersion 都更快)
假设两密文的噪声为
v
,
v
′
v,v'
v,v′,缩放后的噪声是
v
^
=
Q
l
Q
v
+
ϵ
,
v
^
′
=
Q
l
Q
v
′
+
ϵ
′
\hat v = \frac{Q_l}{Q}v + \epsilon,\,\, \hat v' = \frac{Q_l}{Q}v' + \epsilon'
v^=QQlv+ϵ,v^′=QQlv′+ϵ′
其中的
ϵ
,
ϵ
′
\epsilon,\epsilon'
ϵ,ϵ′ 是缩放时的舍入噪声,规模
(
1
+
δ
R
B
k
e
y
)
/
2
≈
δ
R
/
2
(1+\delta_\mathcal R B_{key})/2 \approx \delta_\mathcal R/2
(1+δRBkey)/2≈δR/2,因此我们应当选取合适的
Q
l
Q_l
Ql,使得缩放后的噪声
Q
l
Q
v
\frac{Q_l}{Q}v
QQlv 的范数远比
δ
R
/
2
\delta_\mathcal R/2
δR/2 大(从而令舍入噪声
ϵ
\epsilon
ϵ 的影响不算大)。[KPZ21] 给出的建议是,选取
Q
l
Q_l
Ql 为满足下式的、尽可能小的模数,
∥
v
∥
∞
>
8
Q
δ
R
Q
l
\|v\|_\infty > \frac{8Q\delta_\mathcal R}{Q_l}
∥v∥∞>Ql8QδR
为了估计
v
v
v 的(平均)规模,[KPZ21] 使用了最坏噪声估计,额外添加一个启发式的缓冲(heuristic “cushion” to worst-case bound)。
Level BFV 的同态乘法:
上述的 Modulus-Switch,既可以是精确的(使用 [HPS19] 的浮点纠错技术),也可以是近似的(携带着 Q Q Q-overflow, u < k / 2 u < k/2 u<k/2),后者需要估计噪声 v v v 时额外添加 log k \log k logk 比特。
这个 “Leveled optimization” 也可以应用到其他过程上,比如 Key-Switch,不过 Q l Q_l Ql 的选取规则改变为:使得缩放后的噪声 v ^ \hat v v^ 远大于 v k s v_{ks} vks,从而保证秘钥切换过程本身对噪声增长的贡献可忽略。
BFV Optimizations
Lazy Scaling
在 RNS 下每一次 Scale 过程需要花费一次 RNS Basis Externsion,对于内积运算,我们可以将它们延迟到最后统一执行,并非每次乘法之后立即执行。好处有两个:复杂度降低、噪声下降(每次 Scale 本身会引入一定的噪声)。
[KPZ21] 测试后发现,这导致了 2x 加速。
Digit Decomposition Technique for RNS
[HPS19] 的 BFV 变体,它使用了浮点指令来纠正 RNS Basis Externsion、Scale 中的错误。对于后者,给定
x
∈
Z
Q
x \in \mathbb Z_Q
x∈ZQ,计算
y
=
⌊
t
/
Q
⋅
x
⌉
∈
Z
t
y=\lfloor t/Q \cdot x\rceil \in \mathbb Z_t
y=⌊t/Q⋅x⌉∈Zt 的公式为:
y
=
⌊
t
Q
⋅
x
⌉
=
⌊
t
Q
⋅
∑
i
=
1
k
x
i
⋅
q
i
∗
⋅
q
~
i
−
u
⋅
t
⌉
=
⌊
∑
i
=
1
k
x
i
⋅
(
t
q
i
⋅
q
~
i
)
⌉
−
u
⋅
t
(
m
o
d
t
)
\begin{aligned} y &= \left\lfloor \dfrac{t}{Q} \cdot x \right\rceil = \left\lfloor \dfrac{t}{Q} \cdot \sum_{i=1}^k x_i \cdot q_i^* \cdot \tilde q_i - u \cdot t \right\rceil\\ &= \left\lfloor \sum_{i=1}^k x_i \cdot \left(\dfrac{t}{q_i} \cdot \tilde q_i\right) \right\rceil - u \cdot t \pmod{t}\\ \end{aligned}
y=⌊Qt⋅x⌉=⌊Qt⋅i=1∑kxi⋅qi∗⋅q~i−u⋅t⌉=⌊i=1∑kxi⋅(qit⋅q~i)⌉−u⋅t(modt)
[HPS19] 预计算其中的常数,分为整数和小数两部分,
t
q
i
⋅
[
q
~
i
]
q
i
=
ω
i
+
θ
i
,
ω
i
∈
Z
t
,
θ
i
∈
[
−
0.5
,
0.5
)
\dfrac{t}{q_i}\cdot[\tilde q_i]_{q_i} = \omega_{i}+\theta_{i},\,\, \omega_{i} \in \mathbb Z_{t},\,\, \theta_{i} \in [-0.5,0.5)
qit⋅[q~i]qi=ωi+θi,ωi∈Zt,θi∈[−0.5,0.5)
小数部分使用浮点表示
θ
i
∗
=
θ
i
+
ϵ
i
,
∣
ϵ
i
∣
<
ϵ
\theta_i^*=\theta_i+\epsilon_i, |\epsilon_i|<\epsilon
θi∗=θi+ϵi,∣ϵi∣<ϵ(如果使用 IEEE-754 double 则误差规模是
ϵ
=
2
−
53
\epsilon=2^{-53}
ϵ=2−53),计算出的
v
∗
=
⌊
∑
i
=
1
k
x
i
(
ω
i
+
θ
i
∗
)
⌉
v^*=\left\lfloor \sum_{i=1}^k x_i (\omega_{i}+\theta_{i}^*) \right\rceil
v∗=⌊∑i=1kxi(ωi+θi∗)⌉ 可能会和
v
=
⌊
∑
i
=
1
k
x
i
(
ω
i
+
θ
i
)
⌉
v=\left\lfloor \sum_{i=1}^k x_i (\omega_{i}+\theta_{i}) \right\rceil
v=⌊∑i=1kxi(ωi+θi)⌉ 有差异。假如我们约束
y
=
⌊
t
Q
⋅
x
⌉
y = \left\lfloor \frac{t}{Q} \cdot x \right\rceil
y=⌊Qt⋅x⌉ 满足
y
(
m
o
d
Z
)
∈
[
−
1
/
4
,
1
/
4
]
y \pmod{\mathbb Z} \in [-1/4,1/4]
y(modZ)∈[−1/4,1/4](控制密文中的噪声规模小于
Q
/
4
t
Q/4t
Q/4t,而非通常的
Q
/
2
t
Q/2t
Q/2t),那么只要累积误差满足
∣
∑
i
x
i
ϵ
i
∣
<
1
/
4
|\sum_i x_i \epsilon_i| < 1/4
∣∑ixiϵi∣<1/4(精度足够高的浮点数),就总是可以正确舍入(
v
=
v
∗
v=v^*
v=v∗)
浮点数的精度要求是: ϵ < 1 2 k q m \epsilon < \frac{1}{2kq_m} ϵ<2kqm1,其中 q m q_m qm 是 RNS 模数的规模,一般而言 k < 32 k<32 k<32,假如 q m > 2 47 q_m > 2^{47} qm>247,那么就需要 ϵ < 2 − 53 \epsilon<2^{-53} ϵ<2−53(IEEE-754 double 精度不够了,需要使用更高精度的)。[KPZ21] 提出了一种通用目的数字分解技术(类似于 BV Key-Switch),降低 q m q_m qm 的规模,从而只需要常规的单精度数据类型:选取 base B s ≥ 2 B_s \ge 2 Bs≥2,设置 d s = ⌈ log B s ( q m ) ⌉ d_s=\lceil \log_{B_s}(q_m)\rceil ds=⌈logBs(qm)⌉,将 x i ∈ [ − q m / 2 , q m / 2 ) x_i \in [-q_m/2,q_m/2) xi∈[−qm/2,qm/2) 分解为 ∑ j = 0 d s − 1 x i j B s j \sum_{j=0}^{d_s-1} x_{ij} B_s^j ∑j=0ds−1xijBsj,其中 x i j ∈ [ 0 , B s ) x_{ij} \in [0,B_s) xij∈[0,Bs)(符号怎么处理?)
那么 Scale 过程的公式为:
y
=
⌊
∑
i
=
1
k
∑
j
=
0
d
s
−
1
x
i
j
(
B
s
j
⋅
t
q
~
i
q
i
)
⌉
−
u
⋅
t
(
m
o
d
t
)
\begin{aligned} y &= \left\lfloor \sum_{i=1}^k \sum_{j=0}^{d_s-1} x_{ij} \left(B_s^j \cdot \dfrac{t\tilde q_i}{q_i}\right) \right\rceil - u \cdot t \pmod t \end{aligned}
y=⌊i=1∑kj=0∑ds−1xij(Bsj⋅qitq~i)⌉−u⋅t(modt)
类似的,预计算
t
q
i
⋅
[
q
~
i
B
s
j
]
q
i
=
ω
i
j
+
θ
i
j
,
ω
i
j
∈
Z
t
,
θ
i
j
∈
[
−
0.5
,
0.5
)
\dfrac{t}{q_i} \cdot [\tilde q_iB_s^j]_{q_i} = \omega_{ij}+\theta_{ij},\,\, \omega_{ij} \in \mathbb Z_{t},\,\, \theta_{ij} \in [-0.5,0.5)
qit⋅[q~iBsj]qi=ωij+θij,ωij∈Zt,θij∈[−0.5,0.5)
其中的
θ
i
j
\theta_{ij}
θij 被近似表示为
θ
i
j
∗
\theta_{ij}^*
θij∗,在线计算
v
∗
=
⌊
∑
i
=
1
k
∑
j
=
0
d
s
−
1
x
i
j
(
ω
i
j
+
θ
i
j
∗
)
⌉
v^* = \left\lfloor \sum_{i=1}^k \sum_{j=0}^{d_s-1} x_{ij} (\omega_{ij}+\theta_{ij}^*) \right\rceil
v∗=⌊∑i=1k∑j=0ds−1xij(ωij+θij∗)⌉,累积误差是
∣
∑
i
∑
j
x
i
j
ϵ
i
j
∣
<
k
d
s
B
s
ϵ
<
1
/
4
|\sum_i\sum_j x_{ij}\epsilon_{ij}| < kd_sB_s\epsilon < 1/4
∣∑i∑jxijϵij∣<kdsBsϵ<1/4,浮点精度只需满足
ϵ
<
1
4
k
d
s
B
s
\epsilon<\frac{1}{4kd_sB_s}
ϵ<4kdsBs1 即可
一般地 q m ≤ 2 63 q_m \le 2^{63} qm≤263,因此设置 d s = 2 d_s=2 ds=2 即可,对应的 B s ≈ 2 32 B_s \approx 2^{32} Bs≈232,带入 k ≤ 32 k \le 32 k≤32,计算出 ϵ < 2 − 40 \epsilon < 2^{-40} ϵ<2−40(IEEE-754 double)
上述分解技术可以应用到 mixed integer/floating-poinit 的其他 RNS 操作中。另外,计算 ∣ ∑ i ∑ j x i j w i j ∣ < k d s B s t |\sum_i\sum_j x_{ij}w_{ij}| < kd_sB_st ∣∑i∑jxijwij∣<kdsBst,只要它不大于 2 64 2^{64} 264,完全可以累积在 long int 中(不立即取模),直到最后才统一模掉 t t t
BGV Optimizations
[GHS12] 使用 dynamic noise estimation,以确定什么是否需要做模切换,以及模切换的缩放因子是多少。但是这导致了 BGV 的对于噪声估计错误的脆弱性:BGV 是 LSD 编码的,每次的缩放因子 q k q_k qk 大约就是噪声规模。而 BFV 的鲁棒性好很多:它是 MSD 编码的,缩放因子 Q / t Q/t Q/t 是很大的,只需要预设乘法深度,并不需要实时估计噪声规模。
[KPZ21] 为了使得 BGV 更加 Usable(主要是易用,但是性能比 GHS 的差),设置了一个恒定的噪声水平 ∥ v c ∥ ∞ ≈ 1 + δ R B k e y \|v_c\|_\infty \approx 1+\delta_\mathcal RB_{key} ∥vc∥∞≈1+δRBkey(模切换自身导致的噪声增长是 ∥ v m s ∥ ∞ = ( 1 + δ R B k e y ) / 2 \|v_{ms}\|_\infty =(1+\delta_\mathcal RB_{key})/2 ∥vms∥∞=(1+δRBkey)/2,设为它的两倍),在同态乘法之前自动执行模切换,将噪声水平降低到 ∥ v c ∥ ∞ \|v_c\|_\infty ∥vc∥∞ 之下,那么有 ∥ v m u l t ∥ ∞ ≤ δ R t 2 ⋅ ( 2 ∥ v c ∥ ∞ 2 + 2 ∥ v c ∥ ∞ + 1 ) \|v_{mult}\|_\infty \le \frac{\delta_\mathcal R t}{2} \cdot(2\|v_c\|_\infty^2 + 2\|v_c\|_\infty + 1) ∥vmult∥∞≤2δRt⋅(2∥vc∥∞2+2∥vc∥∞+1)
根据要计算的电路的一些信息:乘法深度
L
L
L、每层的加法次数
n
a
d
d
n_{add}
nadd、每层的自同构次数
n
k
s
n_{ks}
nks,我们设置合适的比率
Q
i
+
1
/
Q
i
Q_{i+1}/Q_{i}
Qi+1/Qi,使得
Q
i
Q
i
+
1
(
(
n
a
d
d
+
1
)
⋅
∥
v
m
u
l
t
∥
∞
+
n
k
s
⋅
∥
v
k
s
∥
∞
)
+
∥
v
m
s
∥
∞
≤
∥
v
c
∥
∞
\frac{Q_i}{Q_{i+1}}\Big((n_{add}+1) \cdot \|v_{mult}\|_\infty + n_{ks} \cdot \|v_{ks}\|_\infty\Big) + \|v_{ms}\|_\infty \le \|v_c\|_\infty
Qi+1Qi((nadd+1)⋅∥vmult∥∞+nks⋅∥vks∥∞)+∥vms∥∞≤∥vc∥∞
加密之后,第一次乘法之前,也会做一些运算,我们设置合适的
Q
L
+
1
/
Q
L
Q_{L+1}/Q_L
QL+1/QL(类似 GHS 变体,加密后立即模约简,将
v
f
r
e
s
h
v_{fresh}
vfresh 降低到
v
m
s
v_{ms}
vms 水平),
Q
L
Q
L
+
1
(
(
n
a
d
d
+
1
)
⋅
∥
v
f
r
e
s
h
∥
∞
+
n
k
s
⋅
∥
v
k
s
∥
∞
)
+
∥
v
m
s
∥
∞
≤
∥
v
c
∥
∞
\frac{Q_L}{Q_{L+1}}\Big((n_{add}+1) \cdot \|v_{fresh}\|_\infty + n_{ks} \cdot \|v_{ks}\|_\infty\Big) + \|v_{ms}\|_\infty \le \|v_c\|_\infty
QL+1QL((nadd+1)⋅∥vfresh∥∞+nks⋅∥vks∥∞)+∥vms∥∞≤∥vc∥∞
解密之前,从
Q
1
Q_1
Q1 切换到
Q
0
Q_0
Q0 使得噪声水平为
∥
v
c
∥
∞
\|v_c\|_\infty
∥vc∥∞,我们确定合适的模数,使得解密正确(
∥
v
∥
∞
<
Q
2
t
−
1
2
\|v\|_\infty < \frac{Q}{2t}-\frac{1}{2}
∥v∥∞<2tQ−21),
Q
0
>
2
t
∥
v
c
∥
∞
−
t
Q_0> 2t\|v_c\|_\infty-t
Q0>2t∥vc∥∞−t
因此我们先确定底层模数
Q
0
Q_0
Q0,接着根据比值
Q
i
+
1
/
Q
i
Q_{i+1}/Q_i
Qi+1/Qi 计算出中间模数
Q
i
+
1
Q_{i+1}
Qi+1,最后根据比值
Q
L
+
1
/
Q
L
Q_{L+1}/Q_L
QL+1/QL 确定顶层模数
Q
L
+
1
Q_{L+1}
QL+1。为了兼容 RNS,我们设置
q
i
=
Q
i
/
Q
i
−
1
q_i=Q_{i}/Q_{i-1}
qi=Qi/Qi−1 是满足
q
i
≡
1
(
m
o
d
2
N
)
q_i \equiv 1 \pmod{2N}
qi≡1(mod2N) 的素数(除了
q
L
+
1
=
Q
L
+
1
/
Q
L
q_{L+1}=Q_{L+1}/Q_L
qL+1=QL+1/QL,它只用于模切换,并不用于密文乘法)
Comparison of BGV and BFV
BFV:
- 对于很小的明文模数(比如 t = 2 t=2 t=2),随着同态运算噪声的规模不断增长,秘钥切换的噪声远远小于乘法的噪声,基本可以忽略
- 缩放因子是 t / Q t/Q t/Q,RNS 使用的素数规模尽可能的大(数量比乘法层数小)接近机器字的规模(比如 60 60 60 比特),因此 RNS 素数的个数 l l l 更少
- BFV 的乘法复杂度为 14 l 14l 14l 个 NTT(两个 c , c ′ c,c' c,c′ 各自从 Q Q Q 扩展到 P Q PQ PQ,其中 P ≈ Q P \approx Q P≈Q,花费 ( 4 + 4 ) l (4+4)l (4+4)l 个 forward NTT, c t e n s o r c_{tensor} ctensor 回到系数表示以执行 Scale 过程,花费 6 l 6l 6l 个 inverse NTT),这比 BGV 高很多
- 移除 Δ \Delta Δ 的 BFV,噪声控制总是比 BGV 更好,但是渐进复杂度比 BGV 更高。对于小模数,实际性能会比 BGV 好一些
- Level BFV 相比原始 BFV 提速明显,同态乘法最高有 3-4x 的提速
BGV:
- 对于很小的明文模数(比如 t = 2 t=2 t=2),由于模切换降低了噪声的绝对大小,秘钥切换的噪声接近乘法的噪声,影响较为显著
- 缩放因子是 Q i / Q i + 1 Q_{i}/Q_{i+1} Qi/Qi+1,RNS 使用的素数规模尽可能的小(数量等于乘法层数)接近噪声的规模(比如 20 , 30 20, 30 20,30 比特),因此 RNS 素数的个数 l ′ l' l′ 更多(可以多个小模数打包到单个机器字,从而降低复杂度)
- BGV(乘法之前)模切换的复杂度为 4 ( l ′ + 1 ) 4(l'+1) 4(l′+1) 个 NTT(本来以 NTT 存储,将 [ c ] q k [c]_{q_k} [c]qk 分量回到系数表示,花费 2 2 2 个 NTT,将 [ δ ] Q [\delta]_Q [δ]Q 转换到 NTT 表示,花费 2 l ′ 2l' 2l′ NTT,输入了 2 2 2 个密文),但是因为 l ′ > l l'>l l′>l(甚至 t = 2 t=2 t=2 时有 l ′ > 3 l l'>3l l′>3l),所以差距并没有 14 : 4 14:4 14:4 那么大
- 对于中等规模(比如 t = 2 16 + 1 t=2^{16}+1 t=216+1)以及大规模(比如 t = 2 30 − 2 18 = 1 t=2^{30}-2^{18}=1 t=230−218=1)的明文模数,RNS 素数的规模更大,使得 l ′ / l < 2 l'/l < 2 l′/l<2
同态乘法:
基准的二叉树乘法: