《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 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978598.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM共享充电宝系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

Android 常用命令和工具解析之存储相关

1 基本概念 2 命令解读 2.1 adb shell df df 命令主要用于需要检查文件系统上已使用和可用的磁盘空间的数量。如果没有指定文件名&#xff0c;则显示在当前所有挂载的文件系统上可用的空间。其原理是从proc/mounts 或 /etc/mtab 中检索磁盘信息。 注意&#xff1a;df命令并…

51单片机编程学习笔记——LED原理图

大纲 概览LED电路图Resistor Pack3位数电阻表示法VCC 在《51单片机编程学习笔记——编译代码点亮LED》一文中&#xff0c;我们通过下面这段代码点亮了D1和D2两个LED灯。 sbit LED1P2^0; //将P2.0管脚定义为LED1 sbit LED2P2^1; //将P2.1管脚定义为LED2 …… LED10; LED20;那么…

测试的BUG分析

在了解BUG之前,我们要先了解软件测试的生命周期,因为大多数BUG都是在软件测试的过程中被发现的 软件测试的生命周期 在了解 软件测试的生命周期 之前,我们要先了解 软件的生命周期 ,虽然他们之间只差了两个字,但是差距还是很大的 首先是 软件生命周期 ,这个是站在 软件 的角…

vue3+ts实现动态下拉选项为图标

功能&#xff1a;实现可配置项&#xff0c;下拉选项为图标&#xff0c;如图&#xff1a; 代码如下&#xff1a; <el-select v-model"BuyVolAcc" size"small" style"width: 100%" class"icon-selector"><el-option v-for&qu…

C语言(15)-------------->一维数组

这篇文章介绍的是数组的定义、创建、初始化、使用&#xff0c;在数组中输入内容并输出数组中的内容&#xff0c;并探讨了数组在内存中的存储。里面有些内容建议大家参考下面的一些文章&#xff0c;有助于加深大家对于C语言的理解&#xff1a; C语言&#xff08;2&#xff09;-…

RISCV指令集解析

参考视频&#xff1a;《RISC-V入门&进阶教程》1-4-RV32I基本指令集&#xff08;1&#xff09;_哔哩哔哩_bilibili privilege是特权指令集&#xff0c;有点系统调用的感觉&#xff0c;要走内核态。unprivilege指令集有点像普通的函数调用。

2.27 链表中等 817

817. Linked List Components class Solution { public:int numComponents(ListNode* head, vector<int>& nums) {// 将 nums 存储到一个 unordered_set 中&#xff0c;方便 O(1) 查找unordered_set<int> numSet(nums.begin(), nums.end());int count 0;bool …

NFC拉起微信小程序申请URL scheme 汇总

NFC拉起微信小程序&#xff0c;需要在微信小程序开发里边申请 URL scheme &#xff0c;审核通过后才可以使用NFC标签碰一碰拉起微信小程序 有不少人被难住了&#xff0c;从微信小程序开发社区汇总了以下信息&#xff0c;供大参考 第一&#xff0c;NFC标签打开小程序 https://de…

rustdesk远程桌面自建服务器

首先&#xff0c;我这里用到的是阿里云服务器 centos7版本&#xff0c;win版客户端。 准备工作 centos7 服务器端文件&#xff1a; https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip win版客户端安装包&#xff1…

ERROR “GET /mobiles/13344444444/count/ HTTP/1.1“ 500 63503

背景&#xff1a; 美多的&#xff0c;这个问题我不知道那个老师为啥没讲&#xff0c;我直接去看了他的源码发现可恶&#xff0c;直接啥也没有&#xff0c;关键是他竟然跑的通 早知道用postman代替这个该死的刷新就好了&#xff0c;我写了差不多20多次 view.py的 class Mobile…

LabVIEW 项目长时间稳定运行注意事项

利用 LabVIEW 开发的上位机显示界面通过网络与数字板实现数据通讯&#xff0c;运行一周左右会出现一次数据掉线&#xff08;数据采集不上来&#xff09;&#xff0c;需重新 Connect 才能恢复的问题。 出现这种情况&#xff0c;可能是以下几方面原因导致&#xff1a; 网络通讯方…

MYSQL学习笔记(十):约束介绍(如:非空、唯一、主键、外键、级联、默认、检查约束)

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇讲解“约束”&#xff0c;如&#xff1a;非空、唯一、主键、外键、级联、默认…

打印九九乘法表

打印九九乘法表 package struct; ​ public class ForDemo04 {public static void main(String[] args) { ​for (int i 1; i < 9; i) {//System.out.println(1"*"i""(1*i));for (int j 1; j < i; j) {System.out.print(i"*"j"&qu…

实时时钟(RTC)/日历芯片PCF8563的I2C读写驱动(2):功能介绍

0 参考资料 PCF8563数据手册&#xff08;第 11 版——2015 年 10 月 26 日&#xff09;.pdf 1 功能介绍 1.1 实时时钟&#xff08;RTC&#xff09;/日历 &#xff08;1&#xff09;PCF8563支持实时时钟&#xff08;RTC&#xff09;&#xff0c;提供时、分、秒信息。对应寄存器…

Hadoop完全分布式安装配置

Hadoop完全分布式安装配置 Hadoop完全分布式安装配置 使用的三台主机名称分别为bigdata1&#xff0c;bigdata2&#xff0c;bigdata3。所使用的安装包名称按自己的修改&#xff0c;安装包可去各大官网上下载* 一.JDK: 1.解压&#xff1a; tar -zxvf /opt/software/jdk-8u212…

TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整

2025年春节假期已过&#xff0c;大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化&#xff0c;我们很高兴地宣布&#xff1a;TinyEngine v2.2版本正式发布&#xff01;本次更新带来了重要的功能增强------页面支持嵌套路由&#…

图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)

本文主要介绍了灰度直方图相关的处理&#xff0c;包括以下几个方面的内容&#xff1a; • 利用OpenCV计算图像的灰度直方图&#xff0c;并绘制直方图曲线 • 直方图均衡化的原理及实现 • 直方图规定化&#xff08;匹配&#xff09;的原理及实现 图像的灰度直方图 一…

C++-第十二章: AVL树

目录 第一节&#xff1a;AVL树的特征 第二节&#xff1a;实现思路 2-1.插入 2-1-1.右单旋 2-1-2.左单旋 2-1-3.左右双旋 2-1-4.右左双旋 2-1-5.总结 2-2.删除 第三节&#xff1a;代码实现 3-1.Node类 3-2.AVLTree类 3-2-1.Insert函数 3-2-2.Height函数 3-2-3.Balance函数 3-…

学习路程八 langchin核心组件 Models补充 I/O和 Redis Cache

前序 之前了解了Models&#xff0c;Prompt&#xff0c;但有些资料又把这块与输出合称为模型输入输出&#xff08;Model I/O&#xff09;‌&#xff1a;这是与各种大语言模型进行交互的基本组件。它允许开发者管理提示&#xff08;prompt&#xff09;&#xff0c;通过通用接口调…