文章目录

  • 1. 提出背景
  • 2. 方案原理
  • 3. 算法描述
  • 4.方案改进
    • 4.1 自举方案
    • 4.2 RNS变体

1. 提出背景

1978年,Rivest、Adleman和Dertouzos在文献[1]中就贷款公司数据库的保密问题与计算问题进行了讨论,并首次提出了同态加密的加密方式。后来,随着云计算、大数据、人工智能、机器学习等新兴技术不断兴起,人们越来越发现同态加密对于现阶段信息安全的重要性。2009年,Gentry首次提出自举技术[2],实现了第一个全同态加密方案。2010年,Dijk又首次实现了基于整数环上FHE的DGHV方案[4]。2012年,Kipnis等人给出了基于矩阵和多项式的无噪声FHE方案[5]。2016年,Jaschke等人通过将有理数近似表示为整数[6],实现了明文空间为实数的FHE方案。2017年,Cheon等人实现了可进行浮点数近似计算的层次型FHE方案[3](下文称CKKS方案),一年后,Cheon等人又通过自举技术,将CKKS方案扩展为全同态加密方案[7],同年,也通过RNS实现了CKKS方案的RNS变体[8]

2. 方案原理

同态加密就是在数据仍处于密文的状态下,对密文数据信息进行各种计算,从而使得其结果在变回明文后和对明文进行相应运算时的结果等值。

对于函数fff,若fff满足f(a)+f(b)=f(a+b)f(a) + f(b) = f(a+b)f(a)+f(b)=f(a+b)或f(a)⋅f(b)=f(a⋅b)f(a) \cdot f(b) = f(a \cdot b)f(a)⋅f(b)=f(a⋅b)其一,则称其为半同态,若对于加法与乘法均满足,则称该函数为全同态。我们在这里将加密操作 看作是一个满足同态性质的函数,那么,其密文Enc(m)Enc(m)Enc(m)就有
Enc(m1)+Enc(m2)=Enc(m1+m2)或Enc(m1)⋅Enc(m2)=Enc(m1⋅m2)Enc(m_1) + Enc(m_2) = Enc(m_1 + m_2)或\\ Enc(m_1) \cdot Enc(m_2) = Enc(m_1 \cdot m_2)Enc(m1​)+Enc(m2​)=Enc(m1​+m2​)或Enc(m1​)⋅Enc(m2​)=Enc(m1​⋅m2​)的性质,而且加密函数没有变化,故仍可以用相同的解密函数DecDecDec进行解密,并且解密后的明文与对明文直接进行运算的结果相等:
Dec(Enc(m1)+Enc(m2))=m1+m2或Dec(Enc(m1)⋅Enc(m2))=m1⋅m2Dec(Enc(m_1) + Enc(m_2)) = m_1 + m_2或\\ Dec(Enc(m_1) \cdot Enc(m_2)) = m_1 \cdot m_2Dec(Enc(m1​)+Enc(m2​))=m1​+m2​或Dec(Enc(m1​)⋅Enc(m2​))=m1​⋅m2​
同理,若加法与乘法均满足,则称该方案为全同态加密方案。

Cheon等人给出的CKKS方案,实现了明文为浮点数的近似计算。该方案首先通过编码技术将明文槽上的N/2N/2N/2维复向量变换为NNN次整系数多项式;接着假设其具有循环安全性,引入同态乘密钥evkevkevk,将同态乘法带来的密文维数扩张加以控制;最后在同态乘法结束后进行“重缩放”,有效地控制噪声对明文的影响。

3. 算法描述

