《Somewhat Practical Fully Homomorphic Encryption》笔记 (BFV 源于这篇文章)

news/2025/2/28 13:49:08/

文章目录

  • 一、摘要
  • 二、引言
    • 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)


一、摘要

  1. 本文将基于LWE问题的 Brakerski 完全同态方案移植到 R-LWE 中。
  2. 介绍了两个优化版本的 重线性化(relinearisation),它不仅拥有一个较小的重线性化密钥,而且具有更快的计算。
  3. 对于各种同态操作,如乘法、重线性化、bootstrapping 提供了一个详细但简单的分析,并给出了这些操作引起的 噪声的最坏情况界限
  4. 介绍了通过 模数切换技巧 (modulus switching trick),大大简化了 bootstrapping 步骤的分析。

二、引言

1、FHE 一般分为三个逻辑部分

  1. 首先,构造一个 SWHE,它可以支持有限次的同态操作
  2. 然后,尽可能简化该方案的解密代价,通过 squashing
  3. 最后,通过 bootstrapping,获得具有固定固有噪声大小的密文

2、噪声的管理

 所有现有的方案的共同特点,在加密过程中添加一个 小的“噪声”组件。 在密文上进行 同态计算将导致这些噪声增长,特别是 同态乘法,待到噪声增长到一定程度时,解密算法将失败。

 Gentry的 bootstrapping 方法可以用来将密文中的噪声降低到 由解密电路的复杂性决定的固定级别

  1. 在 Clear 的密文 (带有噪声 E) 上评估深度为 n 的电路会产生噪声为 E 2 n E^{2^n} E2n
  2. 在之后的某篇文献中,将深度为 n 的电路的噪声降低到了 E n E^n En
  3. 再之后,通过改进,深度为 n 的电路的噪声水平降低到了 E ⋅ c ( λ ) n E \cdot c(\lambda)^n Ec(λ)n

 但是,这该是不足以支撑工业级使用。

3. 贡献点

  1. 它的简单性,由于我们采用了“接地气”的方法,因此任何多余的数学机制 (可能是非常优雅美丽的) 都被省略了。
  2. 将 Brakersk 的方案从 LWE 移植到 RLWE 中。
  3. 对各种同态运算进行了详细而简单的分析,并推导出了这些运算所引起噪声最坏情况的严格界限。
  4. 使用一个简单的模数转换技巧,我们简化了 bootstrapping 步骤的分析。
  5. 在此基础上,结合方案 [14],对方案进行了实际的安全分析,最终得到了给定安全级别的全同态方案的具体参数。
  6. 提供了两个新版本的重线化。

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 As+e,其中:

  • A 是一个已知矩阵
  • s 是未知的秘密向量
  • e 是一个小的错误向量,通常是随机的

 目标是通过已知的 A ⋅ s + e A \cdot s + e As+e 来恢复 s,即从带有噪声的线性方程中恢复秘密 s。
 LWE 问题的难度在于:即使知道 A 和 A ⋅ s + e A \cdot s + e As+e,也无法有效地从中恢复出秘密 s(尤其当错误 e 是一个随机小数时)。这种难度是基于数学中的格问题。

2. RLWE 问题

 RLWE 是 LWE 的一种改进形式,主要通过引入 环结构 来提高 计算效率。RLWE 问题可以表示为一下形式:

  1. 首先给定一些参数
    • 一个环 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 sRq,它通常从某种分布 χ \chi χ(通常是离散高斯分布)中随机选择。
    • χ \chi χ 是一个分布,用来生成噪声项 e,该噪声项是由环 R q R_q Rq 中的元素通过 χ \chi χ 随机生成的。

