Full-RNS CKKS

news2024/11/15 13:03:56

参考文献:

  1. [HS13] Halevi S, Shoup V. Design and implementation of a homomorphic-encryption library[J]. IBM Research (Manuscript), 2013, 6(12-15): 8-36.
  2. [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.
  3. [CHKKS18a] 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.
  4. [CHKKS18b] Cheon J H, Han K, Kim A, et al. Bootstrapping for approximate homomorphic encryption[C]//Advances in Cryptology–EUROCRYPT 2018: 37th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Tel Aviv, Israel, April 29-May 3, 2018 Proceedings, Part I 37. Springer International Publishing, 2018: 360-384.
  5. [CHH18] Cheon J H, Han K, Hhan M. Faster homomorphic discrete fourier transforms and improved fhe bootstrapping[J]. Cryptology ePrint Archive, 2018.
  6. [HS18] Halevi S, Shoup V. Faster homomorphic linear transformations in HElib[C]//Annual International Cryptology Conference. Cham: Springer International Publishing, 2018: 93-120.
  7. [CCS19] Chen H, Chillotti I, Song Y. Improved bootstrapping for approximate homomorphic encryption[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2019: 34-54.
  8. [HK20] Han K, Ki D. Better bootstrapping for approximate homomorphic encryption[C]//Cryptographers’ Track at the RSA Conference. Cham: Springer International Publishing, 2020: 364-390.
  9. [BMTH21] Bossuat J P, Mouchet C, Troncoso-Pastoriza J, et al. Efficient bootstrapping for approximate homomorphic encryption with non-sparse keys[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2021: 587-617.

文章目录

  • RNS-CKKS
    • Fast Base Conversion
    • Approximate Modulus Switching
    • Full RNS Variant CKKS
  • Efficient Bootstrapping with Non-Sparse Keys
    • Improved Key-switch
    • Improved Hoisted-Rotations
    • Double-hoisting BSGS algorithm
    • Bootstrapping for RNS-CKKS

RNS-CKKS

[CHKKS18a] 提出了 CKKS 的 RNS 变体。

Fast Base Conversion

一般地 FHE 需要很大的模数 Q Q Q,将它写作 Q = ∏ i = 1 L q i Q=\prod_{i=1}^L q_i Q=i=1Lqi,满足 q i = 1 ( m o d 2 N ) q_i=1\pmod{2N} qi=1(mod2N),我们简记 Q i = q 1 ⋯ q i Q_i=q_1\cdots q_i Qi=q1qi,集合 { q i } \{q_i\} {qi} 称为 RNS Base,它们的大小至多为 64 64 64 比特。我们希望 FHE 的全部运算都是单精度的(现代计算机的机器字),也就是全部运算都在 RNS 下完成,而不需要多精度算术。

[BEHZ16] 提出了可以在不同的 RNS(扩展到新的 RNS Base 对应的系数)之间快速转换的算法。将环元素 a ∈ R Q a \in \mathcal R_Q aRQ 从模数 Q = q 1 ⋯ q l Q=q_1\cdots q_l Q=q1ql 下的 [ a ] Q [a]_Q [a]Q 转换到模数 P = p 1 ⋯ p k P=p_1\cdots p_k P=p1pk 下的 [ [ a ] Q ] P [[a]_Q]_P [[a]Q]P,可以直接在 RNS 下计算:
FastBaseExt ( a , Q , P ) = { ∑ i = 1 l [ a ⋅ ( Q q i ) − 1 ] q i ⋅ Q q i ( m o d p j ) } j = 1 , ⋯   , k \text{FastBaseExt}(a,Q,P) = \left\{ \sum_{i=1}^l \left[ a \cdot \left(\dfrac{Q}{q_i}\right)^{-1} \right]_{q_i} \cdot \dfrac{Q}{q_i} \pmod{p_j} \right\}_{j=1,\cdots,k} FastBaseExt(a,Q,P)= i=1l[a(qiQ)1]qiqiQ(modpj) j=1,,k
我们简记 q i ∗ : = Q / q i q_i^*:=Q/q_i qi:=Q/qi q ~ i : = ( Q / q i ) − 1 ( m o d q i ) \tilde q_i:=(Q/q_i)^{-1} \pmod{q_i} q~i:=(Q/qi)1(modqi),满足 q i ∗ ⋅ q ~ i ≡ 1 ( m o d q i ) q_i^* \cdot \tilde q_i\equiv 1 \pmod{q_i} qiq~i1(modqi),那么根据 CRT 合成定理,转换的结果是:
∑ i [ a ⋅ q ~ i ] q i ⋅ q i ∗ = [ a ] Q + u ⋅ Q ∈ Z \sum_i [a\cdot \tilde q_i]_{q_i} \cdot q_i^* = [a]_Q + u \cdot Q \in \mathbb Z i[aq~i]qiqi=[a]Q+uQZ
其中的 ∥ u ∥ ∞ ≤ l / 2 \|u\|_\infty \le l/2 ul/2(采用中心化的取模运算)称为 Q Q Q-overflow,因此算法 FastBaseExt ( a , Q , P ) \text{FastBaseExt}(a,Q,P) FastBaseExt(a,Q,P) 输出的只是 [ [ a ] Q ] P [[a]_Q]_P [[a]Q]P近似值 [ [ a ] Q + u ⋅ Q ] P [[a]_Q + u \cdot Q]_P [[a]Q+uQ]P

后续 [HPS19] 给出了纠正错误 u u u 的浮点数算法,不过在 [CHKKS18a] 中并不需要纠错,因为 CKKS 本身就是近似计算的。

特别地,如果 Q = q Q=q Q=q 是单个素数,那么 q ∗ = q ~ = 1 q^*=\tilde q=1 q=q~=1,从而就有 FastBaseExt ( a , q , P ) = { [ a ] q ( m o d p j ) } j \text{FastBaseExt}(a,q,P)=\{[a]_{q} \pmod{p_j}\}_j FastBaseExt(a,q,P)={[a]q(modpj)}j,并且 u = 0 u=0 u=0 没有错误。这个特例被用于 CKKS 的相邻模数之间的 RS 过程:输入 a ∈ R Q l a \in R_{Q_l} aRQl 的 RNS 表示,那么 [ q l − 1 ⋅ ( [ a ] q j − [ a ] q l ) ] q j , ∀ 0 ≤ j < l [q_l^{-1} \cdot ([a]_{q_j}-[a]_{q_l})]_{q_j}, \forall 0\le j<l [ql1([a]qj[a]ql)]qj,∀0j<l 就是 ⌊ a / q l ⌉ ∈ R Q l − 1 \lfloor a/q_l\rceil \in R_{Q_{l-1}} a/qlRQl1 的 RNS 表示。

Approximate Modulus Switching

原始的 CKKS 的模数链,形如 Q l = q 0 ⋅ q l Q_l = q_0 \cdot q^l Ql=q0ql,其中 q q q 是某个固定的 Base(例如 q = 2 q=2 q=2)。显然它与 RNS 不兼容,因此无法使用 Double-CRT 来加速(multi-precision FFT 的速度很慢)

[CHKKS18a] 提出了 Approximate Base 解决这个问题,代价是引入了额外的舍入误差。我们选取 C = { q 0 , q 1 , ⋯   , q L } \mathcal C = \{q_0,q_1,\cdots,q_L\} C={q0,q1,,qL},满足 q j / q ∈ ( 1 − 2 − η , 1 + 2 − η ) , ∀ j = 1 , ⋯   , L q_j/q \in (1-2^{-\eta},1+2^{-\eta}),\forall j=1,\cdots,L qj/q(12η,1+2η),j=1,,L(注意最底层的 q 0 q_0 q0 不需要),同时它们都是 NTT-friendly 的素数。定义 Q l = ∏ i = 0 l q l Q_l=\prod_{i=0}^l q_l Ql=i=0lql 是模数链,于是相邻的模数的比值都接近 q q q,利用 RNS Base 之间的转换,将 m m m 缩放为 q l − 1 ⋅ m q_l^{-1} \cdot m ql1m 的误差为 2 − η ⋅ ∣ q l − 1 ⋅ m ∣ 2^{-\eta} \cdot |q_l^{-1} \cdot m| 2ηql1m,应当使得 η \eta η 充分大(所以 q q q 也不会很小)。

模切换过程(提升、约简)会出现在同态乘法(之前、之后)以及秘钥切换(GHS、Hybrid)中,一般化地表示出: D = { p 0 , ⋯   , p k − 1 , q 0 , ⋯   , q l − 1 } \mathcal D = \{p_0,\cdots,p_{k-1},q_0,\cdots,q_{l-1}\} D={p0,,pk1,q0,,ql1},它分为两个子集 B = { p i } \mathcal B=\{p_i\} B={pi} C = { q j } \mathcal C=\{q_j\} C={qj},设置对应的模数 P = ∏ i p i P=\prod_i p_i P=ipi 以及 Q = ∏ j Q j Q=\prod_j Q_j Q=jQj

Modulus Raising:输入 a ∈ Z Q a \in \mathbb Z_{Q} aZQ 的 RNS 表示,输出 a ~ ∈ Z P Q \tilde a \in \mathbb Z_{PQ} a~ZPQ 的 RNS 表示,满足 a ≡ a ~   m o d   Q a \equiv \tilde a \bmod Q aa~modQ 以及 ∣ a ~ ∣ ≪ P Q |\tilde a| \ll PQ a~PQ(不需要具有相同的整数代表)

根据 Fast Base Conversion 的结果,它的 overflow 规模仅为 l / 2 ≪ P l/2 \ll P l/2P,因此获得的 [ a + u ⋅ Q ] P [a + u \cdot Q]_P [a+uQ]P 级联原本的 [ a ] Q [a]_Q [a]Q,就得到了满足要求的 [ a ~ ] P Q [\tilde a]_{PQ} [a~]PQ,用 CRT 验证一下:
a ~ = Q [ Q − 1 ] P ⋅ [ a + u Q ] P + P [ P − 1 ] Q ⋅ [ a ] Q = Q [ Q − 1 ] P ⋅ ( a + u Q + v P ) + P [ P − 1 ] Q ⋅ ( a + w Q ) = ( Q [ Q − 1 ] P + P [ P − 1 ] Q ) ⋅ a + u Q 2 [ Q − 1 ] P = a + u Q ⋅ ( t P + 1 ) = a + u Q ( m o d P Q ) \begin{aligned} \tilde a &= Q[Q^{-1}]_P \cdot [a+uQ]_P + P[P^{-1}]_Q \cdot [a]_Q\\ &= Q[Q^{-1}]_P \cdot(a+uQ+vP) + P[P^{-1}]_Q \cdot (a+wQ)\\ &= (Q[Q^{-1}]_P + P[P^{-1}]_Q) \cdot a + uQ^2[Q^{-1}]_P\\ &= a+uQ \cdot (tP+1)\\ &= a+uQ \pmod{PQ} \end{aligned} a~=Q[Q1]P[a+uQ]P+P[P1]Q[a]Q=Q[Q1]P(a+uQ+vP)+P[P1]Q(a+wQ)=(Q[Q1]P+P[P1]Q)a+uQ2[Q1]P=a+uQ(tP+1)=a+uQ(modPQ)
算法如下,

在这里插入图片描述

Modulus Reduction:输入 b ~ ∈ Z P Q \tilde b \in \mathbb Z_{PQ} b~ZPQ 的 RNS 表示,输出 b ∈ Z Q b \in \mathbb Z_{Q} bZQ 的 RNS 表示,满足 b ≈ P − 1 ⋅ b ~ b \approx P^{-1} \cdot \tilde b bP1b~(不需要等于实数除法的舍入)

由于 RNS 系统中无法计算带余除法,因此应当转化为整除法。我们简单从 b ~ \tilde b b~ 的 RNS 表示中截取出 [ b ~ ] P [\tilde b]_P [b~]P,然后利用 Fast Base Conversion 扩展出 [ [ b ~ ] P + u P ] Q [[\tilde b]_P + uP]_Q [[b~]P+uP]Q 部分,那么两者的级联就是 [ [ b ~ ] P + u P ] P Q [[\tilde b]_P + uP]_{PQ} [[b~]P+uP]PQ,将它从原本的 b ~ \tilde b b~ 中减掉。由于 ∣ ∣ u ∣ ∣ ∞ ≤ k / 2 ≪ Q ||u||_\infty \le k/2 \ll Q ∣∣uk/2Q,这就满足了要求:

b ~ − [ b ~ ] P + u P = P ⋅ ( ⌊ b ~ / P ⌉ + u ) \tilde b - [\tilde b]_P + uP = P \cdot \big(\lfloor\tilde b/P\rceil + u\big) b~[b~]P+uP=P(b~/P+u)
算法如下,

在这里插入图片描述

无论是 Modulus Raising 还是 Modulus Reduction,结果中都带有错误 u u u,这是近似的模切换。按照 word operation 为计算单位, C o n v B → C Conv_{B\to C} ConvBC C o n v C → B Conv_{C\to B} ConvCB 的复杂度都是 O ( k ⋅ l ) O(k \cdot l) O(kl) M o d U p C → D ModUp_{C \to D} ModUpCD 的复杂度为 O ( k ⋅ l ) O(k \cdot l) O(kl) M o d D o w n D → C ModDown_{D \to C} ModDownDC 的复杂度为 O ( k ⋅ l + l ) O(k \cdot l+l) O(kl+l)

Full RNS Variant CKKS

现在我们可以将原始的 CKKS 转化到 Full-RNS 版本。采用 [BMTH21] 的算法描述,我们可以将 Key-Switch 作为一个通用的中间模块,它的 KSK-Gen 可用于所有 pk 的生成,KS 过程作用在单个环元素上。采取 Hybrid 版本(BV 效率太低,GHS 有安全损失),设置 w = [ q i ∗ ⋅ q ~ i ] i ( m o d Q ) w = [q_i^* \cdot \tilde q_i]_i \pmod Q w=[qiq~i]i(modQ) 是 RNS Base(二进制分解与 RNS 不兼容),对于 ∀ d ∈ R \forall d \in R dR 满足线性运算 d = ∑ i [ d ] q i ⋅ w i ( m o d Q ) d=\sum_i [d]_{q_i} \cdot w_i \pmod Q d=i[d]qiwi(modQ)。当然,对于每个分量 [ d ] q i [d]_{q_i} [d]qi 可以进一步采用二进制分解,用更高的计算复杂度换取更小的噪声。

在这里插入图片描述
在这里插入图片描述

对于二的幂次 N ≥ 8 N\ge8 N8,总是有 Z N ∗ = ( 5 , − 1 ) \mathbb Z_N^* = (5,-1) ZN=(5,1),因此 5 5 5循环乘法群 Z N ∗ / ( − 1 ) \mathbb Z_N^*/(-1) ZN/(1) 的生成元。令 K = Q [ X ] / ( X N + 1 ) K=\mathbb Q[X]/(X^N+1) K=Q[X]/(XN+1) 是分圆数域,它的典范嵌入 σ : a ( X ) ↦ [ a ( ζ ) , a ( ζ 3 ) , ⋯   , a ( ζ 2 N − 1 ) ] \sigma: a(X) \mapsto [a(\zeta),a(\zeta^3),\cdots,a(\zeta^{2N-1})] σ:a(X)[a(ζ),a(ζ3),,a(ζ2N1)] 可以稍稍扭曲为
τ : a ( X ) ↦ [ a ( ζ ) , a ( ζ 5 ) , a ( ζ 25 ) , ⋯   ] \tau: a(X) \mapsto [a(\zeta),a(\zeta^5),a(\zeta^{25}),\cdots] τ:a(X)[a(ζ),a(ζ5),a(ζ25),]
将它用于 SIMD 编码函数,那么自同构 X ↦ X 5 X \mapsto X^5 XX5(所生成的循环子群)可用于自然的槽旋转,剩下的一个非凡的自同构 X ↦ X − 1 X \mapsto X^{-1} XX1 用于槽的复共轭。利用 KSK-Gen 生成对应的 KSK,当然 CKKS 的明文槽非常多(均摊自举比 BGV/BFV 快的多,甚至比 TFHE 还快),采取 [HS13] 的有向图路径分解的思路,可以有效减少存储开销。

RNS-CKKS 的同态运算的基本单元都是 word operation,不会出现 Multi-percision 表示,其中的乘法是在 DCRT 表示下计算的,而 RS、KS 则是在 RNS 表示下计算的,因此 NTT/INTT 占据了主要的开销。按照 [CHKKS18a] 的描述,使用 GHS 版本的重线性化、不追踪缩放因子,具体的算法为:

在这里插入图片描述

根据 [CHKKS18a],在某参数集下 RNS-CKKS 的各个功能的计算速度都大约提升了 10 倍。由于原始的基 q q q 和近似基 q j q_j qj 之间的差距,RNS-CKKS 的计算精度降低了 3 比特。可以利用 ( Q l , Δ ) (Q_l,\Delta) (Ql,Δ) 等标签追踪各个密文的实际缩放因子(根据所做的运算不同,相同 level 的密文的 Δ \Delta Δ 不一定相同),来消除这个精度损失。按照 [BMTH21],同态运算的 API 形如:

在这里插入图片描述

Efficient Bootstrapping with Non-Sparse Keys

[BMTH21] 提出了目前最快的 RNS-CKKS 自举算法,主要贡献是改进了:切比雪夫基下多项式求值的 BSGS 算法、明文槽线性变换的 BSGS 算法。前者是对噪声的优化,使得两个相加的密文总是具有恰好相同的缩放因子,因此消除了统一缩放因子时的近似噪声;后者是对 [HS18] 的进一步优化,将公共的运算提取合并在一起。自举算法还是按照 [CHKKS18b] 的框架,混合使用 [CHH18] [CCS19] 的 FFT-like 稀疏分解以及所改进的 BSGS 算法,对于不同的参数分别使用 [CCS19] 和 [HK20] 的同态取模算法。[BMTH21] 的自举算法支持稠密秘密,而之前的都仅考虑稀疏秘密。

Improved Key-switch

Mult 和 Rotation 都是依赖于 KS 过程的,[BMTH21] 采用了 Hybrid 版本。由于 RNS 系统中的素数较多,导致 RNS 分解后的 KSK 规模变大。可以类似于 [HS13] 将若干个素数合并为 digit,减小 RNS 向量的长度。

原本的 RNS Base 是素数集合 B = { q 0 , q 1 , ⋯   , q L } \mathcal B = \{q_0,q_1,\cdots,q_L\} B={q0,q1,,qL},选取合适的 α \alpha α β = ⌈ ( L + 1 ) / α ⌉ \beta=\lceil(L+1)/\alpha\rceil β=⌈(L+1)/α,设置 q α , i = ∏ j = α i min ⁡ ( α ( i + 1 ) − 1 , L ) q j q_{\alpha,i} = \prod_{j=\alpha i}^{\min(\alpha(i+1)-1,L)} q_j qα,i=j=αimin(α(i+1)1,L)qj 是第 i i i 个长度 α \alpha α 区间的素数的乘积,那么 C = { q α , 0 , ⋯   , q α , β − 1 } \mathcal C = \{q_{\alpha,0},\cdots, q_{\alpha,\beta-1}\} C={qα,0,,qα,β1} 依旧是 Q L Q_L QL 的一组 RNS Base

我们设置 q α , i ∗ = Q L / q α , i q_{\alpha,i}^*=Q_L/q_{\alpha,i} qα,i=QL/qα,i 以及 q ~ α , i = q α , i − 1 ( m o d q α , i ) \tilde q_{\alpha,i} = q_{\alpha,i}^{-1} \pmod{q_{\alpha,i}} q~α,i=qα,i1(modqα,i),那么 w i = q α , i ∗ q ~ α , i , 0 ≤ i < β w_i=q_{\alpha,i}^* \tilde q_{\alpha,i}, 0 \le i<\beta wi=qα,iq~α,i,0i<β 可以作为 RNS 分解向量。选取足够大的特殊素数 P = ∏ j = 0 α − 1 p j P=\prod_{j=0}^{\alpha-1} p_j P=j=0α1pj 满足 P ≥ q α , i , ∀ i P \ge q_{\alpha,i}, \forall i Pqα,i,i,将它用于 KS 过程的噪声控制。对应的 KSK 规模缩小了约 α \alpha α 倍(但是 P P P 增大了),
( s w k i 0 , s w k i 1 ) = ( [ − a i s + s ′ P w i + e i ] P Q L , [ a i ] P Q L ) , 0 ≤ i < β (swk_i^0, swk_i^1) = ([-a_is + s'Pw_i + e_i]_{PQ_L}, [a_i]_{PQ_L}), 0 \le i < \beta (swki0,swki1)=([ais+sPwi+ei]PQL,[ai]PQL),0i<β
注意,KSK 是包含 β \beta β 个分量的密文向量(加密了 s ′ P w s'Pw sPw 的各个分量 ),每个分量都存储为 RNS 表示(长度 α + L + 1 \alpha+L+1 α+L+1 的单精度向量)。执行 KS 过程时,

  1. 输入密文 c c c 的关于 B \mathcal B B 的 RNS 表示,将它按照 C \mathcal C C 计算出各个 c ( m o d q α , i ) c \pmod{q_{\alpha,i}} c(modqα,i),其实就是简单截断 q α , i q_{\alpha,i} qα,i 所在的 RNS 分量
  2. 然后使用 FastBaseExt 将它们都扩展为 P Q L PQ_L PQL 上的 RNS 表示,这就得到了 c c c 关于 w w w 的 RNS 分解(也就是 c = ∑ i [ c ] q α , i w i ( m o d P Q L ) c=\sum_i [c]_{q_{\alpha,i}} w_i \pmod{PQ_L} c=i[c]qα,iwi(modPQL)),它包含 β \beta β 个长度为 α + L + 1 \alpha + L+1 α+L+1 的 RNS 表示(长度 β \beta β 的分解向量)
  3. 最后将这个分解出的向量和 KSK 做内积(需要 NTT/INTT),计算出 c ⋅ s ′ P c \cdot s'P csP,最后做实数除法并舍入
  4. 上述所有运算都是单精度的,不需要高精度算术

在这里插入图片描述

Improved Hoisted-Rotations

同态自同构(使用 BV-KS)包含了三个步骤:自同构(就是系数置换)、数字分解(需要 NTT/INTT 做 DCRT 和 RNS 之间的转换)、密钥切换(同态的线性解密)。

[HS18] 观察到自同构 ϕ k : X ↦ X 5 k \phi_k: X \mapsto X^{5^k} ϕk:XX5k 不会严重地改变范数,它可以和二进制分解交换。同样的,它也和 RNS 分解交换,满足 [ ϕ k ( a ) ] q α , i = ϕ k ( [ a ] q α , i ) [\phi_k(a)]_{q_{\alpha,i}} = \phi_k([a]_{q_{\alpha,i}}) [ϕk(a)]qα,i=ϕk([a]qα,i)。当多个 rotation 作用到同一个密文上,我们可以把分解步骤交换到自同构步骤之前,从而复用 { [ a ] q α , i } i \{[a]_{q_{\alpha,i}}\}_i {[a]qα,i}i 结果(代价是每个碎片都需要做自同构),这被称为 Hoisting 技术

虽然自同构本身只是线性复杂度的系数置换,[BMTH21] 进一步将自同构交换到密钥切换的后面,从而只需要对内积结果(不是碎片)做一次自同构。确切地说,将原始的用 s s s 加密 ϕ k ( s ) P w i \phi_k(s)Pw_i ϕk(s)Pwi r o t k rot_k rotk,修改为用 ϕ k − 1 ( s ) \phi_k^{-1}(s) ϕk1(s) 加密 s P w i sPw_i sPwi(执行 KS 时的私钥还是 s s s,后续的自同构将 ϕ k − 1 ( s ) \phi_k^{-1}(s) ϕk1(s) 转化回 s s s),
( r o t k , i 0 ‾ , r o t k , i 1 ‾ ) = ( [ − a i ϕ k − 1 ( s ) + s P w i + w i ] P Q L , [ a i ] P Q L ) (\overline{rot_{k,i}^0},\overline{rot_{k,i}^1}) = ([-a_i\phi_k^{-1}(s) + sPw_i + w_i]_{PQ_L}, [a_i]_{PQ_L}) (rotk,i0,rotk,i1)=([aiϕk1(s)+sPwi+wi]PQL,[ai]PQL)
那么如下的三种计算方法(BV11、HS18、BMTH21)是等价的,
⟨ d e c o m p ( ϕ k ( a ) ) , r o t k ⟩ = ⟨ ϕ k ( d e c o m p ( a ) ) , r o t k ⟩ = ϕ k ( ⟨ d e c o m p ( a ) , r o t k ‾ ⟩ ) \langle decomp(\phi_k(a)), rot_k\rangle = \langle \phi_k(decomp(a)), rot_k\rangle = \phi_k(\langle decomp(a), \overline{rot_k}\rangle) decomp(ϕk(a)),rotk=ϕk(decomp(a)),rotk=ϕk(⟨decomp(a),rotk⟩)
总计一次分解、均摊一次自同构的多个槽旋转,算法步骤重排为:数字分解、同态内积、模切换(这是 GHS-KS 带来的,也需要 NTT/INTT)、自同构。

在这里插入图片描述

Double-hoisting BSGS algorithm

[HS18] 将矩阵表示为对角线形式,提出了复杂度为 O ( n ) O(\sqrt n) O(n ) 次槽旋转的 BSGS 算法,这里的 n n n 表示非零的对角线的个数。分解 n = n 1 n 2 n=n_1n_2 n=n1n2,当 n 1 ≈ n 2 n_1 \approx n_2 n1n2 时最优。

在这里插入图片描述

以单精度的模乘运算作为单位,[BMTH21] 分析了槽旋转的四个步骤的复杂度,发现主要的瓶颈是数字分解和模切换(都需要 NTT/INTT 转换),

在这里插入图片描述

在算法 5 中,step 2 需要 n 1 n_1 n1 次槽旋转,step 10 需要 n 2 n_2 n2 次槽旋转,它们各自都需要分别执行它们内部的数字分解和模切换。我们可以对它做两层优化,

  1. [HS13] 考虑了 step 2 的那些旋转,利用 Hoisted-Rotations 复用数字分解的结果
  2. [BMTH21] 考虑了 step 10 的那些旋转,交换模切换和自同构的顺序,对加和的结果统一执行

在这里插入图片描述

上述算法的复杂度是: n 1 + n 2 n_1+n_2 n1+n2 次的内积和自同构, n 2 + 1 n_2+1 n2+1 次的模切换和数字分解。由于前者复杂度较低,后者复杂度较高,因此最优化的参数选取不再是 n 1 ≈ n 2 n_1 \approx n_2 n1n2,[BMTH21] 确定出最佳选取移动到了 8 ≤ n 1 / n 2 ≤ 16 8 \le n_1/n_2 \le 16 8n1/n216(分析它们的单精度模乘的数量),并且当 n = 128 n=128 n=128 左右获得最佳的效率提升。对于稠密矩阵,可以将它分解为一些稀疏对角线的因子(例如 [CHH18] 和 [CCS19] 对于 DFT 矩阵的 FFT-like 算法),使得它们具有大约 128 条非零对角线。

在这里插入图片描述

Bootstrapping for RNS-CKKS

注意 CKKS 自举并不减小噪声(降低明文精度),而只能提升模数(增大计算容量):将 [ m + e ] Q 0 [m+e]_{Q_0} [m+e]Q0 强行提升为 [ m + e + u Q 0 ] Q L [m+e+uQ_0]_{Q_L} [m+e+uQ0]QL,再利用近似的取模函数获得 [ m + e ′ ] Q L − k [m+e']_{Q_{L-k}} [m+e]QLk,其中 ∥ e ′ ∥ > ∣ ∣ e ∣ ∣ \|e'\| > ||e|| e>∣∣e∣∣

自举流程为:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1489869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用可调电源给 GSX-250R 摩托车电瓶充电

查看如何用可调电源充电瓶的教程请直接下滑至“总结”栏目。 天气很好&#xff0c;想骑车去玩一下&#xff0c;发现摩托车两个月之后摩托车电瓶只有10V左右了&#xff0c;不足以启动摩托车&#xff0c;貌似是这次电瓶电压确实过低了&#xff0c;推了好几次没推起来&#xff08…

蓝桥杯前端Web赛道-新鲜的蔬菜

蓝桥杯前端Web赛道-新鲜的蔬菜 题目链接&#xff1a;1.新鲜的蔬菜 - 蓝桥云课 (lanqiao.cn) 题目要求如下&#xff1a; 其实很容易联想到使用flex布局&#xff0c;这是flex布局一种非常经典的骰子布局&#xff0c;推荐Flex 布局教程&#xff1a;实例篇 - 阮一峰的网络日志 (r…

如何利用Flutter来写后端 服务端应用

前言 Flutter是谷歌推出的一款跨平台开发框架&#xff0c;现在属于此领域star最多的框架&#xff0c;其被广泛应用于构建前台界面&#xff0c;但或许很少人知道&#xff0c;他也可以写后端应用。 本文主角 flutter非常著名的getx库推出的get server jonataslaw/get_server:…

如何在 Windows 11/10 中合并分区而不丢失数据

在本文中&#xff0c;我们将了解如何在 Window 11/10 中合并分区而不丢失个人数据。每个人都会觉得需要扩大驱动器/分区的容量&#xff0c;但是在计算机中重新安装Windows对他们来说很麻烦。在 Windows PC 中合并分区的方法有很多种。我们将在下面逐步讨论一些工作方法&#xf…

docker 常用命令大全(基础、镜像、容器、数据卷)

文章目录 1.docker基础命令2.docker镜像命令2.1 镜像名称2.2 镜像命令2.3 案例1--拉取、查看镜像2.4 案例2--保存、导入镜像 3.docker容器命令3.1 容器命令3.2 案例--创建并运行一个容器3.3 案例--进入容器&#xff0c;修改文件3.4 小结 4.数据卷4.1 什么是数据卷4.2 数据卷操作…

学习python的地11天,昨天偶遇她失败了

昨天是目标偶遇她的第二次&#xff0c;我猜测是由于没算准时间&#xff0c;故而今日计划8:15那班车。 如果今日没有偶遇上&#xff0c;那就明天呗&#xff0c;后天&#xff0c;大后天&#xff0c;就像随机数一样&#xff0c;总有命中那一刻 昨天&#xff0c;我尝试给我的linu…

适用于 Windows 的 5 款最佳免费数据恢复软件榜单

每个计算机用户都曾经历过数据丢失的情况。很容易错误地删除重要的文件和文件夹&#xff0c;当发生这种情况时&#xff0c;可能会导致不必要的心痛和压力。值得庆幸的是&#xff0c;可以恢复 Windows PC 上丢失的数据。在本文中&#xff0c;我们将分享您可以使用的五种最佳 Win…

【Android 内存优化】怎么理解Android PLT hook?

文章目录 前言什么是hook?PLT hook作用基本原理PLT hook 总体步骤 代码案例分析方案预研面临的问题怎么做&#xff1f;ELFELF 文件头SHT&#xff08;section header table&#xff09; 链接视图&#xff08;Linking View&#xff09;和执行视图&#xff08;Execution View&…

Linux系统宝塔面板搭建Typecho博客并实现公网访问本地网站【内网穿透】

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&#…

【MGR】MySQL Group Replication 背景

目录 17.1 Group Replication Background 17.1.1 Replication Technologies 17.1.1.1 Primary-Secondary Replication 17.1.1.2 Group Replication 17.1.2 Group Replication Use Cases 17.1.2.1 Examples of Use Case Scenarios 17.1.3 Group Replication Details 17.1…

初学arp欺骗

首先准备一台靶机这里用虚拟机的win10 已知网关与ip地址&#xff08;怕误伤&#xff09; 现在返回kali从头开始 首先探测自己的网关 然后扫内网存活的ip 发现有3台 用nmap扫一下是哪几台 成功发现我们虚拟机的ip 现在虚拟机可以正常访问网络 接下来直接开梭 ip网关 返回虚拟机…

十秒学会Ubuntu命令行:从入门到进阶

一、引言 在使用Ubuntu操作系统时&#xff0c;命令行界面&#xff08;CLI&#xff09;是不可或缺的一部分。对于初学者来说&#xff0c;掌握基本的命令行操作可以帮助他们更高效地管理系统和软件。本文将介绍一些常见的Ubuntu命令以及如何解决与命令行相关的问题。 二、常用Ubu…

Java两周半速成之路(第十天)

一.String和StringBuffer的相互转换 1.适用场景&#xff1a; 场景1&#xff1a;可以需要用到另一种类中的方法&#xff0c;来方便处理我们的需求 场景2&#xff1a;方法传参 场景一演示&#xff1a; /*String和StringBuffer的相互转换A<-->B什么场景需要做转换操作&…

字节跳动发布SDXL-Lightning模型,支持WebUI与ComfyUI双平台,只需一步生成1024高清大图!

字节跳动发布SDXL-Lightning模型,WebUI与ComfyUI平台,只需一步生成1024高清大图,需要的步数比 LCM 更低了! 什么是SDXL-Lightning: SDXL-Lightning 是一种快速的文本到图像生成模型。SDXL-Lightning模型的核心优势在于其创新的蒸馏策略,它可以通过几个步骤生成高质量的 1…

【数据分享】1988~2020年中国月度1KM植被指数NDVI空间分布数据集

各位同学们好&#xff0c;今天和大伙儿分享的是1988~2020年中国月度1KM植被指数NDVI空间分布数据集。如果大家有下载处理数据等方面的问题&#xff0c;您可以私信或评论。 徐新良.中国月度植被指数&#xff08;NDVI&#xff09;空间分布数据集.中国科学院资源环境科学数据中心数…

SpringCloud-RabbitMQ消息模型

本文深入介绍了RabbitMQ消息模型&#xff0c;涵盖了基本消息队列、工作消息队列、广播、路由和主题等五种常见消息模型。每种模型都具有独特的特点和适用场景&#xff0c;为开发者提供了灵活而强大的消息传递工具。通过这些模型&#xff0c;RabbitMQ实现了解耦、异步通信以及高…

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据&#xff1a;用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素&#xff1a;数据的基本单位&#xff0c;一个数据元素可由若干数据项组成。 数据结构&#xff1a;指相互之间存在一种或多种特…

C++:Vector的使用

一、vector的介绍 vector的文档介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以…

解决win10系统cmd命令无法使用ssh问题

目录 问题说明&#xff1a;在使用ssh命令连接虚拟机地址时&#xff0c;出现了以下报错&#xff1a;​编辑 解决方法如下&#xff1a; 1.打开Windows设置&#xff0c;搜索点击添加可选功能&#xff1a; 2.点击添加功能&#xff1a; 3.安装Open SSH客户端和Open SSH服务器: …

基于Python3的数据结构与算法 - 10 计数排序

一、问题 对列表进行排序&#xff0c;已知列表中的数范围都在0到100之间。设计时间复杂度为O(n)的算法。 二、解决思路 我们已知数字的范围&#xff0c;那么我们可以将数字的个数得到&#xff1a; 例如&#xff1a;有一个0~5的列表 [1,3,2,4,1,2,3,1,3,5] 则共有0个0&am…