设CKKS方案的安全系数为λ\lambdaλ,明文空间M=CN/2\mathcal{M} = \mathbb{C}^{N/2}M=CN/2,映射τ\tauτ为:τ:Zq[x]/⟨xN+1⟩→CN/2\tau:\mathbb{Z}_q[x]/\langle x^N + 1\rangle \to \mathbb{C}^{N/2}τ:Zq​[x]/⟨xN+1⟩→CN/2即m(x)↦mm(x) \mapsto \mathbf{m}m(x)↦m,具体关系为zj=m(ζMj)z_j = m(\zeta _M ^j)zj​=m(ζMj​),其中ζM=exp⁡(−2πi/M)\zeta _M = \exp(-2\pi i/M)ζM​=exp(−2πi/M)。方案详细描述如下:

  1. CKKS.KeyGen(1λ)CKKS.KeyGen(1^{\lambda})CKKS.KeyGen(1λ)
  • 选择一个2的方幂的整数M=M(λ,qL)M=M(\lambda,q_L)M=M(λ,qL​), 一个整数h=h(λ,qL)h=h(\lambda,q_L)h=h(λ,qL​), 一个大整数P=P(λ,qL)P = P(\lambda,q_L)P=P(λ,qL​),和一个实数σ=σ(λ,qL)\sigma=\sigma(\lambda,q_L)σ=σ(λ,qL​);
  • 采样s←HWT(h)s \leftarrow HWT(h)s←HWT(h),a←RqLa \leftarrow R_{q_L}a←RqL​​,e←DG(σ2)e \leftarrow DG(\sigma ^2)e←DG(σ2),设私钥sk=(1,s)sk = (1,s)sk=(1,s),公钥为pk=(b,a)∈RqL2pk = (b,a) \in R_{q_L}^2pk=(b,a)∈RqL​2​,其中b←−as+e(modqL)b \leftarrow -as + e \ (mod\;q_L)b←−as+e (modqL​);
  • 采样a′←RqLa' \leftarrow R_{q_L}a′←RqL​​,e′←DG(σ2)e' \leftarrow DG(\sigma ^2)e′←DG(σ2),设同态乘密钥evk←(b′,a′)∈RP⋅qL2evk \leftarrow (b',a') \in R_{P \cdot q_L}^2evk←(b′,a′)∈RP⋅qL​2​,其中b′=−a′s+e′+Ps2(modP⋅qL)b' = -a's + e' + Ps^2 \; (mod P \cdot q_L)b′=−a′s+e′+Ps2(modP⋅qL​)。
  1. CKKS.Encode(m,Δ)CKKS.Encode(\mathbf{m},\Delta)CKKS.Encode(m,Δ)
  • 对于明文向量m\mathbf{m}m,首先对其等比放大⌊Δ⋅m⌉\left\lfloor \Delta \cdot \mathbf{m} \right\rceil⌊Δ⋅m⌉;
  • 接着通过τ\tauτ映射的逆τ−1\tau^{-1}τ−1将⌊Δ⋅m⌉\left\lfloor \Delta \cdot \mathbf{m} \right\rceil⌊Δ⋅m⌉转化为多项式m=⌊τ−1(⌊Δ⋅m⌉)⌉m = \left\lfloor \tau ^{-1}(\left\lfloor \Delta \cdot \mathbf{m} \right\rceil) \right\rceilm=⌊τ−1(⌊Δ⋅m⌉)⌉
  1. CKKS.Decode(m,Δ)CKKS.Decode(m,\Delta)CKKS.Decode(m,Δ)
  • 对于明文多项式mmm,使用τ\tauτ映射还原为向量m\mathbf{m}m并等比缩小m=⌊Δ−1(⌊τ(m)⌉)⌉\mathbf{m} = \left\lfloor \Delta ^{-1} (\left\lfloor \tau (m) \right\rceil) \right\rceilm=⌊Δ−1(⌊τ(m)⌉)⌉
  1. CKKS.Encpk(m)CKKS.Enc_{pk}(m)CKKS.Encpk​(m)
  • 采样v←ZO(0.5)v \leftarrow ZO(0.5)v←ZO(0.5),e0,e1←DG(σ2)e_0,e_1 \leftarrow DG(\sigma ^2)e0​,e1​←DG(σ2),输出密文:c=v⋅pk+(m+e0,e1)(modqL)\mathbf{c} = v \cdot pk + (m + e_0,e_1)\;(mod q_L) c=v⋅pk+(m+e0​,e1​)(modqL​)
  1. CKKS.Decsk(c)CKKS.Dec_{sk}(\mathbf{c})CKKS.Decsk​(c)
  • 对于c=(b,a)\mathbf{c} = (b,a)c=(b,a),解密算法为[⟨c,sk⟩]ql[\langle \mathbf{c}, \mathbf{sk}\rangle ]q_l[⟨c,sk⟩]ql​,即m=b+as(modql)m = b + as\;(mod q_l) m=b+as(modql​)

由于CKKS方案在加密时引入了噪声,所以其解密函数生成的明文与原始明文是不同的,但误差的数量级是远远小于明文的,所以该误差是完全可以忽略的。

  1. CKKS.Add(c1,c2)CKKS.Add(\mathbf{c_1},\mathbf{c_2})CKKS.Add(c1​,c2​)
  • 对于c1=(b1,a1)\mathbf{c_1} = (b_1,a_1)c1​=(b1​,a1​),c2=(b2,a2)\mathbf{c_2} = (b_2,a_2)c2​=(b2​,a2​),密文的同态加法为相应位直接相加cAdd=[(b1+b2,a1+a2)]ql\mathbf{c_{Add}} = [(b_1 + b_2,a_1 + a_2)]q_l cAdd​=[(b1​+b2​,a1​+a2​)]ql​

