文章目录
- 一、摘要
- 二、引言
- 1、FHE 一般分为三个逻辑部分
- 2、噪声的管理
- 3. 贡献点
- 4. 文章思路
- 三、基础数学知识
- 四、基于 RLWE 的加密
- 1. LWE 问题
- 2. RLWE 问题
- 3. RLWE 问题的难度和安全性
- 五、加密方案
- 1. LPR.ES 加密方案
- 2. Lemma 1 (引理 1)
- 3. Optimisation/Assumption 1 (优化/假设 1)
- 六、Somewhat Homomorphic Encryption
- 1. Addition
- 2. Multiplication
- 2.1 基本的乘法 (第一步)
- 2.2 重线性化 (第二步)
- 2.3 重线性化 (Version 1)
一、摘要
- 本文将基于LWE问题的 Brakerski 完全同态方案移植到 R-LWE 中。
- 介绍了两个优化版本的 重线性化(relinearisation),它不仅拥有一个较小的重线性化密钥,而且具有更快的计算。
- 对于各种同态操作,如乘法、重线性化、bootstrapping 提供了一个详细但简单的分析,并给出了这些操作引起的 噪声的最坏情况界限。
- 介绍了通过 模数切换技巧 (modulus switching trick),大大简化了 bootstrapping 步骤的分析。
二、引言
1、FHE 一般分为三个逻辑部分
- 首先,构造一个 SWHE,它可以支持有限次的同态操作
- 然后,尽可能简化该方案的解密代价,通过 squashing
- 最后,通过 bootstrapping,获得具有固定固有噪声大小的密文
2、噪声的管理
所有现有的方案的共同特点,在加密过程中添加一个 小的“噪声”组件。 在密文上进行 同态计算将导致这些噪声增长,特别是 同态乘法,待到噪声增长到一定程度时,解密算法将失败。
Gentry的 bootstrapping 方法可以用来将密文中的噪声降低到 由解密电路的复杂性决定的固定级别。
- 在 Clear 的密文 (带有噪声 E) 上评估深度为 n 的电路会产生噪声为 E 2 n E^{2^n} E2n。
- 在之后的某篇文献中,将深度为 n 的电路的噪声降低到了 E n E^n En。
- 再之后,通过改进,深度为 n 的电路的噪声水平降低到了 E ⋅ c ( λ ) n E \cdot c(\lambda)^n E⋅c(λ)n
但是,这该是不足以支撑工业级使用。
3. 贡献点
- 它的简单性,由于我们采用了“接地气”的方法,因此任何多余的数学机制 (可能是非常优雅美丽的) 都被省略了。
- 将 Brakersk 的方案从 LWE 移植到 RLWE 中。
- 对各种同态运算进行了详细而简单的分析,并推导出了这些运算所引起噪声最坏情况的严格界限。
- 使用一个简单的模数转换技巧,我们简化了 bootstrapping 步骤的分析。
- 在此基础上,结合方案 [14],对方案进行了实际的安全分析,最终得到了给定安全级别的全同态方案的具体参数。
- 提供了两个新版本的重线化。
4. 文章思路
本文的其余部分组织如下:
- 第2节简要回顾了概率的符号表示和一些背景
- 第3节回顾了一个非常优雅的基于RLWE的加密方案,它将作为第4节描述的 somewhat 同态方案的基础
- 第5节分析了 bootstrapping 步骤,并确定了最小深度,在这个最小深度上,somewhat 同态方案可以被全同态化
- 第6节使用 Lindner 和 Peikert [14] 的分析来推导给定安全级别的全同态方案的参数
- 最后,第7节是本文的结论,并强调了正在进行的工作
三、基础数学知识
详细内容看专栏一些散乱的数学基础。
四、基于 RLWE 的加密
1. LWE 问题
先来简单概括一下 LWE 问题的基本思路:给定一个线性方程 A ⋅ s + e A \cdot s + e A⋅s+e,其中:
- A 是一个已知矩阵
- s 是未知的秘密向量
- e 是一个小的错误向量,通常是随机的
目标是通过已知的 A ⋅ s + e A \cdot s + e A⋅s+e 来恢复 s,即从带有噪声的线性方程中恢复秘密 s。
LWE 问题的难度在于:即使知道 A 和 A ⋅ s + e A \cdot s + e A⋅s+e,也无法有效地从中恢复出秘密 s(尤其当错误 e 是一个随机小数时)。这种难度是基于数学中的格问题。
2. RLWE 问题
RLWE 是 LWE 的一种改进形式,主要通过引入 环结构 来提高 计算效率。RLWE 问题可以表示为一下形式:
- 首先给定一些参数:
- 一个环 R = Z [ x ] / ( f ( x ) ) R=Z[x]/(f(x)) R=Z[x]/(f(x)),其中 f(x) 是不可约多项式,通常选用的是环多项式 ϕ m ( x ) \phi_m(x) ϕm(x) ,他是某个整数 m 的 循环多项式 (即 分圆多项式)。
- 一个大整数 q,称为 模数,它用来定义环的商域 R q R_q Rq。
- 一个 秘密向量 s ∈ R q s \in R_q s∈Rq,它通常从某种分布 χ \chi χ(通常是离散高斯分布)中随机选择。
- χ \chi χ 是一个分布,用来生成噪声项 e,该噪声项是由环 R q R_q Rq 中的元素通过 χ \chi χ 随机生成的。
可以看出 R q R_q Rq 是一个模 q 的有限多项式环。
χ \chi χ 是生成噪声的概率分布,通常是离散分布。它用于为密文引入误差,从而使问题难以解密。在RLWE中,噪声是加密过程中非常重要的一部分。但是它通常是帮助从 R q R_q Rq 中随机取多项式元素的。
有提到,“该噪声项是由环 R q R_q Rq 中的元素通过 χ \chi χ 随机生成的”,这句话的含义是 e 是 R q R_q Rq 中的多项式元素。
- 加密过程:
对于一个秘密向量 s 和一个随机选择的元素 a ∈ R q a \in R_q a∈Rq,选择一个噪声项 e ∈ χ e \in \chi e∈χ,加密的输出是一个二元组 ( a , [ a ⋅ s + e ] q ) (a, [a \cdot s + e]_q) (a,[a⋅s+e]q),其中:- a 是环 R q R_q Rq 中的一个随机元素。
- s ⋅ a s \cdot a s⋅a 是 s 和 a 的乘积,并且这个乘积是加上一个噪声项 e 后,再对模数 q 取模。
- RLWE 问题的任务 (Decision-RLWE Problem):
判断该二元组是来自加密过程(即 ( a , [ a ⋅ s + e ] q ) (a, [a \cdot s + e]_q) (a,[a⋅s+e]q)),还是来自均匀分布 U ( R q 2 ) U(R^2_q) U(Rq2),即判断 a 和 ( a , [ a ⋅ s + e ] q ) (a, [a \cdot s + e]_q) (a,[a⋅s+e]q) 是不是随机选取的。 - 为什么 RLWE 很重要:
3. RLWE 问题的难度和安全性
RLWE 问题的安全性来自于 理想格(ideal lattices) 的 最短向量问题(SVP),这意味着 RLWE 问题是 计算上困难 的,且目前没有已知的高效算法能解决它。
RLWE 通过巧妙的数学结构,在保证加密安全性的同时,提供了处理噪声增长的可能性。
五、加密方案
1. LPR.ES 加密方案
上述的决策问题直接导致了以下的加密方案,作为 [15]1 扩展版中描述的加密系统。
- 明文空间 被设定为 R t R_t Rt,其中 t > 1 t>1 t>1 是一个整数
- Δ = ⌊ q / t ⌋ \Delta = \lfloor q/t \rfloor Δ=⌊q/t⌋ 并定义 r t ( q ) = q m o d t r_t(q)=q\ mod\ t rt(q)=q mod t,
- 显然我们有 q = Δ ⋅ t + r t ( q ) q=\Delta \cdot t + r_t(q) q=Δ⋅t+rt(q)。需要注意的是,q 和 t 不必是质数,也不要求 t 和 q 互质。
加密方案 LPR.ES 定义如下:
- LPR.ES.SecretKeyGen(1λ):
S a m p l e s ← χ O u t p u t s k = s Sample\ s \larr \chi \\Output\ sk=s Sample s←χOutput sk=s - LPR.ES.PublicKeyGen(sk):
S e t s = s k S a m p l e a ← R q , e ← χ O u t p u t p k = ( [ − ( a ⋅ s + e ) ] q , a ) Set\ s=sk\\Sample\ a \larr R_q,\ e \larr \chi\\Output\ pk=([-(a \cdot s+e)]_q,a) Set s=skSample a←Rq, e←χOutput pk=([−(a⋅s+e)]q,a) - LPR.ES.Encrypt(pk, m):
M e s s a g e m ∈ R t L e t p 0 = p k [ 0 ] , p 1 = p k [ 1 ] S a m p l e u , e 1 , e 2 ← χ R e t u r n c t = ( [ p 0 ⋅ u + e 1 + Δ ⋅ m ] q , [ p 1 ⋅ u + e 2 ] q ) Message\ m \in R_t \\Let\ p_0=pk[0],\ p_1=pk[1]\\Sample\ u,e_1,e_2 \larr \chi \\Return\ ct=([p_0 \cdot u+e_1+\Delta \cdot m]_q,[p_1 \cdot u+e_2]_q) Message m∈RtLet p0=pk[0], p1=pk[1]Sample u,e1,e2←χReturn ct=([p0⋅u+e1+Δ⋅m]q,[p1⋅u+e2]q) - LPR.ES.Decrypt(sk, ct):
S e t s = s k , c 0 = c t [ 0 ] , c 1 = c t [ 1 ] C o m p u t e [ ⌊ t ⋅ [ c 0 + c 1 ⋅ s ] q q ⌉ ] t Set\ s=sk,\ c_0=ct[0],\ c_1=ct[1]\\Compute\ [\lfloor \frac{t \cdot [c_0+c_1 \cdot s]_q}{q} \rceil]_t Set s=sk, c0=ct[0], c1=ct[1]Compute [⌊qt⋅[c0+c1⋅s]q⌉]t
2. Lemma 1 (引理 1)
为了证明当密文正确加密时解密是正确的,证明以下 引理 (Lemma)。
使用上述加密方案 LPR.ES 的符号,并假设 ∣ ∣ χ ∣ ∣ < B ||\chi|| < B ∣∣χ∣∣<B,我们有:
[ c 0 + c 1 ⋅ s ] q = Δ ⋅ m + v ( 1 ) [c_0+c_1 \cdot s]_q=\Delta \cdot m+v\ \ \ \ \ \ (1) [c0+c1⋅s]q=Δ⋅m+v (1) 通过上面给出的 c t 和 p k 可以计算出 [ c 0 + c 1 ⋅ s ] q = Δ ⋅ m + ( e 1 + e 2 ⋅ s − e ⋅ u ) 然后用 v 表示 ( e 1 + e 2 ⋅ s − e ⋅ u ) 通过上面给出的ct 和pk可以计算出\\ [c_0+c_1 \cdot s]_q=\Delta \cdot m+(e_1+e_2 \cdot s-e \cdot u)\\然后用\ v\ 表示\ (e_1+e_2 \cdot s-e \cdot u) 通过上面给出的ct和pk可以计算出[c0+c1⋅s]q=Δ⋅m+(e1+e2⋅s−e⋅u)然后用 v 表示 (e1+e2⋅s−e⋅u)其中, ∣ ∣ v ∣ ∣ ≤ 2 ⋅ δ R ⋅ B 2 + B ||v|| \le 2 \cdot \delta_R \cdot B^2+B ∣∣v∣∣≤2⋅δR⋅B2+B。这意味着当 2 ⋅ δ R ⋅ B 2 + B < Δ / 2 2 \cdot \delta_R \cdot B^2 + B < \Delta /2 2⋅δR⋅B2+B<Δ/2 时,解密正确,即当 噪声项 v 较小 时,解密过程就能正确进行。
B 代表了噪声的 最大幅度,即在选择噪声分布 (这里是 χ \chi χ) 时,通常会设定一个上界 B 来表示噪声项的可能范围。
可以看出来,如果可以使得 u 和 s 越小,则噪声 v 就会越小。这句话导致了下面的优化和相应的假设。
3. Optimisation/Assumption 1 (优化/假设 1)
我们将不从 χ \chi χ 中采样 s , u s,u s,u,而是从 R 2 R_2 R2 中采样,即 ∣ ∣ s ∣ ∣ = ∣ ∣ u ∣ ∣ = 1 ||s|| = ||u|| = 1 ∣∣s∣∣=∣∣u∣∣=1。但是 e 1 , e 2 e_1,e_2 e1,e2 仍从 χ \chi χ 中采样。这种情况下 Lemma 1 中的界限 ∣ ∣ v ∣ ∣ ||v|| ∣∣v∣∣ 变成了 B ⋅ ( 2 ⋅ δ R + 1 ) B \cdot (2 \cdot \delta_R+1) B⋅(2⋅δR+1)。
sk 只从 R2 中采样,会不会有什么问题。
六、Somewhat Homomorphic Encryption
这一部分是 FHE 的前一个版本,是这篇文章的重点部分。在本节中,我们将基于 RLWE 的 LPR.ES 给出一个 SHE 方案 FV.SH。
事实上,FV.SH 和 LPR.ES 的密钥生成、加密、解密过程完全相同,只不过使用了上一章中的 优化/假设1 u , s ← R 2 u,s \larr R_2 u,s←R2 进行优化。FV.SH 对 LPR.ES 的主要优化是,补充了一个名为 rlk 的 重线性化密钥,这是用来计算 同态乘法 的。
LPR.ES 方案的主要不变量由 公式 (1) 给出,即 Lemma 1 中的公式 (1),即 当我们将密文 ct 的元素视为多项式 ct(x) 的系数,并在 s 中对该多项式进行评估时,我们得到:
[ c t ( s ) ] q = [ c 0 + c 1 ⋅ s ] q = Δ ⋅ m + v [ct(s)]_q = [c_0+c_1 \cdot s]_q = \Delta \cdot m + v [ct(s)]q=[c0+c1⋅s]q=Δ⋅m+v通过这种方式,我们可以轻松恢复消息 m。利用这种解释,推导同态加法 FV.SH.Add 和同态乘法 FV.SH.Mul 就变得相对容易。
c t ( s ) ct(s) ct(s) 就是 c 0 + c 1 ⋅ s c_0 + c_1 \cdot s c0+c1⋅s,其中 s 是私钥 sk 这里从 R 2 R_2 R2 中获取。
为什么可以轻松恢复消息 m?为什么加法和乘法会变简单?
理解这个内容非常重要!!!!!!!!这涉及到下面的加法和乘法的理论推导。
由于对于这里的同态加密来说,对于每个密文,密钥 sk 是不变的,而 m , u , e 1 , e 2 m,u,e_1,e_2 m,u,e1,e2 的改变会导致 c t = [ c t 0 , c t 1 ] ct=[ct_0,ct_1] ct=[ct0,ct1] 的改变。
这个将密文元素视为多项式系数的方法,也就是 用多项式来表示密文,这个多项式的自变量是私钥 sk。同时,它也是解密算法中的核心内容。通过 在秘密值 s 上评估密文多项式,能够 恢复 出加密前的消息 m(或者其近似值),并且还会有噪声项 v。
- 在加法中,对于左边的多项式部分,直接相加并不会影响其结构。由于左边可以直接相加,所以右边的评估部分也直接相加即可。
- 在乘法中,对于左边的多项式部分,直接相乘会导致产生一个新的项,通过适当的缩放、四舍五入和重线性化技术来处理结果。最终,乘法后的结果仍然是一个可以在秘密值 s 上进行评估的多项式。
整体思路就是,在 LPR.ES 方案的基础上,首先将加密的输出弄成 [ c 0 + c 1 ⋅ s ] q = Δ ⋅ m + v [c_0+c_1 \cdot s]_q = \Delta \cdot m + v [c0+c1⋅s]q=Δ⋅m+v 的形式,然后解密的过程就是对这个式子进行简单的解方程。关键就在于中间的同态操作如何进行。
1. Addition
假设有两个密文 c t 1 ct_1 ct1 和 c t 2 ct_2 ct2,其中:
[ c t i ( s ) ] q = [ c i , 0 + c i , 1 ⋅ s ] q = Δ ⋅ m i + v i ( i = 1 , 2 ) [ct_i(s)]_q = [c_{i,0}+c_{i,1} \cdot s]_q = \Delta \cdot m_i + v_i\ \ \ (i=1,2) [cti(s)]q=[ci,0+ci,1⋅s]q=Δ⋅mi+vi (i=1,2)那么可以很容易地看出:
[ c t 1 ( s ) + c t 2 ( s ) ] q = [ ( c 1 , 0 + c 2 , 0 ) + ( c 1 , 1 + c 2 , 1 ) ⋅ s ] q = Δ ⋅ [ m 1 + m 2 ] t + v 1 + v 2 − ϵ ⋅ t ⋅ r [ct_1(s) + ct_2(s)]_q = [(c_{1,0} + c_{2,0}) + (c_{1,1} + c_{2,1}) \cdot s]_q \\ = \Delta \cdot [m_1 + m_2]_t + v_1 + v_2 - \epsilon \cdot t \cdot r [ct1(s)+ct2(s)]q=[(c1,0+c2,0)+(c1,1+c2,1)⋅s]q=Δ⋅[m1+m2]t+v1+v2−ϵ⋅t⋅r其中, ϵ = q t − Δ = r t ( q ) t < 1 \epsilon = \frac{q}{t} - \Delta = \frac{r_t(q)}{t}<1 ϵ=tq−Δ=trt(q)<1,并且 m 1 + m 2 = [ m 1 + m 2 ] t + t ⋅ r m_1 + m_2 = [m_1 + m_2]_t + t \cdot r m1+m2=[m1+m2]t+t⋅r。注意 ∣ ∣ r ∣ ∣ ≤ 1 ||r|| \le 1 ∣∣r∣∣≤1,这意味着 加法操作中噪声最多增加 t。因此,可以定义 同态加法 操作为:
F V . S H . A d d ( c t 1 , c t 2 ) : = ( [ c t 1 [ 0 ] + c t 2 [ 0 ] ] q , [ c t 1 [ 1 ] + c t 2 [ 1 ] ] q ) FV.SH.Add(ct_1,ct_2) := ([ct_1[0]+ct_2[0]]_q,\ [ct_1[1]+ct_2[1]]_q) FV.SH.Add(ct1,ct2):=([ct1[0]+ct2[0]]q, [ct1[1]+ct2[1]]q)
关于上面公式中 − ϵ ⋅ t ⋅ r -\epsilon \cdot t \cdot r −ϵ⋅t⋅r 是怎么来的:
- ϵ \epsilon ϵ 表示一个小于1的量,它是由于加法操作中出现的四舍五入误差。
- t ⋅ r t \cdot r t⋅r 是由于取模 t t t 时的误差项引入的 调整项。这个误差项来源于 m 1 + m 2 m_1+m_2 m1+m2 和 t t t 之间的关系。
2. Multiplication
同态乘法包括两个步骤:
第一步相对简单,基本上是将多项式 c t 1 ( x ) ct_1(x) ct1(x) 和 c t 2 ( x ) ct_2(x) ct2(x) 相乘并按 t / q t/q t/q 缩放 (scaling)。然而,问题在于我们得到的密文包含了 3 个环元素,而不是 2 个。
第二步解决了这个问题,这一过程称为 “重线性化” (relinearisation)。
2.1 基本的乘法 (第一步)
首先,我们将密文 c t i ( x ) ct_i(x) cti(x) 在 s 上的评估写为:
c t i ( s ) = c i , 0 + c i , 1 ⋅ s = Δ ⋅ m i + v i + q ⋅ r i ct_i(s) = c_{i,0} + c_{i,1} \cdot s = \Delta \cdot m_i + v_i + q \cdot r_i cti(s)=ci,0+ci,1⋅s=Δ⋅mi+vi+q⋅ri
关于这里的表示,为什么比之前的表示多了一个 q ⋅ r i q \cdot r_i q⋅ri:
实际上和取模相关,上面式子中的 c t i ( s ) ct_i(s) cti(s) 是对 q 取模的,如果将取模符号去掉,则需要加上一个 r i r_i ri 倍的 q q q,才能使等式成立。
简单计算表明 ∣ ∣ r i ∣ ∣ < δ ⋅ ∣ ∣ s ∣ ∣ ||r_i||<\delta \cdot ||s|| ∣∣ri∣∣<δ⋅∣∣s∣∣。然后我们将这些表达式相乘,得到:
( c t 1 ⋅ c t 2 ) ( s ) = c 0 + c 1 ⋅ s + c 2 ⋅ s 2 ( 2 ) = Δ 2 ⋅ m 1 ⋅ m 2 + Δ ⋅ ( m 1 ⋅ v 2 + m 2 ⋅ v 1 ) + q ⋅ ( v 1 ⋅ r 2 + v 2 ⋅ r 1 ) + v 1 ⋅ v 2 + q ⋅ Δ ⋅ ( m 1 ⋅ r 2 + m 2 ⋅ r 1 ) + q 2 ⋅ r 1 ⋅ r 2 (ct_1 \cdot ct_2)(s) = c_0 + c_1 \cdot s + c_2 \cdot s^2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)\\ = \Delta^2 \cdot m_1 \cdot m_2 + \Delta \cdot (m_1 \cdot v_2 + m_2 \cdot v_1)+q \cdot (v_1 \cdot r_2+v_2 \cdot r_1)+v_1 \cdot v_2 + q \cdot \Delta \cdot (m_1 \cdot r_2 + m_2 \cdot r_1) + q^2 \cdot r_1 \cdot r_2 (ct1⋅ct2)(s)=c0+c1⋅s+c2⋅s2 (2)=Δ2⋅m1⋅m2+Δ⋅(m1⋅v2+m2⋅v1)+q⋅(v1⋅r2+v2⋅r1)+v1⋅v2+q⋅Δ⋅(m1⋅r2+m2⋅r1)+q2⋅r1⋅r2上述表达式显示,为了恢复一个密文表示 [ m 1 ⋅ m 2 ] t [m_1 \cdot m_2]_t [m1⋅m2]t,我们需要按 1 / Δ 1/\Delta 1/Δ 进行缩放,由于 Δ \Delta Δ 不一定能整除 q,我们会得到由 最后一项 的四舍五入误差 (rounding error) 引起的 大噪声。为了解决这个问题,我们将 按 t / q t/q t/q 进行缩放 (scaling)。
q 应该是要大于 t 的。
假设 c t 1 ( x ) ⋅ c t 2 ( x ) = c 0 + c 1 ⋅ x + c 2 ⋅ x 2 ct_1(x) \cdot ct_2(x) = c_0 + c_1 \cdot x + c_2 \cdot x^2 ct1(x)⋅ct2(x)=c0+c1⋅x+c2⋅x2,那么我们使用以下 近似:
t q ⋅ ( c t 1 ⋅ c t 2 ) ( s ) = ⌊ t ⋅ c 0 q ⌋ + ⌊ t ⋅ c 1 q ⌋ ⋅ s + ⌊ t ⋅ c 2 q ⌋ ⋅ s 2 + r a ( 3 ) \frac{t}{q} \cdot (ct_1 \cdot ct_2)(s) = \lfloor \frac{t \cdot c_0}{q} \rfloor + \lfloor \frac{t \cdot c_1}{q} \rfloor \cdot s + \lfloor \frac{t \cdot c_2}{q} \rfloor \cdot s^2 + r_a\ \ \ \ \ \ \ \ (3) qt⋅(ct1⋅ct2)(s)=⌊qt⋅c0⌋+⌊qt⋅c1⌋⋅s+⌊qt⋅c2⌋⋅s2+ra (3)这里引入了一个 近似误差 r a r_a ra,其大小小于 ( δ ⋅ ∣ ∣ s ∣ ∣ + 1 ) 2 / 2 (\delta \cdot ||s|| + 1)^2/2 (δ⋅∣∣s∣∣+1)2/2。
通过这些步骤,我们得到了一个密文,该密文表示乘法结果,但它的噪声已经增长,因此需要通过重线性化来恢复。
r a r_a ra 表示在缩放和四舍五入过程中引入的 附加误差。这通常是因为在进行密文乘积和缩放时,可能无法完全精确地恢复原始的乘积结果,导致误差的引入。
r a r_a ra 通常是一个很小的量,表示在计算过程中引入的不可避免的噪声。
关于公式 c t 1 ( x ) ⋅ c t 2 ( x ) = c 0 + c 1 ⋅ x + c 2 ⋅ x 2 ct_1(x) \cdot ct_2(x) = c_0 + c_1 \cdot x + c_2 \cdot x^2 ct1(x)⋅ct2(x)=c0+c1⋅x+c2⋅x2 是怎么来的,实际上就是把 多项式表示的密文 相乘了。
如果我们写 m 1 ⋅ m 2 = [ m 1 ⋅ m 2 ] t + t ⋅ r m m_1 \cdot m_2 = [m_1 \cdot m_2]_t + t \cdot r_m m1⋅m2=[m1⋅m2]t+t⋅rm,则 ∣ ∣ r m ∣ ∣ < ( t ⋅ δ R ) / 4 ||r_m||<(t \cdot \delta_R)/4 ∣∣rm∣∣<(t⋅δR)/4。
同样地,如果我们写 v 1 ⋅ v 2 = [ v 1 ⋅ v 2 ] Δ + Δ ⋅ r v v_1 \cdot v_2 = [v_1 \cdot v_2]_{\Delta} + \Delta \cdot r_v v1⋅v2=[v1⋅v2]Δ+Δ⋅rv,则 ∣ ∣ r v ∣ ∣ < ( E 2 ⋅ δ R ) / Δ ||r_v||<(E^2 \cdot \delta_R)/ \Delta ∣∣rv∣∣<(E2⋅δR)/Δ。其中,E 是原始噪声项的界限, ∣ ∣ v i ∣ ∣ < E ||v_i||<E ∣∣vi∣∣<E。
通过将 等式 (2) 两边乘以 t/q,并对方程进行分组,我们得到一个稍显复杂的等式,其中我们主要用了 t ⋅ Δ = q − r t ( q ) t \cdot \Delta = q - r_t(q) t⋅Δ=q−rt(q):
t ⋅ ( c t 1 ⋅ c t 2 ) ( s ) q = Δ ⋅ [ m 1 ⋅ m 2 ] t + ( m 1 ⋅ v 2 + m 2 ⋅ v 1 ) + t ⋅ ( v 1 ⋅ r 2 + v 2 ⋅ r 1 ) + r v + ( q − r t ( q ) ) ⋅ ( r m + m 1 ⋅ r 2 + m 2 ⋅ r 1 ) + q ⋅ t ⋅ r 1 ⋅ r 2 + t q ⋅ [ v 1 ⋅ v 2 ] Δ − r t ( q ) q ⋅ ( Δ ⋅ m 1 ⋅ m 2 + ( m 1 ⋅ v 2 + m 2 ⋅ v 1 ) + r v ) \frac{t \cdot (ct_1 \cdot ct_2)(s)}{q} = \Delta \cdot [m_1 \cdot m_2]_t + (m_1 \cdot v_2 + m_2 \cdot v_1) + t \cdot (v_1 \cdot r_2 + v_2 \cdot r_1)\\+ r_v + (q - r_t(q)) \cdot (r_m + m_1 \cdot r_2 + m_2 \cdot r_1) + q \cdot t \cdot r_1 \cdot r_2\\+ \frac{t}{q} \cdot [v_1 \cdot v_2]_{\Delta} - \frac{r_t(q)}{q} \cdot (\Delta \cdot m_1 \cdot m_2 + (m_1 \cdot v_2 + m_2 \cdot v_1) + r_v) qt⋅(ct1⋅ct2)(s)=Δ⋅[m1⋅m2]t+(m1⋅v2+m2⋅v1)+t⋅(v1⋅r2+v2⋅r1)+rv+(q−rt(q))⋅(rm+m1⋅r2+m2⋅r1)+q⋅t⋅r1⋅r2+qt⋅[v1⋅v2]Δ−qrt(q)⋅(Δ⋅m1⋅m2+(m1⋅v2+m2⋅v1)+rv)
这个式子是使用了上面提到的 m 1 ⋅ m 2 m_1 \cdot m_2 m1⋅m2 和 v 1 ⋅ v 2 v_1 \cdot v_2 v1⋅v2 代入到式子 (2) 中获得的。
下面会将最后一行表示为 r r r_r rr,它是由于 q ≫ t , q ≫ [ q ] t q \gg t,q \gg [q]_t q≫t,q≫[q]t 而产生的 舍入误差。
写出这种表达式的基本思路是明确哪些项在对模 q 取余后会消失,以及哪些项会因四舍五入而受到影响。请注意,在上面的表达式中,除了 最后一行 (记为 r r r_r rr) 外,所有项都是 整数。rounding 仅影响最后一行,并且 ∣ ∣ r r ∣ ∣ < δ R ⋅ ( t + 1 / 2 ) 2 + 1 / 2 ||r_r|| < \delta_R \cdot (t+1/2)^2 + 1/2 ∣∣rr∣∣<δR⋅(t+1/2)2+1/2。对模 q 取余并代入方程 (3) 后得到:
[ ∣ t ⋅ c 0 q ∣ + ∣ t ⋅ c 1 q ∣ ⋅ s + ∣ t ⋅ c 2 q ∣ ⋅ s 2 ] q = Δ ⋅ [ m 1 ⋅ m 2 ] t + ( m 1 ⋅ v 2 + m 2 ⋅ v 1 ) + t ⋅ ( v 1 ⋅ r 2 + v 2 ⋅ r 1 ) + r v − r t ( q ) ⋅ ( r m + m 1 ⋅ r 2 + m 2 ⋅ r 1 ) + ⌊ r r − r a ⌉ [|\frac{t \cdot c_0}{q}| + |\frac{t \cdot c_1}{q}| \cdot s + |\frac{t \cdot c_2}{q}| \cdot s^2]_q\\= \Delta \cdot [m_1 \cdot m_2]_t + (m_1 \cdot v_2 + m_2 \cdot v_1)\\+ t \cdot (v_1 \cdot r_2 + v_2 \cdot r_1) + r_v - r_t(q) \cdot (r_m + m_1 \cdot r_2 + m_2 \cdot r_1) + \lfloor r_r - r_a \rceil [∣qt⋅c0∣+∣qt⋅c1∣⋅s+∣qt⋅c2∣⋅s2]q=Δ⋅[m1⋅m2]t+(m1⋅v2+m2⋅v1)+t⋅(v1⋅r2+v2⋅r1)+rv−rt(q)⋅(rm+m1⋅r2+m2⋅r1)+⌊rr−ra⌉很容易对右侧的 新噪声项 的大小进行 界定,从而最终得出以下引理。
- Lemma 2
设 c t i ct_i cti 为 i = 1 , 2 i=1,2 i=1,2 时的两个密文,其中 [ c t i ( s ) ] q = Δ ⋅ m i + v i [ct_i(s)]_q = \Delta \cdot m_i + v_i [cti(s)]q=Δ⋅mi+vi 且 ∣ ∣ v i ∣ ∣ < E < Δ / 2 ||v_i||<E<\Delta /2 ∣∣vi∣∣<E<Δ/2,并且设 c t 1 ( x ) ⋅ c t 2 ( x ) = c 0 + c 1 ⋅ x + c 2 ⋅ x 2 ct_1(x) \cdot ct_2(x) = c_0 + c_1 \cdot x + c_2 \cdot x^2 ct1(x)⋅ct2(x)=c0+c1⋅x+c2⋅x2,则:
[ ∣ t ⋅ c 0 q ∣ + ∣ t ⋅ c 1 q ∣ ⋅ s + ∣ t ⋅ c 2 q ∣ ⋅ s 2 ] q = Δ ⋅ [ m 1 ⋅ m 2 ] t + v 3 [|\frac{t \cdot c_0}{q}| + |\frac{t \cdot c_1}{q}| \cdot s + |\frac{t \cdot c_2}{q}| \cdot s^2]_q = \Delta \cdot [m_1 \cdot m_2]_t + v_3 [∣qt⋅c0∣+∣qt⋅c1∣⋅s+∣qt⋅c2∣⋅s2]q=Δ⋅[m1⋅m2]t+v3其中 ∣ ∣ v 3 ∣ ∣ < 2 ⋅ δ R ⋅ t ⋅ E ⋅ ( δ R ⋅ ∣ ∣ s ∣ ∣ + 1 ) + 2 ⋅ t 2 ⋅ δ R 2 ⋅ ( ∣ ∣ s ∣ ∣ + 1 ) 2 ||v_3||<2 \cdot \delta_R \cdot t \cdot E \cdot (\delta_R \cdot ||s|| + 1) + 2 \cdot t^2 \cdot \delta^2_R \cdot (||s|| + 1)^2 ∣∣v3∣∣<2⋅δR⋅t⋅E⋅(δR⋅∣∣s∣∣+1)+2⋅t2⋅δR2⋅(∣∣s∣∣+1)2。- 噪声增长:
引理表明,在进行密文乘法时,噪声不会呈二次增长,而是大致由因子 2 ⋅ t ⋅ δ R 2 ⋅ ∣ ∣ s ∣ ∣ 2 \cdot t \cdot \delta^2_R \cdot ||s|| 2⋅t⋅δR2⋅∣∣s∣∣ 进行放大。 - 密钥范数的影响:
密钥 s 的范数对噪声增长有显著影响,尤其是当 ∣ ∣ s ∣ ∣ ||s|| ∣∣s∣∣ 较大时,噪声增长会更快。通过使用优化假设 ∣ ∣ s ∣ ∣ = 1 ||s||=1 ∣∣s∣∣=1,可以显著限制乘法过程中噪声的增长。
- 噪声增长:
按照之前的思路可以看到,这里对于等式右边的部分,已经通过一些方法变成了解密算法中的形式,接下来要做的是把灯饰左边多出来的那一项通过重线性化去掉。
2.2 重线性化 (第二步)
利用引理 2,我们已经有了一个加密了两个明文乘积的密文。现在需要将密文多项式,从二次变成一次,正是这个步骤需要引入一个 重线性化密钥 rlk。
设 c t = [ c 0 , c 1 , c 2 ] ct = [c_0,c_1,c_2] ct=[c0,c1,c2] 表示一个二次密文,我们需要找到 c t ′ = [ c 0 ′ , c 1 ′ ] ct' = [c_0',c_1'] ct′=[c0′,c1′],使得:
[ c 0 + c 1 ⋅ s + c 2 ⋅ s 2 ] q = [ c 0 ′ + c 1 ′ ⋅ s + r ] q [c_0 + c_1 \cdot s + c_2 \cdot s^2]_q = [c_0' + c_1' \cdot s + r]_q [c0+c1⋅s+c2⋅s2]q=[c0′+c1′⋅s+r]q其中, ∣ ∣ s ∣ ∣ ||s|| ∣∣s∣∣ 是小的。
由于 s 2 s^2 s2 是未知的,一个 初步的想法 是提供一个 s 2 s^2 s2 的 masked version 如下(与 LPR.ES.PublicKeyGen 比较):
S a m p l e a 0 ← R q , e 0 ← χ O u t p u t r l k : = ( [ − ( a 0 ⋅ s + e 0 ) + s 2 ] q , a 0 ) Sample a_0 \larr R_q,\ e_0 \larr \chi \\Output\ rlk := ([-(a_0 \cdot s + e_0) + s^2]_q,a_0) Samplea0←Rq, e0←χOutput rlk:=([−(a0⋅s+e0)+s2]q,a0)请注意, r l k [ 0 ] + r l k [ 1 ] ⋅ s = s 2 + e 0 rlk[0] + rlk[1] \cdot s = s^2 + e_0 rlk[0]+rlk[1]⋅s=s2+e0。(这里可以看出, s 2 s^2 s2 可以写成 r l k [ 0 ] + r l k [ 1 ] ⋅ s − e 0 rlk[0]+rlk[1] \cdot s - e_0 rlk[0]+rlk[1]⋅s−e0 的形式。带入到原来含有三个项的密文结构中,就会去掉第三个项,并引入一个噪声)
然而,问题在于,由于 c 2 c_2 c2 是 R q R_q Rq 中的随机元素,噪声 e 0 e_0 e0 会被放大,导致产生一个对 c 2 ⋅ s 2 c_2 \cdot s^2 c2⋅s2 的不太好的近似 (bad approximation),从而引入巨大的误差 r。
2.3 重线性化 (Version 1)
一种可能的解决方案是,通过选择一个 基 T(注意 T 完全独立于 t),将 c2 切分成若干 小范数的部分,并用基 T 表示 c2,即 c 2 = ∑ i = 0 l T i ⋅ c 2 ( i ) m o d q c_2 = \sum_{i=0}^{l}T^i \cdot c_2^{(i)}\ \ mod\ q c2=∑i=0lTi⋅c2(i) mod q,其中 l = ⌊ l o g T q ⌋ l = \lfloor log_T^q \rfloor l=⌊logTq⌋ 且系数 c 2 ( i ) c_2^{(i)} c2(i) 位于 R T R_T RT 中。然后重线性化密钥 rlk 包含 T i ⋅ s 2 T^i \cdot s^2 Ti⋅s2 的 masked version, i = 0 , 1 , . . . , l i=0,1,...,l i=0,1,...,l:
r l k = [ ( [ − ( a i ⋅ s + e i ) + T i ⋅ s 2 ] q , a i ) : i ∈ [ 0... l ] ] rlk = [([-(a_i \cdot s + e_i) + T^i \cdot s^2]_q,a_i):i \in [0...l]] rlk=[([−(ai⋅s+ei)+Ti⋅s2]q,ai):i∈[0...l]]
这里 R T R_T RT 是一个比较小的环。因为有提到 “将 c2 切分成若干 小范数的部分”。
- 假设2:
请注意,重线性化密钥 rlk 包含的 T i ⋅ s 2 T^i \cdot s^2 Ti⋅s2 的掩蔽版本 既不是 RLWE 分布的真实样本,也不是 T i ⋅ s 2 T^i \cdot s^2 Ti⋅s2 的真实加密。这个事实为我们的方案引入了一个额外的假设,即 在对手可以访问 rlk 的情况下,方案仍然是安全的。
这个性质是一个 弱圆形安全性(weak circular security)。
如果我们现在定义:
c 0 ′ = [ c 0 + ∑ i = 0 l r l k [ i ] [ 0 ] ⋅ c 2 ( i ) ] q c 1 ′ = [ c 1 + ∑ i = 0 l r l k [ i ] [ 1 ] ⋅ c 2 ( i ) ] q ( 4 ) c_0' = [c_0 + \sum_{i=0}^{l}rlk[i][0] \cdot c_2^{(i)}]_q\\\ \ \ \ \ \ \ \ \ \ c_1' = [c_1 + \sum_{i=0}^{l}rlk[i][1] \cdot c_2^{(i)}]_q\ \ \ \ \ (4) c0′=[c0+i=0∑lrlk[i][0]⋅c2(i)]q c1′=[c1+i=0∑lrlk[i][1]⋅c2(i)]q (4)那么我们可以计算:
c 0 ′ + c 1 ′ ⋅ s = c 0 + c 1 ⋅ s + c 2 ⋅ s 2 − ∑ i = 0 l c 2 ( i ) ⋅ e i m o d q c_0' + c_1' \cdot s = c_0 + c_1 \cdot s + c_2 \cdot s^2 - \sum_{i=0}^{l}c_2^{(i)} \cdot e^i\ \ \ \ mod\ q c0′+c1′⋅s=c0+c1⋅s+c2⋅s2−i=0∑lc2(i)⋅ei mod q通过对两边应用 [ ⋅ ] q [\cdot]_q [⋅]q 运算,我们最终得出:
r = ∑ i = 0 l c 2 ( i ) ⋅ e i r = \sum_{i=0}^{l} c_2^{(i)} \cdot e_i r=i=0∑lc2(i)⋅ei上述推导还表明,T 对重线性化有以下影响:
- s
On Ideal Lattices and Learning with Errors over Rings ↩︎