当前位置: 首页 > article >正文

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

文章目录

  • 一、摘要
  • 二、引言
    • 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 重线性化 (第二步)


一、摘要

  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 χ 随机生成的。
  2. 加密过程
     对于一个秘密向量 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 取模。
  3. 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) 是不是随机选取的。
  4. 为什么 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
 然而,问题在于,由于 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。


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

相关文章:

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

文章目录 一、摘要二、引言1、FHE 一般分为三个逻辑部分2、噪声的管理3. 贡献点4. 文章思路 三、基础数学知识四、基于 RLWE 的加密1. LWE 问题2. RLWE 问题3. RLWE 问题的难度和安全性 五、加密方案1. LPR.ES 加密方案2. Lemma 1 (引理 1)3. Optimisation/Assumption 1 (优化/…...

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)

目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充&#xff1a;设置新建类/接…...

DeepSeek本地部署与Dify结合创建私有知识库指南

python调用本地deepseek+Dify的API使用--测试WX自动发送信息-CSDN博客 DeepSeek,一家在人工智能领域具有显著技术实力的公司,凭借其千亿参数规模的AI大模型,以及仅需0.5元人民币即可进行百万tokens的API调用成本,已经取得了令人瞩目的成就。不仅如此,DeepSeek的模…...

Nginx 报错:413 Request Entity Too Large

做web开发时&#xff0c;对于上传附件的功能&#xff0c;如果nginx没有调整配置&#xff0c;上传大一点的文件就会发生下面这种错误&#xff1a; 要解决上面的问题&#xff0c;只需要调整Nginx配置文件中的 client_max_body_size 参数即可&#xff0c;这个配置参数一般在http配…...

Arduino项目实战:使用MQ-2气体传感器与OLED屏幕监测环境气体

概述 在这个项目中,MQ-2气体传感器是一个多功能的气体检测设备,能够感知多种常见气体,如甲烷、丁烷、丙烷、酒精和烟雾等。你可以把它想象成一个超级灵敏的“嗅觉”,能够帮助你实时检测环境中的各种有害气体。与Arduino板连接后,MQ-2传感器把捕捉到的气体浓度数据传送给A…...

泛微Ecode新增Button调用服务器中的JSP页面里的方法

前言 前端Ecode调用 后端接口编写 JSP文件方法 总结 前言 因为我们是从之前E8版本升级到E9的&#xff0c;所以会有一些接口是通过jsp文件来实现前后端调用的&#xff0c;这里介绍的就是如果你有接口是写在jsp文件里面调用的&#xff0c;但是你又想在Ecode中调用的对应的接…...

C#实现本地Deepseek模型及其他模型的对话

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…...

【ESP32S3接入讯飞在线语音识别】

视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度...

【51单片机】快速入门

动手实践 > 理论空谈&#xff01;从点亮LED开始&#xff0c;逐步扩展功能&#xff0c;2周可入门基础。 一、51单片机基础概念 什么是51单片机&#xff1f; 基于Intel 8051架构的8位微控制器&#xff0c;广泛用于嵌入式开发。 核心特性&#xff1a;4KB ROM、128B RAM、32个…...

leetcode707----设计链表【链表增删改打印等操作】

目录 一、题目介绍 二、单链表 2.1 创建链表类 2.1.1 定义链表节点结构体代码块 2.1.2 MyLinkedList类的构造函数 2.1.3 私有成员变量 2.2 接口1&#xff1a;获取第下标为index的节点的值 2.3 接口2&#xff1a;头部插入节点 2.4 接口3&#xff1a;尾部插入节点 2.5 接…...

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候&#xff0c;通过命令行注册相应的服务&#xff08;比如cloudwego项目的demo_proto以及user服务&#xff09;失败。 解决办法 经过分析&#xff0c;是…...

【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手

缓存雪崩与缓存穿透&#xff1a;高并发系统的隐形杀手 在高并发系统中&#xff0c;缓存是提升性能的重要手段。然而&#xff0c;缓存使用不当也会带来一系列问题&#xff0c;其中最常见的就是缓存雪崩和缓存穿透。这两个问题如果不加以解决&#xff0c;可能会导致系统崩溃&…...

网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析

1. 基本定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 应用层协议&#xff0c;用于客户端与服务器之间的数据传输&#xff08;默认端口 80&#xff09;。 HTTP/1.0&#xff1a;早期版本&#xff0c;每个请求需单独建立 TCP 连接&#xff0c;效率低。HTTP/1.1&…...

DeepSeek实现FunctionCalling调用API查询天气

什么是FunctionCalling Function Calling&#xff08;函数调用&#xff09;是大型语言模型&#xff08;如 OpenAI 的 GPT 系列&#xff09;提供的一种能力&#xff0c;允许模型在生成文本的过程中调用外部函数或工具&#xff0c;以完成更复杂的任务。通过 Function Calling&am…...

从 Spring Boot 2 升级到 Spring Boot 3 的终极指南

一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11&#xff0c;需按以下步骤操作&#xff1a; 安装 JDK 17&#xff1a;从 Oracle 或 OpenJDK 官网下载&#xff0c;配置环境变量&#xff08;如 JAVA_HOME&…...