由于密文的同态乘法会导致密文规模扩大,这将影响到解密算法的执行,从而使得密钥规模随乘法深度的增加而增大。故Cheon等人在方案设计时引入同态乘密钥(evkevkevk)实现对乘法密文的缩放,使其规模保持在RqL2R_{q_L}^2RqL​2​中。

  1. CKKS.Multevk(c1,c2)CKKS.Mult_{evk}(\mathbf{c_1},\mathbf{c_2})CKKS.Multevk​(c1​,c2​)
  • 对于c1=(b1,a1)\mathbf{c_1} = (b_1,a_1)c1​=(b1​,a1​),c2=(b2,a2)\mathbf{c_2} = (b_2,a_2)c2​=(b2​,a2​),我们记(d0,d1,d2)=[(b1b2,a1b2+a2b1,a1a2)]ql(d_0,d_1,d_2) = [(b_1b_2,a_1b_2 + a_2b_1,a_1a_2)]_{q_l} (d0​,d1​,d2​)=[(b1​b2​,a1​b2​+a2​b1​,a1​a2​)]ql​​
  • 则c1\mathbf{c_1}c1​、c2\mathbf{c_2}c2​的同态乘法表示为cMult=(d0,d1)+⌊P−1⋅d2⋅evk⌉\mathbf{c_{Mult}} = (d_0 , d_1) + \left\lfloor P^{-1} \cdot d_2 \cdot evk \right\rceil cMult​=(d0​,d1​)+⌊P−1⋅d2​⋅evk⌉

