参考文献:
- [CGGI17] Chillotti I, Gama N, Georgieva M, et al. Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE. ASIACRYPT 2017 (1): 377-408.
- [CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion between (ring) LWE ciphertexts. ACNS 2021 (1): 460-479.
- [KLD+23] Kim A, Lee Y, Deryabin M, et al. LFHE: Fully homomorphic encryption with bootstrapping key size less than a megabyte[J]. Cryptology ePrint Archive, 2023.
- [DKMS24] De Micheli G, Kim D, Micciancio D, et al. Faster amortized FHEW bootstrapping using ring automorphisms. Public Key Cryptography 2024 (4): 322-353.
- [WWL+24] Wang R, Wen Y, Li Z, et al. Circuit Bootstrapping: Faster and Smaller. EUROCRYPT 2024 (2): 342-372.
- Leveled mode of TFHE
- Conversion Between ®LWE
- 加权自动机:在 Semirings 上建模
文章目录
- LHE Mode
- Original TFHE
- Novel Work Flow
- Automorphism-Based PBS
- Using Sparse Isomorphism
- MV-PBS
- Analysis & Parameters
LHE Mode
TFHE 除了有 FHE mode,还有 [CGGI17] 提出的 LHE mode:
- 前者每个 Gate 都需要自举,利用 LinPoly + PBS 实现布尔运算;
- 后者仅在噪声过大或者类型不符时才自举,利用 det-WFA + CMux-based OBDD + BRS 实现布尔运算。由于 RLWE 和 RGSW 外积的噪声增长不对称性,只要 RGSW 加密消息的范数很小(比如:布尔值、单项式),那么 LHE 的容许 CMux 深度就会很大。
自动机的运算:
决策树的运算:
比特序列表示的运算:
但是,它们都是用 CMux Gate 搭建的,控制位是 RGSW 密文(布尔值/单项式的 Powers-of-Base),数据位是 RLWE/LWE 密文(系数编码)。如果想要把数据位提升到控制位,就需要 LWE-to-RGSW 的密文转换,也就是 “电路自举”。
Original TFHE
[CGGI17] 的电路自举的工作流如下:
他们使用三组参数:
- ( q ‾ , n ‾ ) (\underline{q}, \underline{n}) (q,n) 是 Level 0 的 LWE 参数集,存储数据,具有最高的噪声。模数和维度都尽可能小,使得自举更高效。
- ( q , N ) (q,N) (q,N) 是 Level 1 的 RGSW 参数集,存储控制位。模数和维度的规模,决定了外积的效率和深度。
- ( Q ‾ , N ‾ ) (\overline{Q}, \overline{N}) (Q,N) 是 Level 2 的 RLWE 参数集,用于 PBS 自举,具有最小的噪声。选取足够大的模数,获得所需的深度。
电路自举包含两个步骤:令 v = ( v 0 , v 1 , ⋯ , v l − 1 ) v=(v_0,v_1,\cdots,v_{l-1}) v=(v0,v1,⋯,vl−1) 是 RGSW 使用的 Gadget Vector,令 s k ‾ , s k , s k ‾ \underline{sk},sk,\overline{sk} sk,sk,sk 分别是三层的私钥。
-
Functional Bootstrapping Step,
- 输入单个 Level-0 LWE 密文 L W E s k ‾ ( m ) LWE_{\underline{sk}}(m) LWEsk(m),使用 l l l 次 PBS 计算出 L W E s k ‾ ( m v i ) LWE_{\overline{sk}}(mv_i) LWEsk(mvi),
- 这里可以使用 [CLOT21] 的 PBSmanyLUT 加速。
-
Ciphertext Conversion Step,
-
RGSW 密文的第一部分:使用 LWE-to-RLWE PubKS 过程,把 ( b , a ) = L W E s k ‾ ( m v i ) (b,a)=LWE_{\overline{sk}}(mv_i) (b,a)=LWEsk(mvi) 切换到 R L W E s k ( m v i ) RLWE_{sk}(mv_i) RLWEsk(mvi)
使用的 KSK 是 R L W E s k ′ ( s k j ‾ ) RLWE'_{sk}(\overline{sk_j}) RLWEsk′(skj),计算过程是
( b , 0 ) + ∑ j a j ⊙ R L W E s k ′ ( s k j ‾ ) (b,0) + \sum_j a_j \odot RLWE'_{sk}(\overline{sk_j}) (b,0)+j∑aj⊙RLWEsk′(skj) -
RGSW 密文的第二部分:使用 LWE-to-RLWE PriKS 过程,把 ( b , a ) = L W E s k ‾ ( m v i ) (b,a) = LWE_{\overline{sk}}(mv_i) (b,a)=LWEsk(mvi) 切换到 R L W E s k ( s k ⋅ m v i ) RLWE_{sk}(sk \cdot mv_i) RLWEsk(sk⋅mvi)
使用的 KSK 是 R L W E s k ′ ( s k ⋅ s k j ‾ ) RLWE'_{sk}(sk \cdot \overline{sk_j}) RLWEsk′(sk⋅skj) 以及 R L W E s k ′ ( s k ) RLWE'_{sk}(sk) RLWEsk′(sk),计算过程是
b ⊙ R L W E s k ′ ( s k ) + ∑ j a j ⊙ R L W E s k ′ ( s k ⋅ s k j ‾ ) b \odot RLWE'_{sk}(sk) + \sum_j a_j \odot RLWE'_{sk}(sk \cdot \overline{sk_j}) b⊙RLWEsk′(sk)+j∑aj⊙RLWEsk′(sk⋅skj) -
最后把 R L W E s k ( m v i ) RLWE_{sk}(mv_i) RLWEsk(mvi) 和 R L W E s k ( s k ⋅ m v i ) RLWE_{sk}(sk \cdot mv_i) RLWEsk(sk⋅mvi) 组装成 R G S W s k ( m ) RGSW_{sk}(m) RGSWsk(m) 密文即可。上述的 PubKS 和 PriKS 也可以采用 pre-computed variant,提高效率、降低噪声,代价是更大的 KSK 规模。
-
对于计算开销:使用 MV-PBS 之后,实际上 Ciphertext Conversion Step 占据了大部分。对于存储开销:也是 Ciphertext Conversion Step 中的 KSK 占据了大部分。
疑问:为何不使用 [CDKS21] 的基于自同构的 LWE-to-RLWE 呢?
- [CGGI17] 的 PubKS 或 PriKS,需要 N ‾ \overline{N} N 次和标量 a j ∈ Z Q ‾ a_j \in \mathbb Z_{\overline Q} aj∈ZQ(系数表示下分解和数乘)的外积运算,每次都需要 2 l N 2lN 2lN 次模乘,共计 2 l N ‾ N 2l\overline NN 2lNN
- 基于自同构的 LWE-to-RLWE,需要 N ‾ / N ⋅ log n \overline{N}/N \cdot\log n N/N⋅logn 次和多项式 a ∈ R Q ‾ , n a \in R_{\overline Q,n} a∈RQ,n(系数表示下分解,再转化为 NTT 表示)的外积运算(长度 N ‾ \overline{N} N 的内积表示为 N ‾ / N \overline{N}/N N/N 个长度 N N N 的卷积),每次都需要 2 ( l + 1 ) N log N + 2 l N 2(l+1)N\log N + 2lN 2(l+1)NlogN+2lN 次模乘,共计 2 ( l + 1 ) N ‾ log 2 N + 2 l N ‾ log N 2(l+1)\overline{N}\log^2 N + 2l\overline{N}\log N 2(l+1)Nlog2N+2lNlogN
- 假如 N = 1024 N = 1024 N=1024,那么 log 2 N = 100 ≪ N \log^2 N = 100 \ll N log2N=100≪N,效率提升应当十分显著,密钥规模也小得多,噪声方差会偏大 N ‾ log N \overline{N}\log N NlogN 因子。
Novel Work Flow
[WWL+24] 提出了新的工作流,移除了 ACC to LWE 步骤,直接把 ACC 重构为 RGSW(实际上就是把 Extract 和基于自同构的 LWE-to-RLWE 合并了),从而消除了开销最大的 PubKS 和 PriKS 过程。
仅使用 Level 0 和 Level 2 两组参数集,新的电路自举流程是:
-
PBS Without Sample Extraction,
-
输入单个 Level-0 LWE 密文 L W E s k ‾ ( m ) LWE_{\underline{sk}}(m) LWEsk(m),使用 l l l 次 PBS 计算出
R L W E s k ‾ ( N ‾ − 1 m v i + ∑ k = 1 N ‾ − 1 y k X k ) RLWE_{\overline{sk}}(\overline{N}^{-1}mv_i+\sum_{k=1}^{\overline{N}-1}y_k X^k) RLWEsk(N−1mvi+k=1∑N−1ykXk)
预期的明文在常数项(缩放 N ‾ − 1 \overline{N}^{-1} N−1 抵消后续自同构的影响),其余的系数是冗余的。 -
这里使用了 [WWL+24] 优化的 Automorphism-Based MV-PBS 算法。
-
-
Ciphertext Conversion,
-
RGSW 密文的第一部分:使用 [CDKS21] 提出的 Trace 稀疏分解算法(分圆塔),使用 Galois自同构 τ 2 k + 1 , k = log N ‾ , ⋯ , 2 , 1 \tau_{2^k+1}, k=\log \overline{N},\cdots,2,1 τ2k+1,k=logN,⋯,2,1 对应的 KSK,计算出 ( b , a ) = R L W E s k ‾ ( m v i ) (b,a) = RLWE_{\overline{sk}}(mv_i) (b,a)=RLWEsk(mvi)
-
RGSW 密文的第二部分:使用 [DKMS24] 提出的 RLWE’-to-RGSW 技术, 给定 S S K = R L W E s k ‾ ′ ( s k ‾ 2 ) SSK = RLWE'_{\overline{sk}}(\overline{sk}^2) SSK=RLWEsk′(sk2),计算
( 0 , b ) + a ⊙ R L W E s k ‾ ′ ( s k ‾ 2 ) = R L W E s k ‾ ( s k ‾ ⋅ m v i + s k ‾ ⋅ e ) (0,b) + a \odot RLWE'_{\overline{sk}}(\overline{sk}^2) = RLWE_{\overline{sk}}(\overline{sk} \cdot mv_i + \overline{sk} \cdot e) (0,b)+a⊙RLWEsk′(sk2)=RLWEsk(sk⋅mvi+sk⋅e)
其中 e ∈ R Q ‾ , N ‾ e \in R_{\overline{Q},\overline{N}} e∈RQ,N 是 R L W E s k ‾ ( m v i ) RLWE_{\overline{sk}}(mv_i) RLWEsk(mvi) 的噪声。 -
最后把 R L W E s k ‾ ( m v i ) RLWE_{\overline{sk}}(mv_i) RLWEsk(mvi) 和 R L W E s k ‾ ( s k ‾ ⋅ m v i ) RLWE_{\overline{sk}}(\overline{sk} \cdot mv_i) RLWEsk(sk⋅mvi) 组装成 R G S W s k ‾ ( m ) RGSW_{\overline{sk}}(m) RGSWsk(m) 密文即可。
Ciphertext Conversion 的算法是:
总体的复杂度是:
疑问:文章说由于 step 2 无法切换维度,因此就把 RGSW 留在 Level 2 参数集。但是,这会导数 LHE 的计算开销较大(自举噪声和密钥切换噪声都累积在 KaTeX parse error: Got function '\overline' with no arguments as subscript at position 11: \mathbb Z_\̲o̲v̲e̲r̲l̲i̲n̲e̲{Q} 的低位,没必要保留)。可以依然使用中等规模的参数 ( q , N ) (q,N) (q,N),可修改为:
- 使用 Ring-Swich 技术,额外要求 s k ‾ ∈ R N ≤ R N ‾ \overline{sk} \in R_{N} \le R_{\overline{N}} sk∈RN≤RN,首先把 ACC 模切换到安全的模数 q q q,然后直接提取出维度 N N N 子环(含有所需的常数项),这几乎是免费的
- 现在 ACC 是参数 ( q , N ) (q,N) (q,N) 下的 RLWE 密文,执行 Trace 消除冗余系数,然后做成 RGSW 密文,执行 LHE 运算
- 这样做,step 1 完全不变(稀疏私钥的安全性),step 2 速度更快、存储更小
如果不想要稀疏私钥,也可以这么做:依旧提取出维度 N ‾ \overline{N} N 的 LWE 密文,然后分成 N ‾ / N \overline{N}/N N/N 个区间(内积 = 卷积),使用 [CDKS21] 的基于自同构的 LWE-to-RLWE 算法,仅需 N ‾ / N \overline{N}/N N/N 次调用,效率损失也很小。
Automorphism-Based PBS
[WWL+24] 使用了两种 PBS Without Sample Extraction 算法,其一是 CMux-based Blind Rotation,其二是 Automorphism-Based Blind Rotation。
[WWL+24] 对前者的 Level 0 使用二元秘密( ∥ s ∥ 2 2 = n ‾ / 2 \|s\|_2^2 = \underline{n}/2 ∥s∥22=n/2),对后者的 Level 0 使用 σ = 3.2 \sigma=3.2 σ=3.2 的高斯秘密( ∥ s ∥ 2 2 = n ‾ σ 2 \|s\|_2^2 = \underline{n}\sigma^2 ∥s∥22=nσ2)。为了降低模切换噪声(大约是 σ m s 2 = ( ∥ s ∥ 2 2 + 1 ) / 12 \sigma_{ms}^2 = (\|s\|_2^2+1)/12 σms2=(∥s∥22+1)/12),[WWL+24] 两者的 Level 2 都使用二元秘密。
Using Sparse Isomorphism
[LMK+23] 的基于自同构的自举,关键是使用了同构 Z 2 N ∗ ≅ Z N / 2 × Z 2 \mathbb Z_{2N}^* \cong \mathbb Z_{N/2} \times \mathbb Z_2 Z2N∗≅ZN/2×Z2,生成元是 { g , − 1 } \{g,-1\} {g,−1}。要求系数形如 2 k + 1 ∈ Z 2 N 2k+1 \in \mathbb Z_{2N} 2k+1∈Z2N,从而可以表示为 ± g j \pm g^{j} ±gj 形式,只需要准备 2 2 2 个 KSK,使用 Galois 自同构计算指数上的数乘 X a i ⋅ s i = τ ± g j ( X s i ) X^{a_i \cdot s_i} = \tau_{\pm g^j}(X^{s_i}) Xai⋅si=τ±gj(Xsi)
为了进一步提高自举效率(和 a i a_i ai 不同取值的数量有关),[WWL+24] 使用了更加稀疏的系数,形如 k ⋅ 2 ν + 1 ∈ Z 2 N k \cdot 2^\nu +1 \in \mathbb Z_{2N} k⋅2ν+1∈Z2N,只要 N ≥ 8 N \ge 8 N≥8 并且 ν ≥ 2 \nu \ge 2 ν≥2,则它们构成了某个元素 g ∈ Z 2 N g \in \mathbb Z_{2N} g∈Z2N 生成的乘法循环群,只需要准备 1 1 1 个 KSK 即可。易知 o r d ( 5 m o d 2 N ) = N / 2 ord(5 \bmod 2N)=N/2 ord(5mod2N)=N/2,因此可以选取 g = 5 2 ν − 2 g=5^{2^{\nu-2}} g=52ν−2
类似于 [LMK+23],只要系数
a
i
a_i
ai 都具有
k
⋅
2
ν
+
1
k \cdot 2^\nu+1
k⋅2ν+1 形式,那么就可以把内积写成关于
g
g
g 的多项式,再使用 Horner 法则整理为:
∑
i
a
i
s
i
=
P
s
(
g
)
:
=
∑
j
∈
I
0
s
j
+
g
(
⋯
+
g
(
∑
j
∈
I
2
N
/
2
ν
−
1
s
j
)
)
(
m
o
d
2
N
)
\sum_i a_i s_i = P_s(g) := \sum_{j \in I_0} s_j + g\left(\cdots+g\left(\sum_{j \in I_{2N/2^\nu}-1}s_j\right)\right) \pmod{2N}
i∑aisi=Ps(g):=j∈I0∑sj+g
⋯+g
j∈I2N/2ν−1∑sj
(mod2N)
其中
I
j
=
{
i
:
a
i
=
g
j
}
,
j
=
0
,
1
,
⋯
,
2
N
/
2
ν
−
1
I_j = \{i: a_i = g^j\}, j=0,1,\cdots,2N/2^\nu-1
Ij={i:ai=gj},j=0,1,⋯,2N/2ν−1
由于 o r d ( g ) = 2 N / 2 ν ord(g) = 2N/2^\nu ord(g)=2N/2ν,盲旋转总共执行了 2 N / 2 ν − 1 2N/2^\nu-1 2N/2ν−1 次串行的 τ g \tau_g τg 自同构,因此初始 ACC 加密 T V ( X ) TV(X) TV(X),则最终计算出 T V ( X g − 1 ) ⋅ X ∑ i a i s i TV(X^{g^{-1}}) \cdot X^{\sum_i a_i s_i} TV(Xg−1)⋅X∑iaisi,因此需要预先把 test vector 扭曲 X → X g X \to X^g X→Xg,保证计算结果的正确性。
在执行盲旋转之前,使用 ⌊ x ⌉ k ⋅ 2 ν + 1 \lfloor x \rceil_{k \cdot 2^\nu+1} ⌊x⌉k⋅2ν+1 把 LWE 系数都舍入到合适的形式,这里的舍入噪声会比 [LMK+23] 更大。
也采用了 [LMK+23] 的窗口技术,进一步降低自同构的数量。
由于期望值难以计算,为了确定最优的窗口大小,他们使用 Monte Carlo simulation 统计出不同 w w w 对应的自同构数量。对于不同维度 N ′ = 2 N / 2 ν N' = 2N/2^\nu N′=2N/2ν,试验出的最佳 w w w 是:
完整的 PBS 算法是:
MV-PBS
由于 LWE 密文舍入到的
(
b
,
a
)
(b,a)
(b,a) 都是
k
⋅
2
ν
+
1
k \cdot 2^\nu+1
k⋅2ν+1 形式的整数,而非
2
ν
2^\nu
2ν 倍数,因此无法直接成为 Multi-Value PBS。可以采取很简单的技巧:
X
b
+
∑
i
a
i
s
i
=
X
b
+
∑
i
(
a
i
+
1
)
s
i
−
∑
i
s
i
X^{b+\sum_i a_is_i} = X^{b+\sum_i(a_i+1)s_i - \sum_i s_i}
Xb+∑iaisi=Xb+∑i(ai+1)si−∑isi
其中的
(
b
,
a
)
(b,a)
(b,a) 都是
2
ν
2^\nu
2ν 的倍数,从而
b
+
∑
i
a
i
s
i
b+\sum_i a_is_i
b+∑iaisi 也都是
2
ν
2^\nu
2ν 的倍数。这额外需要
A
U
X
=
R
G
S
W
s
k
‾
(
X
−
∑
i
s
k
‾
i
)
AUX = RGSW_{\overline{sk}}(X^{- \sum_i \underline{sk}_i})
AUX=RGSWsk(X−∑iski) 作为辅助信息。
用于电路自举的 MV-PBS 算法如下:计算符号函数、不做密文提取。
完整的 PBS 算法是:
Analysis & Parameters
为了减少 Gadget Vector 的长度,[WWL+24] 对于所有的外积都使用了 [KLD+23] 的 Approximate Gadget Decomposition,选取 B l < q B^l < q Bl<q,那么 v = ( δ , δ B , ⋯ , δ B l − 1 ) v = (\delta,\delta B,\cdots,\delta B^{l-1}) v=(δ,δB,⋯,δBl−1),其中 δ = ⌈ q / B l ⌉ \delta = \lceil q/B^l \rceil δ=⌈q/Bl⌉,近似误差 ϵ ≤ δ / 2 \epsilon \le \delta/2 ϵ≤δ/2,环元素和 R L W E ′ ( m ) RLWE'(m) RLWE′(m) 的外积噪声是 σ 2 ≤ l N B 2 σ f r e s h 2 / 12 + V a r ( m ) ⋅ ϵ 2 / 3 \sigma^2 \le lNB^2\sigma_{fresh}^2/12 + Var(m)\cdot\epsilon^2/3 σ2≤lNB2σfresh2/12+Var(m)⋅ϵ2/3(减少了前者,增加了后者,做个平衡),其中 V a r ( m ) ≤ ∥ m ∥ 2 2 Var(m) \le \|m\|_2^2 Var(m)≤∥m∥22。如果是 R L W E RLWE RLWE 和 R G S W RGSW RGSW 的外积,则还有 ∥ m ∥ 2 2 ⋅ σ R L W E 2 \|m\|_2^2 \cdot \sigma_{RLWE}^2 ∥m∥22⋅σRLWE2 的影响。
有五个不同的 Gadget Vector,它们的 R L W E ′ RLWE' RLWE′ 的消息格式为
- 执行 LHE mode 运算:维度 N ‾ \overline{N} N,模数 Q ‾ \overline{Q} Q,控制位形如 m = b X i , b ∈ { 0 , 1 } m=bX^i, b \in \{0,1\} m=bXi,b∈{0,1},因此 ∥ m ∥ 2 2 ≤ 1 \|m\|_2^2 \le 1 ∥m∥22≤1
- PBS 中的外积:维度 N ‾ \overline{N} N,模数 Q ‾ \overline{Q} Q,CMux-based 形如 m = s k ‾ i m=\underline{sk}_i m=ski(二元),Auto-based 形如 m = X s k ‾ i m=X^{\underline{sk}_i} m=Xski(高斯),都是 ∥ m ∥ 2 2 ≤ 1 \|m\|_2^2 \le 1 ∥m∥22≤1
- PBS 中的自同构:维度 N ‾ \overline{N} N,模数 Q ‾ \overline{Q} Q,CMux-based 中不存在,Auto-based 形如 m = s k ‾ ( X g j ) m=\overline{sk}(X^{g^j}) m=sk(Xgj),满足 ∥ m ∥ 2 2 ≤ N ‾ / 2 \|m\|_2^2 \le \overline{N}/2 ∥m∥22≤N/2
- 密文转换中的迹映射:维度 N ‾ \overline{N} N,模数 Q ‾ \overline{Q} Q,形如 m = s k ‾ ( X g u ) m=\overline{sk}(X^{g^u}) m=sk(Xgu),满足 ∥ m ∥ 2 2 ≤ N ‾ / 2 \|m\|_2^2 \le \overline{N}/2 ∥m∥22≤N/2
- 密文转换中的乘以私钥:维度 N ‾ \overline{N} N,模数 Q ‾ \overline{Q} Q,形如 m = s k ‾ 2 m=\overline{sk}^2 m=sk2(二元),满足 ∥ m ∥ 2 2 ≤ N ‾ 2 / 4 \|m\|_2^2 \le \overline{N}^2/4 ∥m∥22≤N2/4
[WWL+24] 首先选取了 Level 0 和 Level 2 的维度和模数,然后固定 ν = 2 \nu=2 ν=2,对应的 PBS 输入密文的最大容许噪声是 σ i n 2 = 2 10 \sigma_{in}^2 = 2^{10} σin2=210,最后选取不同的 Gadget Vector 参数。
由于对 step 2 的优化,新电路自举算法的规模和效率都有很大的提升: