Better Bootstrapping for Approximate Homomorphic Encryption

Better Bootstrapping for Approximate Homomorphic Encryption

Abstract

本文推广了RNS-CKKS,提出了新的KS算法,减少了在KS算法中使用的临时模的数量。因此,在保证相同安全性的情况下,本文算法可以不依赖Bootstrapping算法实现更深级别的计算。

同时本文提出了一种新的多项式近似算法,可以在密态下评估Sin函数,该评估专门用于CKKS的Bootstrapping算法中。

结合本文推广后的RNS-CKKS和新的Sin函数评估算法,本文实现了第一个在RNS-CKKS上的Bootstrapping算法。

1. 预备知识

1.1 基础论文


CKKS

RNS-CKKS

Bootstrapping for CKKS

Improved Bootstrapping for CKKS

Faster Homomorphic Discrete Fourier Transforms and Improved FHE Bootstrapping


1.2 Full-RNS-decomposion

给定 a ( x ) , b ( x ) ∈ R a(x),b(x)\in R a(x)b(x)R C = { q 0 , q 1 , . . . , q L } C=\{q_0,q_1,...,q_L\} C={q0,q1,...,qL} q ^ i = ∏ j ≠ i q j \hat{q}_i=\prod_{j\neq i}q_j q^i=j=iqj Q = ∏ i = 0 L q i Q=\prod_{i=0}^L q_i Q=i=0Lqi
R N S − D e c o m p C ( a ( x ) ) = ( [ a ( x ) ⋅ q ^ 0 − 1 ] q 0 , . . . , [ a ( x ) ⋅ q ^ L − 1 ] q L ) ∈ R L + 1 R N S − P o w e r C ( a ( x ) ) = ( a ( x ) ⋅ q ^ 0 , a ( x ) ⋅ q ^ 1 , . . . , a ( x ) ⋅ q ^ L ) ∈ R L + 1 RNS-Decomp_C(a(x))=([a(x)·\hat{q}_0^{-1}]_{q_0},...,[a(x)·\hat{q}_L^{-1}]_{q_L}) \in R^{L+1} \\ RNS-Power_C(a(x))=(a(x)·\hat{q}_0,a(x)·\hat{q}_1,...,a(x)·\hat{q}_{L}) \in R^{L+1} \\ RNSDecompC(a(x))=([a(x)q^01]q0,...,[a(x)q^L1]qL)RL+1RNSPowerC(a(x))=(a(x)q^0,a(x)q^1,...,a(x)q^L)RL+1
则有:
a ( x ) ⋅ b ( x ) = < R N S − D e c o m p C ( a ( x ) ) , R N S − P o w e r C ( b ( x ) ) > ∈ R Q a(x)·b(x)=<RNS-Decomp_C(a(x)),RNS-Power_C(b(x))> \in R_Q a(x)b(x)=<RNSDecompC(a(x)),RNSPowerC(b(x))>∈RQ

1.3 切比雪夫插值算法

待更新。。。。。。

2.针对RNS-CKKS改进的KS算法

2.1 首先描述RNS-CKKS中的KS算法


在RNS-CKKS中,其KS操作并没有使用 d e c o m p o s i o n decomposion decomposion方法,因此在KS操作时仅需要一个计算公钥即可,即:
s w k = ( b ′ , a ′ ) ∈ R P Q 2 swk=(b',a')\in R_{PQ}^2 swk=(b,a)RPQ2
其中:
b ′ ← − a ′ ⋅ s 2 + P ⋅ s 1 + e ′     ( m o d   P Q ) b'\leftarrow -a'·s_2+P·s_1+e' \ \ \ (mod \ PQ) bas2+Ps1+e   (mod PQ)
P = ∏ i = 0 k p i P=\prod_{i=0}^kp_i P=i=0kpi应该大于 Q = ∏ j = 0 L − 1 Q=\prod_{j=0}^{L-1} Q=j=0L1以有效减少由KS操作引入的噪声。其中 k k k为临时模的数量。


2.2 然后描述改进后的KS算法


给定 C = { q 0 , q 1 , . . . , q L } C=\{q_0,q_1,...,q_L\} C={q0,q1,...,qL}这和RNS-CKKS中的基链相同。

给定一个整数 d n u m > 0 dnum>0 dnum>0,令 α = ( L + 1 ) / d n u m \alpha=(L+1)/dnum α=(L+1)/dnum。生成一个新的基链:
C ′ = { Q 0 , Q 1 , . . . , Q d n u m − 1 } = [ ∏ i = j α ( j + 1 ) α − 1 q i ] 0 ≤ j < d n u m C'=\{Q_0,Q_1,...,Q_{dnum-1}\}=[\prod_{i=j\alpha}^{(j+1)\alpha-1}q_i]_{0\leq j < dnum} C={Q0,Q1,...,Qdnum1}=[i=jα(j+1)α1qi]0j<dnum
Q ^ j = ∏ i ≠ j Q i \hat{Q}_j=\prod _{i\neq j} Q_i Q^j=i=jQi P = ∏ i = 0 k − 1 p i P=\prod_{i=0}^{k-1}p_i P=i=0k1pi,且 ∣ P ∣ ≥ Q j |P|\geq Q_j PQj

实际上可以看到这里将 C C C中的模等间距分为 d n u m dnum dnum组,然后每个小组中的数字相乘得到对应的大的模 Q j Q_j Qj


K S G e n ( s 1 , s 2 , d n u m ) KSGen(s_1,s_2,dnum) KSGen(s1,s2,dnum):

注意,这里比RNS-CKKS中的 K S G e n ( ∗ ) KSGen(*) KSGen()算法多了一个参数 d n u m dnum dnum,在这里该参数的含义是,需要生成 d n u m dnum dnum s w k swk swk

给定两个秘密多项式 s 1 , s 2 ∈ R s_1,s_2 \in R s1,s2R,均匀采样 e ′ ← χ e r r e'\leftarrow \chi _{err} eχerr

以RNS的形式均匀采样元素:
( a ′ ( 0 ) , a ′ ( 1 ) , . . . , a ′ ( k + L ) ) ← ( ∏ i = 0 k − 1 R p i × ∏ j = 0 L R q j ) (a'^{(0)},a'^{(1)},...,a'^{(k+L)})\leftarrow (\prod_{i=0}^{k-1}R_{p_i} \times \prod_{j=0}^{L}R_{q_j}) (a(0),a(1),...,a(k+L))(i=0k1Rpi×j=0LRqj)
输出 { s w k j } 0 ≤ j < d n u m \{swk_j\}_{0\leq j < dnum} {swkj}0j<dnum,可以看到这里是生成了 d n u m dnum dnum s w k swk swk
( s w k j ( 0 ) = ( b j ′ ( 0 ) , a ′ ( 0 ) ) , . . . , s w k j ( k + L ) = ( b j ′ ( k + L ) , a ′ ( k + L ) ) ) ← ( ∏ i = 0 k − 1 R p i × ∏ j = 0 L R q j ) (swk_j^{(0)}=(b_j'^{(0)},a'^{(0)}),...,swk_j^{(k+L)}=(b_j'^{(k+L)},a'^{(k+L)}))\leftarrow (\prod_{i=0}^{k-1}R_{p_i} \times \prod_{j=0}^{L}R_{q_j}) (swkj(0)=(bj(0),a(0)),...,swkj(k+L)=(bj(k+L),a(k+L)))(i=0k1Rpi×j=0LRqj)
其中每一项满足下述关系:
{ b j ′ ( i ) ← − a ′ ( i ) ⋅ s 2 + e ′     ( m o d    p i ) ,   f o r   0 ≤ i < k b j ′ ( k + j ) ← − a ′ ( k + j ) ⋅ s 2 + [ P ] q i ⋅ [ Q ^ j ] q i ⋅ s 1 + e ′     ( m o d    q i ) ,   f o r   0 ≤ j < L \begin{cases} b_j'^{(i)} \leftarrow -a'^{(i)}·s_2+e' \ \ \ (mod \ \ p_i) , \ for \ 0\leq i < k \\ b_j'^{(k+j)} \leftarrow -a'^{(k+j)}·s_2+[P]_{q_i}·[\hat{Q}_j]_{q_i}·s_1+e' \ \ \ (mod \ \ q_i) , \ for \ 0\leq j < L \\ \end{cases} {bj(i)a(i)s2+e   (mod  pi), for 0i<kbj(k+j)a(k+j)s2+[P]qi[Q^j]qis1+e   (mod  qi), for 0j<L


现在以RNS组合的形式将这 d n u m dnum dnum个计算公钥展示如下:
s w k 0 = ( b ′ ← − a ′ ⋅ s 2 + P ⋅ Q ^ 0 ⋅ s 1 + e ′ , a ′ ) ∈ R P Q 2 swk_0=(b'\leftarrow -a'·s_2+P·\hat{Q}_0·s_1+e',a')\in R_{PQ}^2 swk0=(bas2+PQ^0s1+e,a)RPQ2

s w k 1 = ( b ′ ← − a ′ ⋅ s 2 + P ⋅ Q ^ 1 ⋅ s 1 + e ′ , a ′ ) ∈ R P Q 2 swk_1=(b'\leftarrow -a'·s_2+P·\hat{Q}_1·s_1+e',a')\in R_{PQ}^2 swk1=(bas2+PQ^1s1+e,a)RPQ2

. . . ... ...

s w k d n u m − 1 = ( b ′ ← − a ′ ⋅ s 2 + P ⋅ Q ^ d n u m − 1 ⋅ s 1 + e ′ , a ′ ) ∈ R P Q 2 swk_{dnum-1}=(b'\leftarrow -a'·s_2+P·\hat{Q}_{dnum-1}·s_1+e',a')\in R_{PQ}^2 swkdnum1=(bas2+PQ^dnum1s1+e,a)RPQ2

可以看到若 d n u m = 1 dnum=1 dnum=1,我们则仅有一个计算公钥为:
s w k = ( b ′ ← − a ′ ⋅ s 2 + P ⋅ s 1 + e ′ , a ′ ) ∈ R P Q 2 swk=(b'\leftarrow -a'·s_2+P·s_1+e',a')\in R_{PQ}^2 swk=(bas2+Ps1+e,a)RPQ2
即RNS-CKKS中的计算公钥形式,也就是说本文的KS算法是对RNS-CKKS中的KS算法的推广。


2.3 KS算法应用——密文的重线性化操作

(1) K e y G e n KeyGen KeyGen:

采样 s ← χ k e y s\leftarrow \chi_{key} sχkey,设置密钥 s k = ( 1 , s ) sk=(1,s) sk=(1,s)

设置重线性化密钥 e v k i 0 ≤ j < d n u m ← K S G e n ( s 2 , s ) {evk_i}_{0\leq j <dnum}\leftarrow KSGen(s^2,s) evki0j<dnumKSGen(s2,s)

C i = { q 0 , q 1 , . . . , q i } C_i=\{q_0,q_1,...,q_i\} Ci={q0,q1,...,qi} C j ′ = { q j α , . . . q ( j + 1 ) α − 1 } C_j'=\{q_{j\alpha},...q_{(j+1)\alpha-1}\} Cj={qjα,...q(j+1)α1} D i = ( ∪ 0 ≤ j < i   C j ′ ) ∪ { p 0 , p 1 , . . . , p k − 1 } ) D_i=(\cup_{0\leq j <i}\ C_j')\cup \{p_0,p_1,...,p_{k-1}\}) Di=(0j<i Cj){p0,p1,...,pk1})