可以看出 R q R_q Rq 是一个模 q 的有限多项式环。
χ \chi χ 中的元素是多项式还是整数还是什么?
有提到,“该噪声项是由环 R q R_q Rq 中的元素通过 χ \chi χ 随机生成的”,这句话的含义是 e 是 R q R_q Rq 中的多项式元素。

  1. 加密过程
     对于一个秘密向量 s 和一个随机选择的元素 a ∈ R q a \in R_q aRq,选择一个噪声项 e ∈ χ e \in \chi eχ,加密的输出是一个二元组 ( a , [ a ⋅ s + e ] q ) (a, [a \cdot s + e]_q) (a,[as+e]q),其中:
    • a 是环 R q R_q Rq 中的一个随机元素。
    • s ⋅ a s \cdot a sa 是 s 和 a 的乘积,并且这个乘积是加上一个噪声项 e 后,再对模数 q 取模。
  2. RLWE 问题的任务 (Decision-RLWE Problem)
     判断该二元组是来自加密过程(即 ( a , [ a ⋅ s + e ] q ) (a, [a \cdot s + e]_q) (a,[as+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,[as+e]q) 是不是随机选取的。
  3. 为什么 RLWE 很重要
    • 加密安全性:抗量子攻击
    • 高效的同态加密:RLWE 被广泛用于构造同态加密方案。RLWE 的结构使得这种加密技术变得更为高效。
    • 环结构优化:与传统的 LWE 问题相比,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 aRq, eχOutput pk=([(as+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 mRtLet p0=pk[0], p1=pk[1]Sample u,e1,e2χReturn ct=([p0u+e1+Δm]q,[p1u+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+c1s]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+c1s]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) 通过上面给出的ctpk可以计算出[c0+c1s]q=Δm+(e1+e2seu)然后用 v 表示 (e1+e2seu)其中, ∣ ∣ v ∣ ∣ ≤ 2 ⋅ δ R ⋅ B 2 + B ||v|| \le 2 \cdot \delta_R \cdot B^2+B ∣∣v∣∣2δRB2+B。这意味着当 2 ⋅ δ R ⋅ B 2 + B < Δ / 2 2 \cdot \delta_R \cdot B^2 + B < \Delta /2 2δRB2+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.SHLPR.ES 的密钥生成、加密、解密过程完全相同,只不过使用了上一章中的 优化/假设1 u , s ← R 2 u,s \larr R_2 u,sR2 进行优化。FV.SHLPR.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+c1s]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+c1s,其中 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+c1s]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,1s]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ϵtr其中, ϵ = 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+tr。注意 ∣ ∣ 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 ϵtr 是怎么来的:

  • ϵ \epsilon ϵ 表示一个小于1的量,它是由于加法操作中出现的四舍五入误差。
  • t ⋅ r t \cdot r tr 是由于取模 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,1s=Δmi+vi+qri

关于这里的表示,为什么比之前的表示多了一个 q ⋅ r i q \cdot r_i qri
实际上和取模相关,上面式子中的 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 (ct1ct2)(s)=c0+c1s+c2s2               (2)=Δ2m1m2+Δ(m1v2+m2v1)+q(v1r2+v2r1)+v1v2+qΔ(m1r2+m2r1)+q2r1r2上述表达式显示,为了恢复一个密文表示 [ m 1 ⋅ m 2 ] t [m_1 \cdot m_2]_t [m1m2]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+c1x+c2x2,那么我们使用以下 近似
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(ct1ct2)(s)=qtc0+qtc1s+qtc2s2+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+c1x+c2x2 是怎么来的,实际上就是把 多项式表示的密文 相乘了。

 如果我们写 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 m1m2=[m1m2]t+trm,则 ∣ ∣ 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 v1v2=[v1v2]Δ+Δ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Δ=qrt(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(ct1ct2)(s)=Δ[m1m2]t+(m1v2+m2v1)+t(v1r2+v2r1)+rv+(qrt(q))(rm+m1r2+m2r1)+qtr1r2+qt[v1v2]Δqrt(q)(Δm1m2+(m1v2+m2v1)+rv)

这个式子是使用了上面提到的 m 1 ⋅ m 2 m_1 \cdot m_2 m1m2 v 1 ⋅ v 2 v_1 \cdot v_2 v1v2 代入到式子 (2) 中获得的。
下面会将最后一行表示为 r r r_r rr,它是由于 q ≫ t , q ≫ [ q ] t q \gg t,q \gg [q]_t qt,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 [qtc0+qtc1s+qtc2s2]q=Δ[m1m2]t+(m1v2+m2v1)+t(v1r2+v2r1)+rvrt(q)(rm+m1r2+m2r1)+rrra很容易对右侧的 新噪声项 的大小进行 界定,从而最终得出以下引理。

  • 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+c1x+c2x2,则:
    [ ∣ 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 [qtc0+qtc1s+qtc2s2]q=Δ[m1m2]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δRtE(δR∣∣s∣∣+1)+2t2δR2(∣∣s∣∣+1)2
    • 噪声增长:
       引理表明,在进行密文乘法时,噪声不会呈二次增长,而是大致由因子 2 ⋅ t ⋅ δ R 2 ⋅ ∣ ∣ s ∣ ∣ 2 \cdot t \cdot \delta^2_R \cdot ||s|| 2tδ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+c1s+c2s2]q=[c0+c1s+r]q其中, ∣ ∣ s ∣ ∣ ||s|| ∣∣s∣∣ 是小的。
 由于 s 2 s^2 s2 是未知的,一个 初步的想法 是提供一个 s 2 s^2 s2masked 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) Samplea0Rq, e0χOutput rlk:=([(a0s+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]se0 的形式。带入到原来含有三个项的密文结构中,就会去掉第三个项,并引入一个噪声)
 然而,问题在于,由于 c 2 c_2 c2 R q R_q Rq 中的随机元素,噪声 e 0 e_0 e0 会被放大,导致产生一个对 c 2 ⋅ s 2 c_2 \cdot s^2 c2s2 的不太好的近似 (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=0lTic2(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 Tis2 的 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=[([(ais+ei)+Tis2]q,ai):i[0...l]]

这里 R T R_T RT 是一个比较小的环。因为有提到 “将 c2 切分成若干 小范数的部分”。

  • 假设2
     请注意,重线性化密钥 rlk 包含的 T i ⋅ s 2 T^i \cdot s^2 Tis2 的掩蔽版本 既不是 RLWE 分布的真实样本,也不是 T i ⋅ s 2 T^i \cdot s^2 Tis2 的真实加密。这个事实为我们的方案引入了一个额外的假设,即 在对手可以访问 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=0lrlk[i][0]c2(i)]q          c1=[c1+i=0lrlk[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+c1s=c0+c1s+c2s2i=0lc2(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=0lc2(i)ei上述推导还表明,T 对重线性化有以下影响:

  • s

  1. On Ideal Lattices and Learning with Errors over Rings ↩︎


http://www.ppmy.cn/news/1575514.html

相关文章

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

提到飞行记录器&#xff0c;或许你的脑海中并未立刻浮现出清晰的画面&#xff0c;但一说起“黑匣子”&#xff0c;想必大多数人都能恍然大悟&#xff0c;知晓其重要性及用途。在航空领域&#xff0c;黑匣子作为不可或缺的设备&#xff0c;默默记录着飞行过程中的每一项关键数据…

一种数据高效具身操作的原子技能库构建方法

25年1月来自京东、中科大、深圳大学、海尔集团、地平线机器人和睿尔曼智能科技的论文“An Atomic Skill Library Construction Method for Data-Efficient Embodied Manipulation”。 具身操控是具身人工智能领域的一项基本能力。尽管目前的具身操控模型在特定场景下表现出一定…

本地搭建Koodo Reader书库结合内网穿透打造属于自己的移动图书馆

文章目录 前言1. Koodo Reader 功能特点1.1 开源免费1.2 支持众多格式1.3 多平台兼容1.4 多端数据备份同步1.5 多功能阅读体验1.6 界面简洁直观 2. Koodo Reader安装流程2.1 安装Git2.2 安装Node.js2.3 下载koodo reader 3. 安装Cpolar内网穿透3.1 配置公网地址3.2 配置固定公网…

Ollama使用笔记【更新ing】

0.引言 本篇以自己的学习轨迹为主&#xff0c;记录有关ollama的技术和理论问题。 1.Ollama是什么&#xff1f; 上图为ollama官方logo。Ollama 是一个专注于本地部署大型语言模型的工具&#xff0c;通过提供便捷的模型管理、丰富的预建模型库、跨平台支持以及灵活的自定义选项…

【Java】多线程和高并发编程(一):线程的基础概念

文章目录 一、线程的基础概念1、基础概念1.1 进程与线程1.2 多线程1.3 串行、并行、并发1.4 同步异步、阻塞非阻塞 2、线程的创建2.1 继承Thread类 重写run方法2.2 实现Runnable接口 重写run方法2.3 实现Callable 重写call方法&#xff0c;配合FutureTask2.4 基于线程池构建线程…

23种设计模式之《外观模式(Facade)》在c#中的应用及理解

程序设计中的主要设计模式通常分为三大类&#xff0c;共23种&#xff1a; 1. 创建型模式&#xff08;Creational Patterns&#xff09; 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提供全局访问点。 工厂方法模式&#xff0…

如何免费使用稳定的deepseek

0、背景&#xff1a; 在AI辅助工作中&#xff0c;除了使用cursor做编程外&#xff0c;使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1&#xff0c;也给了自己不少启示。但是由于官网稳定性很差&#xff0c;很多…

C ++内存管理

1. 内存分区 在 C 里&#xff0c;内存主要分为以下几个区域&#xff1a; 栈&#xff08;Stack&#xff09;&#xff1a;由编译器自动分配和释放&#xff0c;用于存储局部变量、函数参数和返回地址等。其特点是内存分配和释放速度快&#xff0c;遵循后进先出&#xff08;LIFO&am…