6. BGV12 - HElib基础算法 - 层次同态加密 - 《(Leveled) Fully Homomorphic Encryption without Bootstrapping》
前言
借鉴致远的文章学习同态加密,本文主要记录无需自举的层次同态加密流程,参考文献为Zvika Brakerski、Craig Gentry和Vinod Vaikuntanathan的《(Leveled) Fully Homomorphic Encryption without Bootstrapping》,这篇文章是HElib库所使用的基础算法。下面介绍全同态加密的历史发展流程以及本文的针对性问题:
| 😄 | 方法演变 | 特点 |
|---|---|---|
| 1 | 部分同态加密方案均基于理想格难题。 | 两个原始噪声量为 B B B的密文在加法运算后,噪声量轻微增长至 2 B 2B 2B,而在乘法运算时指数级增长至 B 2 B^2 B2,无法用于高阶多项式的计算。 |
| 2 | 为了解决上述问题,Gentry设计了Bootstrapping操作,通过在密文上同态运行解密函数来 “更新” 密文, 从而降低噪声。 | 解密函数往往比较复杂,超出了多数部分同态加密方案的深度限制,因此无法直接同态评估解密电路。 |
| 3 | 为了解决上述问题,Gentry在稀疏子集和假设下,引入压缩(Squashing step)技术。 | ① 参数的爆炸性增长。为了支持自举,部分同态加密必须满足一系列参数要求。例如,为了安全地评估深度为 D D D的电路,格问题的维度必须为 Ω ( D ⋅ λ ) \Omega(D\cdot\lambda) Ω(D⋅λ);为了实现自举,解密函数的深度为 Ω ( λ ) \Omega(\lambda) Ω(λ)密文系数的比特长度为 Ω ( D ) \Omega(D) Ω(D)。因此,“新鲜”密文的大小为 Ω ~ ( λ 3 ) \widetilde{\Omega}(\lambda^3) Ω
(λ3)。 ② 自举操作的内在成本高。自举需要同态地执行解密函数,解密函数本身的复杂度是 Ω ( λ ) \Omega(\lambda) Ω(λ),而密文的大小为 Ω ~ ( λ 3 ) \widetilde{\Omega}(\lambda^3) Ω (λ3),因此自举的成本至少是 Ω ~ ( λ 4 ) \widetilde{\Omega}(\lambda^4) Ω (λ4)。 |
| 本文 | 为了解决上述问题,文章基于RLWE问题提出了一个无需自举的层次全同态加密,通过构建模数阶梯,在每层电路运算后,将密文切换到下一个更小的模数,从而缩小噪声。 | 在不使用自举作为优化的情况下, L L L层电路的每门计算开销为 O ~ ( λ ⋅ L 3 ) \widetilde{O}(\lambda\cdot L^3) O (λ⋅L3),随层数增加而增加;在使用的情况下,每门计算开销为 O ~ ( λ 3 ) \widetilde{O}(\lambda^3) O (λ3),与层数无关。 |
一、预备知识
1. 模切换
令 [ ⋅ ] p [\cdot]_p [⋅]p 表示模 p p p,下面介绍模切换的理论基础:
这个引理告诉我们以下信息:
- 一个不知道密钥 s s s ,而只知道其密钥长度的评估器,可以将模 q q q 下的密文 c c c 转换为模 p p p 下不同的密文 c ′ c' c′ ,同时保证两个密文的解密结果一致,即 < c ′ , s > m o d p = < c , s > m o d q m o d 2 \left<c',s\right>\mod p=\left<c,s\right>\mod q \mod 2 ⟨c′,s⟩modp=⟨c,s⟩modqmod2
- 密文 c c c 到密文 c ′ c' c′ 只涉及简单的缩放操作和取整操作,即 c ′ ≈ ( p / q ) ⋅ c c' \approx (p/q) \cdot c c′≈(p/q)⋅c
- 如果密文足够短,模数 p p p 足够小于模数 q q q ,密文中的噪声量会减小,即 ∣ [ < c ′ , s > ] p ∣ < ∣ [ < c , s > ] q ∣ |[\left<c',s\right>]_p| < |[\left<c,s\right>]_q| ∣[⟨c′,s⟩]p∣<∣[⟨c,s⟩]q∣
根据上面的解释,我们知道:模数切换可以让评估者在不知道密钥和不自举的情况下降低噪声的幅度,可以用来管理FHE方案中的噪声!
2. 容错学习
本文的工作既可以基于LWE,也可以基于RLWE,但是在RLWE下效率更高。为了后续表述的方便,下面合并LWE和RLWE表示,形式化为 General Learning with Errors(GLWE),如下:
- GLWE:对于安全参数 λ \lambda λ ,所有计算在环 R q = R / q R R_q=R/qR Rq=R/qR 上进行,其中商环 R = Z [ x ] / f ( x ) R=\Z[x]/f(x) R=Z[x]/f(x) ,多项式 f ( x ) = x d + 1 f(x)=x^d+1 f(x)=xd+1 ,环的维度 d = d ( λ ) d=d(\lambda) d=d(λ) 为2的幂次。设置样本维度 n = n ( λ ) n=n(\lambda) n=n(λ),素数模 q = q ( λ ) ≥ 2 q=q(\lambda)\geq 2 q=q(λ)≥2,噪声分布 χ = χ ( λ ) ∈ R \chi=\chi(\lambda) \in R χ=χ(λ)∈R ,则 GLWE n , f , q , χ \text{GLWE}_{n,f,q,\chi} GLWEn,f,q,χ 问题是指区分样本 ( a i , b i ) ∈ R q n + 1 (a_i,b_i) \in R_q^{n+1} (ai,bi)∈Rqn+1 来自均匀分布还是GLWE分布。在GLWE分布下, a i a_i ai 通过随机采样得到, b i b_i bi 由消息 s s s 和小噪声 e i ∈ χ e_i\in \chi ei∈χ 构造得到 b i = < a i , s > + e i b_i=\left<a_i,s \right> +e_i bi=⟨ai,s⟩+ei 。
- LWE:当 d = 1 d=1 d=1 时,GLWE问题转为LWE问题。
- RLWE:当 n = 1 n=1 n=1 时,GLWE问题转为RLWE问题。
值得注意的是,模数 q q q 远大于噪声 B B B 时,GLWE问题很容易破解。因此文章中,在无自举情况下,设置 q / B = exp ( L ) q/B = \exp(L) q/B=exp(L),在自举情况下,设置 q / B q/B q/B 为准多项式级别。
计算安全参数 κ \kappa κ:决定了加密算法的输入空间大小,单位为 bit 。
统计安全参数 λ \lambda λ :衡量了样本分布与均匀分布之间的统计距离(一般为 2 λ 2^\lambda 2λ )。
准多项式: 2 O ( p o l y ( log L ) ) 2^{O(poly(\log L))} 2O(poly(logL))
d = d ( λ ) d=d(\lambda) d=d(λ): d d d 是关于 λ \lambda λ 的多项式
二、核心算法
下面将从基础方案开始,一步步描述算法设计。
1. 基础方案
1.1. 算法描述
- 参数设置
| 参数 | 描述 |
|---|---|
| o ∈ { 0 , 1 } o\in\{0,1\} o∈{0,1} | 决定是LWE的参数设置( d = 1 d=1 d=1),还是RLWE的参数设置( n = 1 n=1 n=1) |
| μ \mu μ | 参数的比特位数 |
| q q q | 模数, μ \mu μ 比特 |
| χ = χ ( λ , μ , b ) \chi=\chi(\lambda,\mu,b) χ=χ(λ,μ,b) | 噪声分布,其方差关于 d / n d/n d/n 次线性,噪声的范数最大为 B ∝ sublinear ( q ) B\varpropto \text{sublinear}(q) B∝sublinear(q) |
| d = d ( λ , μ , b ) d=d(\lambda,\mu,b) d=d(λ,μ,b) | 环的维度 |
| n = n ( λ , μ , b ) n=n(\lambda,\mu,b) n=n(λ,μ,b) | 维度。为了实现 2 λ 2^\lambda 2λ 安全, n ⋅ d = Ω ( q / B ) n\cdot d =\Omega(q/B) n⋅d=Ω(q/B),且 n , d ∝ log q n,d\varpropto \log q n,d∝logq |
| N = n ⋅ p o l y l o g ( q ) N=n\cdot polylog(q) N=n⋅polylog(q) | 样本个数。在LWE情况下,要求 N > 2 n log q N>2n\log q N>2nlogq ;在RLWE情况下,要求 N = log ( q ⋅ λ ω ( 1 ) ) N=\log (q\cdot\lambda^{\omega(1)}) N=log(q⋅λω(1)) |
次线性:函数 f ( x ) f(x) f(x) 满足 lim n → ∞ f ( n ) n = 0 \lim_{n\rightarrow \infty} \frac{f(n)}{n}=0 n→∞limnf(n)=0 即 f ( x ) f(x) f(x) 的增长速度小于线性函数,常见的次线性函数有 log x \log x logx 和 x \sqrt{x} x。
- 密钥生成
| 密钥 | 描述 |
|---|---|
| s s s | 私钥:随机采样 n n n 维向量 s ′ ∈ χ n s'\in \chi^n s′∈χn,则私钥 s = ( 1 , s ) = ( 1 , s ′ [ 1 ] , ⋯ , s ′ [ n ] ) s=(1,s)=(1,s'[1],\cdots,s'[n]) s=(1,s)=(1,s′[1],⋯,s′[n]) |
| A A A | 公钥:随机采样矩阵 A ′ ∈ R q N × n A'\in R_q^{N\times n} A′∈RqN×n ,向量 e ∈ χ N e\in \chi^N e∈χN,令 b = A ′ s ′ + 2 e b=A's'+2e b=A′s′+2e 则设置 A = [ b ∣ − A ′ ] A=[b|-A'] A=[b∣−A′] ,即矩阵第一列为 b b b ,后 n n n 列为 − A ′ -A' −A′,共 N N N 行 n + 1 n+1 n+1 列。 特别的,我们可以观察到 A ⋅ s = 2 e A\cdot s=2e A⋅s=2e,即 A ⋅ s = [ b ∣ − A ′ ] ⋅ s = [ A ′ s ′ + 2 e ∣ − A ′ ] ⋅ [ 1 , s ′ ] = A ′ s ′ + 2 e − A ′ s ′ = 2 e A\cdot s=[b|-A']\cdot s = [A's'+2e|-A']\cdot [1,s']=A's'+2e-A's'=2e A⋅s=[b∣−A′]⋅s=[A′s′+2e∣−A′]⋅[1,s′]=A′s′+2e−A′s′=2e |
- 加密算法
对于明文 m ∈ R q \mathrm{m}\in R_q m∈Rq,设置向量 m = ( m , 0 , ⋯ , 0 ) ∈ R q n + 1 m=(\mathrm{m},0,\cdots,0)\in R_q^{n+1} m=(m,0,⋯,0)∈Rqn+1。随机采样 r ∈ R q N r\in R_q^{N} r∈RqN,则密文为 c = m + A T r ∈ R q n + 1 c=m+A^Tr\in R_q^{n+1} c=m+ATr∈Rqn+1 - 解密算法
m = [ [ < c , s > ] q ] 2 \mathrm{m}=[[\left< c,s\right>]_q]_2 m=[[⟨c,s⟩]q]2
这里需要注意的是,同态计算时只模 q q q,若在解密前噪声量就超过了 q q q,密文将发生改变,无法消除噪声的影响。
1.2. 正确性
首先计算内积:
< c , s > = < m + A T r , s > = < m , s > + < A T r , s > = < m , s > + < r , A s > = < m , s > + < r , 2 e > = < [ m 0 ⋮ 0 ] , [ 1 s ′ [ 1 ] ⋮ s ′ [ n ] ] > + 2 ⋅ < r , e > = m + 2 ⋅ < r , e > \begin{aligned} \left< c,s\right>&=\left< m+A^Tr,s\right> \\ &=\left< m,s\right> +\left< A^Tr,s\right> \\ &=\left< m,s\right> +\left< r,As\right> \\ &=\left< m,s\right> +\left< r,2e\right> \\ &=\left<\begin{bmatrix} \mathrm{m}\\0 \\\vdots \\0 \end{bmatrix},\begin{bmatrix} 1\\s'[1] \\\vdots \\s'[n] \end{bmatrix}\right> +2\cdot\left< r,e\right> \\ &= \mathrm{m} +2\cdot\left< r,e\right> \\ \end{aligned} ⟨c,s⟩=⟨m+ATr,s⟩=⟨m,s⟩+⟨ATr,s⟩=⟨m,s⟩+⟨r,As⟩=⟨m,s⟩+⟨r,2e⟩=⟨
m0⋮0
,
1s′[1]⋮s′[n]
⟩+2⋅⟨r,e⟩=m+2⋅⟨r,e⟩再进行模运算可以得到 [ [ < c , s > ] q ] 2 = m [[\left< c,s\right>]_q]_2=\mathrm{m} [[⟨c,s⟩]q]2=m
1.3. 安全性
在选择明文攻击下,由于明文和密文独立采样,并且算法基于GLWE难题构造,因此攻击者无法破解明文。
2. 密钥切换
2.1. 算法描述
BV11 方案中,利用公钥中提供的“提示信息”,将同态乘法产生的长密文和长密钥转换为一个由不同密钥解密的短密文,从而解决密文维度爆炸问题。这个方法不仅可以用于约减密文维度,还可以用于切换密钥和对应密文。假设我们要将私钥 s 1 ∈ R q n 1 + 1 s_1 \in R_q^{n_1+1} s1∈Rqn1+1 切换为 s 2 ∈ R q n 2 + 1 s_2 \in R_q^{n_2+1} s2∈Rqn2+1 ,其流程如下:
- 生成切换密钥
| 步骤 | 描述 |
|---|---|
| Step1 | 设置维度 N = ( n 1 + 1 ) ⋅ ⌈ log q ⌉ N=(n_1+1)\cdot\lceil\log q\rceil N=(n1+1)⋅⌈logq⌉,以 s 2 s_2 s2 为私钥,生成对应的公钥 A 2 A_2 A2 。 |
| Step2 | 将密钥 s 1 s_1 s1 转为二进制编码 u = ( u 0 , u 1 , ⋯ , u ⌊ log q ⌋ ) ∈ R q ( n 1 + 1 ) × ⌈ log q ⌉ u=(u_0,u_1,\cdots,u_{\lfloor \log q\rfloor})\in R_q^{(n_1+1)\times\lceil\log q\rceil} u=(u0,u1,⋯,u⌊logq⌋)∈Rq(n1+1)×⌈logq⌉ ,满足 s 1 = ∑ j = 0 ⌊ log q ⌋ 2 j ⋅ u j s_1=\sum_{j=0}^{\lfloor \log q\rfloor}2^j\cdot u_j s1=j=0∑⌊logq⌋2j⋅uj |
| Step3 | 将 u u u 加到 A 2 A_2 A2 的第一列,得到切换密钥 τ s 1 → s 2 ∈ R q N × ( n 2 + 1 ) \tau_{s_1\rightarrow s_2}\in R_q^{N\times (n_2+1)} τs1→s2∈RqN×(n2+1),即 τ s 1 → s 2 = [ b 2 + u ∣ − A 2 ′ ] \tau_{s_1\rightarrow s_2}=[b_2+u|-A'_2] τs1→s2=[b2+u∣−A2′] |
- 密钥切换
利用切换密钥 τ s 1 → s 2 \tau_{s_1\rightarrow s_2} τs1→s2 和密文 c 1 c_1 c1进行如下操作,从而将以 s 1 s_1 s1 为私钥的密文 c 1 c_1 c1,转为以 s 2 s_2 s2 为私钥的密文 c 2 c_2 c2: c 2 = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ τ s 1 → s 2 c_2 = (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot \tau_{s_1\rightarrow s_2} c2=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅τs1→s2
2.2. 正确性
首先计算内积:
< c 2 , s 2 > = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ τ s 1 → s 2 ⋅ s 2 = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ ( [ b 2 + u ∣ − A 2 ′ ] ⋅ [ 1 ∣ s 2 ′ ] ) = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ ( b 2 + u − A 2 ′ ⋅ s 2 ′ ) = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ ( 2 e 2 + u ) \begin{aligned} \left< c_2,s_2\right>&= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot \tau_{s_1\rightarrow s_2}\cdot s_2\\ &= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot ( [b_2+u|-A'_2]\cdot [1|s'_2])\\ &= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot ( b_2+u -A'_2\cdot s'_2)\\ &= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot (2e_2+u)\\ \end{aligned} ⟨c2,s2⟩=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅τs1→s2⋅s2=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅([b2+u∣−A2′]⋅[1∣s2′])=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅(b2+u−A2′⋅s2′)=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅(2e2+u)再进行模运算可以得到 [ [ < c , s > ] q ] 2 = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ ( 2 e 2 + u ) ( m o d q ) ( m o d 2 ) = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ u = ( c 1 , 2 ⋅ c 1 , ⋯ , 2 ⌊ log q ⌋ ⋅ c 1 ) ⋅ ( u 0 , u 1 , ⋯ , u ⌊ log q ⌋ ) = c 1 ⋅ ∑ j = 0 ⌊ log q ⌋ 2 j ⋅ u j = c 1 ⋅ s 1 = m \begin{aligned} [[\left< c,s\right>]_q]_2&= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot (2e_2+u) \pmod q\pmod 2\\ &= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot u \\ &= (c_1,2\cdot c_1,\cdots,2^{\lfloor \log q\rfloor}\cdot c_1) \cdot (u_0,u_1,\cdots,u_{\lfloor \log q\rfloor}) \\ &=c_1\cdot\sum_{j=0}^{\lfloor \log q\rfloor}2^j\cdot u_j \\ &=c_1\cdot s_1 \\ &=\mathrm{m} \end{aligned} [[⟨c,s⟩]q]2=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅(2e2+u)(modq)(mod2)=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅u=(c1,2⋅c1,⋯,2⌊logq⌋⋅c1)⋅(u0,u1,⋯,u⌊logq⌋)=c1⋅j=0∑⌊logq⌋2j⋅uj=c1⋅s1=m
3. 模切换
3.1. 核心思想
- 现有方法:BV11 通过一次性的模数切换,减小自举过程中的计算开销。
- 观察:当模数从 q q q 切换为 p < q p< q p<q 时,噪声 B B B 也会降至 ( p / 1 ) ⋅ B (p/1)\cdot B (p/1)⋅B。
- 方法:设置阶梯递减的模数,对于每一层模数有 q i = q / x i q_i=q/x^i qi=q/xi ,在模数切换后有 x 2 ( m o d q i − 1 ) = q i q i − 1 ⋅ x 2 ( m o d q i ) = x ( m o d q i ) x^2 \pmod {q_{i-1}} =\frac{q_i}{q_{i-1}}\cdot x^2 \pmod {q_i}=x\pmod {q_i} x2(modqi−1)=qi−1qi⋅x2(modqi)=x(modqi)这意味着噪声始终是 B B B-bound 的。
3.2. 算法描述
-
模切换:令环 R R R 的度数为 d d d ,模数 q > p > r q>p>r q>p>r 满足 p = q = 1 m o d r p = q = 1 \mod r p=q=1modr, n n n 维向量 c ∈ R n c\in R^n c∈Rn。现在要在环 R n R^n Rn 中找一个最靠近 ( p / q ) ⋅ c (p/q)\cdot c (p/q)⋅c 的元素 c ′ c' c′ ,且该元素满足 c ′ = c m o d r c'=c\mod r c′=cmodr 。那么,对于任意满足 ∥ [ < c , s > ] q ∥ < q / 2 − ( q / p ) ⋅ γ R ⋅ ( r / 2 ) ⋅ d ⋅ ℓ 1 ( R ) ( s ) \|[\left< c,s\right>]_q\| < q/2-(q/p)\cdot\gamma_R\cdot(r/2)\cdot\sqrt{d}\cdot\ell_1^{(R)}(s) ∥[⟨c,s⟩]q∥<q/2−(q/p)⋅γR⋅(r/2)⋅d⋅ℓ1(R)(s) 的私钥 s ∈ R n s\in R^n s∈Rn 有:
[ [ < c ′ , s > ] p ] r = [ [ < c , s > ] q ] r ∥ [ < c ′ , s > ] p ∥ < ( p / q ) ⋅ ∥ [ < c , s > ] q ∥ + γ R ⋅ ( r / 2 ) ⋅ d ⋅ ℓ 1 ( R ) ( s ) [[\left<c',s\right>]_p]_r = [[\left<c,s\right>]_q]_r\\ \|[\left<c',s\right>]_p\| < (p/q)\cdot\|[\left<c,s\right>]_q\| + \gamma_R\cdot(r/2)\cdot\sqrt{d}\cdot\ell_1^{(R)}(s) [[⟨c′,s⟩]p]r=[[⟨c,s⟩]q]r∥[⟨c′,s⟩]p∥<(p/q)⋅∥[⟨c,s⟩]q∥+γR⋅(r/2)⋅d⋅ℓ1(R)(s)其中 ℓ 1 ( R ) ( s ) = ∑ i ∥ s [ i ] ∥ \ell_1^{(R)}(s)=\sum_i \|s[i] \| ℓ1(R)(s)=i∑∥s[i]∥
⭐️ 这段形式化的定义和预备知识中介绍的差不多,都是要在一堆约束下寻找合适的 c ′ c' c′ ,只不过以前是基于LWE问题,因此环的度数为1,现在可以扩展到RLWE问题上。 -
噪声管理:设置奇数模和短私钥后,使用模切换技术,原本上限为 q / 2 − ( q / p ) ⋅ γ R ⋅ ( r / 2 ) ⋅ d ⋅ ℓ 1 ( R ) ( s ) q/2-(q/p)\cdot\gamma_R\cdot(r/2)\cdot\sqrt{d}\cdot\ell_1^{(R)}(s) q/2−(q/p)⋅γR⋅(r/2)⋅d⋅ℓ1(R)(s) 的噪声将降到 ( q / p ) ⋅ ∥ [ < c , s > ] q ∥ ⋅ γ R ⋅ ( r / 2 ) ⋅ d ⋅ ℓ 1 ( R ) ( s ) (q/p)\cdot \|[\left<c,s\right>]_q\| \cdot\gamma_R\cdot(r/2)\cdot\sqrt{d}\cdot\ell_1^{(R)}(s) (q/p)⋅∥[⟨c,s⟩]q∥⋅γR⋅(r/2)⋅d⋅ℓ1(R)(s) 以下。
3.3. 正确性
根据模的定义,我们有
[ < c , s > ] q = < c , s > − k q [\left<c,s\right>]_q = \left<c,s\right> - kq [⟨c,s⟩]q=⟨c,s⟩−kq对于相同的 k k k 计算
e p = < c ′ , s > − k p e_p = \left<c',s\right> - kp ep=⟨c′,s⟩−kp在模 p p p 运算下有
e p m o d p = [ < c ′ , s > ] p e_p \mod p= [\left<c',s\right>]_p epmodp=[⟨c′,s⟩]p计算其范数
∥ e p ∥ = ∥ < c ′ , s > − k p ∥ = ∥ < c ′ , s > − k p + < ( p / q ) ⋅ c , s > − < ( p / q ) ⋅ c , s > ∥ = ∥ < c ′ − ( p / q ) ⋅ c , s > − k p + < ( p / q ) ⋅ c , s > ∥ ≤ ∥ < c ′ − ( p / q ) ⋅ c , s > ∥ + ( p / q ) ⋅ ∥ < c , s > − k q ∥ ≤ γ R ⋅ ∑ j = [ n ] ∥ c ′ [ j ] − ( p / q ) ⋅ c [ j ] ∥ ⋅ ∥ s [ j ] ∥ + ( p / q ) ⋅ ∥ [ < c , s > ] q ∥ ≤ γ R ⋅ ( r / 2 ) ⋅ d ⋅ ℓ 1 ( R ) ( s ) + ( p / q ) ⋅ ∥ [ < c , s > ] q ∥ < p / 2 \begin{aligned} \|e_p\| &= \| \left<c',s\right> - kp\| \\ &= \| \left<c',s\right> - kp + \left<(p/q)\cdot c,s\right> - \left<(p/q)\cdot c,s\right> \| \\ &= \| \left<c' - (p/q)\cdot c,s\right> - kp + \left<(p/q)\cdot c,s\right> \| \\ &\leq \| \left<c' -(p/q)\cdot c,s\right> \| + (p/q)\cdot\| \left< c,s\right> - kq \| \\ &\leq \gamma_R\cdot \sum_{j=[n]} \|c'[j]-(p/q)\cdot c[j]\|\cdot\|s[j]\| + (p/q)\cdot\| [\left< c,s\right>]_q \| \\ &\leq \gamma_R \cdot(r/2)\cdot\sqrt{d}\cdot\ell_1^{(R)}(s) + (p/q)\cdot\| [\left< c,s\right>]_q \| \\ & <p/2 \end{aligned} ∥ep∥=∥⟨c′,s⟩−kp∥=∥⟨c′,s⟩−kp+⟨(p/q)⋅c,s⟩−⟨(p/q)⋅c,s⟩∥=∥⟨c′−(p/q)⋅c,s⟩−kp+⟨(p/q)⋅c,s⟩∥≤∥⟨c′−(p/q)⋅c,s⟩∥+(p/q)⋅∥⟨c,s⟩−kq∥≤γR⋅j=[n]∑∥c′[j]−(p/q)⋅c[j]∥⋅∥s[j]∥+(p/q)⋅∥[⟨c,s⟩]q∥≤γR⋅(r/2)⋅d⋅ℓ1(R)(s)+(p/q)⋅∥[⟨c,s⟩]q∥<p/2这说明 [ < c ′ , s > ] p = < c ′ , s > − k p [\left<c',s\right>]_p =\left<c',s\right> - kp [⟨c′,s⟩]p=⟨c′,s⟩−kp又因为 c ′ = c m o d r , p = q m o d r c'=c\mod r,p=q\mod r c′=cmodr,p=qmodr,所以
[ < c ′ , s > ] p = e p ( m o d r ) = < c ′ , s > − k p = < c , s > − k q = [ < c , s > ] q \begin{aligned}[\left<c',s\right>]_p &=e_p \pmod r\\ &=\left<c',s\right> - kp\\ & = \left<c,s\right> - kq \\ &=[\left<c,s\right> ]_q \end{aligned} [⟨c′,s⟩]p=ep(modr)=⟨c′,s⟩−kp=⟨c,s⟩−kq=[⟨c,s⟩]q
4. 总方案
4.1. 算法描述
- 参数设置
| 参数 | 描述 |
|---|---|
| o ∈ { 0 , 1 } o\in\{0,1\} o∈{0,1} | 决定是LWE的参数设置( d = 1 d=1 d=1),还是RLWE的参数设置( n = 1 n=1 n=1) |
| L L L | 乘法深度,即允许计算的乘法次数 |
| μ = μ ( λ , L , b ) \mu=\mu (\lambda,L,b) μ=μ(λ,L,b) | 参数的比特位数,取 μ = θ ( log λ + log L ) \mu=\theta(\log\lambda+\log L) μ=θ(logλ+logL) |
| p a r a m j = ( q j , d j , n j , N j , χ j ) param_j=(q_j,d_j,n_j,N_j,\chi_j) paramj=(qj,dj,nj,Nj,χj) | 对于第 j ∈ [ L ] j\in [L] j∈[L] 层,设置模数 q j q_j qj 、环的维度 d j d_j dj 、维度 n j n_j nj 、样本个数 N j N_j Nj 、噪声分布 χ j \chi_j χj 。其中,模数从 ( L + 1 ) ⋅ μ (L+1)\cdot \mu (L+1)⋅μ 比特的 q L q_L qL 阶梯下降至 μ \mu μ 比特的 q 0 q_0 q0 。在使用时,从 p a r a m L param_L paramL 开始使用。 |
| χ = χ ( λ , μ , b ) \chi=\chi(\lambda,\mu,b) χ=χ(λ,μ,b) | ,其方差关于 d / n d/n d/n 次线性,噪声的范数最大为 B ∝ sublinear ( q ) B\varpropto \text{sublinear}(q) B∝sublinear(q) |
- 密钥生成
| 密钥 | 描述 |
|---|---|
| s j ∈ [ L ] s_{j\in[L]} sj∈[L] | 私钥:对于第 j ∈ [ L ] j\in [L] j∈[L] 层,利用参数 p a r a m j param_j paramj 生成私钥 s j s_{j} sj |
| A j ∈ [ L ] A_{j\in[L]} Aj∈[L] | 公钥:对于第 j ∈ [ L ] j\in [L] j∈[L] 层,利用参数 p a r a m j param_j paramj 生成共钥 A j A_{j} Aj |
| s j + 1 ′ s'_{j+1} sj+1′ | 乘法密钥: s j + 1 ′ = s j ⊗ s j s'_{j+1} = s_j \otimes s_j sj+1′=sj⊗sj。例如,当 s j = ( x 1 , x 2 , x 3 ) s_j=(x_{1},x_2,x_3) sj=(x1,x2,x3) 时, s j + 1 ′ = ( x 1 x 1 , x 1 x 2 , x 1 x 3 , x 2 x 1 , x 2 x 2 , x 2 x 3 , x 3 x 1 , x 3 x 2 , x 3 x 3 ) s'_{j+1}=(x_{1}x_{1},x_{1}x_2,x_{1}x_3,x_2x_{1},x_2x_2,x_2x_3,x_3x_{1},x_3x_2,x_3x_3) sj+1′=(x1x1,x1x2,x1x3,x2x1,x2x2,x2x3,x3x1,x3x2,x3x3) |
| τ s j + 1 ′ → s j \tau_{s'_{j+1}\rightarrow s_j} τsj+1′→sj | 切换密钥:将乘法计算后的私钥 s j + 1 ′ s'_{j+1} sj+1′ 切换为下一级私钥 s j s_j sj |
- 加密算法
对于明文 m ∈ R q L \mathrm{m}\in R_{q_L} m∈RqL,设置向量 m = ( m , 0 , ⋯ , 0 ) ∈ R q L n L + 1 m=(\mathrm{m},0,\cdots,0)\in R_{q_L}^{n_L+1} m=(m,0,⋯,0)∈RqLnL+1。随机采样 r ∈ R q L N L r\in R_{q_L}^{N_L} r∈RqLNL,则密文为 c = m + ( A L ) T ⋅ r ∈ R q L n L + 1 c=m+(A_L)^T\cdot r\in R_{q_L}^{n_L+1} c=m+(AL)T⋅r∈RqLnL+1 - 解密算法
m = [ [ < c , s j > ] q j ] 2 \mathrm{m}=[[\left< c,s_j\right>]_{q_j}]_2 m=[[⟨c,sj⟩]qj]2 - 同态计算
| 流程 | 描述 |
|---|---|
| Step1 | 利用密钥切换和模切换技术,将密文 c 1 c_1 c1 和 c 2 c_2 c2 的参数切换到同一层级 j j j。 |
| Step2 | 同态加法的结果如下 c 3 = c 1 + c 2 m o d q j c_3 = c_1+c_2 \mod q_j c3=c1+c2modqj 同态乘法的结果为线性方程 L c 1 , c 2 ( y ) = < c 1 ⊗ c 2 , y > L_{c_1,c_2}(y)=\left< c_1 \otimes c_2 ,y\right> Lc1,c2(y)=⟨c1⊗c2,y⟩ 的系数 。 |
| Step3 | 利用切换密钥 τ s j ′ → s j − 1 \tau_{s'_{j}\rightarrow s_{j-1}} τsj′→sj−1 将 c 3 c_3 c3 的密钥 s j ′ s'_{j} sj′ 切换至 s j − 1 s_{j-1} sj−1,同时将模 q j q_{j} qj 切换至 q j − 1 q_{j-1} qj−1,从而将密文 c 3 c_3 c3 的参数切换到下一层级。加法运算之后,可以不进行这一步,但是乘法运算之后必须进行。 |
4.2. 正确性
解密成功的前提是噪声上界小于 q / 2 q/2 q/2 ,文章中推理了算法每个流程的噪声上界,并最终得到方案的整体噪声始终满足 B B B-bound 的充分条件是:
- 对于每一层 j j j ,令 η SwitchKey , j = 2 ⋅ γ R ⋅ B χ ⋅ C n j + 1 2 ⋅ ⌈ log q j ⌉ ⋅ d j \eta_{\text{SwitchKey},j}= 2\cdot\gamma_R\cdot B_\chi \cdot C_{n_j+1}^2 \cdot \lceil\log q_j \rceil \cdot \sqrt{d_j} ηSwitchKey,j=2⋅γR⋅Bχ⋅Cnj+12⋅⌈logqj⌉⋅dj, η Scale , j = γ R ⋅ B χ ⋅ d j ⋅ ( n j − 1 + 1 ) \eta_{\text{Scale},j} =\gamma_R\cdot B_\chi \cdot\sqrt{d_j} \cdot (n_{j-1}+1) ηScale,j=γR⋅Bχ⋅dj⋅(nj−1+1) ,噪声上界满足以下条件:
B ≥ 2 ⋅ ( η Scale , j + η SwitchKey , j ) B\geq 2\cdot(\eta_{\text{Scale},j}+\eta_{\text{SwitchKey},j}) B≥2⋅(ηScale,j+ηSwitchKey,j) - 对于每一层 j j j ,模数满足以下条件:
q j q j − 1 ≥ 2 ⋅ B ⋅ γ R \frac{q_j}{q_{j-1}}\geq 2\cdot B\cdot \gamma_R qj−1qj≥2⋅B⋅γR
三、算法优化
1. 维度 - 次数转换
1.1. 核心思想
- 针对性问题:层次全同态加密方案的定义要求,解密电路的复杂度独立于乘法深度 L L L。
上述方案在LWE场景下,底层( j = 0 j=0 j=0)参数 n 0 , q 0 , χ 0 n_0,q_0,\chi_0 n0,q0,χ0 都与 L L L 无关,满足条件;但在RLWE场景下,为了安全,环的维度 d d d 与顶层( j = L j=L j=L)模数 q L q_L qL 的比特长度成正比,而 q L q_L qL 的比特长度与 L L L 成正比,因此底层环维度也与 L L L 成正比,并不满足定义要求。 - 方法:多项式系数的奇偶分解。
环 R q = Z [ x ] / ( x d + 1 ) R_q = \Z[x]/(x^d+1) Rq=Z[x]/(xd+1) 上元素 a a a 是一个多项式,可以根据项数的奇偶将其分解为环 R q = Z [ x ] / ( x d / 2 + 1 ) R_q = \Z[x]/(x^{d/2}+1) Rq=Z[x]/(xd/2+1) 上的两个元素。通过在每层同态计算后进行环分解,可以让环维度不断下降,最终维度下降至一个固定值,不再与 L L L 相关。
1.2. 算法描述
利用多项式系数的奇偶分解,可以将 GLWE n , d , q , χ \text{GLWE}_{n,d,q,\chi} GLWEn,d,q,χ 问题( d = 2 k d=2^k d=2k)转为 2 k 2^k 2k 个 GLWE 2 k n , d / 2 k , q , χ \text{GLWE}_{2^kn,d/2^k,q,\chi} GLWE2kn,d/2k,q,χ 问题。
-
多项式系数的奇偶分解
对于 a ( x ) ∈ Z [ x ] / ( x d + 1 ) a(x) \in \Z[x]/(x^d+1) a(x)∈Z[x]/(xd+1) , d d d 为2的幂次(是偶数),可以进行如下分解:
a ( x ) = a 0 x 0 + a 1 x 1 + ⋯ + a d − 1 x d − 1 = ( a 0 x 0 + a 2 x 2 + ⋯ + a d − 2 x d − 2 ) + ( a 1 x 1 + a 3 x 3 + ⋯ + a d − 1 x d − 1 ) = ( a 0 x 0 + a 2 x 2 + ⋯ + a d − 2 x d − 2 ) + x ⋅ ( a 1 x 0 + a 3 x 2 + ⋯ + a d − 2 x d − 2 ) = ( a 0 ⋅ ( x 2 ) 0 + a 2 ⋅ ( x 2 ) 1 + ⋯ + a d − 2 ⋅ ( x 2 ) d / 2 − 1 ) + x ⋅ ( a 1 ⋅ ( x 2 ) 0 + a 3 ⋅ ( x 2 ) 1 + ⋯ + a d − 2 ⋅ ( x 2 ) d / 2 − 1 ) \begin{aligned} a(x) & =a_0x^0+a_1x^1 + \cdots + a_{d-1}x^{d-1} \\ &= (a_0x^0+a_2x^2+ \cdots + a_{d-2}x^{d-2} )+(a_1x^1+a_3x^3 + \cdots + a_{d-1}x^{d-1} ) \\ &= (a_0x^0+a_2x^2+ \cdots + a_{d-2}x^{d-2} )+x\cdot(a_1x^0+a_3x^2 + \cdots + a_{d-2}x^{d-2} ) \\ &= (a_0\cdot(x^2)^0+a_2\cdot(x^2)^1+ \cdots + a_{d-2}\cdot(x^2)^{d/2-1} )+x\cdot(a_1\cdot(x^2)^0+a_3\cdot(x^2)^1 + \cdots + a_{d-2}\cdot(x^2)^{d/2-1} ) \\ \end{aligned} a(x)=a0x0+a1x1+⋯+ad−1xd−1=(a0x0+a2x2+⋯+ad−2xd−2)+(a1x1+a3x3+⋯+ad−1xd−1)=(a0x0+a2x2+⋯+ad−2xd−2)+x⋅(a1x0+a3x2+⋯+ad−2xd−2)=(a0⋅(x2)0+a2⋅(x2)1+⋯+ad−2⋅(x2)d/2−1)+x⋅(a1⋅(x2)0+a3⋅(x2)1+⋯+ad−2⋅(x2)d/2−1) 令 a ( e v e n ) = ( a 0 , a 2 , ⋯ , a d − 2 ) a^{(even)} =(a_0,a_2,\cdots,a_{d-2}) a(even)=(a0,a2,⋯,ad−2), a ( o d d ) = ( a 1 , a 3 , ⋯ , a d − 1 ) a^{(odd)} =(a_1,a_3,\cdots,a_{d-1}) a(odd)=(a1,a3,⋯,ad−1),则上式可以转化为
a ( x ) = a ( e v e n ) ( x 2 ) + x ⋅ a ( o d d ) ( x 2 ) \begin{aligned} a(x) & =a^{(even)}(x^2)+x\cdot a^{(odd)}(x^2) \\ \end{aligned} a(x)=a(even)(x2)+x⋅a(odd)(x2) -
奇偶分解下的密文加法
对于密文加法 c ( x ) = a ( x ) + b ( x ) c(x)=a(x)+b(x) c(x)=a(x)+b(x) 有:
c ( x ) = a ( x ) + b ( x ) = ( a ( e v e n ) ( x 2 ) + x ⋅ a ( o d d ) ( x 2 ) ) + ( b ( e v e n ) ( x 2 ) + x ⋅ b ( o d d ) ( x 2 ) ) = ( a ( e v e n ) ( x 2 ) + b ( e v e n ) ( x 2 ) ) + x ⋅ ( a ( o d d ) ( x 2 ) + b ( o d d ) ( x 2 ) ) \begin{aligned} c(x)&=a(x)+b(x) \\ &=\bigg(a^{(even)}(x^2)+x\cdot a^{(odd)}(x^2) \bigg) + \bigg(b^{(even)}(x^2)+x\cdot b^{(odd)}(x^2) \bigg) \\ &=\bigg(a^{(even)}(x^2)+b^{(even)}(x^2) \bigg) + x\cdot \bigg( a^{(odd)}(x^2)+b^{(odd)}(x^2) \bigg) \\ \end{aligned} c(x)=a(x)+b(x)=(a(even)(x2)+x⋅a(odd)(x2))+(b(even)(x2)+x⋅b(odd)(x2))=(a(even)(x2)+b(even)(x2))+x⋅(a(odd)(x2)+b(odd)(x2))则
c ( e v e n ) = ( a 0 + b 0 , a 2 + b 2 , ⋯ , a d − 2 + b d − 2 ) c ( o d d ) = ( a 1 + b 1 , a 3 + b 3 , ⋯ , a d − 1 + b d − 1 ) c^{(even)} =(a_0+b_0,a_2+b_2,\cdots,a_{d-2}+b_{d-2})\\ c^{(odd)} =(a_1+b_1,a_3+b_3,\cdots,a_{d-1}+b_{d-1}) c(even)=(a0+b0,a2+b2,⋯,ad−2+bd−2)c(odd)=(a1+b1,a3+b3,⋯,ad−1+bd−1) -
奇偶分解下的密文乘法
对于密文乘法 c ( x ) = a ( x ) ⋅ b ( x ) c(x)=a(x)\cdot b(x) c(x)=a(x)⋅b(x) 有:
c ( x ) = c ( e v e n ) ( x 2 ) + x ⋅ c ( o d d ) ( x 2 ) = a ( x ) ⋅ b ( x ) = ( a ( e v e n ) ( x 2 ) + x ⋅ a ( o d d ) ( x 2 ) ) ⋅ ( b ( e v e n ) ( x 2 ) + x ⋅ b ( o d d ) ( x 2 ) ) = ( a ( e v e n ) ( x 2 ) ⋅ b ( e v e n ) ( x 2 ) ) + x 2 ⋅ ( a ( o d d ) ( x 2 ) ⋅ b ( o d d ) ( x 2 ) ) + x ⋅ ( a ( e v e n ) ( x 2 ) ⋅ b ( o d d ) + a ( o d d ) ( x 2 ) ⋅ b ( e v e n ) ( x 2 ) ) \begin{aligned} c(x)&=c^{(even)}(x^2)+x\cdot c^{(odd)}(x^2) =a(x)\cdot b(x) \\ &=\bigg(a^{(even)}(x^2)+x\cdot a^{(odd)}(x^2) \bigg) \cdot \bigg(b^{(even)}(x^2)+x\cdot b^{(odd)}(x^2) \bigg) \\ &=\bigg(a^{(even)}(x^2)\cdot b^{(even)}(x^2) \bigg)+ x^2\cdot \bigg( a^{(odd)}(x^2)\cdot b^{(odd)}(x^2) \bigg)\\ &+ x\cdot \bigg(a^{(even)}(x^2)\cdot b^{(odd)} + a^{(odd)}(x^2) \cdot b^{(even)}(x^2) \bigg) \\ \end{aligned} c(x)=c(even)(x2)+x⋅c(odd)(x2)=a(x)⋅b(x)=(a(even)(x2)+x⋅a(odd)(x2))⋅(b(even)(x2)+x⋅b(odd)(x2))=(a(even)(x2)⋅b(even)(x2))+x2⋅(a(odd)(x2)⋅b(odd)(x2))+x⋅(a(even)(x2)⋅b(odd)+a(odd)(x2)⋅b(even)(x2))则
c ( e v e n ) ( x 2 ) = ( a ( e v e n ) ( x 2 ) ⋅ b ( e v e n ) ( x 2 ) ) + x 2 ⋅ ( a ( o d d ) ( x 2 ) ⋅ b ( o d d ) ( x 2 ) ) c ( o d d ) ( x 2 ) = a ( e v e n ) ( x 2 ) ⋅ b ( o d d ) + a ( o d d ) ( x 2 ) ⋅ b ( e v e n ) ( x 2 ) \begin{aligned} c^{(even)}(x^2) &= \bigg(a^{(even)}(x^2)\cdot b^{(even)}(x^2) \bigg) + x^2\cdot \bigg( a^{(odd)}(x^2)\cdot b^{(odd)}(x^2) \bigg) \\ c^{(odd)}(x^2) &= a^{(even)}(x^2)\cdot b^{(odd)} + a^{(odd)}(x^2) \cdot b^{(even)}(x^2) \end{aligned} c(even)(x2)c(odd)(x2)=(a(even)(x2)⋅b(even)(x2))+x2⋅(a(odd)(x2)⋅b(odd)(x2))=a(even)(x2)⋅b(odd)+a(odd)(x2)⋅b(even)(x2)用 x x x 代替 x 2 x^2 x2 有
c ( e v e n ) ( x ) = ( a ( e v e n ) ( x ) ⋅ b ( e v e n ) ( x ) ) + x ⋅ ( a ( o d d ) ( x ) ⋅ b ( o d d ) ( x ) ) c ( o d d ) ( x ) = a ( e v e n ) ( x ) ⋅ b ( o d d ) + a ( o d d ) ( x ) ⋅ b ( e v e n ) ( x ) \begin{aligned} c^{(even)}(x) &= \bigg(a^{(even)}(x)\cdot b^{(even)}(x) \bigg) + x\cdot \bigg( a^{(odd)}(x)\cdot b^{(odd)}(x) \bigg) \\ c^{(odd)}(x) &= a^{(even)}(x)\cdot b^{(odd)} + a^{(odd)}(x) \cdot b^{(even)}(x) \end{aligned} c(even)(x)c(odd)(x)=(a(even)(x)⋅b(even)(x))+x⋅(a(odd)(x)⋅b(odd)(x))=a(even)(x)⋅b(odd)+a(odd)(x)⋅b(even)(x) -
奇偶分解下的解密算法
假设密文 c ( x ) c(x) c(x) 对应私钥为 s ( x ) s(x) s(x) ,则解密时有 m ( x ) = [ [ < c ( x ) , s ( x ) > ] q ] 2 m(x) = [[\left< c(x),s(x) \right>]_q]_2 m(x)=[[⟨c(x),s(x)⟩]q]2,此时
m ( e v e n ) ( x ) = [ [ < c ( e v e n ) ( x ) , s ( e v e n ) ( x ) > + x ⋅ < c ( o d d ) ( x ) , s ( o d d ) ( x ) > ] q ] 2 m ( o d d ) ( x ) = [ [ < c ( e v e n ) ( x ) , s ( o d d ) ( x ) > + x ⋅ < c ( o d d ) ( x ) , s ( e v e n ) ( x ) > ] q ] 2 \begin{aligned} m^{(even)}(x) &= \bigg[\bigg[\left< c^{(even)}(x),s^{(even)}(x) \right>+x\cdot \left< c^{(odd)}(x),s^{(odd)}(x) \right>\bigg]_q\bigg]_2 \\ m^{(odd)}(x) &= \bigg[\bigg[\left< c^{(even)}(x),s^{(odd)}(x) \right>+x\cdot \left< c^{(odd)}(x),s^{(even)}(x) \right>\bigg]_q\bigg]_2 \end{aligned} m(even)(x)m(odd)(x)=[[⟨c(even)(x),s(even)(x)⟩+x⋅⟨c(odd)(x),s(odd)(x)⟩]q]2=[[⟨c(even)(x),s(odd)(x)⟩+x⋅⟨c(odd)(x),s(even)(x)⟩]q]2即 m ( e v e n ) ( x ) m^{(even)}(x) m(even)(x) 的私钥为 ( s ( e v e n ) ( x ) , s ( o d d ) ( x ) ) (s^{(even)}(x),s^{(odd)}(x)) (s(even)(x),s(odd)(x)) ,而 m ( o d d ) ( x ) m^{(odd)}(x) m(odd)(x) 的私钥为 ( s ( o d d ) ( x ) , s ( e v e n ) ( x ) ) (s^{(odd)}(x),s^{(even)}(x)) (s(odd)(x),s(even)(x)) ,通过对元素重新排序,就可以使二者的私钥相同。
1.3. 算法优化
- 针对性问题:奇偶分解下,需要解密两次,原来只需要一次。
- 方法:如果一开始就将明文编码为偶数次多项式,而奇数项为 0 ,即 m ( o d d ) ( x ) = 0 m^{(odd)}(x) = 0 m(odd)(x)=0 ,则 m ( x ) = m ( e v e n ) ( x ) m(x) = m^{(even)}(x) m(x)=m(even)(x) 。此时,与奇数项相关的计算均为 0 ,只用对偶数项进行同态计算并解密,即只解密一次即可。
2. 批处理(Batching)
2.1. 核心思想
相关知识补充见:三.4 分圆整数环的分解
- 观察:基于理想格或 RLWE 的算法会降明文空间分解为代数理想,从而使一个明文多项式 m ( x ) ∈ R p m(x)\in R_p m(x)∈Rp 唯一地对应一个 d d d 维元组 ( m 1 , m 2 , ⋯ , m d ) (m_1,m_2,\cdots,m_d) (m1,m2,⋯,md)。因此,加密一个环 R p R_p Rp 上的明文,相当于同时加密了 d d d 个独立的消息,每个消息位于一个槽(Slot)中,使得一个密文有 d d d 个明文槽 。根据中国剩余定理, ϕ ˉ : R p ≃ R p / p 1 × R p / p 2 × ⋯ × R p / p d \bar \phi:R_p\simeq R_p/\mathfrak{p}_1\times R_p/\mathfrak{p}_2 \times \cdots \times R_p/\mathfrak{p}_d ϕˉ:Rp≃Rp/p1×Rp/p2×⋯×Rp/pd 。因此,对环 R p R_p Rp 下的一个元素进行同态计算,相当于对 d d d 个槽独立地、并行地执行相同的操作。
- 方法:批处理技术将多个明文打包(Pack)至同一个密文,同步计算相同的函数,从而将每门关于安全参数的准线性计算开销降至 polylog 级别。
2.2. 算法描述
- Step1:选择模数 p = 1 m o d 2 d p=1\mod 2d p=1mod2d 且满足 p = p o l y ( λ ) p=poly(\lambda) p=poly(λ)。
- Step2:在生成公钥时,将 A ⋅ s = 2 ⋅ e A\cdot s=2\cdot e A⋅s=2⋅e 改为 A ⋅ s = p ⋅ e A\cdot s=p\cdot e A⋅s=p⋅e 此时同态计算不再是环 R 2 R_2 R2 下的布尔电路,而是环 R p R_p Rp 下的算数电路,则对应的解密步骤变为 m = [ [ < c , s > ] q j ] p m=[[\left< c,s\right>]_{q_j}]_p m=[[⟨c,s⟩]qj]p需要注意的是,所有涉及生成公钥的步骤都要进行相应改动,比如说生成切换密钥时。此外,如果想在环 R p R_p Rp 下计算布尔电路,可以利用算术门模拟布尔门,比如 XOR ( a , b ) = a + b − 2 a b m o d p \text{XOR}(a,b) = a+b-2ab\mod p XOR(a,b)=a+b−2abmodp 。
- Step3:在模切换时,在环 R n R^n Rn 中找一个最靠近 ( q j − 1 / q j ) ⋅ c (q_{j-1}/q_j)\cdot c (qj−1/qj)⋅c 的元素 c ′ c' c′ ,且该元素满足 c ′ = c m o d p c'=c\mod p c′=cmodp,而非 c ′ = c m o d 2 c'=c\mod 2 c′=cmod2 。这一步虽然可能会引入较大的舍入误差,但是噪声仍可控。
3. 自举(Boostrapping)
3.1. 核心思想
- 针对性问题:在本文无自举方案中,计算开销与电路的乘法深度相关。
- 自举:在性能方面,自举可以使每门的计算开销与电路深度无关;在灵活性方面,自举可以进行无限次同态计算,而不用提前设置电路深度;在内存方面,允许将短密文解压为长密文。
- 方法:结合自举技术,并在模数链耗尽之前,预留进行自举的层数。此时,计算开销降为安全参数的准线性级别且与深度无关,从而可以进行任意次同态运算。
3.2. 优化解密电路
由于自举过程中,即解密算法主要涉及加法、乘法、模运算,为减小自举的计算开销,进行如下优化:
- 加法:使用“三进二”加法器,从而将 N N N 个数的求和问题再 O ( log N ) O(\log N) O(logN) 层内减少至2个数。
- 乘法:乘法 c [ i ] ⋅ s [ i ] c[i]\cdot s[i] c[i]⋅s[i] 可以看作以 c [ i ] c[i] c[i] 为参数对 s [ i ] s[i] s[i] 进行旋转,最多旋转 log q \log q logq 次。因此 < c , s > \left< c,s\right> ⟨c,s⟩ 最多需要进行 n log q n\log q nlogq 次旋转。
- 模运算:模运算类似除法,对 O ( log λ ) O(\log \lambda) O(logλ) 比特的数字进行模运算,可以由深度为 O ( log log λ ) O(\log \log \lambda) O(loglogλ) 的电路实现。特别的,模 2 运算相当于取数字的最低有效位,深度为 O ( 1 ) O(1) O(1) 。
综上,电路中门的数量为 O ~ ( λ ) \widetilde{O}(\lambda) O (λ) ,乘法深度为 O ( log λ ) O(\log \lambda) O(logλ) 。
3.3. 优化自举频率
为了寻找最优的自举频率,文章进行数学建模。
- 建立成本模型:假设每计算 L L L 层电路后进行一次自举; f ( λ , L ) f(\lambda,L) f(λ,L) 为 L L L 层无自举全同态加密方案中每门的计算开销,与 L L L 正相关,即 f ( λ , L ) = O ~ ( λ ⋅ L 3 ) f(\lambda,L)=\widetilde{O}(\lambda\cdot L^3) f(λ,L)=O
(λ⋅L3) ; g ( λ , L ) g(\lambda,L) g(λ,L) 表示在一个自举一个密文所需计算开销, 由于 L L L 层电路后进行一次自举,而自举需要 c c c 层电路,因此 g ( λ , L ) = O ~ ( λ ⋅ ( c + L ) 3 ) g(\lambda,L)=\widetilde{O}(\lambda\cdot (c+L)^3) g(λ,L)=O
(λ⋅(c+L)3) 。总的每门开销可以近似为:
h ( λ , L ) = f ( λ , L ) + g ( λ , L + c ) L h(\lambda,L)=f(\lambda,L)+\frac{g(\lambda,L+c)}{L} h(λ,L)=f(λ,L)+Lg(λ,L+c) - 定性分析:如果 L L L 太小,会导致摊销成本 g ( λ , L + c ) / L g(\lambda,L+c)/L g(λ,L+c)/L 很高;如果 L L L 太大,会导致 f ( λ , L ) f(\lambda,L) f(λ,L) 急剧增长,同时 g ( λ , L ) g(\lambda,L) g(λ,L) 也会变大,间接导致 g ( λ , L + c ) / L g(\lambda,L+c)/L g(λ,L+c)/L 增长。因此,存在一个中间值以最小化总开销。
- 定量分析:求导找极值点后可以得出,最优 L o p t = Θ ( log λ ) L_{opt}=\Theta(\log \lambda) Lopt=Θ(logλ) 。
4. 批量自举(Batching the Boostrapping)
4.1. 核心思想
- 现有方法:批量自举可以让每门的计算开销降至 O ~ ( λ ) \widetilde{O}(\lambda) O (λ) 级别,并且与乘法深度无关。
- 针对性问题:在使用批量自举后,如果想直接进行同态计算,会存在以下问题:在批处理后,加密数据被划分到相互独立的互素数明文槽中,而同态计算需要对多个槽的数据进行交互,因此批处理后的结果就无法直接用于计算。
- 方法:每个密文 d d d 个槽,只有第一个槽存数,其他位置存 0。在进行同态计算时,将密文从第一个槽移到第 i i i 个槽中,同时也要将对应密钥移到第 i i i 个槽。
4.2. 算法描述
- Pack:准备切换密钥,把同一个密钥置换到 d d d 个位置上,得到 d d d 个新密钥;同时,将 d d d 个不同密文置换到不同位置上,分别对应一个新密钥;由于同态计算需要在同一密钥下进行,现在每个位置的密文有不同的密钥,所以还需要用密钥切换技术统一密钥。
- Unpack:准备切换密钥,将不同位置上的密钥和密文分别置换到第一个槽中;对每个密文设置相应掩码,使得除了第一个位置上的掩码为1,其余位置为0,通过将该掩码与密文相乘,可以消除其他槽的数据;最终使用密钥和相应掩码密文可以还原指定槽上的明文数据。
5. 扩大明文空间
😵这一节没怎么好好看
大概意思是,如果扩大明文空间,即选择指数级别的模数,将导致模切换过程中的噪声也变为指数级别,从而导致解密失败。为此,文章改进了明文空间,不再使用整数作为模数,而是使用环中的理想作为模。
总结
文章中还有以下几个问题不理解:
- 奇偶分解的优化部分应该如何实现?是否会带来额外的安全风险?
- 为什么自举可以将短密文解压为长密文?
更多推荐


所有评论(0)