C#设计模式深度解析:经典实现与现代演进 ——基于《设计模式》的.NET技术实践

一、设计模式与C#语言特性融合 C#凭借其面向对象特性、泛型、委托/事件、LINQ等能力&#xff0c;为设计模式提供了更优雅的实现方式。以下通过典型模式展现其技术融合&#xff1a; 1. 工厂方法模式 泛型约束 public interface IProduct<T> where T : new() {void O…...

原子性(Atomicity)和一致性(Consistency)的区别?

原子性&#xff08;Atomicity&#xff09;和一致性&#xff08;Consistency&#xff09;是数据库事务ACID特性中的两个核心概念&#xff0c;虽然它们密切相关&#xff0c;但解决的问题和侧重点完全不同。原子性关注事务的操作完整性&#xff0c;而一致性关注数据的逻辑正确性。…...

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…...

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型&#xff0c;有些能生成PPT内容&#xff1b; 有些能生成PPT&#xff0c;但下载需要付费&#xff1b; 目前只有Kimi生成的PPT&#xff0c;能选择模板、能在线编辑、能下载&#xff0c;关键全部免费&#xff01; 一、用kimi生成PP…...

一款在手机上制作电子表格

今天给大家分享一款在手机上制作电子表格的&#xff0c;免费好用的Exce1表格软件&#xff0c;让工作变得更加简单。 1 软件介绍 Exce1是一款手机制作表格的办公软件&#xff0c;您可以使用手机exce1在线制作表格、工资表、编辑xlsx和xls表格文件等&#xff0c;还可以学习使用…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.3.1单节点安装(Docker与手动部署)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 10分钟快速部署Elasticsearch单节点环境1. 系统环境要求1.1 硬件配置推荐1.2 软件依赖 2. Docker部署方案2.1 部署流程2.2 参数说明2.3 性能优化建议 3. 手动部署方案3.1 安…...

7 天精通 DeepSeek 实操手册

挑战目标 从零基础开始&#xff0c;用 7 天时间&#xff0c;精通 DeepSeek 实操。 对零基础的同学来说&#xff0c;要全部完成这个挑战并不容易。因此&#xff0c;我们提供了每天的学习目标和实操任务&#xff0c;并提供三大锦囊助你一臂之力&#xff1a; 针对常见问题的解决…...

过滤器 二、过滤器详解

过滤器生命周期&#xff1a; init(FilterConfig)&#xff1a;在服务器启动时会创建Filter实例&#xff0c;并且每个类型的Filter只创建一个实例&#xff0c;从此不再创建&#xff01;在创建完Filter实例后&#xff0c;会马上调用init()方法完成初始化工作&#xff0c;这个方法…...

【Mac电脑本地部署Deepseek-r1:详细教程与Openwebui配置指南】

文章目录 前言电脑配置&#xff1a;安装的Deepseek版本&#xff1a;使用的UI框架&#xff1a;体验效果展示&#xff1a;本地部署体验总结 部署过程Ollama部署拉取模型运行模型Openwebui部署运行Ollama服务在Openwebui中配置ollama的服务 后话 前言 deepseek最近火的一塌糊涂&a…...

网络安全学习中,web渗透的测试流程是怎样的?

渗透测试是什么&#xff1f;网络安全学习中&#xff0c;web渗透的测试流程是怎样的&#xff1f; 渗透测试就是利用我们所掌握的渗透知识&#xff0c;对网站进行一步一步的渗透&#xff0c;发现其中存在的漏洞和隐藏的风险&#xff0c;然后撰写一篇测试报告&#xff0c;提供给我…...

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹&#xff0c;用于放置调试文件以及你未来写的代码&#xff0c;随便命名但…...

【MySQL篇】表的操作

1&#xff0c;创建表 语法&#xff1a; create table ( field1 datatype, field2 datatype, field3 datatype )charset 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field表示列名datatype表示列的类型charset字符集&#xff0c;如果没有指明&#xff0c;则…...

第6_7章_管理权限评估和测试策略

管理权限 权限将受保护的对象与必须评估以决定是否应授予访问权限的策略相关联。 在创建要保护的资源以及要用于保护这些资源的策略后&#xff0c; 您可以开始管理权限。要管理权限&#xff0c;请在编辑资源服务器时单击 Permissions 选项卡。 可以创建权限来保护两种主要类…...

2025年网校系统源码开发趋势:技术革新的教育培训APP搭建实战

2025年&#xff0c;随着AI、大数据、云计算等技术的深度融合&#xff0c;网校教育系统的源码开发也迎来了新的发展趋势。本文将深入探讨这些趋势&#xff0c;并结合教育培训APP的开发实战&#xff0c;展示如何应对未来的技术挑战。 一、2025年网校教育系统源码的技术趋势 AI驱…...

Linux驱动开发实战(一):LED控制驱动详解

Linux驱动开发野火实战&#xff08;一&#xff09;&#xff1a;LED控制驱动详解 文章目录 Linux驱动开发野火实战&#xff08;一&#xff09;&#xff1a;LED控制驱动详解引言一、基础知识1.1 什么是字符设备驱动1.2 重要的数据结构read 函数write 函数open 函数release 函数 二…...