IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 密码学学习笔记(五)——CKKS同态加密方案 -> 正文阅读

[区块链]密码学学习笔记(五)——CKKS同态加密方案

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. 方案原理

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

对于函数 f f f,若 f f f满足 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)其一,则称其为半同态,若对于加法与乘法均满足,则称该函数为全同态。我们在这里将加密操作 看作是一个满足同态性质的函数,那么,其密文 E n c ( m ) Enc(m) Enc(m)就有
E n c ( m 1 ) + E n c ( m 2 ) = E n c ( m 1 + m 2 ) 或 E n c ( m 1 ) ? E n c ( m 2 ) = E n c ( m 1 ? m 2 ) 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?)的性质,而且加密函数没有变化,故仍可以用相同的解密函数 D e c Dec Dec进行解密,并且解密后的明文与对明文直接进行运算的结果相等:
D e c ( E n c ( m 1 ) + E n c ( m 2 ) ) = m 1 + m 2 或 D e c ( E n c ( m 1 ) ? E n c ( m 2 ) ) = m 1 ? m 2 Dec(Enc(m_1) + Enc(m_2)) = m_1 + m_2或\\ Dec(Enc(m_1) \cdot Enc(m_2)) = m_1 \cdot m_2 Dec(Enc(m1?)+Enc(m2?))=m1?+m2?Dec(Enc(m1?)?Enc(m2?))=m1??m2?
同理,若加法与乘法均满足,则称该方案为全同态加密方案。

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

3. 算法描述

