Bit Extraction and Bootstrapping for BGV/BFV

参考文献:

  1. [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.
  2. [AP13] Alperin-Sheriff J, Peikert C. Practical bootstrapping in quasilinear time[C]//Annual Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013: 1-20.
  3. [HS15] Halevi S, Shoup V. Bootstrapping for helib[J]. Journal of Cryptology, 2021, 34(1): 7.
  4. [CH18] Chen H, Han K. Homomorphic lower digits removal and improved FHE bootstrapping[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2018: 315-337.
  5. [GV23] Geelen R, Vercauteren F. Bootstrapping for BGV and BFV Revisited[J]. Journal of Cryptology, 2023, 36(2): 12.

文章目录

  • GHS12
    • Extracting the Top and Bottom Bits
    • Lower-Degree Bit Extraction
    • Bootstrapping with Packed Ciphertexts
  • AP13
  • HS15
    • Hypercube structure
    • Recryption Procedure
    • Linear Transformations
    • Parameters for Recryption
  • CH18
    • Digit Removal Algorithm
    • Bootstrapping for FV and BGV

GHS12

多项式环 R : = Z [ X ] / ( F ( X ) ) R:=\mathbb Z[X]/(F(X)) R:=Z[X]/(F(X)),明文空间 p = 2 p=2 p=2,密文模数 gcd ⁡ ( q , p ) = 1 \gcd(q,p)=1 gcd(q,p)=1BGV 方案的解密分为三步:

  1. 计算私钥上的依赖密文的线性函数, Z = ⟨ c , s ⟩   m o d   F Z=\langle c,s\rangle \bmod F Z=c,smodF
  2. 模掉密文模数, e = [ Z ] q e = [Z]_q e=[Z]q,这里 e = 2 u + μ ∈ R e=2u+\mu \in R e=2u+μR
  3. 提取最低比特位, μ = [ e ] 2 \mu = [e]_2 μ=[e]2

[GHS12] 的一个重要观察是:如果 q = 2 r + 1 q=2^r+1 q=2r+1,那么解密过程可以简化。我们用 z [ i ] z[i] z[i] 表示整系数 z z z 的第 i i i 个比特(索引从 0 0 0 开始),用 z [ j : i ] z[j:i] z[j:i] 表示截取部分比特。

  1. 假如 Z Z Z 某个系数 z z z 的规模远小于 q 2 q^2 q2 量级(这是合理的,因为 c c c 的系数规模仅为 q q q 量级),那么必定有
    [ [ z ] q ] 2 = [ z [ r − 1 : 0 ] − z [ 2 r − 1 : r ] ] 2 = [ z [ 0 ] − z [ r ] ] 2 = z [ r ] ⊕ z [ 0 ] \begin{aligned} \big[[z]_q\big]_2 &= \big[z[r-1:0] - z[2r-1:r]\big]_2\\ &= \big[z[0] - z[r]\big]_2\\ &= z[r] \oplus z[0] \end{aligned} [[z]q]2=[z[r1:0]z[2r1:r]]2=[z[0]z[r]]2=z[r]z[0]

  2. (仅在自举时)采用新的明文空间 p ′ = 2 r + 1 p'=2^{r+1} p=2r+1,我们将私钥 s s s 作为空间 R p ′ R_{p'} Rp 中的明文,加密为 BK 公开

  3. 同态计算出 Z ( m o d p ′ ) Z \pmod{p'} Z(modp),它的各个系数恰为 z [ r : 0 ] z[r:0] z[r:0],我们只需再同态提取出 z [ r ] z[r] z[r] z [ 0 ] z[0] z[0] 即可

现在的问题就是,如何同态提取出 R p ′ R_{p'} Rp 的 MSB 和 LSB?

Extracting the Top and Bottom Bits

[GHS12] 的另一个重要观察是:因为 p ′ p' p 是二的幂次,从而有
[ z 2 ] p ′ = [ ( z [ r : 1 ] ⋅ 2 k + z [ 0 ] ) 2 ] p ′ = [ z [ r : 1 ] 2 ⋅ 2 2 k + z [ r : 1 ] ⋅ z [ 0 ] ⋅ 2 k + 1 + z [ 0 ] ] p ′ = [ z [ r : 1 ] 2 ⋅ 2 k − 1 + z [ r : 1 ] ⋅ z [ 0 ] ] p ′ / 2 k + 1 ⋅ 2 k + 1 + z [ 0 ] \begin{aligned} \big[z^2\big]_{p'} &= \big[(z[r:1] \cdot 2^{k} + z[0])^2\big]_{p'}\\ &= \big[z[r:1]^2 \cdot 2^{2k} + z[r:1] \cdot z[0] \cdot 2^{k+1} + z[0]\big]_{p'}\\ &= \big[z[r:1]^2 \cdot 2^{k-1} + z[r:1] \cdot z[0]\big]_{p'/2^{k+1}} \cdot 2^{k+1} + z[0] \end{aligned} [z2]p=[(z[r:1]2k+z[0])2]p=[z[r:1]222k+z[r:1]z[0]2k+1+z[0]]p=[z[r:1]22k1+z[r:1]z[0]]p/2k+12k+1+z[0]
它保持 LSB 不变,在 LSB 的高位不断插入零

因此,对于任意的整数 z = ∑ i = 0 r 2 i z [ i ] z=\sum_{i=0}^r 2^i z[i] z=i=0r2iz[i],初始化 w 0 : = z w_0:=z w0:=z,计算出
w i : = z − ∑ j = 0 i − 1 2 j w j 2 i − j ( m o d 2 r + 1 ) 2 i w_i := \frac{z-\sum_{j=0}^{i-1}2^jw_j^{2^{i-j}} \pmod{2^{r+1}}}{2^i} wi:=2izj=0i12jwj2ij(mod2r+1)
那么就有 w i [ 0 ] = z [ i ] , ∀ i w_i[0] = z[i],\forall i wi[0]=z[i],i,这便提取出了 MSB 和 LSB。其中的除法 a / 2 i a/2^i a/2i 是整除的,因此可以直接计算 c t ⋅ [ 2 − i ] q ct \cdot [2^{-i}]_{q} ct[2i]q 即可。副作用是噪声 p ′ u p'u pu 也缩放为了 p ′ 2 − i u = 2 r − i + 1 u p'2^{-i}u = 2^{r-i+1}u p2iu=2ri+1u(侵蚀明文空间高位),因此输出的是 w i ∈ Z 2 r − i + 1 w_i \in \mathbb Z_{2^{r-i+1}} wiZ2ri+1,特别地 w 0 ∈ Z 2 r + 1 w_0 \in \mathbb Z_{2^{r+1}} w0Z2r+1 以及 w r = Z 2 w_r = \mathbb Z_{2} wr=Z2。当然,这并不影响两者的加和,
w r + w 0 ≡ z [ r ] ⊕ z [ 0 ] ∈ Z 2 w_r+w_0 \equiv z[r] \oplus z[0] \in \mathbb Z_2 wr+w0z[r]z[0]Z2
算法如图所示:

在这里插入图片描述

Lower-Degree Bit Extraction

由于自举需要的明文模数 p ′ = 2 r + 1 p'=2^{r+1} p=2r+1 其规模依赖于密文模数 q = 2 r + 1 q=2^r+1 q=2r+1,参数 r r r 越小,则比特提取程序的计算速度和乘法深度都可以降低。[GHS12] 给出了优化技术:在密文 ( c 0 , c 1 ) ( m o d q ) (c_0,c_1) \pmod q (c0,c1)(modq) 上添加一些 q q q 的倍数,使得它们的系数都整除 2 r ′ , 1 ≤ r ′ < r 2^{r'},1\le r'<r 2r,1r<r,记为 ( c 0 ′ , c 1 ′ ) (c_0',c_1') (c0,c1),易知它加密相同的消息。

只要 c t ′ ct' ct 的系数依旧远小于 q 2 q^2 q2 规模,令 Z ′ = c 0 ′ + c 1 ′ ⋅ s Z'=c_0'+c_1' \cdot s Z=c0+c1s,易知也有 2 r ′ ∣ Z ′ 2^{r'}|Z' 2rZ,因此 z ′ [ 0 ] = 0 z'[0]=0 z[0]=0,从而有 μ = z ′ [ r ] \mu = z'[r] μ=z[r]。进一步的,我们将 ( c 0 ′ , c 1 ′ ) (c_0',c_1') (c0,c1) 整除(等价于求逆)掉 2 r ′ 2^{r'} 2r 成为 ( c 0 ′ ′ , c 1 ′ ′ ) (c_0'',c_1'') (c0′′,c1′′),那么就有 μ = z ′ ′ [ r − r ′ ] \mu = z''[r-r'] μ=z′′[rr],现在只需要明文模数 p ′ = 2 r − r ′ + 1 p'=2^{r-r'+1} p=2rr+1 即可。

Bootstrapping with Packed Ciphertexts

由于自举时采用明文空间 R p ′ R_{p'} Rp,其中 p ′ = 2 r + 1 p'=2^{r+1} p=2r+1 是二的幂次(而非素数),因此 SIMD 技术存在一些改变。任意素数 p p p(包括 p = 2 p=2 p=2),[GHS12] 将空间 Z / p t Z \mathbb Z/p^t\mathbb Z Z/ptZ 视为 p p p-adic integers 的精度 t t t 近似(局部域——p-进数),定义符号
Z p : = { ∑ i = 0 ∞ a i ⋅ p i ∣ a i ∈ F p } \mathbb Z_p := \left\{ \sum_{i=0}^\infty a_i \cdot p^i \Big| a_i \in \mathbb F_p \right\} Zp:={i=0aipi aiFp}
它是 p p p 上的形式幂级数,表示全部的 p p p-adic integers。当 t t t 趋于无穷, Z / p t Z \mathbb Z/p^t\mathbb Z Z/ptZ 的极限就是 Z p \mathbb Z_p Zp,因此 R p t R_{p^t} Rpt R p ∞ R_{p^\infty} Rp 的精度 t t t 近似。

Hensel Lifting:素数 p p p,整数 t ≥ 1 t \ge 1 t1,假设 G , H , F ∈ Z [ X ] G,H,F \in \mathbb Z[X] G,H,FZ[X] 是首一多项式,并且满足

  • 在模数 p p p 下, G , H G,H G,H 互素
  • G ⋅ H = F ( m o d p t ) G \cdot H = F \pmod{p^t} GH=F(modpt)

那么存在首一多项式 G ˉ , H ˉ ∈ Z [ X ] \bar G,\bar H \in \mathbb Z[X] Gˉ,HˉZ[X],使得

  • G ˉ ≡ G ( m o d p t ) \bar G \equiv G \pmod{p^t} GˉG(modpt) 以及 H ˉ ≡ H ( m o d p t ) \bar H \equiv H \pmod{p^t} HˉH(modpt)
  • G ˉ ⋅ H ˉ = F ( m o d p t + 1 ) \bar G \cdot \bar H = F \pmod{p^{t+1}} GˉHˉ=F(modpt+1)

这个定理可以用于将 p p p 下的解,提升到任意的 p t p^t pt 下的解(具体怎么构造的?论文没写):

  1. p p p 平方自由的多项式 F F F,它在模 p t p^t pt 下不可约,当仅当它在模 p p p 下不可约
  2. p p p 平方自由的多项式 F F F,它在模 p t p^t pt 下的分解,由它在模 p p p 下的分解唯一确定

这意味这,任意的 t ≥ 1 t \ge 1 t1 F ( X ) ( m o d p t ) F(X) \pmod{p^t} F(X)(modpt) 的明文槽,与 F ( X ) ( m o d p ) F(X) \pmod{p} F(X)(modp) 的基本相同。

给定分圆多项式 Φ m ( X ) \Phi_m(X) Φm(X),假设 p ( m o d m ) p \pmod m p(modm) 的乘法阶是 d d d,那么它在模 p p p 下可以分解为 l = ϕ ( m ) / d l=\phi(m)/d l=ϕ(m)/d 个不同的首一不可约因子,
Φ m ( X ) = ∏ j = 0 l = 1 F j ( X ) ( m o d p ) \Phi_m(X) = \prod_{j=0}^{l=1} F_j(X) \pmod{p} Φm(X)=j=0l=1Fj(X)(modp)
然后利用 Hensel Lifting 定理,可以获得提升后的分解:
Φ m ( X ) = ∏ j = 0 l = 1 F ˉ j ( X ) ( m o d p t ) \Phi_m(X) = \prod_{j=0}^{l=1} \bar F_j(X) \pmod{p^t} Φm(X)=j=0l=1Fˉj(X)(modpt)
其中 F ˉ j ≡ F j ( m o d p ) \bar F_j \equiv F_j \pmod{p} FˉjFj(modp) 是模 p t p^t pt 下首一不可约多项式。根据 CRT,明文槽的结构为:
( Z / p t Z ) [ X ] / ( F ˉ j ( X ) ) ≅ ( Z / p t Z ) [ X ] / ( G ( X ) ) , ∀ j = 0 , ⋯   , l − 1 (\mathbb Z/p^t\mathbb Z)[X]/(\bar F_j(X)) \cong (\mathbb Z/p^t\mathbb Z)[X]/(G(X)), \forall j=0,\cdots,l-1 (Z/ptZ)[X]/(Fˉj(X))(Z/ptZ)[X]/(G(X)),j=0,,l1
其中 G ( X ) G(X) G(X) 是任意的 F p \mathbb F_p Fp d d d 次不可约多项式,可以简单地取为 F ˉ 0 ( X ) \bar F_0(X) Fˉ0(X)。简记 R p t , d R_{p^t,d} Rpt,d 是这个明文槽代数结构,它包含了 d d d 次本原单位根。 G a l ( R p t ) ≅ ( Z / m Z ) ∗ \mathcal{Gal}(R_{p^t}) \cong (\mathbb Z/m\mathbb Z)^* Gal(Rpt)(Z/mZ),所有自同构形如 X ↦ X i X \mapsto X^i XXi

  • p p p 生成的 d d d 阶(乘法)循环群,它们是 Frobenius maps,独立地作用在各个槽上
  • 商群 ( Z / m Z ) ∗ / ( p ) (\mathbb Z/m\mathbb Z)^*/(p) (Z/mZ)/(p) 的阶 l = ϕ ( m ) / d l=\phi(m)/d l=ϕ(m)/d,它们组成了集合 [ l ] [l] [l] 上的 sharply transitive permutations,可用于实现明文槽直接的任意置换(Benes Network)

利用这些自同构,可以实现批处理的比特提取(相位的每个系数)。自举基本框架:

  1. 同态计算线性函数,获得 Z ( X ) ∈ R 2 r + 1 Z(X) \in R_{2^{r+1}} Z(X)R2r+1
  2. 同态计算 Inv-DFT,将 Z ( X ) Z(X) Z(X) 的各个系数转换到明文槽。实际上系数 z ∈ Z 2 r + 1 z \in \mathbb Z_{2^{r+1}} zZ2r+1 仅存放在 R 2 r + 1 , d R_{2^{r+1},d} R2r+1,d 的基环上(每个密文仅包含 l l l 个槽,共需要 d d d 个密文)
  3. 同态计算比特提取程序,计算出 z [ r ] ⊕ z [ 0 ] ∈ Z 2 z[r] \oplus z[0] \in \mathbb Z_2 z[r]z[0]Z2,它放在了 R 2 , d R_{2,d} R2,d 的基环上
  4. 同态计算 DFT,将明文槽中的 μ i \mu_i μi 打包为多项式 μ ( X ) ∈ R 2 \mu(X) \in R_2 μ(X)R2

AP13

[AP13] 采用了 [GHS12] 的简单解密方法,但是没有使用 Benes Network 去执行线性变换,而是利用了 Ring/Feild-Switching 技术,利用 Trace 在分圆塔上移动,实现线性变换的张量分解(tensor decomposition)。然而 [HS15] 指出:由于自举结果只有较少的 Level,因此张量分解也只能是粗粒度的,从而不消耗过多的 Level;同时为了安全性,因为噪声是超多项式的小,切换后的 Ring 应当维度很大;并且使用 [HS18] 的 BSGS 矩阵向量算法后,自举开销主要是比特提取,继续优化线性变换的意义不大。

HS15

[HS15] 最早发在 2015 美密上,之后整合了 [HS18] 的线性变换技术以及 [CH18] 的 “薄” 自举技术,还有一些其他的小优化,重新发表在 2021 密码学杂志上。

[HS15] 将 [GHS12] 的自举技术从只能处理特征 p = 2 p=2 p=2,给推广到可以处理任意的素数特征。首先我们确定整数 z z z 的 base- p p p representation,

  • p = 2 p=2 p=2 时,符号 [ z ] 2 [z]_2 [z]2 取值范围 { 0 , 1 } \{0,1\} {0,1}二补数表示(2’s-complement representation of signed integers)
    z [ j : i ] = ∑ k = i j − 1 2 k − i z [ k ] − 2 j − i z [ j ] z[j:i] = \sum_{k=i}^{j-1}2^{k-i}z[k] - 2^{j-i}z[j] z[j:i]=k=ij12kiz[k]2jiz[j]
    其中 z [ k ] ∈ { 0 , 1 } z[k] \in \{0,1\} z[k]{0,1},换句话说 MSB 表示了一个很大的负数

  • p > 2 p>2 p>2 时,符号 [ z ] p [z]_p [z]p 取值范围 [ − ( p − 1 ) / 2 , ( p − 1 ) / 2 ] [-(p-1)/2,(p-1)/2] [(p1)/2,(p1)/2]平衡 p p p 进制表示( balanced base-p representation of signed integers)
    z [ j : i ] = ∑ k = i j p k − i z [ k ] z[j:i] = \sum_{k=i}^{j}p^{k-i}z[k] z[j:i]=k=ijpkiz[k]
    其中 z [ k ] ∈ [ − ( p − 1 ) / 2 , ( p − 1 ) / 2 ] z[k] \in [-(p-1)/2,(p-1)/2] z[k][(p1)/2,(p1)/2]

Hypercube structure

HElib 实现中的本地明文空间是 R p r R_{p^r} Rpr,其中 p p p 是素数, r r r 是 Hensel Lifting 参数。密文模数 q q q,私钥 s ∈ R s \in R sR,密文 ( c 0 , c 1 ) ∈ R q (c_0,c_1) \in R_q (c0,c1)Rq,那么有 [ c 0 + c 1 ⋅ s ] q = m + p r e ∈ R [c_0+c_1 \cdot s]_q = m+p^re \in R [c0+c1s]q=m+preR,其中 e ∈ R e \in R eR 是短噪声, m ∈ R p r m \in R_{p^r} mRpr 是明文。

利用 Hensel Lifting 以及 CRT,分解出 Φ m ( X ) = ∏ i = 1 k F i ( X ) ( m o d p r ) \Phi_m(X) = \prod_{i=1}^k F_i(X) \pmod{p^r} Φm(X)=i=1kFi(X)(modpr),每个因子 F i F_i Fi 的度数都是 p ( m o d m ) p \pmod m p(modm) 的乘法阶 d d d,个数为 k = ϕ ( m ) / d k=\phi(m)/d k=ϕ(m)/d,同构为
R p r ≅ ⨁ i = 1 k Z [ X ] / ( p r , F i ( X ) ) R_{p^r} \cong \bigoplus_{i=1}^k \mathbb Z[X]/(p^r,F_i(X)) Rpri=1kZ[X]/(pr,Fi(X))
我们定义 E : = Z [ X ] / ( p r , F 1 ( X ) ) E := \mathbb Z[X]/(p^r,F_1(X)) E:=Z[X]/(pr,F1(X)) 是明文槽的代数结构,令 ζ \zeta ζ m m m-th 本原单位根 X X X E E E 中所在的剩余类,于是有 E = Z p r [ ζ ] E = \mathbb Z_{p^r}[\zeta] E=Zpr[ζ]

假设 S ⊆ Z S \subseteq \mathbb Z SZ商群 Z m ∗ / ( p ) \mathbb Z_m^*/(p) Zm/(p) 的完全代表(complete system of representatives), ∣ S ∣ = k |S|=k S=k,那么就有如下的同构映射,
R p r → ⨁ h ∈ S E α ↦ { α ( ζ h ) } h ∈ S \begin{aligned} R_{p_r} &\to \bigoplus_{h \in S} E\\ \alpha &\mapsto \{\alpha(\zeta^h)\}_{h \in S} \end{aligned} RprαhSE{α(ζh)}hS
自同构映射 τ j : α ( X ) ↦ α ( X j ) , ∀ j ∈ Z m ∗ \tau_j: \alpha(X) \mapsto \alpha(X^j), \forall j \in \mathbb Z_m^* τj:α(X)α(Xj),jZm,它们诱导了明文槽的超立方结构:HElib 记录了超立方基(hypercube basis ) g 1 , ⋯   , g n ∈ Z m ∗ g_1,\cdots,g_n \in \mathbb Z_m^* g1,,gnZm,以及它们的阶 l 1 , ⋯   , l n l_1,\cdots,l_n l1,,ln(并非是 Z m ∗ \mathbb Z_m^* Zm 中的乘法阶),使得 Z m ∗ / ( p ) \mathbb Z_m^*/(p) Zm/(p) 的代表为
S : = { g 1 e 1 ⋯ g n e n ∣ 0 ≤ e i < l i } S := \{g_1^{e_1} \cdots g_n^{e_n} | 0 \le e_i < l_i\} S:={g1e1gnen∣0ei<li}
那么,每个元素 h h h(明文槽)都对应一个索引 ( e 1 , ⋯   , e n ) (e_1,\cdots,e_n) (e1,,en),我们将 “固定其他坐标遍历 e i e_i ei 坐标的那些槽” 称为维度 i i i 上的超列(hypercolumn)。我们将超列中的每个槽 ( ⋯   , e i , ⋯   ) (\cdots,e_i,\cdots) (,ei,) 映射到 ( ⋯   , e i + v ( m o d l i ) , ⋯   ) (\cdots,e_i+v \pmod{l_i},\cdots) (,ei+v(modli),) 称为维度 i i i 上的旋转。具体的实现为:

  1. 假如 g i g_i gi Z m ∗ \mathbb Z_m^* Zm 上的乘法阶恰为 l i l_i li,那么定义 ρ i v ( α ) : = τ g i v ( α ) \rho_i^v(\alpha) := \tau_{g_i^v}(\alpha) ρiv(α):=τgiv(α),我们称 i i i 是 “good dimension”(只需一次自同构)
  2. 假如 g i g_i gi Z m ∗ \mathbb Z_m^* Zm 上的乘法阶不是 l i l_i li,那么定义 ρ i v ( α ) : = τ g i v ( mask ⋅ α ) + τ g i v − l i ( ( 1 − mask ) ⋅ α ) \rho_i^v(\alpha) := \tau_{g_i^v}(\text{mask} \cdot \alpha) + \tau_{g_i^{v-l_i}}((1-\text{mask}) \cdot \alpha) ρiv(α):=τgiv(maskα)+τgivli((1mask)α),我们称 i i i 是 “bad dimension”(需要两次自同构)

除了这些 rotate1D 自同构,循环群 ( p ) (p) (p) 对应的那些自同构是 Frobenius map,可用于计算明文槽本身的线性变换。假设 M M M 是明文槽 E E E 上的 Z p r \mathbb Z_{p^r} Zpr-线性变换(注意区分各个槽之间的 E E E-线性变换),那么总存在唯一的常数集 θ 0 , ⋯   , θ d − 1 \theta_0,\cdots,\theta_{d-1} θ0,,θd1,使得 M M M 写为如下的线性化多项式(linearized polynomials),
M ( a ) = ∑ i = 0 d − 1 θ i τ p i ( a ) , ∀ a ∈ E M(a) = \sum_{i=0}^{d-1} \theta_i \tau_p^i(a), \forall a \in E M(a)=i=0d1θiτpi(a),aE
给定 M M M 的描述(比如 power basis 的像),可以通过求解模 p p p 下的线性方程组,获得 mod- p p p solutions,然后利用 Hensel Lifting 提升到模 p r p^r pr 下即可获得 θ i \theta_i θi 的具体值。对于不同的明文槽,可以执行不同的变换 M M M;我们计算出它们的常数后,打包为 d d d 个多项式,用于同态计算明文槽内部的线性变换。

Recryption Procedure

[HS15] 采取了 [GHS12] 的自举框架:明文模数 p r p^r pr,密文模数 q = p e + 1 q=p^e+1 q=pe+1,自举需要的明文模数为 p e + r p^{e+r} pe+r,那么

  1. 首先计算 u = [ ⟨ s k , c t ⟩ ] p e + r u = [\langle sk,ct \rangle]_{p^{e+r}} u=[⟨sk,ct]pe+r
  2. 然后计算 m = u [ r − 1 : 0 ] − u [ e + r − 1 : e ] ( m o d p r ) m = u[r-1:0] - u[e+r-1:e] \pmod{p^r} m=u[r1:0]u[e+r1:e](modpr)

为了降低乘法深度,可以设置中等规模参数 r ≤ e ′ < e r \le e' <e re<e,使得密文 c t ′ ct' ct 可被 p e ′ p^{e'} pe 整除,从而我们计算 u ′ = [ ⟨ s k , c t ′ / p e ′ ⟩ ] p e + r u' = [\langle sk,ct'/p^{e'} \rangle]_{p^{e+r}} u=[⟨sk,ct/pe]pe+r,然后输出 m = − u ′ [ e − e ′ + r − 1 : e − e ′ ] ( m o d p r ) m = -u'[e-e'+r-1:e-e'] \pmod{p^r} m=u[ee+r1:ee](modpr)

[GHS12] 的 ”通过平方插入零“ 的技巧仅适用于 p = 2 p=2 p=2 的情况,[HS15] 给出了更一般的 Lifting Polynomials,适用于任意的 p r p^r pr 情况。由于 [HS15] 采取了带符号的二补数和平衡进制表示,因此解密公式略有不同。

Simpler Decryption Formula:对于任意的素数 p > 1 p>1 p>1,整数 e > r ≥ 1 ,    q = p e + 1 e>r\ge1,\,\, q=p^e+1 e>r1,q=pe+1,假设 z z z 是满足 z / q z/q z/q [ z ] q [z]_q [z]q 规模都远小于 q q q 的整数,具体来说, ∣ z / q ∣ + ∣ [ z ] q ∣ ≤ ( q − 1 ) / 2 |z/q|+|[z]_q| \le (q-1)/2 z/q+[z]q(q1)/2,那么

  1. p = 2 p=2 p=2 时, [ z ] q = z [ r − 1 : 0 ] − z [ e + r − 1 : e ] − z [ e − 1 ] ( m o d 2 r ) [z]_q = z[r-1:0] - z[e+r-1:e] - z[e-1] \pmod{2^r} [z]q=z[r1:0]z[e+r1:e]z[e1](mod2r)
  2. p > 2 p>2 p>2 时, [ z ] q = z [ r − 1 : 0 ] − z [ e + r − 1 : e ] ( m o d p r ) [z]_q = z[r-1:0] - z[e+r-1:e] \pmod{p^r} [z]q=z[r1:0]z[e+r1:e](modpr)

Reduce the number of digits:对于任意的整数 e ′ ≥ 1 e'\ge 1 e1 以及 q > p > 1 q>p>1 q>p>1,使得 q ≡ 1 ( m o d p e ′ ) q \equiv 1 \pmod{p^{e'}} q1(modpe),任给整数 z z z 总存在 ∣ v ∣ ≤ p e ′ / 2 |v| \le p^{e'}/2 vpe/2,它使得 z + v ⋅ q ≡ 0 ( m o d p e ′ ) z+v\cdot q \equiv 0 \pmod{p^{e'}} z+vq0(modpe)