但乘法操作会导致噪声增大,从而出现无法正确解密的情况,这时就需要在每次乘法之后进行一个“重缩放”的操作。

  1. CKKS.RSl→l′(c)CKKS.RS_{l \to l'}(\mathbf{c})CKKS.RSl→l′​(c)
  • 对于密文c\mathbf{c}c,我们对其进行“重缩放”c′=⌊ql′qlc⌉\mathbf{c'} = \left\lfloor \frac{q'_{l}}{q_l} \mathbf{c} \right\rceil c′=⌊ql​ql′​​c⌉经“重缩放”后,其密文模数降低为ql′q_l'ql′​。

4.方案改进

在之后的研究中,人们又对该方案进行了不同程度的改进,如下图:
欧密18[7] 给出了CKKS方案的自举方案,欧密19[9] 对其进行了改进;而SAC18[8] 则是提出了CKKS方案的RNS变体,但是其使用的是欧密18中的自举方案,自举精度远达不到实际需求;故在RSA20[10] 中,又结合欧密19中的自举改进对RNS-CKKS方案的自举进行了改进;21年的欧密会上,又有两个方案被相继提出,一个是在RSA20的基础上对自举精度进行了提升[11] ,另一个则是提出了一种新的自举方案[12],相较之前的方案,精度、效率和安全性上都有了明显的提升。

4.1 自举方案

这里只对欧密18中提到的自举方案进行说明。

由于明文槽上的任意线性变换都可表示为z↦A⋅z+B⋅z‾\mathbf{z} \mapsto A \cdot \mathbf{z} + B \cdot \overline{\mathbf{z}}z↦A⋅z+B⋅z,即对于任意线性变换,我们都可以使用两个N/2N/2N/2维的矩阵表示。故我们在同态计算编解码操作时需要用到MatMult(ct,A)MatMult(\mathbf{ct},A)MatMult(ct,A)函数以实现同态计算矩阵乘法,其中ct∈Rq2\mathbf{ct} \in R_q^2ct∈Rq2​并且A∈CN/2×N/2A \in \mathbb{C}^{N/2 \times N/2}A∈CN/2×N/2,这个函数相当于对ct\mathbf{ct}ct加密的向量m\mathbf{m}m进行了如下的操作:A⋅m=∑0⩽j<N/2(aj⊙ρ(m;j))A \cdot \mathbf{m} = \sum_{0 \leqslant j < N/2} (\mathbf{a}_j \odot \rho (\mathbf{m};j)) A⋅m=0⩽j<N/2∑​(aj​⊙ρ(m;j))其中,⊙\odot⊙为向量按位乘法,ρ\rhoρ为循环向左移位。

而对于模运算,Cheon等人首先模运算近似为正弦函数上的运算:[t]q=q2π⋅sin⁡(2πq⋅t)[t]_q = \frac{q}{2\pi}\cdot \sin (\frac{2\pi}{q}\cdot t)[t]q​=2πq​⋅sin(q2π​⋅t)

接着,再通过欧拉公式,{exp⁡(iθ)=cos⁡θ+isin⁡θexp⁡(−iθ)=cos⁡θ−isin⁡θ\begin{cases} \exp(i\theta ) = \cos \theta + i \sin \theta \\ \exp(-i\theta ) = \cos \theta - i \sin \theta \end{cases} {exp(iθ)=cosθ+isinθexp(−iθ)=cosθ−isinθ​将正弦函数上的运算转换到指数函数上的运算:sin⁡θ=12iexp⁡(iθ)−exp⁡(−iθ)\sin \theta = \frac{1}{2i} \exp(i\theta) - \exp(-i\theta) sinθ=2i1​exp(iθ)−exp(−iθ)最后利用文献[4]给出的计算指数函数的算法进行运算即可:[t]q=q4πi[exp⁡(2πiqt)−exp⁡(−2πiqt)][t]_q = \frac{q}{4\pi i} [\exp (\frac{2\pi i}{q} t) - \exp (-\frac{2\pi i}{q} t)][t]q​=4πiq​[exp(q2πi​t)−exp(−q2πi​t)]

4.2 RNS变体

为了有效地实现多项式运算,Gentry等人基于CRT提出了一种双CRT表示的分圆多项式表示方案[13]。第一层CRT层通过使用RNS将多项式分解成具有较小模的多项式分量。第二层则是通过NTT的方法,将每个小多项式转换为整数向量。在双CRT表示中,任意多项式都可以用由小整数组成的矩阵来识别,并且可以通过执行不同分量的模操作来实现有效的多项式运算。

Cheon等人提出了CKKS方案的RNS变体[9],实现了在RNS上的近似全同态加密方案,具体算法如下:

  1. RNS.Setup(q,L,η)RNS.Setup(q,L,\eta )RNS.Setup(q,L,η)
  • 输入基本整数qqq,深度LLL,比特精度η\etaη;
  • 选择一个基C={q0,q1,⋯,qL}\mathcal{C} = \{q_0,q_1,\cdots,q_L\}C={q0​,q1​,⋯,qL​},满足q/ql∈(1−2−η,1+2−η)q/q_l \in (1 - 2^{-\eta},1 + 2^{-\eta})q/ql​∈(1−2−η,1+2−η),并且对于乘法深度为lll的密文模数Ql=∏i=0lqiQ_l = \prod_{i = 0}^l q_iQl​=∏i=0l​qi​,其相邻模数模数具有相同的比率Ql/Ql−1=ql≈qQ_l/Q_{l-1} = q_l \approx qQl​/Ql−1​=ql​≈q;
  • 选择一个KSGen(s1,s2)KSGen(s_1,s_2)KSGen(s1​,s2​)算法需要的模数P=∏i=0k−1piP = \prod_{i = 0}^{k-1} p_iP=∏i=0k−1​pi​;
  • 生成基D={p0,p1,⋯,pk−1,q0,q1,⋯,ql−1}\mathcal{D} = \{p_0,p_1,\cdots,p_{k-1},q_0,q_1,\cdots,q_{l-1}\}D={p0​,p1​,⋯,pk−1​,q0​,q1​,⋯,ql−1​},B={p0,p1,⋯,pk−1}\mathcal{B} = \{p_0,p_1,\cdots,p_{k-1}\}B={p0​,p1​,⋯,pk−1​},Cl={q0,q1,⋯,ql−1}\mathcal{C}_l = \{q_0,q_1,\cdots,q_{l-1}\}Cl​={q0​,q1​,⋯,ql−1​};
  • 选择一个2的幂整数NNN,R\mathbb{R}R上的私钥分布χkey\chi _{key}χkey​,加密参数分布χenc\chi _{enc}χenc​和误差分布χerr\chi _{err}χerr​。
  1. RNS.KSGen(s1,s2)RNS.KSGen(s_1,s_2)RNS.KSGen(s1​,s2​)
  • 采样(a0′,a1′,⋯,ak+L′)←U(∏i=0k−1Rpi×∏j=0LRqj)(a'_0,a'_1,\cdots,a'_{k + L}) \leftarrow U(\prod_{i = 0}^{k-1}\mathbb{R}_{p_i}\times\prod_{j = 0}^{L}\mathbb{R}_{q_j})(a0′​,a1′​,⋯,ak+L′​)←U(∏i=0k−1​Rpi​​×∏j=0L​Rqj​​),e′←χerre' \leftarrow \chi _{err}e′←χerr​;
  • 对于给定的秘密多项式s1,s2∈Rs_1,s_2 \in \mathbb{R}s1​,s2​∈R,计算
    当0⩽i<k0 \leqslant i < k0⩽i<k时,bi′=−ai′⋅s2+e′modpib'_i = -a'_i\cdot s_2 + e' \ mod\;p_i bi′​=−ai′​⋅s2​+e′ modpi​当0⩽j⩽L0 \leqslant j \leqslant L0⩽j⩽L时,bk+j′=−ak+j′⋅s2+[P]qj⋅s1+e′modqjb'_{k+j} = -a'_{k+j}\cdot s_2 + [P]_{q_j} \cdot s_1 + e' \ mod\;q_j bk+j′​=−ak+j′​⋅s2​+[P]qj​​⋅s1​+e′ modqj​
  • 输出转换密钥swk\mathbf{swk}swk为:swk=(swk0,swk1,⋯,swkk+L)∈∏i=0k−1Rpi2×∏j=0LRqj2\mathbf{swk} = (\mathbf{swk}_0,\mathbf{swk}_1,\cdots,\mathbf{swk}_{k+L}) \in \prod_{i = 0}^{k-1}\mathbb{R}_{p_i}^2\times\prod_{j = 0}^{L}\mathbb{R}_{q_j}^2 swk=(swk0​,swk1​,⋯,swkk+L​)∈i=0∏k−1​Rpi​2​×j=0∏L​Rqj​2​其中,swki=(bi′,ai′)\mathbf{swk}_i = (b'_i,a'_i)swki​=(bi′​,ai′​)。
  1. RNS.KeyGen()RNS.KeyGen()RNS.KeyGen()
  • 采样(a0′,a1′,⋯,aL′)←U(∏j=0LRqj)(a'_0,a'_1,\cdots,a'_L) \leftarrow U(\prod_{j = 0}^{L}R_{q_j})(a0′​,a1′​,⋯,aL′​)←U(∏j=0L​Rqj​​),e←χerre \leftarrow \chi _{err}e←χerr​,s←χkeys \leftarrow \chi _{key}s←χkey​,并记私钥为sk=(1,s)\mathbf{sk} = (1,s)sk=(1,s);
  • 计算bi=−ai⋅s+emodqjb_i = -a_i\cdot s + e \ mod\;q_jbi​=−ai​⋅s+e modqj​,0⩽j⩽L0 \leqslant j \leqslant L0⩽j⩽L;
  • 生成同态乘密钥evk=KSGen(s2,s)\mathbf{evk} = KSGen(\mathbf{s}^2,\mathbf{s}) evk=KSGen(s2,s)
  1. RNS.Encode(m,Δ)RNS.Encode(\mathbf{m},\Delta)RNS.Encode(m,Δ)
  • 对于明文向量m\mathbf{m}m,首先对其等比放大⌊Δ⋅m⌉\left\lfloor \Delta \cdot \mathbf{m} \right\rceil⌊Δ⋅m⌉;
  • 接着通过τ\tauτ映射的逆τ−1\tau^{-1}τ−1将⌊Δ⋅m⌉\left\lfloor \Delta \cdot \mathbf{m} \right\rceil⌊Δ⋅m⌉转化为多项式m=⌊τ−1(⌊Δ⋅m⌉)⌉m = \left\lfloor \tau ^{-1}(\left\lfloor \Delta \cdot \mathbf{m} \right\rceil) \right\rceilm=⌊τ−1(⌊Δ⋅m⌉)⌉
  1. RNS.Decode(m,Δ)RNS.Decode(m,\Delta)RNS.Decode(m,Δ)
  • 对于明文多项式mmm,使用τ\tauτ映射还原为向量m\mathbf{m}m并等比缩小m=⌊Δ−1(⌊τ(m)⌉)⌉\mathbf{m} = \left\lfloor \Delta ^{-1} (\left\lfloor \tau (m) \right\rceil) \right\rceilm=⌊Δ−1(⌊τ(m)⌉)⌉
  1. RNS.Encpk(m)RNS.Enc_{\mathbf{pk}}(m)RNS.Encpk​(m)
  • 采样v←χencv \leftarrow \chi _{enc}v←χenc​,e0,e1←χerre_0,e_1 \leftarrow \chi _{err}e0​,e1​←χerr​;
  • 输出密文ct=(ct0,ct1,⋯,ctL)∈∏j=0LRqj2\mathbf{ct} = (\mathbf{ct}_0,\mathbf{ct}_1,\cdots,\mathbf{ct}_L) \in \prod_{j = 0}^{L}\mathbb{R}_{q_j}^2 ct=(ct0​,ct1​,⋯,ctL​)∈j=0∏L​Rqj​2​其中,ctj=(v⋅pkj+(m+e0,e1))modqj\mathbf{ct}_j = (v \cdot \mathbf{pk}_j + (m + e_0,e_1)) \ mod\;q_jctj​=(v⋅pkj​+(m+e0​,e1​)) modqj​。
  1. RNS.Decsk(ct)RNS.Dec_{\mathbf{sk}}(\mathbf{ct})RNS.Decsk​(ct)
  • 对于密文ct\mathbf{ct}ct,输出[⟨ct0,sk⟩]q0[\left\langle \mathbf{ct}_0,\mathbf{sk}\right\rangle]_{q_0}[⟨ct0​,sk⟩]q0​​,即m=b0+a0⋅smodq0m = b_0 + a_0 \cdot s \ mod\;q_0 m=b0​+a0​⋅s modq0​

之后便是运算部分,由于RNS的特性,在该表征系统上的运算均可分解为各个基上的运算,并且相互独立。故RNS上运算的具体算法展示如下:

  1. RNS.Add(ct,ct′)RNS.Add(\mathbf{ct},\mathbf{ct}')RNS.Add(ct,ct′)
  • 给定两个密文ct,ct′∈∏j=0lRqj2\mathbf{ct},\mathbf{ct}' \in \prod_{j = 0}^{l}\mathbb{R}_{q_j}^2ct,ct′∈∏j=0l​Rqj​2​,分别表示为ct=(ct0,⋯,ctl)\mathbf{ct} = (\mathbf{ct}_0,\cdots,\mathbf{ct}_l)ct=(ct0​,⋯,ctl​)和ct′=(ct0′,⋯,ctl′)\mathbf{ct}' = (\mathbf{ct}'_0,\cdots,\mathbf{ct}'_l)ct′=(ct0′​,⋯,ctl′​),RNS上的同态加法是对应位的元素分别相加,即ctadd=(ctadd1,ctadd2,⋯,ctaddl,)\mathbf{ct}_{add} = (\mathbf{ct}_{add_1},\mathbf{ct}_{add_2},\cdots,\mathbf{ct}_{add_l},)ctadd​=(ctadd1​​,ctadd2​​,⋯,ctaddl​​,)其中,ctaddi=(cti+cti′)modqi\mathbf{ct}_{add_i} = (\mathbf{ct}_i + \mathbf{ct}'_i) \ mod\;q_ictaddi​​=(cti​+cti′​) modqi​。
  1. RNS.Multevk(ct,ct′)RNS.Mult_{\mathbf{evk}}(\mathbf{ct},\mathbf{ct}')RNS.Multevk​(ct,ct′)
  • 给定两个密文ct,ct′∈∏j=0lRqj2\mathbf{ct},\mathbf{ct}' \in \prod_{j = 0}^{l}\mathbb{R}_{q_j}^2ct,ct′∈∏j=0l​Rqj​2​,分别表示为ct=(ct0,⋯,ctl)\mathbf{ct} = (\mathbf{ct}_0,\cdots,\mathbf{ct}_l)ct=(ct0​,⋯,ctl​)和ct′=(ct0′,⋯,ctl′)\mathbf{ct}' = (\mathbf{ct}'_0,\cdots,\mathbf{ct}'_l)ct′=(ct0′​,⋯,ctl′​);
  • 计算di0=cti0⋅cti0′modqjdi1=cti0⋅cti1′+cti1⋅cti0′modqjdi2=cti1⋅cti1′modqj\begin{aligned} \mathbf{d}_{i_0} &= \mathbf{ct}_{i_0} \cdot \mathbf{ct}'_{i_0} \ mod\;q_j\\ \mathbf{d}_{i_1} &= \mathbf{ct}_{i_0} \cdot \mathbf{ct}'_{i_1} + \mathbf{ct}_{i_1} \cdot \mathbf{ct}'_{i_0} \ mod\;q_j\\ \mathbf{d}_{i_2} &= \mathbf{ct}_{i_1} \cdot \mathbf{ct}'_{i_1} \ mod\;q_j \end{aligned} di0​​di1​​di2​​​=cti0​​⋅cti0​′​ modqj​=cti0​​⋅cti1​′​+cti1​​⋅cti0​′​ modqj​=cti1​​⋅cti1​′​ modqj​​
  • 使用近似模提升,将di2\mathbf{d}_{i_2}di2​​的基由Cl\mathcal{C}_lCl​提升到Dl\mathcal{D}_lDl​ ModupCl→Dl(d20,⋯,d2l)=(d~20,⋯,d~2k−1,d20,⋯,d2l)Modup_{\mathcal{C}_l \to \mathcal{D}_l}(\mathbf{d}_{2_0},\cdots,\mathbf{d}_{2_l}) = (\widetilde{\mathbf{d}}_{2_0},\cdots,\widetilde{\mathbf{d}}_{2_{k-1}},\mathbf{d}_{2_0},\cdots,\mathbf{d}_{2_l}) ModupCl​→Dl​​(d20​​,⋯,d2l​​)=(d20​​,⋯,d2k−1​​,d20​​,⋯,d2l​​)
  • 重线性化ct~=(ct~0,ct~1,⋯,ct~k+l)\widetilde{\mathbf{ct}} = (\widetilde{\mathbf{ct}}_0,\widetilde{\mathbf{ct}}_1,\cdots,\widetilde{\mathbf{ct}}_{k+l}) ct=(ct0​,ct1​,⋯,ctk+l​)其中ct~i=d~2i⋅evkimodpi0⩽i<kct~k+j=dj⋅evkk+jmodqj0⩽j⩽l\begin{aligned} \widetilde{\mathbf{ct}}_i &= \widetilde{\mathbf{d}}_{2_i} \cdot \mathbf{evk}_i \ mod\;p_i \ \ \ 0 \leqslant i < k\\ \widetilde{\mathbf{ct}}_{k+j} &= \mathbf{d}_{j} \cdot \mathbf{evk}_{k+j} \ mod\;q_j \ \ \ 0 \leqslant j \leqslant l \end{aligned} cti​ctk+j​​=d2i​​⋅evki​ modpi​   0⩽i<k=dj​⋅evkk+j​ modqj​   0⩽j⩽l​
  • 再通过近似模降低,将ct~\widetilde{\mathbf{ct}}ct的基由Dl\mathcal{D}_lDl​降低到Cl\mathcal{C}_lCl​ ModdownDl→Cl(ct~0,⋯,ct~k+l)=(ct^0,⋯,ct^l)Moddown_{\mathcal{D}_l \to \mathcal{C}_l}(\widetilde{\mathbf{ct}}_0,\cdots,\widetilde{\mathbf{ct}}_{k+l}) = (\widehat{\mathbf{ct}}_0,\cdots,\widehat{\mathbf{ct}}_l ) ModdownDl​→Cl​​(ct0​,⋯,ctk+l​)=(ct0​,⋯,ctl​)
  • 输出ctmult=(ctmult0,ctmult1,⋯,ctmultl)\mathbf{ct}_{mult} = (\mathbf{ct}_{mult_0},\mathbf{ct}_{mult_1},\cdots,\mathbf{ct}_{mult_l}) ctmult​=(ctmult0​​,ctmult1​​,⋯,ctmultl​​)其中,ctmulti=(ct^i0+d0i,ct^i1+d1i)modqi\mathbf{ct}_{mult_i} = (\widehat{\mathbf{ct}}_{i_0} + \mathbf{d}_{0_i},\widehat{\mathbf{ct}}_{i_1} + \mathbf{d}_{1_i}) \ mod\;q_ictmulti​​=(cti0​​+d0i​​,cti1​​+d1i​​) modqi​。
  1. RNS.RS(ct)RNS.RS(\mathbf{ct})RNS.RS(ct)
  • 对于lll级密文ct=(ct0,ct1,⋯,ctl)∈∏j=0lRqj2\mathbf{ct} = (\mathbf{ct}_0,\mathbf{ct}_1,\cdots,\mathbf{ct}_l) \in \prod_{j = 0}^{l}\mathbb{R}_{q_j}^2ct=(ct0​,ct1​,⋯,ctl​)∈∏j=0l​Rqj​2​,输出ct′=(ct0′,ct1′,⋯,ctl−1′)∈∏j=0l−1Rqj2\mathbf{ct}' = (\mathbf{ct}'_0,\mathbf{ct}'_1,\cdots,\mathbf{ct}'_{l-1}) \in \prod_{j = 0}^{l-1}\mathbb{R}_{q_j}^2 ct′=(ct0′​,ct1′​,⋯,ctl−1′​)∈j=0∏l−1​Rqj​2​其中,ctj′=(ql−1⋅(c0j−c0l),ql−1⋅(c1j−c1l))modqj\mathbf{ct}'_j = (q_l^{-1} \cdot (c_{0_j} - c_{0_l}),q_l^{-1} \cdot (c_{1_j} - c_{1_l})) \ mod\;q_jctj′​=(ql−1​⋅(c0j​​−c0l​​),ql−1​⋅(c1j​​−c1l​​)) modqj​。

系列论文我会在下载资源中给出。

参考文献
[1] Rivest R L , Adleman L M , Dertouzos M L . On Data Banks and Privacy Homomorphisms[J]. Foundations of Secure Compuation, 1978.
[2] Gentry C . Fully homomorphic encryption using ideal lattices[J]. Stoc, 2009.
[3] Cheon J H , Kim A , Kim M , et al. Homomorphic Encryption for Arithmetic of Approximate Numbers[C]// International Conference on the Theory and Application of Cryptology and Information Security. Springer, Cham, 2017.-1
[4] Dijk M V , Gentry C , Halevi S , et al. Fully Homomorphic Encryption over the Integers[C]// International Conference on Theory & Applications of Cryptographic Techniques. Springer, Berlin, Heidelberg, 2010.
[5] Aviad Kipnis E H . 1 Efficient Methods for Practical Fully-Homomorphic Symmetric-key Encryption, Randomization, and Verification[J]. Urban Research & Practice, 2012, 7(3):255-257.
[6] Jschke A , Armknecht F . Accelerating Homomorphic Computations on Rational Numbers[J]. Springer, Cham, 2016.
[7] Cheon J H , Han K , Kim A , et al. Bootstrapping for Approximate Homomorphic Encryption[J]. Annual International Conference on the Theory and Applications of Cryptographic Techniques, 2018.-2
[8] Cheon J H , Han K , Kim A , et al. A Full RNS Variant of Approximate Homomorphic Encryption[J]. Selected areas in cryptography :. annual international workshop, SAC. proceedings. SAC (Conference), 11349:347-368.-2
[9] Chen H , Chillotti I , Song Y . Improved Bootstrapping for Approximate Homomorphic Encryption[C]// International Conference on the Theory & Applications of Cryptographic Techniques. Springer, Cham, 2019.-3
[10] Han K , D Ki. Better Bootstrapping for Approximate Homomorphic Encryption[C]// Cryptographers’ Track at the RSA Conference. Springer, Cham, 2020.-4
[11] Lee J W , Lee E , Lee Y , et al. High-Precision Bootstrapping of RNS-CKKS Homomorphic Encryption Using Optimal Minimax Polynomial Approximation and Inverse Sine Function[M]. 2021.-5
[12] Bossuat J P , Mouchet C , Troncoso-Pastoriza J , et al. Efficient Bootstrapping for Approximate Homomorphic Encryption with Non-sparse Keys[M]. 2021.-5
[13] Gentry C , Halevi S , Smart N P . Homomorphic Evaluation of the AES Circuit[C]// Annual Cryptology Conference. Springer, Berlin, Heidelberg, 2012.

密码学学习笔记(五)——CKKS同态加密方案相关推荐

  1. CKKS同态加密方案初步学习

    如论文标题所示,CKKS允许复数和实数运算,是一个近似精度计算的方案,也就是解密出来的明文和加密之前的明文不会完全一致.也就是采用丢失部分精度来换取较高的效率. CKKS的核心是把加密噪声视为近似计算 ...

  2. GSW同态加密方案学习

    帮助理解 第三代全同态加密方案,对比之前的方案来说,概念上更加简单,渐进更快,基于身份和属性. 核心思想是近似特征向量技术. 一开始看Gentry的文章很不适应,所以先看的Yue佬的文章帮助理解后再去 ...

  3. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )

    Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...

  4. 华清远见fs4412开发板学习笔记(五)

    fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...

  5. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  6. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  7. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  8. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  9. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

最新文章

  1. android 设置setmultichoiceitems设置初始化勾选_阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?...
  2. k8s组件批量启动、查看状态
  3. 基于倒谱法和线性预测法估计基音频率(MATLAB和Python)
  4. 7-8 判断三角形类型 (20 分)
  5. DDos防御工具DDoS-Defender-v2.1.0
  6. linux编程基础黑马要点总结,黑马《linux基础编程》学习笔记(从6到10)
  7. 公众号管理系统 html,微信公众号平台管理后台.html
  8. 数据结构与算法-------希尔排序------交换法+移动法
  9. 电脑怎么找到tomcat端口_更换内存条的时候我怎么找到自己电脑配置的详细信息...
  10. RoboWare Studio使用的部分问题
  11. 小米android怎么刷机教程,安卓刷机教程_小米刷机教程_手机刷机教程-IT资讯(PC6.com)...
  12. 中国人大网络教育计算机考试题,第九章计算机多媒体技术20秋人大测试题
  13. 规则三度体磁力异常 matlab,三维强磁性体的勘探方法及勘探系统与流程
  14. 三人表决器逻辑表达式与非_数电实验 | 组合逻辑电路(半加器全加器及逻辑运算)...
  15. 微信扫描自定义二维码关注公众号并登录
  16. python导包和魔幻方法
  17. 熬夜怒肝,保姆级Python学习路线,起飞!
  18. document.getElementsByTagName()返回值
  19. Paypal学习 2 -- IPN (Instant Payment Notification)
  20. 【WIFI无线感知】无线通信基础知识

热门文章

  1. A10:怎么利用容器技术,助力开放银行建设
  2. 本地系统服务例程:Nt和Zw系列函数
  3. 单模光电转换器怎么接_光纤收发器怎么连接 光纤收发器连接方法【详解】
  4. 硬盘录像机-DVR文件系统及硬盘发展趋势
  5. Freeline体验
  6. 数据结构例1.已知顺序表L的长度为n,试编写算法实现在顺序表中删除值为elem的数据元素
  7. 3D游戏建模师到底做什么工作?使用哪些软件?就业前景如何?该选择什么方式学习游戏建模?
  8. 绩优公司成主流 多家公司获政府补贴
  9. 控制网络技术(英文三)
  10. eclipse java neon,Eclipse Jee Neon 64位