设CKKS方案的安全系数为 λ \lambda λ,明文空间 M = C N / 2 \mathcal{M} = \mathbb{C}^{N/2} M=CN/2,映射 τ \tau τ为: τ : Z q [ x ] / ? x N + 1 ? → C N / 2 \tau:\mathbb{Z}_q[x]/\langle x^N + 1\rangle \to \mathbb{C}^{N/2} τ:Zq?[x]/?xN+1?CN/2 m ( x ) ? m m(x) \mapsto \mathbf{m} m(x)?m,具体关系为 z j = m ( ζ M j ) 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. C K K S . K e y G e n ( 1 λ ) CKKS.KeyGen(1^{\lambda}) CKKS.KeyGen(1λ)
  • 选择一个2的方幂的整数 M = M ( λ , q L ) M=M(\lambda,q_L) M=M(λ,qL?), 一个整数 h = h ( λ , q L ) h=h(\lambda,q_L) h=h(λ,qL?), 一个大整数 P = P ( λ , q L ) P = P(\lambda,q_L) P=P(λ,qL?),和一个实数 σ = σ ( λ , q L ) \sigma=\sigma(\lambda,q_L) σ=σ(λ,qL?)
  • 采样 s ← H W T ( h ) s \leftarrow HWT(h) sHWT(h) a ← R q L a \leftarrow R_{q_L} aRqL?? e ← D G ( σ 2 ) e \leftarrow DG(\sigma ^2) eDG(σ2),设私钥 s k = ( 1 , s ) sk = (1,s) sk=(1,s),公钥为 p k = ( b , a ) ∈ R q L 2 pk = (b,a) \in R_{q_L}^2 pk=(b,a)RqL?2?,其中 b ← ? a s + e ? ( m o d ?? q L ) b \leftarrow -as + e \ (mod\;q_L) b?as+e?(modqL?)
  • 采样 a ′ ← R q L a' \leftarrow R_{q_L} aRqL?? e ′ ← D G ( σ 2 ) e' \leftarrow DG(\sigma ^2) eDG(σ2),设同态乘密钥 e v k ← ( b ′ , a ′ ) ∈ R P ? q L 2 evk \leftarrow (b',a') \in R_{P \cdot q_L}^2 evk(b,a)RP?qL?2?,其中 b ′ = ? a ′ s + e ′ + P s 2 ?? ( m o d P ? q L ) b' = -a's + e' + Ps^2 \; (mod P \cdot q_L) b=?as+e+Ps2(modP?qL?)
  1. C K K S . E n c o d e ( 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\rceil m=?τ?1(?Δ?m?)?
  1. C K K S . D e c o d e ( m , Δ ) CKKS.Decode(m,\Delta) CKKS.Decode(m,Δ)
  • 对于明文多项式 m m m,使用 τ \tau τ映射还原为向量 m \mathbf{m} m并等比缩小 m = ? Δ ? 1 ( ? τ ( m ) ? ) ? \mathbf{m} = \left\lfloor \Delta ^{-1} (\left\lfloor \tau (m) \right\rceil) \right\rceil m=?Δ?1(?τ(m)?)?
  1. C K K S . E n c p k ( m ) CKKS.Enc_{pk}(m) CKKS.Encpk?(m)
  • 采样 v ← Z O ( 0.5 ) v \leftarrow ZO(0.5) vZO(0.5) e 0 , e 1 ← D G ( σ 2 ) e_0,e_1 \leftarrow DG(\sigma ^2) e0?,e1?DG(σ2),输出密文: c = v ? p k + ( m + e 0 , e 1 ) ?? ( m o d q L ) \mathbf{c} = v \cdot pk + (m + e_0,e_1)\;(mod q_L) c=v?pk+(m+e0?,e1?)(modqL?)
  1. C K K S . D e c s k ( c ) CKKS.Dec_{sk}(\mathbf{c}) CKKS.Decsk?(c)
  • 对于 c = ( b , a ) \mathbf{c} = (b,a) c=(b,a),解密算法为 [ ? c , s k ? ] q l [\langle \mathbf{c}, \mathbf{sk}\rangle ]q_l [?c,sk?]ql?,即 m = b + a s ?? ( m o d q l ) m = b + as\;(mod q_l) m=b+as(modql?)

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

  1. C K K S . A d d ( c 1 , c 2 ) CKKS.Add(\mathbf{c_1},\mathbf{c_2}) CKKS.Add(c1?,c2?)
  • 对于 c 1 = ( b 1 , a 1 ) \mathbf{c_1} = (b_1,a_1) c1?=(b1?,a1?) c 2 = ( b 2 , a 2 ) \mathbf{c_2} = (b_2,a_2) c2?=(b2?,a2?),密文的同态加法为相应位直接相加 c A d d = [ ( b 1 + b 2 , a 1 + a 2 ) ] q l \mathbf{c_{Add}} = [(b_1 + b_2,a_1 + a_2)]q_l cAdd?=[(b1?+b2?,a1?+a2?)]ql?

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

  1. C K K S . M u l t e v k ( c 1 , c 2 ) CKKS.Mult_{evk}(\mathbf{c_1},\mathbf{c_2}) CKKS.Multevk?(c1?,c2?)
  • 对于 c 1 = ( b 1 , a 1 ) \mathbf{c_1} = (b_1,a_1) c1?=(b1?,a1?) c 2 = ( b 2 , a 2 ) \mathbf{c_2} = (b_2,a_2) c2?=(b2?,a2?),我们记 ( d 0 , d 1 , d 2 ) = [ ( b 1 b 2 , a 1 b 2 + a 2 b 1 , a 1 a 2 ) ] q l (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??
  • c 1 \mathbf{c_1} c1? c 2 \mathbf{c_2} c2?的同态乘法表示为 c M u l t = ( d 0 , d 1 ) + ? P ? 1 ? d 2 ? e v k ? \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. C K K S . R S l → l ′ ( c ) CKKS.RS_{l \to l'}(\mathbf{c}) CKKS.RSll?(c)
  • 对于密文 c \mathbf{c} c,我们对其进行“重缩放” c ′ = ? q l ′ q l c ? \mathbf{c'} = \left\lfloor \frac{q'_{l}}{q_l} \mathbf{c} \right\rceil c=?ql?ql??c?经“重缩放”后,其密文模数降低为 q l ′ 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 / 2 N/2 N/2维的矩阵表示。故我们在同态计算编解码操作时需要用到 M a t M u l t ( c t , A ) MatMult(\mathbf{ct},A) MatMult(ct,A)函数以实现同态计算矩阵乘法,其中 c t ∈ R q 2 \mathbf{ct} \in R_q^2 ctRq2?并且 A ∈ C N / 2 × N / 2 A \in \mathbb{C}^{N/2 \times N/2} ACN/2×N/2,这个函数相当于对 c t \mathbf{ct} ct加密的向量 m \mathbf{m} m进行了如下的操作: A ? m = ∑ 0 ? j < N / 2 ( a j ⊙ ρ ( 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 = q 2 π ? 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 ? θ + i sin ? θ exp ? ( ? i θ ) = cos ? θ ? i sin ? θ \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 ? θ = 1 2 i exp ? ( i θ ) ? exp ? ( ? i θ ) \sin \theta = \frac{1}{2i} \exp(i\theta) - \exp(-i\theta) sinθ=2i1?exp(iθ)?exp(?iθ)最后利用文献[4]给出的计算指数函数的算法进行运算即可: [ t ] q = q 4 π i [ exp ? ( 2 π i q t ) ? exp ? ( ? 2 π i q t ) ] [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. R N S . S e t u p ( q , L , η ) RNS.Setup(q,L,\eta ) RNS.Setup(q,L,η)
  • 输入基本整数 q q q,深度 L L L,比特精度 η \eta η
  • 选择一个基 C = { q 0 , q 1 , ? ? , q L } \mathcal{C} = \{q_0,q_1,\cdots,q_L\} C={q0?,q1?,?,qL?},满足 q / q l ∈ ( 1 ? 2 ? η , 1 + 2 ? η ) q/q_l \in (1 - 2^{-\eta},1 + 2^{-\eta}) q/ql?(1?2?η,1+2?η),并且对于乘法深度为 l l l的密文模数 Q l = ∏ i = 0 l q i Q_l = \prod_{i = 0}^l q_i Ql?=i=0l?qi?,其相邻模数模数具有相同的比率 Q l / Q l ? 1 = q l ≈ q Q_l/Q_{l-1} = q_l \approx q Ql?/Ql?1?=ql?q
  • 选择一个 K S G e n ( s 1 , s 2 ) KSGen(s_1,s_2) KSGen(s1?,s2?)算法需要的模数 P = ∏ i = 0 k ? 1 p i P = \prod_{i = 0}^{k-1} p_i P=i=0k?1?pi?
  • 生成基 D = { p 0 , p 1 , ? ? , p k ? 1 , q 0 , q 1 , ? ? , q l ? 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 = { p 0 , p 1 , ? ? , p k ? 1 } \mathcal{B} = \{p_0,p_1,\cdots,p_{k-1}\} B={p0?,p1?,?,pk?1?} C l = { q 0 , q 1 , ? ? , q l ? 1 } \mathcal{C}_l = \{q_0,q_1,\cdots,q_{l-1}\} Cl?={q0?,q1?,?,ql?1?}
  • 选择一个2的幂整数 N N N R \mathbb{R} R上的私钥分布 χ k e y \chi _{key} χkey?,加密参数分布 χ e n c \chi _{enc} χenc?和误差分布 χ e r r \chi _{err} χerr?
  1. R N S . K S G e n ( s 1 , s 2 ) RNS.KSGen(s_1,s_2) RNS.KSGen(s1?,s2?)
  • 采样 ( a 0 ′ , a 1 ′ , ? ? , a k + L ′ ) ← U ( ∏ i = 0 k ? 1 R p i × ∏ j = 0 L R q j ) (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 ′ ← χ e r r e' \leftarrow \chi _{err} eχerr?
  • 对于给定的秘密多项式 s 1 , s 2 ∈ R s_1,s_2 \in \mathbb{R} s1?,s2?R,计算
    0 ? i < k 0 \leqslant i < k 0?i<k时, b i ′ = ? a i ′ ? s 2 + e ′ ? m o d ?? p i b'_i = -a'_i\cdot s_2 + e' \ mod\;p_i bi?=?ai??s2?+e?modpi? 0 ? j ? L 0 \leqslant j \leqslant L 0?j?L时, b k + j ′ = ? a k + j ′ ? s 2 + [ P ] q j ? s 1 + e ′ ? m o d ?? q j b'_{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?
  • 输出转换密钥 s w k \mathbf{swk} swk为: s w k = ( s w k 0 , s w k 1 , ? ? , s w k k + L ) ∈ ∏ i = 0 k ? 1 R p i 2 × ∏ j = 0 L R q j 2 \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=0k?1?Rpi?2?×j=0L?Rqj?2?其中, s w k i = ( b i ′ , a i ′ ) \mathbf{swk}_i = (b'_i,a'_i) swki?=(bi?,ai?)
  1. R N S . K e y G e n ( ) RNS.KeyGen() RNS.KeyGen()
  • 采样 ( a 0 ′ , a 1 ′ , ? ? , a L ′ ) ← U ( ∏ j = 0 L R q j ) (a'_0,a'_1,\cdots,a'_L) \leftarrow U(\prod_{j = 0}^{L}R_{q_j}) (a0?,a1?,?,aL?)U(j=0L?Rqj??) e ← χ e r r e \leftarrow \chi _{err} eχerr? s ← χ k e y s \leftarrow \chi _{key} sχkey?,并记私钥为 s k = ( 1 , s ) \mathbf{sk} = (1,s) sk=(1,s)
  • 计算 b i = ? a i ? s + e ? m o d ?? q j b_i = -a_i\cdot s + e \ mod\;q_j bi?=?ai??s+e?modqj? 0 ? j ? L 0 \leqslant j \leqslant L 0?j?L
  • 生成同态乘密钥 e v k = K S G e n ( s 2 , s ) \mathbf{evk} = KSGen(\mathbf{s}^2,\mathbf{s}) evk=KSGen(s2,s)
  1. R N S . E n c o d e ( 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\rceil m=?τ?1(?Δ?m?)?
  1. R N S . D e c o d e ( m , Δ ) RNS.Decode(m,\Delta) RNS.Decode(m,Δ)
  • 对于明文多项式 m m m,使用 τ \tau τ映射还原为向量 m \mathbf{m} m并等比缩小 m = ? Δ ? 1 ( ? τ ( m ) ? ) ? \mathbf{m} = \left\lfloor \Delta ^{-1} (\left\lfloor \tau (m) \right\rceil) \right\rceil m=?Δ?1(?τ(m)?)?
  1. R N S . E n c p k ( m ) RNS.Enc_{\mathbf{pk}}(m) RNS.Encpk?(m)
  • 采样 v ← χ e n c v \leftarrow \chi _{enc} vχenc? e 0 , e 1 ← χ e r r e_0,e_1 \leftarrow \chi _{err} e0?,e1?χerr?
  • 输出密文 c t = ( c t 0 , c t 1 , ? ? , c t L ) ∈ ∏ j = 0 L R q j 2 \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=0L?Rqj?2?其中, c t j = ( v ? p k j + ( m + e 0 , e 1 ) ) ? m o d ?? q j \mathbf{ct}_j = (v \cdot \mathbf{pk}_j + (m + e_0,e_1)) \ mod\;q_j ctj?=(v?pkj?+(m+e0?,e1?))?modqj?
  1. R N S . D e c s k ( c t ) RNS.Dec_{\mathbf{sk}}(\mathbf{ct}) RNS.Decsk?(ct)
  • 对于密文 c t \mathbf{ct} ct,输出 [ ? c t 0 , s k ? ] q 0 [\left\langle \mathbf{ct}_0,\mathbf{sk}\right\rangle]_{q_0} [?ct0?,sk?]q0??,即 m = b 0 + a 0 ? s ? m o d ?? q 0 m = b_0 + a_0 \cdot s \ mod\;q_0 m=b0?+a0??s?modq0?

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

  1. R N S . A d d ( c t , c t ′ ) RNS.Add(\mathbf{ct},\mathbf{ct}') RNS.Add(ct,ct)
  • 给定两个密文 c t , c t ′ ∈ ∏ j = 0 l R q j 2 \mathbf{ct},\mathbf{ct}' \in \prod_{j = 0}^{l}\mathbb{R}_{q_j}^2 ct,ctj=0l?Rqj?2?,分别表示为 c t = ( c t 0 , ? ? , c t l ) \mathbf{ct} = (\mathbf{ct}_0,\cdots,\mathbf{ct}_l) ct=(ct0?,?,ctl?) c t ′ = ( c t 0 ′ , ? ? , c t l ′ ) \mathbf{ct}' = (\mathbf{ct}'_0,\cdots,\mathbf{ct}'_l) ct=(ct0?,?,ctl?),RNS上的同态加法是对应位的元素分别相加,即 c t a d d = ( c t a d d 1 , c t a d d 2 , ? ? , c t a d d l , ) \mathbf{ct}_{add} = (\mathbf{ct}_{add_1},\mathbf{ct}_{add_2},\cdots,\mathbf{ct}_{add_l},) ctadd?=(ctadd1??,ctadd2??,?,ctaddl??,)其中, c t a d d i = ( c t i + c t i ′ ) ? m o d ?? q i \mathbf{ct}_{add_i} = (\mathbf{ct}_i + \mathbf{ct}'_i) \ mod\;q_i ctaddi??=(cti?+cti?)?modqi?
  1. R N S . M u l t e v k ( c t , c t ′ ) RNS.Mult_{\mathbf{evk}}(\mathbf{ct},\mathbf{ct}') RNS.Multevk?(ct,ct)
  • 给定两个密文 c t , c t ′ ∈ ∏ j = 0 l R q j 2 \mathbf{ct},\mathbf{ct}' \in \prod_{j = 0}^{l}\mathbb{R}_{q_j}^2 ct,ctj=0l?Rqj?2?,分别表示为 c t = ( c t 0 , ? ? , c t l ) \mathbf{ct} = (\mathbf{ct}_0,\cdots,\mathbf{ct}_l) ct=(ct0?,?,ctl?) c t ′ = ( c t 0 ′ , ? ? , c t l ′ ) \mathbf{ct}' = (\mathbf{ct}'_0,\cdots,\mathbf{ct}'_l) ct=(ct0?,?,ctl?)
  • 计算 d i 0 = c t i 0 ? c t i 0 ′ ? m o d ?? q j d i 1 = c t i 0 ? c t i 1 ′ + c t i 1 ? c t i 0 ′ ? m o d ?? q j d i 2 = c t i 1 ? c t i 1 ′ ? m o d ?? q j \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??
  • 使用近似模提升,将 d i 2 \mathbf{d}_{i_2} di2??的基由 C l \mathcal{C}_l Cl?提升到 D l \mathcal{D}_l Dl? M o d u p C l → D l ( d 2 0 , ? ? , d 2 l ) = ( d ~ 2 0 , ? ? , d ~ 2 k ? 1 , d 2 0 , ? ? , d 2 l ) 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??)=(d 20??,?,d 2k?1??,d20??,?,d2l??)
  • 重线性化 c t ~ = ( c t ~ 0 , c t ~ 1 , ? ? , c t ~ k + l ) \widetilde{\mathbf{ct}} = (\widetilde{\mathbf{ct}}_0,\widetilde{\mathbf{ct}}_1,\cdots,\widetilde{\mathbf{ct}}_{k+l}) ct =(ct 0?,ct 1?,?,ct k+l?)其中 c t ~ i = d ~ 2 i ? e v k i ? m o d ?? p i ??? 0 ? i < k c t ~ k + j = d j ? e v k k + j ? m o d ?? q j ??? 0 ? 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} ct i?ct k+j??=d 2i???evki??modpi????0?i<k=dj??evkk+j??modqj????0?j?l?
  • 再通过近似模降低,将 c t ~ \widetilde{\mathbf{ct}} ct 的基由 D l \mathcal{D}_l Dl?降低到 C l \mathcal{C}_l Cl? M o d d o w n D l → C l ( c t ~ 0 , ? ? , c t ~ k + l ) = ( c t ^ 0 , ? ? , c t ^ 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??(ct 0?,?,ct k+l?)=(ct 0?,?,ct l?)
  • 输出 c t m u l t = ( c t m u l t 0 , c t m u l t 1 , ? ? , c t m u l t l ) \mathbf{ct}_{mult} = (\mathbf{ct}_{mult_0},\mathbf{ct}_{mult_1},\cdots,\mathbf{ct}_{mult_l}) ctmult?=(ctmult0??,ctmult1??,?,ctmultl??)其中, c t m u l t i = ( c t ^ i 0 + d 0 i , c t ^ i 1 + d 1 i ) ? m o d ?? q i \mathbf{ct}_{mult_i} = (\widehat{\mathbf{ct}}_{i_0} + \mathbf{d}_{0_i},\widehat{\mathbf{ct}}_{i_1} + \mathbf{d}_{1_i}) \ mod\;q_i ctmulti??=(ct i0??+d0i??,ct i1??+d1i??)?modqi?
  1. R N S . R S ( c t ) RNS.RS(\mathbf{ct}) RNS.RS(ct)
  • 对于 l l l级密文 c t = ( c t 0 , c t 1 , ? ? , c t l ) ∈ ∏ j = 0 l R q j 2 \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=0l?Rqj?2?,输出 c t ′ = ( c t 0 ′ , c t 1 ′ , ? ? , c t l ? 1 ′ ) ∈ ∏ j = 0 l ? 1 R q j 2 \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=0l?1?Rqj?2?其中, c t j ′ = ( q l ? 1 ? ( c 0 j ? c 0 l ) , q l ? 1 ? ( c 1 j ? c 1 l ) ) ? m o d ?? q j \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_j ctj?=(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.

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章           查看所有文章
加:2022-06-25 18:11:03  更:2022-06-25 18:11:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/20 23:43:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码