The digit-extraction procedure:对于任意的素数 p p p 和指数 e ≥ 1 e \ge 1 e1,任意的形如 z = z 0 + p e z 1 ,    z 0 ∈ [ p ] , z 1 ∈ Z z=z_0+p^ez_1,\,\, z_0 \in [p], z_1 \in \mathbb Z z=z0+pez1,z0[p],z1Z 的整数,满足 z p = z 0 ( m o d p ) z^p=z_0 \pmod{p} zp=z0(modp) 以及 z p = z 0 p ( m o d p e + 1 ) z^p = z_0^p \pmod{p^{e+1}} zp=z0p(modpe+1)

由于 z p ( m o d p e + 1 ) z^p \pmod{p^{e+1}} zp(modpe+1) 仅依赖于 z 0 = [ z ] p e ∈ [ p ] z_0=[z]_{p^e} \in [p] z0=[z]pe[p] 的值,因此可以遍历 z 0 z_0 z0 计算出 z p ( m o d p e + 1 ) z^p \pmod{p^{e+1}} zp(modpe+1) 的各个数位,然后采取拉格朗日插值公式( f i ( z 0 ) = z p [ i ] f_i(z_0)=z^p[i] fi(z0)=zp[i]),计算出 f 1 , f 2 , ⋯ f_1,f_2,\cdots f1,f2, 序列(有限个非凡的,后续的都是 f i = 0 f_i=0 fi=0),它们的度数至多为 p − 1 p-1 p1。对于任意的 e ≥ 1 e \ge 1 e1 和整数 z = z 0 + p e z 1 ,    z 0 ∈ [ p ] , z 1 ∈ Z z=z_0+p^ez_1,\,\, z_0 \in [p], z_1 \in \mathbb Z z=z0+pez1,z0[p],z1Z,总满足
z p = z 0 + ∑ i = 1 e f i ( z 0 ) p i ( m o d p e + 1 ) z^p = z_0 + \sum_{i=1}^e f_i(z_0)p^i \pmod{p^{e+1}} zp=z0+i=1efi(z0)pi(modpe+1)
因此,对于任意的 e ≥ 1 e \ge 1 e1,我们定义 deg ⁡ = p \deg=p deg=p 的多项式:
F e ( X ) = X p − ∑ i = 1 e f i ( X ) p i F_e(X) = X^p - \sum_{i=1}^e f_i(X)p^i Fe(X)=Xpi=1efi(X)pi
对于任意的 1 ≤ e ′ ≤ e 1 \le e' \le e 1ee,任给形如 z = z 0 + p e ′ z 1 ,    z 0 ∈ [ p ] , z 1 ∈ Z z=z_0+p^{e'}z_1,\,\, z_0 \in [p], z_1 \in \mathbb Z z=z0+pez1,z0[p],z1Z 的整数,都有 F e ( z ) = z 0 ( m o d p e ′ + 1 ) F_e(z) = z_0 \pmod{p^{e'+1}} Fe(z)=z0(modpe+1),这便实现了 “高位插入零” 的效果。通过 F e F_e Fe 的复合迭代,它可以将 z 0 + p z 1 z_0+pz_1 z0+pz1 映射为 z 0 ( m o d p e + 1 ) z_0 \pmod{p^{e+1}} z0(modpe+1) ,从而实现 LSB 的提取。再将 LSB 不断移除,也可以实现 MSB 的提取。

在这里插入图片描述

特别地,对于 p = 2 , 3 p=2,3 p=2,3,恰好是 F e ( X ) = X p , ∀ e F_e(X)=X^p, \forall e Fe(X)=Xp,e,这便是 [GHS12] 所使用的平方技巧。

Linear Transformations

本地明文空间 Z p r [ X ] / ( Φ m ( X ) ) \mathbb Z_{p^r}[X]/(\Phi_m(X)) Zpr[X]/(Φm(X)),我们考虑 m m m 的分解 m 1 ⋯ m t m_1\cdots m_t m1mt,它们两两互素(比如素数幂分解),那么 h ∈ Z m h \in \mathbb Z_m hZm 可以写作 h = CRT ( h 1 , ⋯   , h t ) , h i ∈ [ m i ] h=\text{CRT}(h_1,\cdots,h_t), h_i \in [m_i] h=CRT(h1,,ht),hi[mi]

商群 Z m ∗ / ( p ) \mathbb Z_{m}^*/(p) Zm/(p) 的超立方结构:

  1. 我们令 p ( m o d m 1 ) p\pmod{m_1} p(modm1) 的乘法阶是 d 1 d_1 d1,对于 i ≥ 2 i\ge 2 i2 定义 d i d_i di p d 1 ⋯ d i − 1 ( m o d m i ) p^{d_1\cdots d_{i-1}} \pmod{m_i} pd1di1(modmi) 的乘法阶,那么 d : = d 1 ⋯ d t d:=d_1\cdots d_t d:=d1dt 就是 d ( m o d m ) d \pmod{m} d(modm) 的乘法阶。
  2. 我们令 S i ⊆ [ m i ] S_i \subseteq [m_i] Si[mi] 是商群 Z m i ∗ / ( p d 1 ⋯ d i − 1 ) \mathbb Z_{m_i}^*/(p^{d_1\cdots d_{i-1}}) Zmi/(pd1di1) 的完全代表,那么 S : = CRT ( S 1 , ⋯   , S t ) S:=\text{CRT}(S_1,\cdots,S_t) S:=CRT(S1,,St) 就是 Z m ∗ / ( p ) \mathbb Z_{m}^*/(p) Zm/(p) 的完全代表。

现在我们需要将这里的 S : = CRT ( S 1 , ⋯   , S t ) S:=\text{CRT}(S_1,\cdots,S_t) S:=CRT(S1,,St) 和前两节的 S : = { g 1 e 1 ⋯ g n e n ∣ 0 ≤ e i < l i } S := \{g_1^{e_1} \cdots g_n^{e_n} | 0 \le e_i < l_i\} S:={g1e1gnen∣0ei<li} 统一起来,这限制了 m m m 的选取:

  • 限制 m m m 及其分解,使得 Z m i ∗ / ( p d 1 ⋯ d i − 1 ) \mathbb Z_{m_i}^*/(p^{d_1\cdots d_{i-1}}) Zmi/(pd1di1) 是循环群,
    • 生成元 g ˉ i ∈ [ m i ] \bar g_i \in [m_i] gˉi[mi],乘法阶 k i k_i ki
    • 集合 S i : = { g ˉ i e i ∣ 0 ≤ e i < k i } S_i:=\{\bar g_i^{e_i}| 0\le e_i<k_i\} Si:={gˉiei∣0ei<ki}
    • 定义 g i = CRT ( 1 , ⋯   , g ˉ i , ⋯   , 1 ) ∈ [ m ] g_i=\text{CRT}(1,\cdots,\bar g_i,\cdots,1) \in [m] gi=CRT(1,,gˉi,,1)[m] 是超立方基,那么 S S S 的那两种定义是同一个
  • 限制 m m m 及其分解,使得 d 1 = d d_1=d d1=d d 2 = ⋯ = d t = 1 d_2=\cdots=d_t=1 d2==dt=1
    • p p p Z m 1 ∗ \mathbb Z_{m_1}^* Zm1 的阶,就是 p p p Z m ∗ \mathbb Z_m^* Zm 的阶 d d d
    • g i , ∀ i ≥ 2 g_i,\forall i\ge 2 gi,i2 Z m ∗ \mathbb Z_m^* Zm 的阶,就是 g ˉ i \bar g_i gˉi Z m i ∗ / ( p d ) = Z m i ∗ \mathbb Z_{m_i}^*/(p^d)=\mathbb Z_{m_i}^* Zmi/(pd)=Zmi 的阶 k i k_i ki
    • k 1 = ϕ ( m 1 ) / d k_1=\phi(m_1)/d k1=ϕ(m1)/d k i = ϕ ( m i ) , ∀ i ≥ 2 k_i=\phi(m_i),\forall i\ge 2 ki=ϕ(mi),i2

[HS15] 将编码解码的线性变换视为多项式的多点求值。利用 [LPR13] 的 Powerful Basis,存在如下的同构:
R p r : = Z [ X ] / ( p r , Φ m ( X ) ) ≅ R p r ′ : = Z [ X 1 , ⋯   , X t ] / ( p r , Φ m 1 ( X ) , ⋯   , Φ m t ( X ) ) R_{p^r}:=\mathbb Z[X]/(p^r,\Phi_m(X)) \cong R_{p^r}':=\mathbb Z[X_1,\cdots,X_t]/(p^r,\Phi_{m_1}(X),\cdots,\Phi_{m_t}(X)) Rpr:=Z[X]/(pr,Φm(X))Rpr:=Z[X1,,Xt]/(pr,Φm1(X),,Φmt(X))
其同构映射为 X i ↦ X m / m i X_i \mapsto X^{m/m_i} XiXm/mi。由于 E E E 包含 m m m-th 本原单位根 ζ \zeta ζ,我们定义 ζ i : = ζ m / m i \zeta_i:=\zeta^{m/m_i} ζi:=ζm/mi,那么 α ( ζ h ) = α ′ ( ζ 1 h 1 , ⋯   , ζ t h t ) \alpha(\zeta^h) = \alpha'(\zeta_1^{h_1},\cdots,\zeta_t^{h_t}) α(ζh)=α(ζ1h1,,ζtht),其中 h = CRT ( h 1 , ⋯   , h t ) ∈ S h=\text{CRT}(h_1,\cdots,h_t) \in S h=CRT(h1,,ht)S,并且 h i = g i e i ∈ S i h_i=g_i^{e_i} \in S_i hi=gieiSi

现在,我们对 α ′ ( X 1 , ⋯   , X t ) \alpha'(X_1,\cdots,X_t) α(X1,,Xt) 在多个点 ( ζ 1 h 1 , ⋯   , ζ t h t ) (\zeta_1^{h_1},\cdots,\zeta_t^{h_t}) (ζ1h1,,ζtht) 上求值(效果是 Slot-to-Coeff):
α ′ ( X 1 , ⋯   , X t ) = ∑ j 1 , j 2 , ⋯   , j t c j 1 , j 2 , ⋯   , j t ⋅ X 1 j 1 X 2 j 2 ⋯ X t j t = ∑ j 2 , ⋯   , j t ( ∑ j 1 c j 1 , j 2 , ⋯   , j t ⋅ X 1 j 1 ) ⋅ X 2 j 2 ⋯ X t j t \begin{aligned} \alpha'(X_1,\cdots,X_t) &= \sum_{j_1,j_2,\cdots,j_t} c_{j_1,j_2,\cdots,j_t}\cdot X_1^{j_1}X_2^{j_2}\cdots X_t^{j_t}\\ &= \sum_{j_2,\cdots,j_t} \left(\sum_{j_1} c_{j_1,j_2,\cdots,j_t}\cdot X_1^{j_1}\right)\cdot X_2^{j_2}\cdots X_t^{j_t} \end{aligned} α(X1,,Xt)=j1,j2,,jtcj1,j2,,jtX1j1X2j2Xtjt=j2,,jt(j1cj1,j2,,jtX1j1)X2j2Xtjt

其中 j i ∈ [ ϕ ( m i ) ] j_i \in [\phi(m_i)] ji[ϕ(mi)](考虑下 ϕ ( m ) \phi(m) ϕ(m) 的分解),因此关于 X 1 X_1 X1 的每个小多项式的长度为 ϕ ( m 1 ) \phi(m_1) ϕ(m1),共有 ϕ ( m ) / ϕ ( m 1 ) \phi(m)/\phi(m_1) ϕ(m)/ϕ(m1) 个小多项式。

[HS15] 采取的编码方式是,将它们的连续 d d d 个系数打包在单个槽内,总共需要 ϕ ( m 1 ) / d \phi(m_1)/d ϕ(m1)/d 个明文槽。恰好我们选择的参数下,包含 ϕ ( m ) / ϕ ( m 1 ) \phi(m)/\phi(m_1) ϕ(m)/ϕ(m1) 条长度为 k 1 = ϕ ( m 1 ) / d k_1=\phi(m_1)/d k1=ϕ(m1)/d 的维度 1 1 1 超列,因此每条维度 1 1 1 的超列都记录一个小多项式。

[HS15] 定义了 Eval 线性变换,它用于多点求值 α ′ ( X 1 , ⋯   , X t ) \alpha'(X_1,\cdots,X_t) α(X1,,Xt),共分为 t t t 个截断,

  1. 1 1 1 阶段,小多项式 P j 2 , ⋯   , j t ( X 1 ) = ∑ j 1 c j 1 , j 2 , ⋯   , j t ⋅ X 1 j 1 P_{j_2,\cdots,j_t}(X_1) = \sum_{j_1} c_{j_1,j_2,\cdots,j_t}\cdot X_1^{j_1} Pj2,,jt(X1)=j1cj1,j2,,jtX1j1 存放在索引 ( ⋆ , j 2 , ⋯   , j t ) (\star,j_2,\cdots,j_t) (,j2,,jt) 的维度 1 1 1 超列,

    • 关于多点 ζ 1 g 1 e 1 , 0 ≤ e 1 < k 1 \zeta_1^{g_1^{e_1}},0\le e_1<k_1 ζ1g1e1,0e1<k1 的求值可以写作某线性变换 M 1 : Z p r d ⋅ k 1 → E k 1 M_1: \mathbb Z_{p^r}^{d\cdot k_1} \to E^{k_1} M1:Zprdk1Ek1(多项式的系数表示就是 power basis 下的坐标),可以利用 [HS18] 的 BSGS 技巧

    • 计算结果是各个 e 1 e_1 e1 索引的更少变元的若干多项式
      A e 1 = α ′ ( ζ 1 g 1 e 1 , X 2 , ⋯   , X t ) A_{e_1} = \alpha'(\zeta_1^{g_1^{e_1}},X_2,\cdots,X_t) Ae1=α(ζ1g1e1,X2,,Xt)
      它的系数存放在索引 ( e 1 , ⋆ , ⋯   , ⋆ ) (e_1,\star,\cdots,\star) (e1,,,) 的子超立方

  2. 2 2 2 阶段,我们将 A e 1 A_{e_1} Ae1 继续拆分为关于 X 2 X_2 X2 的小多项式求值,
    A e 1 ( X 2 , ⋯   , X t ) = ∑ j 2 , j 3 , ⋯   , j t P j 2 , j 3 , ⋯   , j t ( ζ 1 g 1 e 1 ) ⋅ X 2 j 2 X 3 j 3 ⋯ X t j t = ∑ j 2 , j 3 , ⋯   , j t ( ∑ j 2 P j 2 , j 3 , ⋯   , j t ( ζ 1 g 1 e 1 ) ⋅ X 2 j 2 ) ⋅ X 3 j 3 ⋯ X t j t \begin{aligned} A_{e_1}(X_2,\cdots,X_t) &= \sum_{j_2,j_3,\cdots,j_t} P_{j_2,j_3,\cdots,j_t}(\zeta_1^{g_1^{e_1}})\cdot X_2^{j_2}X_3^{j_3}\cdots X_t^{j_t}\\ &= \sum_{j_2,j_3,\cdots,j_t} \left(\sum_{j_2} P_{j_2,j_3,\cdots,j_t}(\zeta_1^{g_1^{e_1}})\cdot X_2^{j_2}\right)\cdot X_3^{j_3}\cdots X_t^{j_t} \end{aligned} Ae1(X2,,Xt)=j2,j3,,jtPj2,j3,,jt(ζ1g1e1)X2j2X3j3Xtjt=j2,j3,,jt(j2Pj2,j3,,jt(ζ1g1e1)X2j2)X3j3Xtjt
    这些小多项式 Q e 1 , j 3 , ⋯   , j t ( X 2 ) Q_{e_1,j_3,\cdots,j_t}(X_2) Qe1,j3,,jt(X2) 被存放在索引 ( e 1 , ⋆ , j 3 , ⋯   , j t ) (e_1,\star,j_3,\cdots,j_t) (e1,,j3,,jt) 的维度 2 2 2 超列,类似地执行线性变换 M 2 M_2 M2 计算出它们,获得索引 ( e 1 , e 2 , ⋆ , ⋯   , ⋆ ) (e_1,e_2,\star,\cdots,\star) (e1,e2,,,) 的子超立方

  3. 对于 3 , ⋯   , t 3,\cdots,t 3,,t 阶段,也是类似的

对于 Coeff-to-Slot 过程,就是上述 Eval 变换的逆过程。

由于 digit-extraction 是作用在明文槽基环 Z p e + r \mathbb Z_{p^{e+r}} Zpe+r 上的,因此需要利用 Frobenius map 构造 E E E-线性映射的线性化多项式,将明文槽内的各个 power basis 的系数分解 d d d 个 “稀疏打包”(明文仅在基环内)的密文。现在可以执行数字提取了,最后还需将 d d d 个密文重新组合为 “密集打包” 的单个密文,从而可执行 Eval 运算。

当然,[HS15] 也参考 [CH18] 给出了 “薄自举”,也就是明文本身就是稀疏打包的,此时可以将比特提取的过程减少为单个密文,效率基本提升了 d d d 倍(线性变换很快,主要是比特提取)。

Parameters for Recryption

在使用 HElib 时,需要设置合适的参数,使之支持自举程序。然而它并没有提供参数生成的程序。参数集应当满足的条件是:设置特征 p p p 和明文槽长度 n n n

  1. m m m p p p 互素,从而 p p p Z m ∗ \mathbb Z_m^* Zm 中的元素
  2. p p p m m m 的乘法阶 d d d n n n 整除,从而 E E E 中存在维度 n n n 的子环
  3. m m m 被分解为素数幂 m 1 , ⋯   , m t m_1,\cdots,m_t m1,,mt,存在某个 m i ∗ m_{i^*} mi 使得 p p p m i ∗ m_{i^*} mi 的乘法阶也是 d d d,从而 Z m ∗ / ( p ) \mathbb Z_m^*/(p) Zm/(p) 的阶是 k = ϕ ( m ) / d k=\phi(m)/d k=ϕ(m)/d
  4. 重排使得 m i ∗ m_{i^*} mi 成为 m 1 m_1 m1,计算循环群 Z m 1 ∗ / ( p ) \mathbb Z_{m_1}^*/(p) Zm1/(p) 的生成元 g ˉ 1 \bar g_1 gˉ1 和阶 l 1 l_1 l1,然后用 CRT 提升为 Z m ∗ \mathbb Z_m^* Zm 的生成元 g 1 g_1 g1
  5. 对于 i > 1 i>1 i>1,继续计算循环群 Z m i ∗ / ( p d ) \mathbb Z_{m_i}^*/(p^d) Zmi/(pd) 的生成元 g ˉ i \bar g_i gˉi 和阶 l i l_i li,然后用 CRT 提升为 Z m ∗ \mathbb Z_m^* Zm 的生成元 g i g_i gi
  6. 事实上 p d ( m o d m i ) = 1 p^d \pmod{m_i}=1 pd(modmi)=1,因此 g i , ∀ i > 2 g_i, \forall i>2 gi,i>2 在模 m m m 下的阶就等于在模 m i m_i mi 下的阶(good dimension),从而超立方的一维旋转是高效的
  7. HElib 要求将 o r d ( g i   m o d   m i ) = o r d ( g i   m o d   m ) ord(g_i \bmod m_i)=ord(g_i \bmod m) ord(gimodmi)=ord(gimodm) 的排在最前面,因此将上述结果反序

[HS15] 测试了一些参数下的性能,

  • “thick” 版本的自举:用于稠密打包的明文,耗时较多。

在这里插入图片描述

  • “thin” 版本的自举:专用于稀疏打包的明文,计算效率提高了大约 d d d 倍。它需要先执行 Slot-to-Coeff 变换(Froward-DFT),因此要求 min capacity 剩余;在末尾不执行它,因此 after capacity 也相对更大。

在这里插入图片描述

CH18

[HS15] 的比特提取程序的复杂度严重依赖明文模数 p r p^r pr 的规模,对于较大的明文规模速度很慢。[CH18] 提出了更适合较大明文模数的自举算法,并给出 BFV 的第一个自举实现。此外,[CH18] 提出了 “瘦模式” 的自举,也就是 HElib 中的 “薄自举”。

Digit Removal Algorithm

[HS15] 采用 lifting polynomials 在 LSD 高位依次插入零,而 [CH18] 使用 lowest digit removal polynomials 直接计算出 LSD

简记 u i , j u_{i,j} ui,j 表示 u [ i ] + ( p i + j + 1 ) u[i]+(p^{i+j+1}) u[i]+(pi+j+1) 等价类,或者说 u [ i ] ( m o d p i + j + 1 ) u[i]\pmod{p^{i+j+1}} u[i](modpi+j+1)

在这里插入图片描述

在 [GHS12] 和 [HS15] 的比特提取程序中,利用 F e ( X ) F_e(X) Fe(X) u i , 0 u_{i,0} ui,0(绿色数字)迭代计算出 u i , e − i − 1 u_{i,e-i-1} ui,ei1(同一行的蓝色数字),然后从 u u u 中减去 u k , i + 1 − k ⋅ p k , k ≤ i u_{k,i+1-k}\cdot p^{k},k\le i uk,i+1kpk,ki(所在的反对角线)获得 u i + 1 , 0 u_{i+1,0} ui+1,0(下一行的绿色数字)。

在上述运算中, u 0 , e − 1 = F e e − 1 ( u 0 , 0 ) u_{0,e-1}=F_e^{e-1}(u_{0,0}) u0,e1=Fee1(u0,0),由于 F e ( X ) F_e(X) Fe(X) 本身就是 p p p 次多项式,因此计算 u 0 , e − 1 u_{0,e-1} u0,e1 的多项式度数是 p e − 1 p^{e-1} pe1,需要的乘法深度较大(度数更大,乘法数量不一定多,但是乘法深度一定大)。

[CH18] 指出:对于任意素数 p p p 和指数 e ≥ 1 e \ge 1 e1,从存在度数至多 ( e − 1 ) ( p − 1 ) + 1 (e-1)(p-1)+1 (e1)(p1)+1 的多项式 f ( x ) f(x) f(x),它将整数 0 ≤ x < p e 0 \le x < p^e 0x<pe 映射为
f ( x ) ≡ x − [ x ] p ( m o d p e ) f(x) \equiv x-[x]_p \pmod{p^e} f(x)x[x]p(modpe)
它可以直接移除 LSD(不过它无法移除其他的 digits,因此依旧需要和 lifting polynomials 组合使用),从而 g ( x ) : = x − f ( x ) g(x):=x-f(x) g(x):=xf(x) 就是提取 LSB 的度数至多 ( e − 1 ) ( p − 1 ) + 1 (e-1)(p-1)+1 (e1)(p1)+1 的多项式。

这个多项式的具体构造:首先定义如下的函数,
F A ( x ) : = ∑ j = 0 ∞ ( − 1 ) j ( A + j − 1 j ) ( x A + j ) F_A(x) := \sum_{j=0}^\infty (-1)^j {A+j-1 \choose j}{x \choose A+j} FA(x):=j=0(1)j(jA+j1)(A+jx)
它的功能是将 M ≥ A M\ge A MA 映射到 F A ( M ) = 1 F_A(M)=1 FA(M)=1,其余的是 F A ( M ) = 0 F_A(M)=0 FA(M)=0(一个输入固定为 A A A 的比较函数)

我们继续定义如下函数,其中的系数 a ( m ) a(m) a(m) F p , F 2 p , ⋯ F_{p},F_{2p},\cdots Fp,F2p, x m x^m xm 系数累加,
f ^ ( x ) = p ∑ j = 1 ∞ F j p ( x ) = ∑ m = p ∞ a ( m ) ( x m ) \hat f(x) = p\sum_{j=1}^\infty F_{jp}(x) = \sum_{m=p}^\infty a(m){x \choose m} f^(x)=pj=1Fjp(x)=m=pa(m)(mx)
它的功能是计算 max ⁡ k { x ≥ k p } \max_k\{x\ge kp\} maxk{xkp} 或者说 x − [ x ] p x-[x]_p x[x]p

我们实际只需要 x − [ x ] p ( m o d p e ) x-[x]_p \pmod{p^e} x[x]p(modpe) 等价类,而非 x − [ x ] p ∈ Z x-[x]_p \in \mathbb Z x[x]pZ 本身,因此只需要它的有限截断(更高的那些 x m x^m xm 不再影响 u [ e − 1 : 0 ] u[e-1:0] u[e1:0] 内的数据):
f ( x ) = ∑ m = p ( e − 1 ) ( p − 1 ) + 1 a ( m ) ( x m ) f(x) = \sum_{m=p}^{(e-1)(p-1)+1} a(m){x \choose m} f(x)=m=p(e1)(p1)+1a(m)(mx)
利用上述构造的 f ( x ) , g ( x ) f(x),g(x) f(x),g(x),假定我们想要移除最低的 v v v 个数位,那么需要计算出 u [ 0 ] ( m o d p e ) , u [ 1 ] ( m o d p e − 1 ) , ⋯   , u [ v − 1 ] ( m o d p e − v ) u[0] \pmod{p^e},u[1]\pmod{p^{e-1}},\cdots,u[v-1]\pmod{p^{e-v}} u[0](modpe),u[1](modpe1),,u[v1](modpev),计算过程为:根据 u i , 0 u_{i,0} ui,0(绿色数字)直接计算 g ( x ) g(x) g(x) 获得 u i , e − i − 1 u_{i,e-i-1} ui,ei1(红色数字),还需迭代计算 F e F_e Fe 获得 u i , v − i − 1 u_{i,v-i-1} ui,vi1(同一行的蓝色数字)用于获取 u i + 1 , 0 u_{i+1,0} ui+1,0(下一行的绿色数字)。

在这里插入图片描述

复杂度分析:

  • 为了计算 u i , 0 u_{i,0} ui,0,需要 u u u 减去反对角线上的那些数字, u 0 , i = F e i ( u ) u_{0,i}=F_e^i(u) u0,i=Fei(u) 的次数为 p i p^i pi , u 1 , i − 1 = F e i − 1 ( u 1 , 0 ) , u_{1,i-1}=F_e^{i-1}(u_{1,0}) ,u1,i1=Fei1(u1,0) 的次数也是 p i p^i pi,其他的也都是,因此计算 u i , 0 u_{i,0} ui,0 的多项式次数为 p i p^i pi
  • 在 [HS15] 方法中,计算 u i , e − i − 1 u_{i,e-i-1} ui,ei1 需要计算 F e e − i − 1 ( u i , 0 ) F_e^{e-i-1}(u_{i,0}) Feei1(ui,0),它自身的次数为 p e − i − 1 p^{e-i-1} pei1,总的度数为 p e − 1 p^{e-1} pe1
  • 在 [CH18] 方法中,计算 u i , e − i − 1 u_{i,e-i-1} ui,ei1 需要计算 g ( u i , 0 ) g(u_{i,0}) g(ui,0),它自身的次数仅为 ( p − 1 ) ( e − i − 1 ) + 1 (p-1)(e-i-1)+1 (p1)(ei1)+1,总的度数为 e p v ep^{v} epv
  • v ≤ e − 1 v \le e-1 ve1 并且 p > e p>e p>e 时(较大的明文模数),[CH18] 的方法复杂度更低

如果计算某些蓝色数字时,满足了条件 p l > ( p − 1 ) ( e − i − 1 ) + 1 p^l>(p-1)(e-i-1)+1 pl>(p1)(ei1)+1,那么可以直接使用红色数字(比同一行的蓝色数字含有更多的高位零,因此必定是正确的)来构造下一行的绿色数字,多项式的度数会更低。[CH18] 的数位移除程序为:

在这里插入图片描述

Bootstrapping for FV and BGV

对于 BGV 自举:

  1. 密文模数需要和明文特征互素,选取 q = p e + 1 q=p^e+1 q=pe+1
  2. 相位 [ p r v + m ] q [p^rv+m]_{q} [prv+m]q
    • 明文放大 p p p 倍:计算 c t ⋅ [ p ] q ct \cdot [p]_q ct[p]q,相位变为 [ p r + 1 v + p m ] q [p^{r+1}v+pm]_{q} [pr+1v+pm]q
    • 明文缩小 p p p 倍(要求 p ∣ m p \mid m pm):计算 c t ⋅ [ p − 1 ] q ct \cdot [p^{-1}]_q ct[p1]q,相位变为 [ p r − 1 v + m / p ] q [p^{r-1}v+m/p]_{q} [pr1v+m/p]q

对于 BFV 自举:

  1. 密文模数和明文特征之间没有要求,选取 q = p e q=p^e q=pe
  2. 相位 [ p e − r m + v ] q [p^{e-r}m+v]_q [perm+v]q
    • 明文放大 p p p 倍:将 Δ = p e − r \Delta=p^{e-r} Δ=per 修改为 Δ ′ = p e − r − 1 \Delta'=p^{e-r-1} Δ=per1,相位依旧是 [ p e − r − 1 ⋅ p m + v ] q [p^{e-r-1}\cdot pm+v]_q [per1pm+v]q
    • 明文缩小 p p p 倍(要求 p ∣ m p \mid m pm):将 Δ = p e − r \Delta=p^{e-r} Δ=per 修改为 Δ ′ = p e − r + 1 \Delta'=p^{e-r+1} Δ=per+1,相位依旧是 [ p r − 1 + 1 ⋅ m / p + v ] q [p^{r-1+1}\cdot m/p + v]_{q} [pr1+1m/p+v]q

采取 [HS15] 对 BGV 自举的框架,[CH18] 对于 BFV 自举的框架为:

在这里插入图片描述

此外,[CH18] 对于 “稀疏打包” 的明文,提出了 “slim mode” 版本的自举。需要注意的是,它首先在待自举的密文上执行 Slot-to-Coeff 线性变换,因此要求输入密文的 Level 不能被消耗殆尽,必须能够支撑这个线性变换。当然,它的数字提取之后不必执行 Slot-to-Coeff 变换,因此输出密文的 Level 也会稍大一点。

在这里插入图片描述

效率对比:对于 e ≥ v + 2 e \ge v+2 ev+2 以及较大的 p p p,[CH18] 的方法更好,

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见的嵌入式面试问题解答!

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; ​1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在…

【车载开发系列】AutoSar当中的诊断会话控制

【车载开发系列】AutoSar当中的诊断会话控制 【车载开发系列】AutoSar当中的诊断会话控制 【车载开发系列】AutoSar当中的诊断会话控制一. 什么是诊断会话控制服务二. 会话模式分类三. 会话的接口1&#xff09;获取当前会话状态2&#xff09;设置会话状态3&#xff09;返回默认…

分布式锁4 :数据库DB实现分布式锁的悲观锁和乐观锁,unique实现方式

一 方案1 使用悲观锁解决冲突 1.1 使用悲观锁原理 1.1.1 使用悲观锁的原理 1.悲观锁&#xff1a;在select的时候就会加锁&#xff0c;采用先加锁后处理的模式&#xff0c;虽然保证了数据处理的安全性&#xff0c;但也会阻塞其他线程的写操作。在读取数据时锁住那几行&…

UVT音乐证书考试时间确定,学习氛围渐浓

美国职业资格与人才管理中心&#xff08;UVT&#xff09;音乐证书考试时间正式确定&#xff0c;学习氛围逐渐浓厚。众多热爱音乐的从业者和学生开始积极备考&#xff0c;希望通过这一考试获得音乐领域的宝贵证书。音乐证书被认为是音乐人才展示个人专业水平的重要机会&#xff…

re:从0开始的HTML学习之路 2. HTML的标准结构说明

1. <DOCTYPE html> 文档声明&#xff0c;用于告诉浏览器&#xff0c;当前HTML文档采用的是什么版本。 必须写在当前HTML文档的首行&#xff08;可执行代码的首行&#xff09; HTML4的此标签与HTML5不同。 2. <html lang“en”> 根标签&#xff0c;整个HTML文档中…

虚拟机设置固定IP地址以及访问外网

一、虚拟机固定IP地址设置 1、IP地址查看命令 &#xff08;1&#xff09;ip a [rootlocalhost ~]# ip a • inet 192.168.93.129/24这表示该网络接口&#xff08;ens33&#xff09;被分配了一个IPv4地址是192.168.93.129&#xff0c;并且其子网掩码为 24位&#xff08;即/24…

Java多线程并发篇----第二十六篇

系列文章目录 文章目录 系列文章目录前言一、什么是 Executors 框架?二、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?三、什么是 Callable 和 Future?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

MySQL---多表等级查询综合练习

创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT 员工编号, ename VARCHAR(10) COMMENT 员工名字, job VARCHAR(10) COMMENT 职位, mgr INT(4) COMMENT 上司, hiredate DATE COMMENT 入职时间, sal INT(7) COMMENT 基本工资, comm INT(7) COMMENT 补贴, deptno INT…

大模型理论基础3

模型架构 模型概括 先把语言模型看成黑盒&#xff0c;以便于了解整体功能后拆分成&#xff1a;分词、模型架构 分词 首先要知道&#xff1a;语言模型 p 是建立在词元&#xff08;token&#xff09;序列的上的一个概率分布输出&#xff0c;其中每个词元来自某个词汇表V&#…

解决github无法访问的问题(修改hosts)

1.先ping github.com看是否能ping通 不能ping通的话&#xff0c;找到github最新的ip地址&#xff0c;修改hosts文件&#xff08;C:\Windows\System32\drivers\etc&#xff09; 找最新的ip地址的办法&#xff1a; a.cmd中ping时返回的 b.点击ipaddress.com查询网站链接 修改host…

微信小程序入门,学习全局配置与页面配置

目录 一、微信小程序 二、微信小程序的全局配置 三、微信小程序的页面配置 四、全局配置与页面配置的区别 一、微信小程序 微信小程序是一种基于微信平台的应用程序&#xff0c;它可以在微信内部直接运行&#xff0c;无需下载安装。微信小程序具有以下特点和优势&#xff…

数据结构与算法:图

文章目录 图1) 概念有向 vs 无向度权路径环图的连通性 2) 图的表示3) Java 表示4) DFS5) BFS6) 拓扑排序7) 最短路径DijkstraBellman-FordFloyd-Warshall 8) 最小生成树PrimKruskal 图 1) 概念 图是由顶点&#xff08;vertex&#xff09;和边&#xff08;edge&#xff09;组成…

