Pegasus:CKKS 和 TFHE 的混合
参考文献:
- [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.
- [HS14] Halevi S, Shoup V. Algorithms in helib[C]//Advances in Cryptology–CRYPTO 2014: 34th Annual Cryptology Conference, Santa Barbara, CA, USA, August 17-21, 2014, Proceedings, Part I 34. Springer Berlin Heidelberg, 2014: 554-571.
- [HS15] Halevi S, Shoup V. Bootstrapping for HElib[J]. Journal of Cryptology, 2021, 34(1): 7.
- [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.
- [MS18] Micciancio D, Sorrell J. Ring packing and amortized FHEW bootstrapping[J]. Cryptology ePrint Archive, 2018.
- [HS18] Halevi S, Shoup V. Faster homomorphic linear transformations in HElib[C]//Annual International Cryptology Conference. Cham: Springer International Publishing, 2018: 93-120.
- [CHKKS19] Cheon J H, Han K, Kim A, et al. A full RNS variant of approximate homomorphic encryption[C]//Selected Areas in Cryptography–SAC 2018: 25th International Conference, Calgary, AB, Canada, August 15–17, 2018, Revised Selected Papers 25. Springer International Publishing, 2019: 347-368.
- [HHC19] Han K, Hhan M, Cheon J H. Improved homomorphic discrete fourier transforms and FHE bootstrapping[J]. IEEE Access, 2019, 7: 57361-57370.
- [LHH+21] Lu W, Huang Z, Hong C, et al. PEGASUS: bridging polynomial and non-polynomial evaluations in homomorphic encryption[C]//2021 IEEE Symposium on Security and Privacy (SP). IEEE, 2021: 1057-1073.
- [CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion between (ring) LWE ciphertexts[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2021: 460-479.
- [MP21] Micciancio D, Polyakov Y. Bootstrapping in FHEW-like cryptosystems[C]//Proceedings of the 9th on Workshop on Encrypted Computing & Applied Homomorphic Cryptography. 2021: 17-28.
- [LHH+21] Lu W, Huang Z, Hong C, et al. PEGASUS: bridging polynomial and non-polynomial evaluations in homomorphic encryption[C]//2021 IEEE Symposium on Security and Privacy (SP). IEEE, 2021: 1057-1073.
- 源码:https://github.com/Alibaba-Gemini-Lab/OpenPEGASUS
- Full-RNS BGV/BFV
- Homomorphic DFT
- CKKS 同态模约简
- Chimera:混合的 RLWE-FHE 方案
- Amortized FHEW bootstrapping
- FHEW 和 TFHE 的统一框架
- 分园域的一些结论
- 有限域的结构(3): 迹, 范数与基
- 数论–数域的扩张
文章目录
[MS18] 为了实现均摊 FHEW 自举,提出了 Ring packing 技术:将多个 LWE 密文(行矢)堆叠为 ( A , b ) (A,b) (A,b),然后按列转化为多项式,使用 Key-Switch 执行同态线性解密 A ? E ( s ) + b A\cdot E(s)+b A?E(s)+b(私钥被加密在系数上),最终获得打包了 μ = ∑ j μ j x j \mu=\sum_j \mu_jx^j μ=∑j?μj?xj 的单个 RLWE 密文。虽然它是 Coeff Packing 的,但是同态 InvDFT 目的是加速同态的多项式乘法(线性解密部分),而非 SIMD 并行。但是其中的 SwK 是对于 LWE 私钥的各个分量分别用 RLWE 加密的 R L W E s ′ ( s i ? g j ) RLWE_{s'}(s_i \cdot g_j) RLWEs′?(si??gj?),规模大、速度慢。
[LHH+21] 提出的 Chimera 也使用类似的堆叠技术,将 TLWE 打包转换到 RLWE 密文上。不过它将堆叠出的矩阵 C = ( A , b ) C=(A,b) C=(A,b) 直接乘以 InvDFT,于是 ( I n v D F T ? C ) ? s = I n v D F T ( μ ( x ) ) (InvDFT \cdot C) \cdot s=InvDFT(\mu(x)) (InvDFT?C)?s=InvDFT(μ(x)),这就将各个 μ j \mu_j μj? 编码到了明文槽。它的 SwK 也是各个私钥分量分别被加密在系数上 R G S W s ′ ( s i ) RGSW_{s'}(s_i) RGSWs′?(si?),规模很大(GB 级别)
[CDKS21] 提出了新的 Key-Switch 技术(后文简记 KS),将 LWE 密文嵌入到 RLWE 密文上,对应的 SwK 将LWE 私钥作为单个多项式做 RLWE 加密 R L W E s ′ ( s ( x ) ? g j ) RLWE_{s'}(s(x) \cdot g_j) RLWEs′?(s(x)?gj?),从而极大的提高了 KS 的速度。需要使用分圆域的自同构的某些特殊性质,消除一些杂项。推广这个 KS 过程,可以获得 LWE 打包到 RLWE 的过程,不过它也是 Coeff Packing 的,还应该使用 Coeff-to-Slot 过程(基本就是同态 InvDFT)将它们编码到明文槽,从而适配 SIMD 技术。
之后的 Pegasus 也使用密文堆叠技术,对于私钥 s s s 的密文做线性变换,来实现 LWE-to-RLWE 过程。同态线性变换过程中,采取对角线乘法(旋转+阿达玛),LWE 私钥作为一个整体被加密在明文槽上 R L W E s ′ ( E c d ( s , Δ ) ) RLWE_{s'}(Ecd(s,\Delta)) RLWEs′?(Ecd(s,Δ)),规模大大减小(MB 级别),同态解密的结果直接在明文槽上。
Conversion Between (R)LWE
Tower of Cyclotomic
令 m = 2 L + 1 m=2^{L+1} m=2L+1 是二的幂, N = ? ( m ) = 2 L N=\phi(m)=2^L N=?(m)=2L 也是二的幂,分圆域 K = Q ( ζ m ) ? Q [ X ] / ( X N + 1 ) K=\mathbb Q(\zeta_m) \cong \mathbb Q[X]/(X^N+1) K=Q(ζm?)?Q[X]/(XN+1),分圆整数环 R = Z [ ζ m ] ? Z [ X ] / ( X N + 1 ) R=\mathbb Z[\zeta_m] \cong \mathbb Z[X]/(X^N+1) R=Z[ζm?]?Z[X]/(XN+1),为了区分不同维度我们记为 K N , R N K_N,R_N KN?,RN?
根据代数理论,域扩张
K
/
Q
K/\mathbb Q
K/Q 都是 Galois 扩张,Galois 群
G
a
l
(
K
/
Q
)
?
Z
m
?
=
{
1
,
3
,
?
?
,
2
N
?
1
}
Gal(K/\mathbb Q) \cong \mathbb Z_m^*=\{1,3,\cdots,2N-1\}
Gal(K/Q)?Zm??={1,3,?,2N?1},自同构:
τ
d
:
ζ
m
→
ζ
m
d
,
?
d
∈
Z
m
?
\tau_d: \zeta_m \to \zeta_m^d, \forall d\in\mathbb Z_m^*
τd?:ζm?→ζmd?,?d∈Zm??
域的迹:
T
r
K
/
Q
:
a
∈
K
?
∑
τ
∈
G
a
l
(
K
/
Q
)
τ
(
a
)
∈
Q
Tr_{K/\mathbb Q}: a \in K \mapsto \sum_{\tau \in Gal(K/\mathbb Q)} \tau(a) \in \mathbb Q
TrK/Q?:a∈K?τ∈Gal(K/Q)∑?τ(a)∈Q
根据代数知识,
T
r
K
/
Q
Tr_{K/\mathbb Q}
TrK/Q? 是
Q
\mathbb Q
Q-线性映射,并且满足
- T r K / Q ( 1 ) = [ K : Q ] = N Tr_{K/\mathbb Q}(1)=[K:\mathbb Q]=N TrK/Q?(1)=[K:Q]=N
- T r K / Q ( X i ) = 0 , ? i ≠ 0 Tr_{K/\mathbb Q}(X^i)=0, \forall i \neq 0 TrK/Q?(Xi)=0,?i=0
对于分圆塔:
K
=
K
N
≥
K
N
/
2
≥
?
≥
K
1
=
Q
K=K_N \ge K_{N/2} \ge \cdots \ge K_1=\mathbb Q
K=KN?≥KN/2?≥?≥K1?=Q
其中
K
n
,
n
=
2
l
K_n,n=2^l
Kn?,n=2l 可以作为
K
N
K_N
KN? 的子域(
R
n
≤
R
N
R_n \le R_N
Rn?≤RN? 类似),设置
Y
=
X
N
/
n
Y=X^{N/n}
Y=XN/n,
K
n
=
{
∑
i
∈
[
n
]
a
i
Y
i
:
a
i
∈
Q
}
?
K
N
K_n = \left\{\sum_{i \in [n]} a_i Y^i: a_i \in \mathbb Q\right\} \subseteq K_N
Kn?=?
?
??i∈[n]∑?ai?Yi:ai?∈Q?
?
???KN?
基于分圆塔,可以将迹分解:
T
r
K
/
Q
=
T
r
K
2
/
K
1
°
?
°
T
K
N
/
K
N
/
2
Tr_{K/\mathbb Q} = Tr_{K_2/K_1} \circ \cdots \circ T_{K_N/K_{N/2}}
TrK/Q?=TrK2?/K1??°?°TKN?/KN/2??
易知,相邻的域扩张的次数为
2
2
2,仅包含一个非凡自同构(另一个是恒等映射):
G
a
l
(
K
2
l
/
K
2
l
?
1
)
=
{
τ
1
∣
K
2
l
,
??
τ
2
l
+
1
∣
K
2
l
}
,
??
1
≤
l
≤
L
Gal(K_{2^l}/K_{2^{l-1}}) = \{\tau_1|_{K_{2^l}},\,\, \tau_{2^l+1}|_{K_{2^l}}\},\,\, 1 \le l \le L
Gal(K2l?/K2l?1?)={τ1?∣K2l??,τ2l+1?∣K2l??},1≤l≤L
其中的
τ
2
l
+
1
∣
K
2
l
\tau_{2^l+1}|_{K_{2^l}}
τ2l+1?∣K2l?? 是自同构映射
τ
2
l
+
1
∈
G
a
l
(
K
/
Q
)
\tau_{2^l+1} \in Gal(K/\mathbb Q)
τ2l+1?∈Gal(K/Q) 限制在
K
2
l
?
K
N
K_{2^l} \subseteq K_N
K2l??KN? 上,容易验证它是
K
2
l
K_{2^l}
K2l? 的
K
2
l
?
1
K_{2^{l-1}}
K2l?1?-自同构。进一步的,简记
n
=
2
l
n=2^l
n=2l,
Y
=
X
N
/
n
Y=X^{N/n}
Y=XN/n 是
K
n
/
Q
K_n/\mathbb Q
Kn?/Q 的扩张元,那么有:
T
r
K
n
/
K
n
/
2
(
Y
i
)
=
{
2
Y
i
,
?
2
∣
i
0
,
?
2
?
i
Tr_{K_{n}/K_{n/2}}(Y^i) = \left\{\begin{aligned} 2Y^i, &&\forall 2\mid i\\ 0, &&\forall 2\nmid i\\ \end{aligned}\right.
TrKn?/Kn/2??(Yi)={2Yi,0,???2∣i?2?i?
因此,映射
μ
∈
K
n
?
T
r
K
n
/
K
n
/
2
(
μ
)
∈
K
n
/
2
\mu \in K_n \mapsto Tr_{K_{n}/K_{n/2}}(\mu) \in K_{n/2}
μ∈Kn??TrKn?/Kn/2??(μ)∈Kn/2?,记号
a
∥
b
a\|b
a∥b 表示 “恰好整除”,
- 将系数 μ [ i ] , ( 2 N / n ) ∥ i \mu[i], (2N/n)\|i μ[i],(2N/n)∥i,加倍
- 将系数 μ [ i ] , ( N / n ) ∥ i \mu[i], (N/n)\|i μ[i],(N/n)∥i,清零
- 元素 μ ∈ K n ? K N \mu \in K_n \subseteq K_N μ∈Kn??KN? 的其他系数本来就是零,保持
我们定义
[
N
]
=
{
0
,
1
,
?
?
,
N
?
1
}
[N]=\{0,1,\cdots,N-1\}
[N]={0,1,?,N?1} 的一组划分(子域的系数索引),
I
k
:
=
{
i
∈
[
N
]
:
2
k
∥
i
}
,
??
0
≤
k
<
L
I_k := \{ i \in [N]: 2^k\|i \},\,\, 0 \le k< L
Ik?:={i∈[N]:2k∥i},0≤k<L
特别地设置
I
L
=
{
0
}
I_L=\{0\}
IL?={0},容易验证
[
N
]
=
?
k
I
k
[N] = \bigcup_k I_k
[N]=?k?Ik?
对于
d
=
2
l
+
1
,
1
≤
l
≤
L
d=2^l+1, 1\le l \le L
d=2l+1,1≤l≤L,简记
i
=
2
k
j
∈
I
k
i=2^kj \in I_k
i=2kj∈Ik?,其中
j
j
j 是奇数,
i
?
d
=
2
k
+
l
j
+
2
k
j
=
{
2
k
(
2
l
j
+
j
)
∈
I
k
?
0
≤
k
≤
L
2
k
j
=
i
(
m
o
d
2
N
)
,
?
k
>
L
?
l
2
L
+
2
k
j
=
N
+
i
(
m
o
d
2
N
)
,
k
=
L
?
l
i \cdot d = 2^{k+l}j + 2^kj = \left\{\begin{array}{ll} 2^k(2^lj+j) \in I_k &\forall 0 \le k \le L\\ 2^kj = i \pmod{2N}, &\forall k>L-l\\ 2^L+2^kj = N+i \pmod{2N}, &k=L-l\\ \end{array}\right.
i?d=2k+lj+2kj=?
?
??2k(2lj+j)∈Ik?2kj=i(mod2N),2L+2kj=N+i(mod2N),??0≤k≤L?k>L?lk=L?l?
因此,
τ
d
:
ζ
i
→
ζ
i
?
d
\tau_d: \zeta^i \to \zeta^{i\cdot d}
τd?:ζi→ζi?d 是对各个索引
I
k
I_k
Ik? 做了符号置换(signed permutation),
?
i
∈
I
k
,
?
r
∈
I
k
,
τ
d
(
X
i
)
=
±
X
r
\forall i \in I_k,\exist r \in I_k,\tau_d(X^i) = \pm X^r
?i∈Ik?,?r∈Ik?,τd?(Xi)=±Xr。特别地对于
k
≥
L
?
l
k \ge L-l
k≥L?l 的那些
I
k
I_k
Ik?,
τ
d
(
X
i
)
=
{
X
i
,
?
i
∈
?
k
>
L
?
l
I
k
?
X
i
,
?
i
∈
I
L
?
l
.
.
.
o
t
h
e
r
w
i
s
e
\tau_d(X^i) = \left\{\begin{aligned} X^i, &&\forall i \in \bigcup_{k>L-l}I_k\\ -X^i, &&\forall i \in I_{L-l}\\ ... &&otherwise \end{aligned}\right.
τd?(Xi)=?
?
??Xi,?Xi,...???i∈k>L?l??Ik??i∈IL?l?otherwise?
因此,映射
μ
∈
K
N
?
μ
+
τ
d
(
μ
)
∈
K
N
\mu \in K_N \mapsto \mu+\tau_d(\mu) \in K_N
μ∈KN??μ+τd?(μ)∈KN?,
- 将系数 μ [ i ] , 2 L ? l + 1 ∣ i \mu[i],2^{L-l+1}|i μ[i],2L?l+1∣i,加倍
- 将系数 μ [ i ] , i ∈ I L ? l \mu[i], i \in I_{L-l} μ[i],i∈IL?l?,清零
- 其他系数的变化较为复杂
LWE-to-LWE
LWE 密文
(
b
,
a
)
∈
Z
q
1
+
N
(b,a) \in \mathbb Z_q^{1+N}
(b,a)∈Zq1+N?,私钥
s
∈
Z
N
s \in \mathbb Z^N
s∈ZN,线性解密获得相位(不考虑纠错),
μ
0
=
b
+
?
a
,
s
?
(
m
o
d
q
)
\mu_0 = b+\langle a,s \rangle \pmod q
μ0?=b+?a,s?(modq)
执行 KS 时,抽象思路是
K
=
{
L
W
E
s
′
(
s
i
)
}
K=\{LWE_{s'}(s_i)\}
K={LWEs′?(si?)},然后同态解密获得
L
W
E
s
′
(
μ
0
)
LWE_{s'}(\mu_0)
LWEs′?(μ0?),但是这么做的复杂度太高了。[CDKS21] 提出了一种新的 KS 过程:
- 将 a a a 转化为多项式 a ( x ) = ι ( a ) ∈ R N , q a(x) = \iota(a) \in R_{N,q} a(x)=ι(a)∈RN,q?,其中的映射 ι : Z N → R N \iota: \mathbb Z^N \to R_N ι:ZN→RN? 是将向量作为多项式系数
- 将 s s s 转化为多项式 s ( x ) = τ ? 1 ° ι ( s ) ∈ R N s(x) = \tau_{-1} \circ \iota(s) \in R_N s(x)=τ?1?°ι(s)∈RN?,其中的 τ ? 1 \tau_{-1} τ?1? 是因为多项式乘积是向量反卷积
那么,获得的 ( b , a ( x ) ) ∈ R N , q 2 (b,a(x)) \in R_{N,q}^2 (b,a(x))∈RN,q2? 可以视为 s ( x ) s(x) s(x) 加密的 RLWE 密文,容易验证 μ ( x ) = b + a ( x ) s ( x ) ∈ R N , q \mu(x) = b+a(x)s(x) \in R_{N,q} μ(x)=b+a(x)s(x)∈RN,q?,它的常数项 μ [ 0 ] \mu[0] μ[0] 恰好就是 μ 0 \mu_0 μ0? 了。
因此我们可以使用 K = { R L W E s ′ ( s ( x ) ? g i ) } K=\{RLWE_{s'}(s(x) \cdot g_i)\} K={RLWEs′?(s(x)?gi?)} 作为 SwK,执行 RLWE 的秘钥切换,最后提取出常数项对应的 LWE 密文。其中的 g = ( g 1 , ? ? , g d ) g=(g_1,\cdots,g_d) g=(g1?,?,gd?) 是 Gadget Vector,可使用 [BGV12] 的 Base decomposition 或者 [BEHZ16] 的 Prime decomposition(用于兼容 RNS 系统)。
具体算法为:
LWE Key-Switch 的噪声为
e
k
s
=
?
g
?
1
(
c
1
)
,
e
?
e_{ks} = \langle g^{-1}(c_1), e \rangle
eks?=?g?1(c1?),e?,其中
e
←
χ
σ
e \gets \chi_\sigma
e←χσ? 是 SwK 的噪声。为了兼容 RNS 系统,我们使用素数分解
g
?
1
:
a
?
{
[
a
]
q
i
∈
R
N
,
q
i
}
g^{-1}: a \mapsto \{[a]_{q_i} \in R_{N,q_i}\}
g?1:a?{[a]qi??∈RN,qi??},那么可以计算出
e
k
s
e_{ks}
eks? 各个系数的方差
V
k
s
≤
1
12
N
σ
2
?
∑
i
q
i
2
V_{ks} \le \frac{1}{12}N\sigma^2 \cdot \sum_i q_i^2
Vks?≤121?Nσ2?i∑?qi2?
易知 LWE-to-LWE 的噪声就是 Key-Switch 的噪声。
LWE-to-RLWE
上述的 LWE-to-LWE 过程中,产生的 c t ′ ct' ct′ 并非是有效 RLWE 密文(相位只有常数项是有意义的,其他位置都是无效数据)。[CDKS21] 使用迹 T r K / Q Tr_{K/\mathbb Q} TrK/Q? 来消除 X i , i ≠ 0 X^i,i \neq 0 Xi,i=0 的系数,只保留常数项(缩放因子 N N N)。
直接计算 T r K / Q Tr_{K/\mathbb Q} TrK/Q? 需要分别计算各个 τ d , d ∈ Z m ? \tau_d, d\in \mathbb Z_m^* τd?,d∈Zm??,共计需要 N N N 个自同构映射(每一次都需要做 KS 过程)。因此,借助分圆塔将 T r K / Q Tr_{K/\mathbb Q} TrK/Q? 分解,成为 L = log ? N L=\log N L=logN 个相邻分圆域的迹 T r K 2 l / K 2 l ? 1 Tr_{K_{2^l}/K_{2^{l-1}}} TrK2l?/K2l?1?? 的组合,这样就只需要计算 log ? N \log N logN 个非凡自同构。
具体算法为:
为了消除 N N N 缩放因子,可以预先对输入的 LWE 密文缩放 [ N ? 1 ] q [N^{-1}]_q [N?1]q? 因子,从而上述算法的输出自然地消除了它们。
因为自同构
τ
d
\tau_d
τd? 是保长的,因此不会导致噪声过度膨胀。同态迹的噪声是
V
a
r
≤
1
3
(
(
N
n
)
2
?
1
)
?
V
k
s
Var \le \frac{1}{3}((\frac{N}{n})^2-1) \cdot V_{ks}
Var≤31?((nN?)2?1)?Vks?
选取
n
=
1
n=1
n=1,LWE-to-RLWE 的噪声就是
V
a
r
≤
1
3
(
N
2
?
1
)
?
V
k
s
Var \le \frac{1}{3}(N^2-1) \cdot V_{ks}
Var≤31?(N2?1)?Vks?
LWEs-to-RLWE
假如我们希望将相位是
μ
j
,
j
∈
[
n
]
\mu_j, j \in [n]
μj?,j∈[n] 的多个 LWE 密文打包到单个 RLWE 密文中:直接使用上述的转换得到
c
t
j
ct_j
ctj?,然后计算
c
t
′
=
∑
j
∈
[
n
]
c
t
j
?
Y
j
,
Y
=
X
N
/
n
ct' = \sum_{j \in [n]} ct_j \cdot Y^j, Y=X^{N/n}
ct′=∑j∈[n]?ctj??Yj,Y=XN/n,那么它的相位就是:
μ
′
=
N
?
∑
j
∈
[
n
]
μ
j
Y
j
∈
R
n
?
R
N
\mu' = N \cdot \sum_{j \in [n]} \mu_j Y^j \in R_n \subseteq R_N
μ′=N?j∈[n]∑?μj?Yj∈Rn??RN?
然而上述算法的计算效率和噪声增长都不算好。[CDKS21] 提出了 FFT-style 递归算法:假设
n
=
2
l
n=2^l
n=2l,为了计算
μ
′
\mu'
μ′,可以将
μ
j
\mu_j
μj? 分为大小
2
l
?
1
2^{l-1}
2l?1 的两组,分别计算出
μ
e
v
e
n
′
=
N
/
2
?
∑
j
∈
[
n
/
2
]
μ
2
j
Y
2
j
∈
R
n
/
2
μ
o
d
d
′
=
N
/
2
?
∑
j
∈
[
n
/
2
]
μ
2
j
+
1
Y
2
j
∈
R
n
/
2
\begin{aligned} \mu_{even}' &= N/2 \cdot \sum_{j \in [n/2]} \mu_{2j} Y^{2j} \in R_{n/2}\\ \mu_{odd}' &= N/2 \cdot \sum_{j \in [n/2]} \mu_{2j+1} Y^{2j} \in R_{n/2}\\ \end{aligned}
μeven′?μodd′??=N/2?j∈[n/2]∑?μ2j?Y2j∈Rn/2?=N/2?j∈[n/2]∑?μ2j+1?Y2j∈Rn/2??
但是实际上我们只需要计算出
μ
e
v
e
n
,
μ
o
d
d
∈
R
N
\mu_{even},\mu_{odd} \in R_N
μeven?,μodd?∈RN?,使得它们的
Y
2
j
Y^{2j}
Y2j 系数组成了
μ
e
v
e
n
′
,
μ
o
d
d
′
∈
R
n
/
2
\mu_{even}',\mu_{odd}' \in R_{n/2}
μeven′?,μodd′?∈Rn/2?,然后将
μ
o
d
d
\mu_{odd}
μodd? 旋转
Y
Y
Y 加到
μ
e
v
e
n
\mu_{even}
μeven? 上,并使用自同构
τ
d
,
d
=
2
l
+
1
\tau_{d}, d=2^l+1
τd?,d=2l+1 来消除
μ
o
d
d
\mu_{odd}
μodd? 那些恰好被旋转到
μ
e
v
e
n
′
\mu_{even}'
μeven′? 位置上的杂项:
μ
=
(
μ
e
v
e
n
+
Y
?
μ
o
d
d
)
+
τ
d
(
μ
e
v
e
n
?
Y
?
μ
o
d
d
)
\mu = (\mu_{even} + Y \cdot \mu_{odd}) + \tau_d(\mu_{even} - Y \cdot \mu_{odd})
μ=(μeven?+Y?μodd?)+τd?(μeven??Y?μodd?)
由于
?
Y
?
μ
o
d
d
-Y \cdot \mu_{odd}
?Y?μodd? 的有效系数
?
μ
2
j
+
1
-\mu_{2j+1}
?μ2j+1? 是在
Y
2
j
+
1
Y^{2j+1}
Y2j+1 上,因此
τ
d
\tau_d
τd? 将它们取反为
μ
2
j
+
1
\mu_{2j+1}
μ2j+1? ,而那些被旋转到
Y
2
j
Y^{2j}
Y2j 的杂项
?
e
-e
?e 则保持不变,正好和
Y
?
μ
o
d
d
Y \cdot \mu_{odd}
Y?μodd? 添加到
μ
e
v
e
n
\mu_{even}
μeven? 上的杂项
e
e
e 相互消除。最终,相位
μ
∈
R
N
\mu \in R_N
μ∈RN? 的那些
Y
j
Y^j
Yj 的系数恰好是
N
?
μ
j
N \cdot \mu_j
N?μj?,只要再消除其他的杂项就可以得到
μ
′
∈
R
n
\mu' \in R_n
μ′∈Rn?,这里可以使用
T
r
K
N
/
K
n
Tr_{K_N/K_n}
TrKN?/Kn?? 来消除它们。
具体算法为:
注意到 μ j \mu_j μj? 是打包在系数上的,一般 FHE 可能需要使得消息是打包在明文槽里的,这可以使用 [GHS12] [HS15] [HHC19] 的 Coeff-to-Slot 技术进行转换。[CDKS21] 说这些转换的速度特别快(真的么?),因此主要开销还是在 LWEs-to-RLWE 上面。
可以证明 LWEs-to-RLWE 的噪声也是 V a r ≤ 1 3 ( N 2 ? 1 ) ? V k s Var \le \frac{1}{3}(N^2-1) \cdot V_{ks} Var≤31?(N2?1)?Vks?
Lightweight Communication
三种转换的效率和噪声:
优势:
- 原始的 KS 过程,对于前两个参数,执行时间为 203 203 203、 1628 1628 1628 毫秒,因此嵌入到 RLWE 后的效率提升了 2 2 2 个数量级(例如 1.03 1.03 1.03 毫秒)
- 噪声仅为 O ( log ? N ) O(\log N) O(logN)-bit,因此可以使用 LWE 密文,留出足够的噪声空间, b ∈ Z q b \in \mathbb Z_q b∈Zq? 的大部分空间都可用于存储消息(例如 389 ? 23 389-23 389?23 比特)
对于云计算场景,我们使用对称版本的 LWE 加密方案,那么多个密文的 a j ∈ Z q N a_j \in \mathbb Z_q^N aj?∈ZqN? 完全可以被替代为随机种子, a j = P R F ( s e e d , j ) a_j=PRF(seed,j) aj?=PRF(seed,j),这导致了 Rate 高达 1 ? o ( 1 ) 1-o(1) 1?o(1) 的对称加密。在同态运算之前,需要同态解密,因为 LWE-based 是 FHE 友好的(只需要部分的同态解密,不必纠错),直接使用上述的 LWEs-to-RLWE 就可以转化为合适的 FHE 密文(这三种转换都是保护相位的,通用于任意的 FHE 方案)
PEGASUS
Pegasus 是阿里团队 [LHH+21] 提出的一种混合方案:使用 CKKS 计算多项式(word-wise),使用 TFHE 计算非多项式(bit-wise)。他们使用了 [CHKKS19] 的 Full RNS CKKS(效率更高),[MP21] 的三元秘密 TFHE(更加安全)
MP-FFT 和 RNS-NTT 的效率对比:
Pegasus 使用了四种核心算法:
- 秘钥切换算法直接使用 [CDKS21] 的,同态取模算法直接使用 [HK20] 的
- [MP21] 的 LUT 算法只能处理较小的模数,Pegasus 使用缩放技术(近似的),从而支持很大的模数
- [HS18] 的同态线性算法更适合处理方阵,Pegasus 使用瓷砖技术,将 “长矩阵”、“矮矩阵” 都转化为方阵
Pegasus 的基本计算逻辑是:
- 输入 CKKS 密文,消息被自重复打包在明文槽内,即 E c d ( v ∥ v ∥ ? ∥ v , Δ ) , v ∈ R l , l ∣ n  ̄ Ecd(v\|v\|\cdots\|v,\Delta), v \in \mathbb R^l, l\mid \overline n Ecd(v∥v∥?∥v,Δ),v∈Rl,l∣n
- 使用 Slot-to-Coeff 算法([HHC19] 的 FFT-style 算法)将消息从明文槽移动到系数上,再使用 Ectract 算法提取出 Δ v i \Delta v_i Δvi? 的 LWE 密文(维度 n  ̄ \overline n n)
- 使用 KS 过程([CDKS21] 的 LWE-to-LWE 算法)将维度缩减到 n  ̄ < n  ̄ \underline n < \overline n n?<n 的 LWE 密文(这是加法同态的,不支持乘法同态)
- 使用 LUT 计算非线性函数,用到的累加器的维度是 n  ̄ < n < n  ̄ \underline n < n < \overline n n?<n<n,得到 Δ T ( v i ) \Delta T(v_i) ΔT(vi?) 的 LWE 密文(维度 n n n)
- 使用 KS 过程([CDKS21] 的 LWE-to-LWE 算法)将维度缩减到 n  ̄ < n \underline n < n n?<n 的 LWE 密文(这是加法同态的,不支持乘法同态)
- 使用 LT 算法(并非是 Coeff-to-Slot)将这些 LWE 密文重新打包成单个 RLWE 密文(维度 n  ̄ \overline n n),它加密了 E c d ( A s + b ∈ Z l , Δ ′ ) Ecd(As+b \in \mathbb Z^l, \Delta') Ecd(As+b∈Zl,Δ′) 作为明文槽的内容(还没有取模)
- 利用 mod 算法对各个槽同态取模,最终获得加密了 E c d ( T ( v ) , Δ ) Ecd(T(v),\Delta) Ecd(T(v),Δ) 的 CKKS 密文
LUT for Larger Domain
[MP21] 的 LUT 算法仅支持很小的域,需要限制 q ∣ 2 n q\mid 2n q∣2n,但是 ∣ Δ v i ∣ ≤ 2 10 |\Delta v_i| \le 2^{10} ∣Δvi?∣≤210 对于 CKKS 方案是远远不够的。Pegasus 采用缩放技术,执行 LUT 获得近似结果。
使用 TFHE/FHEW 自举时,它只能计算模
2
n
2n
2n(累加器的维度
n
n
n),但是往往模数
q
?
2
n
q \gg 2n
q?2n,给定 LWE 密文
(
b
,
a
)
∈
Z
q
1
+
n
 ̄
(b,a) \in \mathbb Z_{q}^{1+\underline n}
(b,a)∈Zq1+n??,Pegasus 将密文缩放为:
b
~
=
?
2
n
q
?
b
?
∈
Z
2
n
,
??
a
~
=
?
2
n
q
?
a
?
∈
Z
2
n
n
 ̄
\tilde b = \left\lfloor \frac{2n}{q}\cdot b \right\rceil \in \mathbb Z_{2n},\,\, \tilde a = \left\lfloor \frac{2n}{q}\cdot a \right\rceil \in \mathbb Z_{2n}^{\underline n}
b~=?q2n??b?∈Z2n?,a~=?q2n??a?∈Z2nn??
(缩放的)线性解密可以如下计算:
b
~
+
?
a
~
,
s
 ̄
?
(
m
o
d
2
n
)
≈
?
2
n
q
?
μ
?
∈
Z
\tilde b + \langle\tilde a,\underline s\rangle \pmod{2n} \approx \left\lfloor \frac{2n}{q}\cdot \mu \right\rceil \in \mathbb Z
b~+?a~,s??(mod2n)≈?q2n??μ?∈Z
Pegasus 丢弃了一半的相位空间(文中没有任何解释,烦啊),以换取函数
T
T
T 不必是反循环的。为了正确计算函数
T
(
μ
)
,
μ
∈
[
?
q
/
4
,
q
/
4
)
T(\mu), \mu \in [-q/4,q/4)
T(μ),μ∈[?q/4,q/4),我们应当对函数进行恰当缩放,
T
~
(
x
)
=
T
(
q
2
n
x
)
,
??
x
∈
[
?
n
/
2
,
n
/
2
)
∩
Z
\tilde T(x) = T\left(\frac{q}{2n}x\right),\,\, x \in [-n/2,n/2) \cap \mathbb Z
T~(x)=T(2nq?x),x∈[?n/2,n/2)∩Z
假如
T
(
μ
)
T(\mu)
T(μ) 在区间
[
?
q
/
4
,
q
/
4
)
[-q/4,q/4)
[?q/4,q/4) 上是
κ
\kappa
κ-Lipschitz 的,那么近似误差
∥
T
(
μ
)
?
T
~
(
?
2
n
/
q
?
μ
?
)
∥
≤
κ
q
/
4
n
\|T(\mu)-\tilde T(\lfloor 2n/q\cdot \mu \rceil)\| \le \kappa q/4n
∥T(μ)?T~(?2n/q?μ?)∥≤κq/4n,只要
T
T
T 足够平滑,那么这个误差影响不大。
我们要求输入的 LWE 密文,它所加密的相位满足
μ
=
Δ
m
+
e
∈
[
?
q
/
4
,
q
/
4
)
\mu=\Delta m+e \in [-q/4,q/4)
μ=Δm+e∈[?q/4,q/4)(注意不是
Z
q
\mathbb Z_q
Zq? 整个空间,只有一半),给定
m
∈
R
m \in \mathbb R
m∈R 的函数
T
:
R
→
R
T: \mathbb R \to \mathbb R
T:R→R,希望输出的 LWE 密文对
Δ
T
(
m
)
\Delta T(m)
ΔT(m) 加密,令
k
=
?
2
n
/
q
?
μ
?
∈
[
?
n
/
2
,
n
/
2
)
k=\lfloor 2n/q\cdot \mu \rceil \in [-n/2,n/2)
k=?2n/q?μ?∈[?n/2,n/2),因此我们构造 LUT 如下:
t
k
=
Δ
T
(
q
2
n
Δ
k
)
,
??
k
=
?
n
/
2
,
?
?
,
0
,
?
?
,
n
/
2
?
1
t_k=\Delta T\left(\frac{q}{2n\Delta} k\right),\,\, k=-n/2,\cdots,0,\cdots,n/2-1
tk?=ΔT(2nΔq?k),k=?n/2,?,0,?,n/2?1
将这
n
n
n 个数值写到多项式
f
∈
R
n
f \in R_n
f∈Rn? 的系数上(注意反序和符号):
f
?
k
=
t
k
,
?
k
≤
0
f_{-k} = t_k, \forall k \le 0
f?k?=tk?,?k≤0 以及
f
n
?
k
=
?
t
k
,
?
k
>
0
f_{n-k}=-t_k,\forall k>0
fn?k?=?tk?,?k>0
使用 [MP21] 的三元秘密的 TFHE 变体,完整的 LUT 算法为:
哎!论文写的令人迷惑,也很少给出合理的解释。我感觉到处是错误,难道是我理解错了?
主要的思路挺好,它的细节就不要钻研了。。。
Repacking via Linear Transform
Chimera 使用的同态线性运算需要几百 GB 的公钥,计算效率极低。Pegasus 给出了新的算法,它只需要几十 MB 的公钥。
Chimera 试图将 l l l 个 LWE 密文打包到单个 RLWE 密文的明文槽中,它采取了 [MS18] 的 LWE 密文(行矢)堆叠的方案, a j a_j aj? 组成的矩阵 A A A 的形状为 l × n  ̄ l \times \underline n l×n?,我们称 l > n  ̄ l > \underline n l>n? 是 “高”,称 l < n  ̄ l < \underline n l<n? 是 “矮”。接下来,我们将 s s s 编码加密在明文槽上 E c d ( s , Δ ) Ecd(s,\Delta) Ecd(s,Δ),对它做同态线性变换 μ = A s + b ( m o d q ) \mu = As+b \pmod q μ=As+b(modq),同态解密出相位的编码 E c d ( μ , Δ ) Ecd(\mu,\Delta) Ecd(μ,Δ)
[HS14] 提出了矩阵-向量乘法的对角线算法,它更加适合方阵的计算。Chimera 使用瓷砖技术(tiling),将 “高矩阵”、“短矩阵” 都抽象地排列为方阵(实际算法中不需要真的构造出方阵),然后采取 [HS18] 的对角线乘法和 BSGS 算法,计算明文槽的任意线性变换。
具体地,我们要求 l , n  ̄ < n  ̄ l,\underline n < \overline n l,n?<n 都是二的幂次,给定矩阵 M ∈ R l × n  ̄ M \in \mathbb R^{l \times \underline n} M∈Rl×n?,给定 z ∈ Z n  ̄ z \in \mathbb Z^{\underline n} z∈Zn? 的重复码 E c d ( z ∥ ? ∥ z , Δ ) Ecd(z\|\cdots\|z,\Delta) Ecd(z∥?∥z,Δ) 的 RLWE 加密,其中的 z z z 恰好重复了 n  ̄ / n  ̄ \overline n/\underline n n/n? 次(没有Padding,这保持同态移位的正确性),
- 方矩阵: l = n  ̄ l=\underline n l=n?,对角线 M j M_j Mj? 的长度为 n ′ : = l n':=l n′:=l,共有 n ′ ′ : = l n'':=l n′′:=l 条线。不使用 BSGS 技巧,共计需要 n ′ ′ n'' n′′ 次秘密 z z z 的同态移位,分别和 M j M_j Mj? 做阿达玛乘积之后,累加起来就是 E c d ( M z ) Ecd(Mz) Ecd(Mz) 了,其中的 M z Mz Mz 被重复 n  ̄ / l \overline n/l n/l 次。
- 高矩阵: l ≥ 2 n  ̄ l\ge2\underline n l≥2n?,对角线 M j M_j Mj? 的长度为 n ′ : = l n':=l n′:=l,共有 n ′ ′ : = n  ̄ n'':=\underline n n′′:=n? 条线。因为长度为 n  ̄ \underline n n? 的 z z z 是重复编码的,我们把长度 l l l 的 M j M_j Mj? 也重复编码(视为 l / n  ̄ l/\underline n l/n? 个长度 n  ̄ \underline n n? 的瓷砖的拼接的重复),可以观察到 E c d ( z ) ⊙ E c d ( M j ) Ecd(z) \odot Ecd(M_j) Ecd(z)⊙Ecd(Mj?) 恰好就是我们需要的阿达玛积。最后将它们累加起来即可。
- 矮矩阵: 2 l ≤ n  ̄ 2l\le\underline n 2l≤n?,对角线 M j M_j Mj? 的长度为 n ′ : = n  ̄ n':=\underline n n′:=n?,共有 n ′ ′ : = l n'':=l n′′:=l 条线。每条对角线 M j M_j Mj? 和 z ? j z\lll j z?j 做阿达玛乘积,再累加起来,其结果是长度 n  ̄ \underline n n? 的向量。可以观察到,每间隔 l l l 的元素应该做继续累加,获得最终的长度 l l l 的结果 M z Mz Mz 的编码。我们采用 “快速广播” 类似的技术,迭代 “旋转 1 , 2 , 4 , ? 1,2,4,\cdots 1,2,4,? 个位置,并加到自身” 多次,可将长度 n  ̄ \underline n n? 的中间结果的重复码 归并为 长度 l l l 的最终结果的重复码。
- 综上所述, n ′ = max ? ( l , n  ̄ ) n'=\max(l,\underline n) n′=max(l,n?), n ′ ′ = min ? ( l , n  ̄ ) n''=\min(l,\underline n) n′′=min(l,n?),共需要 n ′ ′ + log ? ( n  ̄ / l ) n''+\log(\underline n/l) n′′+log(n?/l) 次同态移位。如果是高矩阵 l > n  ̄ l>\underline n l>n?,那么复杂度仅为 n ′ ′ = n  ̄ n''=\underline n n′′=n?,它和 l l l 无关(数量越多的 LWE 密文打包,甚至不需要更多代价)。可以采取 BSGS 技巧,将项 n ′ ′ n'' n′′ 降低为 n ′ ′ \sqrt{n''} n′′?
明文槽的同态线性变换,算法如下:
Framework
综合上述的技术,Pegasus 的整体协议是:
其中的 g d i g i t [ i ] = B i g_{digit}[i]=B^i gdigit?[i]=Bi 是 [BGV12] 数字分解, g r n s [ i ] = q ′ q / q i ? [ ( q / q i ) ? 1 ] q i g_{rns}[i]=q'q/q_i\cdot[(q/q_i)^{-1}]_{q_i} grns?[i]=q′q/qi??[(q/qi?)?1]qi?? 是 [BEHZ16] 素数分解。它们都是 Gadget Vector,前者用于 LWE-to-LWE,后者用于 LUT 自举(文中也没解释这么选的原因)。
进一步的优化:
- step 5, step 6 作为一个 LUT 计算块,可以执行一个 LUT 序列的非线性函数(不必立即回到 CKKS 上)
- step 4, step 6 获得的 LWE 是线性同态的(不支持同态乘法),可以执行算术加法
- step 8 中的 A , b A,b A,b 是 LWE 的堆叠,它的次序可以任意排布,从而实现明文槽置换
- 调整 RK 的模数,可以调节最终输出的 CKKS 层级 L ′ L' L′
Applications
计算非多项式函数:
- sigmoid, ReLU
- min, max
- max-pool, average-pool
- min-index, max-index, sorting
机器学习:
- 决策树
- 聚类
参数设置以及效率测试:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!