Full Domain PBS

参考文献:

  1. [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[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: 670-699.
  2. [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 (S&P). IEEE, 2021: 1057-1073.
  3. [LMP22] Liu Z, Micciancio D, Polyakov Y. Large-precision homomorphic sign evaluation using FHEW/TFHE bootstrapping[C]//International Conference on the Theory and Application of Cryptology and Information Security. Cham: Springer Nature Switzerland, 2022: 130-160.
  4. [KS23] Kluczniak K, Schild L. FDFB: Full Domain Functional Bootstrapping Towards Practical Fully Homomorphic Encryption[J]. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2023: 501-537.
  5. 消除 TFHE 的限制:WoP-GenPBS-CSDN博客
  6. Large-Precision Sign using PBS-CSDN博客

Review

在原始的 PBS 中,由于二的幂次分圆环是一个反循环卷积环,这导致 LUT 必须是反循环函数。除了单比特的一元运算,多比特的任意函数并不能仅通过反循环函数以及仿射变换来实现。为了计算任意的函数,需要一个 Padding Bit 在 MSB 位置,这不仅导致明文空间缩小,还使得仿射变换之后必须执行 PBS 清理掉 Padding Bit,从而可以继续下一次仿射变换。

[CLOT21] 提出了 WoP-PBS,它使用 BV-like 同态乘法。给定 m m m 的 LWE 密文(MSB 编码),令 f f f 是任意函数。

  1. 第一个版本:首先利用 Module-Raise 强行提升 1 1 1 比特模数,然后对消息 β ∥ m \beta\|m βm 自举获得带符号的函数值 ( − 1 ) β ⋅ f ( m ) (-1)^\beta \cdot f(m) (1)βf(m),其中 β \beta β Q Q Q-overflow 的最低比特(随机的)。接着对消息 β ∥ m \beta\|m βm 再次自举获得符号本身 ( − 1 ) β (-1)^\beta (1)β,两者做 LWE 同态相乘得到 f ( m ) f(m) f(m) 结果。共计 2 次 PBS,但是 LUT 规模扩大一倍。
  2. 第二个版本:切分原始消息为 m = β ∥ m ′ m=\beta\|m' m=βm,然后把函数 f ( m ) f(m) f(m) 划分为两个子函数 f ( 0 ∥ m ′ ) f(0\|m') f(0∥m) 以及 f ( 1 ∥ m ′ ) f(1\|m') f(1∥m),它们的 LUT 大小都是原始 LUT 大小的一半,因此可以占用反循环 PBS 的一半空间来实现。接着,再一次 PBS 获得 β \beta β 的值,使用 LWE 同态乘法来构建 CMux Gate 挑选正确的 f ( β ∥ m ′ ) f(\beta\|m') f(βm) 结果。共计 3 次 PBS,保持 LUT 规模不变。

[LMP22] 提出了 Homomorphic Floor Function,它是通过迭代执行 PBS 算法。给定高精度 m m m 的 LWE 密文(MSB 编码),提取它的符号。

  1. 第一个版本:使用 Module-Down 截取出 m m m 的一些低位(MSB 编码的 LWE 密文),接着做 PBS 提取出它的 MSB 从原始密文中减掉,再次截取低位就得到了 MSB 为零的 LWE 密文,从而做 PBS 提取出这些比特并从原始密文中减掉,这就消除了 m m m 最低的一些比特位。共计 2 次 PBS,但是要求噪声的规模小于 Δ / 4 \Delta/4 Δ/4 保证正确性。
  2. 第二个版本:由于 [ − 1 , 0 ∥ 1 , 0 ] [-1,0\|1,0] [1,0∥1,0] 是反循环函数,使用它可以将 [ 0 b 00 , 0 b 01 , 0 b 10 , 0 b 11 ] [0b00,0b01,0b10,0b11] [0b00,0b01,0b10,0b11] 转变为 [ 0 b 11 , 0 b 01 , 0 b 11 , 0 b 11 ] [0b11,0b01,0b11,0b11] [0b11,0b01,0b11,0b11],于是容易将第二高的比特清理掉。现在我们在截取后的消息的 MSB 和 LSB 之间构造了一个零的沟壑,我们使用第一个版本的技术来消除这些低位比特。共计 3 次 PBS,噪声的仅需小于 Δ / 2 \Delta/2 Δ/2 即可。
  3. PBS of Arbitrary Function:也是首先利用 Module-Raise 强行提升 1 1 1 比特模数,但是对消息 β ∥ m \beta\|m βm 先自举得到 β \beta β 并减掉,接着再对 0 ∥ m 0\|m 0∥m 自举得到 f ( m ) f(m) f(m) 的结果。共计 2 次 PBS,但是 LUT 规模扩大一倍。

[KS23] 使用了类似于 [CLOT21] 第二个版本的算法。既不是使用 BV-like 同态乘法(张量积,噪声增长快),也不是使用 [CGGI17] 的 OBDD 自动机(GSW 外积,需要电路自举)。他们首先使用 PBS 提取符号位,然后根据符号位从两个初始 ACC 中选择一个,再对选出的 ACC 执行自举 获得正确结果。共计 2 次 PBS(为了降低噪声,使用了 Decompose,导致 PBS 的次数会更多,且无法批处理),并且保持 LUT 规模不变。

FDFB

Symbol

[KS23] 定义的一些记号:

  • 噪声的方差上界 B B B,MLWE 矩阵维度 n n n,分圆环维度 N N N,模数 q q q
  • Base L L L,分解长度 l = ⌈ log ⁡ L q ⌉ l = \lceil\log_L{q}\rceil l=logLq,Gadget 向量 g l , L = [ L i − 1 ] i = 1 L ∈ N l g_{l,L}=[L^{i-1}]_{i=1}^L \in \mathbb N^{l} gl,L=[Li1]i=1LNl,Gadget 矩阵 G l , L , k = I k ⊗ g l , L ∈ N k l × k G_{l,L,k} = I_k \otimes g_{l,L} \in \mathbb N^{kl \times k} Gl,L,k=Ikgl,LNkl×k
  • GLWE 密文, G L W E B , n , N , q ( s , m ) = ( b = a T s + m + e , a ) ∈ R N , q n + 1 GLWE_{B,n,N,q}(s,m) = (b=a^Ts+m+e,a) \in \mathcal R_{N,q}^{n+1} GLWEB,n,N,q(s,m)=(b=aTs+m+e,a)RN,qn+1
    • LWE 密文, G L W E B , n , 1 , q ( s , m ) ∈ Z q n + 1 GLWE_{B,n,1,q}(s,m) \in \mathbb Z_{q}^{n+1} GLWEB,n,1,q(s,m)Zqn+1
    • RLWE 密文, G L W E B , 1 , N , q ( s , m ) ∈ R N , q 2 GLWE_{B,1,N,q}(s,m) \in \mathcal R_{N,q}^{2} GLWEB,1,N,q(s,m)RN,q2
  • GGSW 密文, G G S W B , n , N , q ( s , m ) = A + m G l , L , n + 1 ∈ R N , q ( n + 1 ) l × ( n + 1 ) GGSW_{B,n,N,q}(s,m) = A+mG_{l,L,n+1} \in \mathcal R_{N,q}^{(n+1)l \times (n+1)} GGSWB,n,N,q(s,m)=A+mGl,L,n+1RN,q(n+1)l×(n+1)
    • GSW 密文, G G S W B , n , 1 , q ( s , m ) ∈ Z q ( n + 1 ) l × ( n + 1 ) GGSW_{B,n,1,q}(s,m) \in \mathbb Z_{q}^{(n+1)l \times (n+1)} GGSWB,n,1,q(s,m)Zq(n+1)l×(n+1)
    • RGSW 密文, G G S W B , 1 , N , q ( s , m ) ∈ R N , q 2 l × 2 GGSW_{B,1,N,q}(s,m) \in \mathcal R_{N,q}^{2l \times 2} GGSWB,1,N,q(s,m)RN,q2l×2
  • 缩放因子 Δ q , t = ⌊ q / t ⌉ \Delta_{q,t} = \lfloor q/t \rceil Δq,t=q/t,舍入函数 ⌊ a ⌉ t q = ⌊ t / q ⋅ ( Δ q , t ⋅ a ) ⌉ \lfloor a \rceil^{q}_{t} = \lfloor t/q \cdot (\Delta_{q,t} \cdot a) \rceil atq=t/q(Δq,ta)⌉

此外 [KS23] 回顾了各种同态运算的噪声增长,略。

ACC Builder

[KS23] 利用 Public 版本的 CMux Gate 构建了一个 ACC Builder:使用控制位 m ∈ { 0 , 1 } m \in \{0,1\} m{0,1} 的密文,挑选两个明文多项式 p 0 , p 1 ∈ R N , q p_0,p_1 \in \mathcal R_{N,q} p0,p1RN,q。为了控制噪声增长,他们使用了数字分解技术,用 GLWE 加密控制位的各个 power-of- L L L,通过线性同态来计算出 ( 1 − m ) ⋅ p 0 + m ⋅ p 1 ∈ R N , q (1-m)\cdot p_0+m\cdot p_1 \in \mathcal R_{N,q} (1m)p0+mp1RN,q

在这里插入图片描述

它们的正确性以及噪声增长:

在这里插入图片描述
假设 KS 的噪声增长很小,那么 B o u t B_{out} Bout 的大小主要受 L 2 ⋅ log ⁡ L q L^2 \cdot\log_L{q} L2logLq 影响。需要选取 L ≪ q L \ll \sqrt q Lq 才能正确解密,因此分解出的位数 l ≥ 3 l \ge 3 l3导致需要很多次 PBS 分别求出各个 a c c i acc_i acci,并且它们无法批处理

Full Domain PBS

[KS23] 采用了 GINX/TFHE 自举策略,以及 [MP21] 的私钥分解技术。给定 LWE 私钥 s ∈ Z q n s \in \mathbb Z_q^n sZqn,根据它的分布来选择集合 u ⃗ ∈ Z u \vec u \in \mathbb Z^u u Zu,使得 s i = ∑ j x i j u j s_i=\sum_j x_{ij} u_{j} si=jxijuj,其中 x ⃗ i ∈ B u \vec x_i \in \mathbb B^u x iBu 是分量 s i s_i si 的组合系数。盲旋转的时候,使用 R G S W ( x i j ) RGSW(x_{ij}) RGSW(xij) 作为 BSK,控制 CMux Gate 选择 A C C ACC ACC 或者 X a u j ⋅ A C C X^{au_j}\cdot ACC XaujACC。我们将这个过程记为 B l i n d R o t a t e ( B S K , A C C , L W E , u ) BlindRotate(BSK,ACC,LWE,u) BlindRotate(BSK,ACC,LWE,u)

[KS23] 的 Full Domain PBS 的具体流程是:

  1. 输入 c t = L W E ( m ) ct=LWE(m) ct=LWE(m) 以及任意函数 f : Z t → Z Q f:\mathbb Z_t \to \mathbb Z_Q f:ZtZQ
  2. 将函数 f ∈ Z Q t f \in \mathbb Z_Q^{t} fZQt(函数就是向量)划分为两个子函数 f 0 ∥ f 1 f_0\|f_1 f0f1,构造它们的冗余 LUT 多项式 P 0 , P 1 P_0,P_1 P0,P1
  3. 对密文 c t ct ct 做 PBS,计算它的符号位的 LWE 密文,这里生成了 power-of- L L L 来控制 PubMux 的噪声增长
  4. 利用 PubMux 选择性地构造出 P 0 P_0 P0 或者 P 1 P_1 P1 对应的初始 ACC
  5. 再次对密文 c t ct ct 做 PBS,计算出 f ( m ) f(m) f(m) 的正确结果
  6. 密钥切换、模切换,输出合适的 LWE 密文

与 [CLOT21] 的区别是:这里使用 PubMux 来挑选一个 ACC 的初始值(标量乘法,弱线性同态 + 数字分解),而他们则使用 LWE-Mul 来挑选两个 ACC 的最终值(非标量乘法,张量积 + 秘钥切换)。

我们根据任意函数 f f f 的冗余版本 F = F 0 ∥ F 1 ∈ Z Q 2 N F=F_0\|F_1 \in \mathbb Z_Q^{2N} F=F0F1ZQ2N,构造两个反循环 LUT 的多项式。根据 Blind Rotation 的要求, A C C ⋅ X m ACC \cdot X^{m} ACCXm 的常数项是 F ( m ) F(m) F(m)

  • 对于区间 m ∈ [ 0 , N − 1 ] m \in [0,N-1] m[0,N1] 的子函数 F 0 F_0 F0,构造多项式 P 0 P_0 P0
    1. 对于 m = 0 m=0 m=0,需要 F [ 0 ] ⋅ X − 0 = F [ 0 ] F[0]\cdot X^{-0} = F[0] F[0]X0=F[0],即 P 0 [ 0 ] = F [ 0 ] P_0[0] = F[0] P0[0]=F[0]
    2. 对于 m ∈ [ 1 , N − 1 ] m \in [1,N-1] m[1,N1],需要 F [ m ] ⋅ X − m = − F [ m ] ⋅ X N − m F[m]\cdot X^{-m} = -F[m] \cdot X^{N-m} F[m]Xm=F[m]XNm,即 P 0 [ N − m ] = − F [ m ] P_0[N-m] = -F[m] P0[Nm]=F[m]
  • 对于区间 m ∈ [ N , 2 N − 1 ] m \in [N,2N-1] m[N,2N1] 的子函数 F 1 F_1 F1,构造多项式 P 1 P_1 P1
    1. 对于 m = N m=N m=N,需要 F [ N ] ⋅ X − N = − F [ N ] F[N]\cdot X^{-N} = -F[N] F[N]XN=F[N],即 P 1 [ 0 ] = − F [ N ] P_1[0]=-F[N] P1[0]=F[N]
    2. 对于 m ∈ [ N + 1 , 2 N − 1 ] m \in [N+1,2N-1] m[N+1,2N1],需要 F [ m ] ⋅ X − m = F [ m ] ⋅ X 2 N − m F[m] \cdot X^{-m} = F[m] \cdot X^{2N-m} F[m]Xm=F[m]X2Nm,即 P 1 [ 2 N − m ] = F [ m ] P_1[2N-m] = F[m] P1[2Nm]=F[m]

如图所示:

在这里插入图片描述

在上述算法中,为了 PubMux 的噪声控制,[KS23] 多次调用 PBS 来生成 power-of- L L L 的各个 LWE 密文。是否可以减少自举调用次数?

  1. 注意到它们都是对同一个密文 c t N ct_N ctN 的自举,我们可以使用 Multi-output PBS,先初始化 ACC 为符号函数(取值 ± Δ / 2 \pm \Delta/2 ±Δ/2 而非 0 , Δ 0,\Delta 0,Δ),盲旋转结束后使用不同 LUT 的一阶差分来数乘
  2. 其实这些 LUT 就是不同缩放因子 L b o o t i − 1 L^{i-1}_{boot} Lbooti1 下的符号函数,因此它们的一阶差分就是常数多项式 L b o o t i − 1 / 2 − ( − L b o o t i − 1 / 2 ) = L b o o t i − 1 L^{i-1}_{boot}/2 - (-L^{i-1}_{boot}/2) = L^{i-1}_{boot} Lbooti1/2(Lbooti1/2)=Lbooti1
  3. 对比直接把 L b o o t i − 1 ⋅ s g n P L_{boot}^{i-1} \cdot sgnP Lbooti1sgnP 初始化到 ACC 中,最后乘以 Test Vector 会导致错误的额外增长。因为最大的是 L b o o t l b o o t − 1 ∈ [ Q / L b o o t , Q ) L_{boot}^{l_{boot}-1} \in [Q/L_{boot}, Q) Lbootlboot1[Q/Lboot,Q),导致自举噪声必然会淹没消息。

主要原因是 f : Z t → Z Q f:\mathbb Z_t \to \mathbb Z_Q f:ZtZQ 的值域模数是 Q Q Q,对它做分解需要很大的 powers L b o o t l b o o t − 1 L_{boot}^{l_{boot}-1} Lbootlboot1,导致最后的 TV 范数太大。可以减小待计算函数的值域范围。因为相位的 LSB 就是噪声而已,把它写入函数值没有意义。可以设置 f = Δ Q , t ′ ⋅ f ′ f=\Delta_{Q,t'} \cdot f' f=ΔQ,tf,其中的 f ′ : Z t → Z Q ′ , Q ′ = Q / Δ Q , t ′ f':\mathbb Z_t \to \mathbb Z_{Q'}, Q' = Q/\Delta_{Q,t'} f:ZtZQ,Q=Q/ΔQ,t 范数较低,然后把 Δ Q , t ′ \Delta_{Q,t'} ΔQ,t 放在初始化 ACC 的符号函数里面,而低范数的 f ′ f' f 的一阶差分放在 TV 里面。此时的 f ′ f' f 对应的多项式 p 0 , p 1 p_0,p_1 p0,p1 也是低范数的,PubMux 甚至不需要做数字分解就可以支持线性同态。或者限制输入的噪声范围。通过 Mod-Switch 以及 Mod-Up 使得 LWE 密文相位的最低 log ⁡ l b o o t \log l_{boot} loglboot 比特都是零,跳跃式的盲旋转,可以把 l b o o t l_{boot} lboot 个函数打包到同一个 ACC 中。这要求 l b o o t l_{boot} lboot 是较小的数,并且模切换 Q → Q / l b o o t Q \to Q/l_{boot} QQ/lboot(丢弃最低 log ⁡ l b o o t \log l_{boot} loglboot 比特)引起的 e m s e_{ms} ems 不会导致解密错误。

Application

受益于 Full Domain,现在 LWE 密文没有 Padding Bit,因此仿射变换基本是免费的(只要噪声不会变的太大)

  • 对于乘法运算,利用 x ⋅ y = ( ( x + y ) / 2 ) 2 − ( ( x − y ) / 2 ) 2 x \cdot y = ((x+y)/2)^2 - ((x-y)/2)^2 xy=((x+y)/2)2((xy)/2)2,可以使用两次 FD-PBS 来计算平方,其余的运算都是仿射变换。由于不需要 tensor product,因此噪声增长很小,要求的参数规模不大。
  • 对于 Max/Min 运算,可以转化为 max ⁡ ( x − y , 0 ) + y \max(x-y,0)+y max(xy,0)+y 以及 min ⁡ ( x − y , 0 ) + y \min(x-y,0)+y min(xy,0)+y,于是只需要一次 FD-PBS
  • 对于同一个 m m m 上的多个函数,算法中的 a c c c , i acc_{c,i} accc,i 计算出的 powers 是可以复用的,只需改变 step 9-15 的运算
  • 对于更大的明文模数,可以使用 CRT 技术,但这只适用于一些特殊的函数,它们需要按照 CRT 分裂为子函数

Preformance

参数集:

在这里插入图片描述

手写神经网络:

在这里插入图片描述

仿射变换:

在这里插入图片描述

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值