前后端分离,使用vue3整合SpringSecurity加JWT实现登录校验

前段时间写了一篇spring security的详细入门&#xff0c;但是没有联系实际。 所以这次在真实的项目中来演示一下怎样使用springsecurity来实现我们最常用的登录校验。本次演示使用现在市面上最常见的开发方式&#xff0c;前后端分离开发。前端使用vue3进行构建&#xff0c;用到…

vue生命周期图示

详见&#xff1a;官网介绍

梳理一下若依框架的权限过滤系统

梳理一下若依框架的权限过滤系统 首先&#xff0c;我们直入主题&#xff0c;且看这段代码 /*** 获取用户列表*/ PreAuthorize("ss.hasPermi(system:user:list)") GetMapping("/list") public TableDataInfo list(SysUser user) {startPage();List<SysU…

OpenHarmony当前进展和未来趋势

操作系统自20世纪50年代诞生&#xff0c;经历了从专用操作系统到通用操作系统的转变。整体可以将操作系统的发展历史分为3个阶段&#xff1a;PC时代、移动互联网时代、万物互联时代。 PC时代主要以计算机为主&#xff0c;用户规模从1970年的10亿增长到1990年的30亿。这一时代诞…

QComboBox 下拉框

文章目录 1、简介2、functions3、Signal QT 官方文档参考地址&#xff1a;https://doc.qt.io/qt-5/qcombobox.html 1、简介 QComboBox 是下拉列表框组件类&#xff0c;它提供一个下拉列表供用户选择&#xff0c;也可以直接当作一个 QLineEdit 用作输入。 2、functions 1、voi…

供应商导添加预扣税字段

文章目录 1 Introduction2 Code3 Summary 1 Introduction I only think I can assign value to them and I implement it by the following code . 2 Code LOOP AT gt_bukrs INTO gs_bukrs WHERE lifnr gs_alv1-lifnr.CLEAR:ls_company.ls_company-task M.ls_company-data…

mybatis----动态Sql

1.if标签 通过if标签构建动态条件&#xff0c;通过其test属性的true或false来判断该添加语句是否执行。 mapper接口 public interface AccountMapper {List<Account> selectAllByCondition(Account account); } 映射文件 <select id"selectAllByCondition&q…

具有运动模糊的大规模场景的混合神经绘制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;具有运动模糊的大规模场景的混合神经绘制1、研究背景2、方法提出3、视点依赖归一化方法4、训练方法5、试验细节及对比 YOLO模型1、…