(2) M u l t r l k ( c t , c t ′ ) Mult_{rlk}(ct,ct') Multrlk(ct,ct):

给定两个 l l l级别的密文 c t = ( c t ( j ) = ( c 0 ( j ) , c 1 ( j ) ) 0 ≤ j ≤ l ct=(ct^{(j)}=(c_0^{(j)},c_1^{(j)})_{0\leq j\leq l} ct=(ct(j)=(c0(j),c1(j))0jl c t ′ = ( c t ′ ( j ) = ( c 0 ′ ( j ) , c 1 ′ ( j ) ) 0 ≤ j ≤ l ct'=(ct'^{(j)}=(c_0'^{(j)},c_1'^{(j)})_{0\leq j\leq l} ct=(ct(j)=(c0(j),c1(j))0jl。执行如下操作:

1.   F o r    0 ≤ j ≤ l    d o : \ For\ \ 0\leq j \leq l \ \ do :  For  0jl  do:(这里和RNS-CKKS的处理步骤相同)
d 0 ( j ) ← c 0 ( j ) c 0 ′ ( j )     ( m o d   q j ) d 1 ( j ) ← c 0 ( j ) c 1 ′ ( j ) + c 1 ( j ) c 0 ′ ( j )     ( m o d   q j ) d 2 ( j ) ← c 1 ( j ) c 1 ′ ( j )     ( m o d   q j ) d_0^{(j)}\leftarrow c_0^{(j)}c_0'^{(j)} \ \ \ (mod \ q_j) \\ d_1^{(j)}\leftarrow c_0^{(j)}c_1'^{(j)}+c_1^{(j)}c_0'^{(j)} \ \ \ (mod \ q_j) \\ d_2^{(j)}\leftarrow c_1^{(j)}c_1'^{(j)} \ \ \ (mod \ q_j) d0(j)c0(j)c0(j)   (mod qj)d1(j)c0(j)c1(j)+c1(j)c0(j)   (mod qj)d2(j)c1(j)c1(j)   (mod qj)
2. R N S − D e c o m p o s e RNS-Decompose RNSDecompose:

原文这里写的很复杂,我简单来用我自己的想法来分析一下:


事实上,这里的改进是想结合 F u l l − R N S − D e c o m p o s i o n Full-RNS-Decomposion FullRNSDecomposion技术。

现在考虑RNS组合的形式(实际上就是CKKS17中的形式),两个密文 c t = ( c 0 , c 1 ) ct=(c_0,c_1) ct=(c0,c1) c t ′ = ( c 0 ′ , c 1 ′ ) ct'=(c_0',c_1') ct=(c0,c1)

(1) Tensor :
( d 0 , d 1 , d 2 ) = ( c 0 c 0 ′ ,   c 0 c 1 ′ + c 1 c 0 ′ ,   c 1 c 1 ′ ) (d_0,d_1,d_2)=(c_0c_0',\ c_0c_1'+c_1c_0', \ c_1c_1') (d0,d1,d2)=(c0c0, c0c1+c1c0, c1c1)
此时满足解密结构为:
d 0 + d 1 ⋅ s + d 2 ⋅ s 2 = ( m 0 + e 0 ) ⋅ ( m 1 + e 1 ) d_0+d_1·s+d_2·s^2=(m_0+e_0)·(m_1+e_1) d0+d1s+d2s2=(m0+e0)(m1+e1)


(2) 重线性化:

(2-1)CKKS17版本的重线性化:
r l k = − a ′ ⋅ s + P ⋅ s 2 + e      ( m o d   P Q ) rlk=-a'·s+P·s^2+e \ \ \ \ (mod \ PQ) rlk=as+Ps2+e    (mod PQ)

c m u l t = ( c m u l t , 0 , c m u l t , 1 ) = ( d 0 , d 1 ) + ⌊ P − 1 ⋅ d 2 ⋅ r l k ⌉      ( m o d   Q l ) c_{mult}=(c_{mult,0},c_{mult,1})=(d_0,d_1)+\lfloor P^{-1}·d_2·rlk\rceil \ \ \ \ (mod \ Q_l) cmult=(cmult,0,cmult,1)=(d0,d1)+P1d2rlk    (mod Ql)


(2-2)RNS-CKKS版本的重线性化:

r l k rlk rlk放到RNS域的 D D D上,将 ( d 0 , d 1 , d 2 ) (d_0,d_1,d_2) (d0,d1,d2)放到RNS域上的 C l C_l Cl上。

首先通过 M o d U p ( ∗ ) ModUp(*) ModUp()算法将 d 2 d_2 d2提升到RNS域的 D l D_l Dl上,然后将 d 2 d_2 d2 r l k rlk rlk D l D_l Dl上进行组件级乘法。

随后通过 M o d D o w n ( ∗ ) ModDown(*) ModDown()算法将 D l D_l Dl上的 d 2 ⋅ r l k d_2·rlk d2rlk转变到 C l C_l Cl上,得到 C l C_l Cl上近似的 ⌊ P − 1 ⋅ d 2 ⋅ r l k ⌉ \lfloor P^{-1}·d_2·rlk\rceil P1d2rlk​。

这里需要注意的一点是,RNS-CKKS中是通过 M o d D o w n ( ∗ ) ModDown(*) ModDown()算法实现除以辅助模 P P P的操作的,与CKKS17有所不同。


(2-3)本文改进后的重线性化

实际上发现重线性化的步骤就是对 d 2 d_2 d2进行操作,要得到 ⌊ P − 1 ⋅ d 2 ⋅ r l k ⌉ \lfloor P^{-1}·d_2·rlk\rceil P1d2rlk

首先我们生成 d n u m dnum dnum个重线性化密文 r l k rlk rlk:
r l k 0 = ( b ′ ← − a ′ ⋅ s + P ⋅ Q ^ 0 ⋅ s 2 + e ′ , a ′ ) ∈ R P Q 2 rlk_0=(b'\leftarrow -a'·s+P·\hat{Q}_0·s^2+e',a')\in R_{PQ}^2 rlk0=(bas+PQ^0s2+e,a)RPQ2

r l k 1 = ( b ′ ← − a ′ ⋅ s + P ⋅ Q ^ 1 ⋅ s 2 + e ′ , a ′ ) ∈ R P Q 2 rlk_1=(b'\leftarrow -a'·s+P·\hat{Q}_1·s^2+e',a')\in R_{PQ}^2 rlk1=(bas+PQ^1s2+e,a)RPQ2

. . . ... ...

r l k d n u m − 1 = ( b ′ ← − a ′ ⋅ s + P ⋅ Q ^ d n u m − 1 ⋅ s 2 + e ′ , a ′ ) ∈ R P Q 2 rlk_{dnum-1}=(b'\leftarrow -a'·s+P·\hat{Q}_{dnum-1}·s^2+e',a')\in R_{PQ}^2 rlkdnum1=(bas+PQ^dnum1s2+e,a)RPQ2

可以看这实际上是对
R N S − P o w e r C ( P ⋅ s 2 ) = ( P ⋅ s 2 ⋅ Q ^ 0 , P ⋅ s 2 ⋅ Q ^ 1 , . . . , P ⋅ s 2 ⋅ Q ^ d n u m − 1 ) RNS-Power_C(P·s^2)=(P·s^2·\hat{Q}_0,P·s^2·\hat{Q}_1,...,P·s^2·\hat{Q}_{dnum-1}) RNSPowerC(Ps2)=(Ps2Q^0,Ps2Q^1,...,Ps2Q^dnum1)
中的每一项的加密,从而得到了 d n u m − 1 dnum-1 dnum1个重线性化密钥。

然后我们对 d 2 d_2 d2进行 R N S − D e c o m p ( ∗ ) RNS-Decomp(*) RNSDecomp()​处理:
R N S − D e c o m p C ′ ( d 2 ) = ( [ d 2 ⋅ Q ^ 0 − 1 ] Q 0 , . . . , [ d 2 ⋅ Q ^ d n u m − 1 − 1 ] Q d n u m − 1 ) RNS-Decomp_{C'}(d_2)=([d_2·\hat{Q}_0^{-1}]_{Q_0},...,[d_2·\hat{Q}_{dnum-1}^{-1}]_{Q_{dnum-1}}) RNSDecompC(d2)=([d2Q^01]Q0,...,[d2Q^dnum11]Qdnum1)
很明显可以看出
d 2 ⋅ r l k = < R N S − D e c o m p c ′ ( d 2 ) , [ r l k 1 , r l k 2 , . . . , r l k d n u m − 1 ] > d_2·rlk=<RNS-Decomp_{c'}(d_2),[rlk_1,rlk_2,...,rlk_{dnum-1}]> d2rlk=<RNSDecompc(d2)[rlk1,rlk2,...,rlkdnum1]>
即这里与RNS-CKKS实现了同样的功能,但是结合了Full-RNS-Decomposion技术。

上述步骤仍然是在RNS组合形式下进行分析的,但是实际操作中,肯定是全部都放在RNS域上执行的,实际上也很简单,即对每个重线性化密钥及其对应的 d 2 d_2 d2分两执行RNS域上的操作即可,然后进行相加。

后续的步骤同RNS-CKKS相同,使用 M o d D o w n ( ∗ ) ModDown(*) ModDown()算法得到 ⌊ P − 1 ⋅ d 2 ⋅ r l k ⌉ \lfloor P^{-1}·d_2·rlk\rceil P1d2rlk


现在可以简单总结一下改进后的重现性化操作,即:
< R N S − D e c o m p C ′ ( d 2 ) , E n c d ( R N S − P o w e r C ′ ( P ⋅ s 2 ) ) > <RNS-Decomp_{C'}(d_2),Enc_{d}(RNS-Power_{C'}(P·s^2))> <RNSDecompC(d2),Encd(RNSPowerC(Ps2))>
其中 E n c d ( ∗ ) Enc_d(*) Encd()​表示分别加密。

也就是说通过RNS-Decompision技术将原先单个的 r l k rlk rlk分解为 d n u m dnum dnum个,将需要重线性化的密文元素 d 2 d_2 d2也分解为 d n u m dnum dnum个。

由于 d n u m dnum dnum是我们自己选择的,故我们可以在复杂性和高效性达到一个平衡。


2.4 KS算法应用——密文的旋转操作

密文的旋转操作

给定一个密文 c t = ( c 0 ( X ) , c 1 ( X ) ) ct=(c_0(X),c_1(X)) ct=(c0(X),c1(X)),其解密结构满足 < c t , s k > = c 0 ( X ) + c 1 ( X ) ⋅ s ( X ) ≈ m ( X ) <ct,sk>=c_0(X)+c_1(X)·s(X)\approx m(X) <ct,sk>=c0(X)+c1(X)s(X)m(X)

现在我们对密文 c t ct ct执行 a u t o m o p h i c automophic automophic操作:
c t ∗ ← κ k ( c t ) = ( c 0 ( X 5 k ) , c 1 ( X 5 k ) ) ct^*\leftarrow \kappa_k (ct)=(c_0(X^{5^k}),c_1(X^{5^k})) ctκk(ct)=(c0(X5k),c1(X5k))
很明显,此时我们需要使用 s k ∗ = ( 1 , s ( X 5 k ) ) sk^*=(1,s(X^{5^k})) sk=(1,s(X5k))这个新密钥来解密:
< c t ∗ , s k ∗ > = c 0 ( X 5 k ) + c 1 ( X 5 k ) ⋅ s ( X 5 k ) ≈ m ( X 5 k ) <ct^*,sk^*> = c_0(X^{5^k})+c_1(X^{5^k})·s(X^{5^k})\approx m(X^{5^k}) <ct,sk>=c0(X5k)+c1(X5k)s(X5k)m(X5k)
但是CKKS需要从始至终只使用原始密钥 s k sk sk来解密。


因此使用KS旋转操作(即KS算法)

现在使用改进后的KS算法生成支持左旋k位的伽罗瓦计算公钥 { g a l k e y k , j } 0 ≤ j < d n u m \{galkey_{k,j}\}_{0\leq j <dnum} {galkeyk,j}0j<dnum,这里下标的 j j j代表第 j j j g a l k e y k galkey_k galkeyk,很明显有 d n u m dnum dnum个,即:
g a l k e y k , 0 = ( b ′ ← − a ′ ⋅ s + e ′ + P ⋅ Q ^ 0 ⋅ s ( X 5 k ) , a ′ ) ∈ R P Q 2 galkey_{k,0}=(b'\leftarrow -a'·s+e'+P·\hat{Q}_0·s(X^{5^k}),a')\in R_{PQ}^2 galkeyk,0=(bas+e+PQ^0s(X5k),a)RPQ2

g a l k e y k , 1 = ( b ′ ← − a ′ ⋅ s + e ′ + P ⋅ Q ^ 1 ⋅ s ( X 5 k ) , a ′ ) ∈ R P Q 2 galkey_{k,1}=(b'\leftarrow -a'·s+e'+P·\hat{Q}_1·s(X^{5^k}),a')\in R_{PQ}^2 galkeyk,1=(bas+e+PQ^1s(X5k),a)RPQ2

. . . ... ...

g a l k e y k , d n u m − 1 = ( b ′ ← − a ′ ⋅ s + e ′ + P ⋅ Q ^ d n u m − 1 ⋅ s ( X 5 k ) , a ′ ) ∈ R P Q 2 galkey_{k,dnum-1}=(b'\leftarrow -a'·s+e'+P·\hat{Q}_{dnum-1}·s(X^{5^k}),a')\in R_{PQ}^2 galkeyk,dnum1=(bas+e+PQ^dnum1s(X5k),a)RPQ2

现在将 c 1 ( X 5 k ) c_1(X^{5^k}) c1(X5k)进行 R N S − D e c o m p ( ∗ ) RNS-Decomp(*) RNSDecomp()处理:
R N S − D e c o m p C ′ ( c 1 ( X 5 k ) ) = ( [ c 1 ( X 5 k ) ⋅ Q ^ 0 − 1 ] Q 0 , . . . , [ c 1 ( X 5 k ) ⋅ Q ^ d n u m − 1 − 1 ] Q d n u m − 1 ) RNS-Decomp_{C'}(c_1(X^{5^k}))=([c_1(X^{5^k})·\hat{Q}_0^{-1}]_{Q_0},...,[c_1(X^{5^k})·\hat{Q}_{dnum-1}^{-1}]_{Q_{dnum-1}}) RNSDecompC(c1(X5k))=([c1(X5k)Q^01]Q0,...,[c1(X5k)Q^dnum11]Qdnum1)
然后计算:
c 1 ( X 5 k ) ⋅ r l k = < R N S − D e c o m p c ′ ( c 1 ( X 5 k ) ) , [ g a l k e y k , 0 , g a l k e y k , 1 , . . . , g a l k e y k , d n u m − 1 > c_1(X^{5^k})·rlk=<RNS-Decomp_{c'}(c_1(X^{5^k})),[galkey_{k,0},galkey_{k,1},...,galkey_{k,dnum-1}> c1(X5k)rlk=<RNSDecompc(c1(X5k))[galkeyk,0,galkeyk,1,...,galkeyk,dnum1>
后续的步骤同RNS-CKKS相同,使用 M o d D o w n ( ∗ ) ModDown(*) ModDown()算法得到 ⌊ P − 1 ⋅ c 1 ( X 5 k ) ⋅ g a l k e y k ⌉ \lfloor P^{-1}·c_1(X^{5^k})·galkey_k\rceil P1c1(X5k)galkeyk


现在可以简单总结一下改进后的旋转操作,即:
< R N S − D e c o m p C ′ ( c 1 ( X 5 k ) ) , E n c d ( R N S − P o w e r C ′ ( P ⋅ s ( X 5 k ) ) ) > <RNS-Decomp_{C'}(c_1(X^{5^k})),Enc_{d}(RNS-Power_{C'}(P·s(X^{5^k})))> <RNSDecompC(c1(X5k)),Encd(RNSPowerC(Ps(X5k)))>
其中 E n c d ( ∗ ) Enc_d(*) Encd()​​表示分别加密。


3. 一种更好的同态Sin评估算法

4. RNS-CKKS上的Bootstrapping操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值