HEAAN自举:近似同态加密的突破

近似同态加密的自举

1 引言

同态加密(HE)是一种密码方案,允许我们在无需解密的情况下对加密数据进行任意算术电路的计算。自Gentry的蓝图[26]以来,已有大量研究[5–9,11,16,19,22,25,30,31]致力于提升HE密码系统的效率。这一密码学原语基于在公共云中安全外包计算,具有众多潜在的实际应用。例如,HE可以在不造成任何信息泄露的情况下,对金融、医疗或基因组数据执行各种算法的计算[15,36,38,39,41]。

遗憾的是,大多数现有的同态加密方案支持在某些离散空间(例如有限域)上的精确算术运算,因此它们不适用于许多需要浮点运算或实数算术的实际应用。具体来说,bitwise encryption schemes[17,24]可以通过自举以更短的时间评估布尔门,但要对高精度数进行单个算术运算(例如加法或乘法),需要评估包含大量门的深度电路。此外,密文的膨胀率巨大是阻碍按位加密实际应用的另一个问题。另一方面,word encryption schemes[6,7,25,30]可以将多个高精度数加密到单个密文中,但由于舍入操作无法表示为低次多项式,因此难以进行评估。因此,它们要么需要明文空间的位大小相对于电路深度呈指数级增长,要么需要执行诸如舍入操作和提取最高有效位之类的昂贵计算。

最近,崔等人[14]提出了一种用于近似数算术的同态加密方案(下文称为 HEAAN),该方案基于带错误环学习(RLWE)问题。其主要思想是将加密误差视为近似计算过程中产生的计算误差的一部分。对于用私钥sk加密消息 m得到的密文ct,解密算法[〈ct, sk〉]q会输出原始消息的一个带有小误差 e的近似值 m+ e。HEAAN的主要优势来自于一种用于管理明文幅度的重缩放过程。该过程将密文截断为更小的模数,从而对加密的明文实现近似舍入。因此,与以往字加密方案中的指数增长相比,它首次实现了在被评估电路深度上的密文模数线性增长。此外,基于RLWE的HEAAN方案拥有自己的打包策略,可在一 个密文中加密多个复数,并进行并行计算。然而,HEAAN是一种层级化同态加密方案,只能评估固定深度的电路。随着同态操作的进行,密文模数不断减小,最终变得过小而无法继续执行更多计算。

在以往的文献中,Gentry的自举是唯一已知的构造全同态加密(FHE)方案的方法,该方法允许我们评估任意电路。从技术上讲,自举方法可以理解为对解密电路进行同态评估以刷新密文,从而支持更多计算。HEAAN方案不支持模运算,然而其解密电路[〈ct,sk〉]q需要模约减操作,这使得其自举更加困难。因此,HEAAN的自举可归结为一个问题:将模约减函数 F(t)=[t]q表示为整数(或复数)上的多项式。人们可以使用该函数在 t= 〈ct,sk〉定义域上的多项式插值,但由于评估时的巨大计算成本,这对实际实现是一个限制因素。

我们的贡献

我们提出了一种刷新HEAAN密文的方法,使其能够支持任意电路计算的自举。我们利用了其固有的特性——在加密数据上的近似计算。我们的自举过程旨在近似地计算解密公式,并获得一个在较大规模下对原始消息的加密密文模数。因此,我们找到了一种模约减函数的逼近方法,该方法可以使用 HEAAN的算术运算高效地进行计算。近似误差应足够小,以保持输入明文的精度。

我们首先注意到模约减函数 F(t)=[t]q在零附近是恒等函数,并且以 q为周期。如果 t= 〈ct,sk〉接近密文模数 q的倍数(或者等价地说,如果加密的明文 m=[t]q相比 q较小),那么三角函数可以很好地逼近模约减。也就是说, HEAAN 的解密公式可以用以下缩放的 sine函数表示为
$$
[\langle ct, sk\rangle]_q = \frac{q}{2\pi} \sin\left(\frac{2\pi}{q}\langle ct, sk\rangle\right)
$$
当 $|\langle ct,sk\rangle| \leq \varepsilon \cdot q$时成立。因此,我们可以在解密公式中使用该解析函数来替代模约减。

现在我们的目标是同态计算输入为 t= 〈ct, sk〉的三角函数 $ \frac{q}{2\pi} \cdot \sin\left(\frac{2\pi}{q} \cdot t\right) $,其中输入被限制在 Kq以内,其中 K= O(λ) 是安全参数。我们可以考虑使用泰勒多项式来逼近该三角函数,但为了使区间(−Kq, Kq)上的误差项足够小,其次数至少应为 O(Kq)。利用帕特森‐斯托克迈耶方法,多项式的计算可在 O(√Kq) 次同态乘法内完成,但这种重加密的复杂度随着解密电路的深度 L= O(log q) 呈指数增长——这仍然相当可观。

我们建议一种三角函数的评估策略,通过利用以下倍角公式来降低其计算成本:
$$
\begin{cases}
\cos(2\theta) = \cos^2 \theta - \sin^2 \theta, \
\sin(2\theta) = 2 \cos\theta \cdot \sin\theta,
\end{cases}
$$
这意味着我们可以从cos θ和sinθ的近似值得到cos(2θ)和sin(2θ)的一些近似值。

在我们的自举过程中,我们首先计算低次数d0= O(1)的cos (2π/t 2r)和sin (2π/t 2r)的泰勒展开,其中 r= O(log(Kq))。然后我们递归地使用倍角公式 r次,以获得sin (2π/t)的近似值。对于基于RLWE的构造,可以通过加密复指数exp(iθ) = cos θ+ i · sinθ并利用恒等式exp(i · 2θ) =(exp(i · θ))2来进一步简化该计算。

结果

我们针对HEAAN的自举技术是一种全新的全同态加密机制密码学原语,由此实现了首个用于近似算术的字加密方案。对于模数为 q的密文ct,我们的自举过程生成一个具有更大密文模数 Q≫ q的密文ct′,满足条件[〈ct′,sk〉]Q ≈[〈ct,sk〉]q ,同时保持误差e足够小不会破坏明文的有效数字。输出的密文将具有相对于明文足够大的模数,从而允许对密文进行进一步计算。此外,我们对三角函数的近似以及高效评估策略将评估的复杂度降低至 O(L)次同态乘法,适用于深度为 L= O(log q)的解密电路。

我们还提供了一个开源实现[12]以展示我们自举方法的性能。其中包含一些优化技术,包括用于打包密文重加密的[33]线性变换方法。当需要保持12位精度时,对单槽密文进行自举大约需要26.6秒。我们还针对稀疏打包密文优化了线性变换,对在明文槽中加密了128个复数的密文进行重加密大约需要139.8 秒,从而实现了每槽1.1秒的摊销速率。

我们自举方法的影响

近似算术的主要特征是每个数都包含一个误差,该误差在计算过程中可能会增加。一个数的精度在每次乘法运算后大约减少一位,最终如果电路深度大于输入数据的比特精度,则可能无法从计算结果中提取任何有意义的信息。另一方面,我们的自举过程旨在刷新密文,然后对加密数据执行进一步计算。这种无限计算的概念似乎与近似算术中有限精度的性质相矛盾。

然而,对于具有负反馈或稳定性特性的实际应用而言,这种方法更为合适。

例如,信息物理系统(CPS)是物理组件与计算组件的集成机制。其中的计算单元与传感器进行通信,每个信号都包含微小的误差e。只有当系统具备稳定性时,才能保证信息物理系统(CPS)的正确性,因为通过输入端的负反馈可以减小误差e。另一个例子是梯度下降法,这是执行优化任务中最广泛使用的算法。它在机器学习中有诸多应用,如逻辑回归和神经网络。该方法通过计算某一点的梯度,并将其向最优解移动,从而减小输出中扰动的影响。

与上面的示例一样,当整个系统稳定时,我们不必担心数值的精度问题。事实上,已有一些关于信息物理系统安全控制[35]以及使用生物医学数据进行安全逻辑回归的原理验证实现[37]。我们期望我们的自举过程可以应用于这些实际应用中。

相关工作

已有若干尝试使用同态加密进行近似算术运算。Downlin 等人[23](另见[4,21])提出了一种将实数转换为具有小且稀疏系数的多项式的方法,以减小所需明文模数的大小。Costache 等人[20] 提出了一种类似的编码方法,并结合[14] 高效地评估离散傅里叶变换,但一个密文只能加密一个值。陈等人[10] 使用[34] 的技术来加密单个高精度数。然而,这些方法仍存在一些问题: (1) 编码多项式的系数和次数随着电路深度呈指数增长;(2) 尚无已知结果能够实现全同态加密方案,因为为了进行更多计算,需要将多项式重新编码为更低次数和更小系数的形式,而[33] 的自举方法不足以支持该功能。

最初的Gentry的自举技术由Gentry和Halevi[27],实现,该技术重加密单比特密文需要半小时。Gentry等人[28]使用特殊模空间将基于RLWE的同态加密的解密电路表示为低深度电路。Halevi‐Shoup的全同态加密实现[33]报告了每槽位约六分钟的重加密时间。与此同时,Ducas和Micciancio[24]提出了FHEW方案,该方案基于[2]框架在不到一秒的时间内对单比特加密进行自举。Chillotti等人[17]将其加速至不到0.1秒。后续工作[3,18]通过在自举前评估查找表的方式进一步提升了性能。然而,由于自举的输入明文大小受限于中间环 GSW方案的环维度,因此其规模非常有限。此外,密文的膨胀率巨大仍然是逐位加密方案中的一个开放问题。

之前的全同态加密方案在自举算法中利用有限域或多项式环的结构来计算精确的解密电路。对任意次数为 d的多项式的计算需要 O(√d) 次同态乘法,但Halevi和Shoup[33]使用具有提升性质的多项式来降低自举的计算成本。他们采用递归算法从加密状态中提取若干数位,从而将自举所需的同态乘法次数减少至 O(log₂ d)。与Halevi和Shoup的工作不同,我们使用三角函数构造了一个近似解密电路,并提出了一种更为简单的递归算法。因此,我们的算法仅需 O(log d) 次同态乘法,从而实现了性能的提升。

路线图

第 2节简要介绍符号和一些关于代数的预备知识。我们还回顾了崔等人提出的HEAAN方案。[14]第3节通过使用三角函数解释了我们简化的解密公式。在第4节中,我们回顾了HEAAN的密文打包方法,并描述了一种线性变换对打包密文的作用。在第5节中,我们提出了自举技术并进行了精确的噪声估计。在第6节中,我们基于所提出的方法实现了重加密过程,并讨论了性能结果。

2 预备知识

二进制对数将简记为 log(·)。我们用粗体表示向量,例如 a,本文中的每个向量都是列向量。对于一个 n₁ × m矩阵 A₁和一个 n₂ × m矩阵 A₂,(A₁; A₂) 表示通过在垂直方向上连接矩阵 A₁和 A₂得到的 (n₁+ n₂) × m矩阵。

我们用 〈·, ·〉表示两个向量的通常点积。对于实数r, r表示最接近 r的整数,在平局情况下向上取整。对于整数 q,我们将 Z ∩(−q/2, q/2]视为 Zq的一个代表,并使用[z]q表示将整数 z模 q约化到该区间内。我们用 x← D表示根据分布 D对 x进行采样。有限集合 S上的均匀分布记为 U(S)。本文中用 λ表示安全参数:所有已知针对当前密码方案的有效攻击都应耗费 Ω(2λ)位操作。

2.1 分圆环

对于正整数 M,设 ΦM(X) 为次数是 N= φ(M) 的第 M 个分圆多项式。令 R= Z[X]/(ΦM(X)) 表示数域 Q[X]/(ΦM(X)) 的整数环。我们将 Rq= R/qR记作 R 模整数 q 的剩余类环。集合 P= R[X]/(ΦM(X)) 中的任意元素将表示为一个次数严格小于 N 的多项式 a(X) =∑N−1 j=0 ajX j,并用其系数向量 a= (a₀,…, aₙ₋₁) ∈ R N 来标识。我们通过系数向量 a 上的相关范数来定义 ‖a‖∞ 和 ‖a‖₁ 。Z ∗ M={x ∈ ZM: gcd(x, M) = 1} 为 ZM 中的乘法单位元群。回顾 a(X) ∈ Q[X]/(ΦM(X)) 到 C N 的典范嵌入,它是 a(X) 在所有第 M 次本原单位根处取值所组成的向量。我们使用其到 P 上的自然扩展 σ,定义为 σ(a)=(a(ζj))j∈Z ∗ M,其中 ζ= exp (2πi/M)。其 ∞‐范数称为 典范嵌入范数,记作 ‖a‖can ∞ = ‖σ(a)‖∞。

2.2 用于近似数算术的同态加密

同态加密(HE)是用于安全外包计算且无信息泄露的有前景的密码学原语之一。然而,实数计算的低效率是将同态加密方案应用于实际应用中的主要障碍之一。最近,崔等人[14]提出了一种用于近似算术的同态加密方案构造方法,称为 HEAAN。该方案支持对加密的明文进行高效的舍入操作以及基本算术运算。本小节将具体描述基于RLWE的HEAAN方案。

对于实数 σ> 0, DG(σ²)表示在 ZN上的一种分布,其分量独立地从方差为σ²的离散高斯分布中采样。对于正整数 h, HWT(h)表示在{±1}N中汉明重量恰好为 h的带符号二进制向量集合上的均匀分布。对于实数 0 ≤ ρ ≤ 1, 分布 ZO(ρ)从{0,±1}中为向量的每个元素进行抽取,每个 −1和+1的概率分别为 ρ/2,为零的概率为1 − ρ。

  • KeyGen(1λ)
  • 对于基 p 和整数 L,令 q= p 对于 = 1,…, L。给定安全参数 λ,选择一个 2 的幂次 M、一个整数 h、一个整数 P 以及一个实数 σ> 0,用于实现具有 λ 位安全级别的 RLWE 问题。
  • 采样 s←HWT(h)、 a← U(RqL) 和 e← DG(σ²)。将私钥设为 sk ←(1, s),公钥设为 pk ←(b, a) ∈ R² qL,其中 b← −as+ e(mod qL)。
  • KSGensk(s′) 。对于 s′ ∈ R,采样 a′← U(RP·qL) 和 e′← DG(σ²)。输出转换密钥为 swk ←(b′, a′) ∈ R² P·qL,其中 b′ ← −a′s+ e′+ P s′(mod P · qL)。
  • 将计算密钥设为 evk← KSGensk(s²)。
  • Encpk(m) 。对于 m ∈ R,采样 v← ZO(0.5) 和 e₀、 e₁ ← DG(σ²)。输出 v · pk +(m+ e₀, e₁) (mod qL)。
  • Decsk(密文ct) 。对于密文ct =(c₀, c₁) ∈ R² q ,输出 m= c₀+ c₁ · s(mod q)。
  • Add(密文ct1,密文ct2) 。对于密文ct1,密文ct2 ∈ R² q ,输出密文ctadd ←密文ct1+密文ct2(mod q)。
  • Multevk(密文1, 密文2) 。对于密文ct1=(b₁, a₁),密文ct2=(b₂, a₂) ∈ R² q ,令 (d₀, d₁, d₂)=(b₁b₂, a₁b₂+ a₂b₁, a₁a₂) (mod q)。输出乘法密文 ctmult ←(d₀, d₁) +P⁻¹ · d₂ · evk(mod q)。
  • RS→′(ct) 。对于一个在层级 的密文 ct,输出 ct′ ← p ′ − ·ct(mod q′)。当 ′=−1 时,我们将省略下标 (→′)。

HEAAN的原生明文空间可以理解为复坐标空间 Z[X]/(ΦM(X))中满足 ‖m‖can ∞ < q/2的多项式 m(X)的集合。为了方便起见,我们允许将 P= R[X]/(ΦM(X))中的任意元素作为明文多项式,因此当密文ct =(c₀, c₁) ∈ R² q 在层级时,若存在满足‖e‖can ∞ ≤ B的多项式 e(X) ∈ P使得 〈ct, sk〉= m+ e (mod q)成立,则称其为对m(X) ∈ P的加密,且误差界为 B。集合 P= R[X]/(ΦM(X))可通过环同构与复坐标空间 C N/2建立对应关系。该解码映射允许我们在单个密文中加密最多(N/2)个数值,并以单指令多数据( SIMD)的方式执行并行运算。打包方法的简要描述将在第4.1节中给出。

我们将利用来自[14]的以下引理进行噪声估计。我们采用来自[14],的一些符号来定义常数 Bks和 Brs。

引理1 ([14,引理 1]) 。 设密文ct ←Encp k(m)是 m ∈ R的加密。则对于某个满足 ‖e‖ can ∞ ≤ B clean (Bclean = 8√2σN+ 6σ√N+ 16σ√hN)的 e ∈ R,有 〈密文ct,私钥sk 〉= m+ e(mod qL) 。

引理2 ([14,引理 2]) 。 设ct′← RS→′(ct) 为密文ct ∈ R² q。则存在满足 〈 ct′,sk〉= q′ q 〈ct,sk〉+ e(mod q′) 的 e ∈ P,使得 ‖e‖can ∞ ≤ Brs对 Brs=√N/3 ·(3+ 8√h)成立。

引理3 ([14,引理 3]) 。设ctmult← Multevk(ct1,ct2)为两个密文ct1,ct2 ∈ R² q的运算结果。则存在某个e ∈ R 满足 ‖emult‖can ∞ ≤ Bmult() 对 Bks= 8σN/√3 和 Bmult ()= P⁻¹ ·q · Bks+ Brs,使得 〈ctmult,sk〉= 〈ct1,sk〉 · 〈ct2, sk〉+ emult(mod q)。

重缩放(舍入)误差是同态操作中最小的误差类型。在乘法或重缩放之后,明文的最低有效位会被某些误差破坏,因此其有效数字应置于较高位,以避免结果明文的精度损失。

3 整数上的解密公式

自举的目标是刷新密文并继续对加密数据进行计算。回顾一下,HEAAN支持在特征为零的明文空间(例如 C)上执行算术运算。然而,其解密公式包含两个步骤:在整数上的内积 t= 〈ct,sk〉以及模约减 m=[t]q。因此,我们必须利用HEAAN方案中提供的同态操作高效地表达此解密公式。

主要困难在于,模约减函数F(t) =[t]q无法表示为低次多项式。若采用多项式插值等简单方法,会导致次数过高,从而需要更大的参数规模,并使自举过程的计算成本显著增加。相反,我们通过利用解密公式的多项式逼近并结合近似算术,有效降低了所需的电路深度和评估复杂度。

3.1 模约减函数的近似

设ct为相对于私钥sk和模数 q的密文。由于sk是从一个小分布中采样的,其解密结构 t= 〈ct,sk〉的大小被某个固定常数 K所限制 Kq。因此,我们可以说 HEAAN的解密公式定义在集合 Z ∩(−Kq, Kq)上,并将任意整数 t ∈ Z ∩(−Kq, Kq)映射到模 q的约简结果。

由于模约减函数不连续,因此很难找到该函数的良好近似。我们首先假设输入密文ct,sk〉的消息 m仍然远小于密文模数 q,使得 t= 〈可表示为 qI+ m,其中存在 I和 m,满足 |I| < K和 |m| q。这一假设是合理的,因为可以在密文的模数变得过小之前启动自举过程。然后进行模约减

reduction F(t)=[t]q在受限域上变为一个分段线性函数(见图1)。我们指出,该函数在零附近是恒等的且具有周期性,因此它看起来像是一段缩放正弦
$$
S(t)= \frac{q}{2\pi} \sin\left(\frac{2\pi t}{q}\right).
$$
注意,当输入值 t= qI+ m 接近 q 的倍数时,它对分段线性函数具有良好的近似效果。具体而言,F(t) 与 S(t) 之间的误差 e 被限制在
$$
|F(t)− S(t)| = \frac{q}{2\pi} \left| \frac{2\pi m}{q} − \sin\left(\frac{2\pi m}{q}\right)\right| \leq \frac{q}{2\pi} \cdot \frac{1}{3!}\left( \frac{2\pi|m|}{q}\right)^3 = O\left(q \cdot\frac{|m|^3}{q^3}\right),
$$
这等价于当 m= O(q²/³)时的 O(1)。

3.2 复指数函数的同态评估

如前所述,缩放正弦函数 S(t)是对模 q约减的一个良好近似。然而,由于该函数不是多项式函数,因此无法直接使用同态加密(HE)进行计算。本小节的目的是解释如何基于HEAAN近似且高效地计算该三角函数。

我们可以考虑 S(t)的泰勒多项式
$$
\frac{q}{2\pi} \sum_{d−1}^{j=0} \frac{(−1)^j}{(2j+1)!}\left(\frac{2\pi t}{q}\right)^{2j+1}
$$
。当次数增加时,误差大小迅速收敛到零,即 S(t)与其次数为 2d的泰勒多项式之间的误差在 |t| < Kq时被
$$
\frac{q}{2\pi} \cdot \frac{1}{(2d+1)!}(2\pi K)^{2d+1}
$$
所限制,并且当泰勒多项式的次数为 O(Kq)时,误差变得足够小。然而,尽管该朴素方法精度很高,但在实际应用中存在一个无效问题。其复杂度随着电路深度呈指数级增长,例如,使用 Paterson‐Stockmeyer算法[40]对一个次数为d的多项式进行计算时,复杂度为 O(√d)。

相反,我们可以利用以下倍角公式来降低计算成本:cos(2θ) =cos² θ− sin² θ 和 sin(2θ) = 2cosθ·sinθ.。从在小范围内的三角函数的近似值出发,我们将其扩展,以在更宽(翻倍)的范围上找到符号函数的良好近似。特别是,基于RLWE的HEAAN方案能够加密复数,从而可以利用复指数函数进一步简化计算算法。具体而言,我们使用以下恒等式
$$
\begin{cases}
\exp(i\theta)= \cos\theta+ i \cdot \sin\theta, \
\exp(2i\theta)=(\exp(i\theta))²,
\end{cases}
$$
并且由于 (exp(iθ) ± ε)² ≈ exp(2iθ) ± 2ε,平方运算带来的误差增长可以被限制在约一位以内。

我们在小范围内采用低次泰勒多项式 d₀ ≥ 1 作为复指数函数的高精度近似。然后我们反复执行平方运算,以在期望的域上获得复指数函数的近似值。注意,我们乘以一个缩放因子 Δ以防止精度损失,并通过HEAAN的重缩放过程将中间密文ct除以常数 Δ。

复指数函数的使用在误差分析中具有另一个优势。当我们考虑基于 RLWE的HEAAN方案时,在加密、计算、重缩放和槽置换过程中,会向明文槽中添加微小的complex误差。因此,我们只需满足一个约束条件,即解密公式应对微小的复数误差具有容忍性。我们方法的另一个优势在于,复指数函数在整个复平面上是解析的且具有有界导数,因此误差不会因解密公式而被放大。

整个过程明确描述如下。

一个值 t ∈(−Kq, Kq) 被作为解密公式的输入。

  1. 考虑复指数函数 exp (2πit / 2ʳ·q),并计算其(缩放后的)泰勒展开
    $$
    P_0(t)=\Delta \cdot \sum_{k=0}^{d_0} \frac{1}{k!} \left( \frac{2\pi i t}{2^r \cdot q} \right)^k
    $$
    次数为 d₀ ≥ 1。
  2. 对于 j= 0,1,…, r −1,重复执行平方运算 Pj+1(t) ←Δ⁻¹ ·(Pj(t))²。
  3. 返回 Pr(t)。

初始泰勒多项式的次数 d₀、缩放因子 Δ以及迭代次数(平方运算) r由以下噪声分析确定。由于复指数函数的初始输入(2πt)/(2ʳ · q)具有较小的上界(2πK/2ʳ),即使低次数 d₀的泰勒多项式也能很好地逼近复指数函数exp(2πit / 2ʳ·q) 。根据上述观察,输出Pr(t)是次数为dr= d₀ · 2ʳ的多项式,且它是宽区间 t ∈(−Kq, Kq)上 E(t):=Δ · exp(2πit / q)的良好近似。在完成复指数函数的计算后,我们可以通过共轭操作提取虚部(正弦部分)(即,2 sinθ= exp(iθ) −exp(−iθ)),这将在下一节中详细描述。

对于噪声的估计,我们从 P₀(t)与Δ · exp (2πit / r·q) 之间的初始误差开始,该误差由泰勒余项定理界定为
$$
\Delta \cdot \frac{1}{(d_0 +1)!} \left| \frac{2\pi K}{2^r} \right|^{d_0+1}.
$$
如上所述,每次平方运算后误差界几乎加倍。因此,我们得到如下近似误差界:
$$
|P_r(t)− E(t)| \leq \Delta \cdot \frac{2^r}{(d_0+ 1)!} \left( \frac{2\pi K}{2^r}\right)^{d_0+1} \leq \Delta \cdot \frac{2^r}{\sqrt{2\pi(d_0+ 1)}} \left( \frac{e\pi K}{2^{r-1}(d_0+ 1)} \right)^{d_0+1}
$$
由斯特林公式可得。渐近地,参数 d₀= O(1)和 r= O(log(Kq))的选择为我们提供了足够小的误差界。注意,该算法的复杂度为 r= O(log(Kq))次同态乘法,且随解密电路的深度线性增长。

4 打包密文上的线性变换

在本节中,我们解释如何对明文槽向量同态地计算线性变换。我们首先简要描述HEAAN的打包方法。然后,我们说明如何使用密钥转换技术在明文槽上计算旋转和复共轭。这些功能可用于明文槽上线性变换的计算。

4.1 打包方法

同态加密方案的打包技术允许我们将多个消息加密到单个密文中,并实现 SIMD方式的并行计算。崔等人[14]提出了一种将具有实系数的分圆多项式与复数向量相对应的方法。我们澄清了这种编码方法,并利用2的幂次维数分圆环的结构给出了更简洁的描述。

回想一下,对于一个2的幂次整数 M> 4,我们有 N= M/2和ΦM(X) = Xᴺ+ 1。整数5在模 M下的阶为(N/2),并与整数“−1”共同生成 Z ∗ M。因此{ζj, ζj: 0 ≤ j< N/2}构成了 ζj中本原 M‐次单位根的集合:= ζ⁵ʲ和 0 ≤ j< N/2。我们使用记号 τ: P= R[X]/(Xᴺ+ 1) → Cᴺ/²表示复规范嵌入映射的一个变体,其定义为 τ: m(X) → z =(zⱼ) 0≤j<N/2,使得zⱼ= m(ζⱼ)。注意, τ是度量空间(P, ‖·‖can ∞)与(Cᴺ/², ‖·‖∞)之间的一个等距环同态。我们将此同构 τ用作在一个多项式中打包(N/2)个复数的解码函数。通过将多项式 m(X) =∑ ᴺ⁻¹ᵢ₌₀ mᵢXⁱ ∈ P与其系数向量m =(m₀, . . . , mₙ₋₁)相对应,解码算法 τ可被理解为从 Rᴺ到 Cᴺ/²的一个线性变换。其矩阵表示由下式给出
$$
U= \begin{bmatrix}
1 & \zeta_0 & \zeta_0^2 & \dots & \zeta_0^{N-1} \
1 & \zeta_1 & \zeta_1^2 & \dots & \zeta_1^{N-1} \
\vdots & \vdots & \vdots & \ddots & \vdots \
1 & \zeta_{N/2-1} & \zeta_{N/2-1}^2 & \dots & \zeta_{N/2-1}^{N-1}
\end{bmatrix}
$$
which 是由 {ζⱼ : 0 ≤ j< N/2} 生成的 (N/2) × N范德蒙德矩阵。为了计算编码函数(即 τ的逆函数),我们首先注意到,关系 z = U · m 可通过对 z = U ·m 进行共轭得到。如果我们把由 M次单位原根集合{ζⱼ, ζⱼ: 0 ≤ j< N/2}生成的中国剩余定理矩阵记作 CRT =(U; U),则有恒等式 (z ; z ) = CRT ·m 和 CRT⁻¹= 1/N CRTᵀ。这意味着 τ的逆函数可以通过
$$
m= \frac{1}{N}(U^T \cdot z+ U^T \cdot z).
$$
本文中,我们将通过映射 τ将两个空间 P和 Cᴺ/²视为等同,因此若一个密文加密了对应的多项式 m(X) = τ⁻¹(z),则称该密文为z ∈ Cᴺ/²的加密。

4.2 旋转与共轭

密钥转换操作的目的是将一个在私钥s′下的密文转换为关于另一个私钥sk = (1, s)的相同消息的密文。转换密钥swk可通过KSGensk(s′)过程生成。给定一个在层级上的密文ct =(c₀, c₁),过程KSswk(ct)按如下步骤进行。

  • KSswk(ct) 。输出密文ct′←(c₀, 0) + P⁻¹ · c₁ · swk(mod q ).

以下引理证明了密钥转换过程的正确性,并估计了噪声界。其噪声界与重缩放过程具有相似的界 P⁻¹ · q · Bks+ Brs ≈ Brs。

引理4 (密钥转换) 。设ct=(c₀, c₁) ∈ R² q是关于私钥sk′=(1, s′)的一个密文,且令swk ← KSGensk(s′)。则ct′ ←KSswk(ct)满足 〈ct′,sk〉= 〈ct,sk′〉+ eks(mod q),其中 eks ∈ R为某个‖eks‖ can ∞ ≤ P⁻¹ · q · Bks+ Brs。

证明 。 设 e′= 〈swk,sk〉 − P · s′(mod P · qL) 为转换密钥 swk引入的误差。如 [14,引理 3]所示,密文ct′在模数 P · q下因密钥转换操作而包含额外的误差 P⁻¹ · e′′以及来自 P⁻¹ · c₁ · swk的舍入误差ers,因此其大小被限制为
$$

示意图0
$$
|e_{ks}| {\text{can}}^\infty + |e {rs}| {\text{can}}^\infty \leq P^{-1} \cdot q \cdot B {ks} + B_{rs},
$$
如所期望的。

对于与 M互素的整数 k, 设κₖ: m(X) → m(Xᵏ) (mod Φₘ(X)) 是定义在集合 P上的一个映射。如[29], 所述,该变换可用于为明文槽提供更多功能。

更具体地说,给定消息 m在私钥sk =(1, s)下的密文ct,我们用 κₖ(ct)表示对ct的每一项应用 κₖ后得到的密文。则 κₖ(ct)是一个使用私钥sk对 κₖ(m)进行的有效加密。密钥转换技术可应用于密文ct,以得到关于原始私钥sk的相同消息κₖ(m)的加密。

旋转

假设密文ct是消息 m(X)的加密,其对应的明文向量为z =(zⱼ)₀≤j< N/2 ∈ Cᴺ/²。对于任意的 0 ≤ i, j< N/2,存在一个映射 κₖ,它将索引为 i的槽中的元素发送到索引为 j的槽中的元素。定义 k= 5ⁱ⁻ʲ(mod M)和 m˜= κₖ(m)。记˜z =(z˜ⱼ)₀≤j< N/2为 m˜对应的明文向量,我们有
$$
j = m˜(\zeta_j) = m(\zeta_j^{5^{i-j}}) = m(\zeta_i) = z_i,
$$
因此, τ(m˜) 的第 j‐个槽位与 τ(m) 的第 i‐个元素具有相同的值。通常情况下,我们可以得到一个密文ct κ₅ʳ(ct),用于加密 ρ(z; r) :=(zᵣ,…, z
{N/2-1},z₀,…, zᵣ₋₁),该向量是通过对 z 进行旋转得到的。下面,我们将描述包含密钥转换操作在内的旋转过程。

  • 生成旋转密钥 rkr← KSGensk(κ₅ʳ(s))
  • Rot(密文ct; r) 。输出密文 KSrkr(κ₅ʳ(密文ct))。
共轭

我们看到 κ₋₁(ct) 是一个关于明文向量z=(zⱼ)₀≤j<N/2 的有效加密,其私钥为 κ₋₁(s)。这由以下事实得出:
$$
z_j = m(\zeta_j) = \overline{m(\zeta_j)} = m(\zeta_j^{-1}).
$$
那么,对明文槽的共轭操作的同态评估包含两个步骤:

  • 生成共轭密钥 ck ←KSGensk(κ₋₁(s))。
  • Conj(ct) 。输出密文ct KSck(κ₋₁(ct))。

4.3 线性变换

一般来说,Cᴺ/²中明文槽向量上的任意线性变换可以表示为z → A · z+ B · z,其中A, B ∈ Cᴺ/²×ᴺ/²为某些复数矩阵。如[32], 所述,可以通过按对角线顺序处理矩阵并利用SIMD计算来高效实现。具体地,令uⱼ=(A₀,ⱼ, A₁,ⱼ₊₁,…, A_{N/2−j−1, N/2−1}, A_{N/2−j,0},…, A_{N/2−1,j−1}) ∈ Cᴺ/²表示 A的移位对角线向量,其中 0 ≤ j< N/2。则我们有
$$
A \cdot z= \sum_{0\leq j<N/2} (u_j \odot \rho(z; j)) \tag{1}
$$
其中 ⊙表示向量之间的哈达玛积(逐元素乘法)。因此,如果矩阵 A以明文形式给出,且ct是向量z的加密形式,则矩阵‐向量乘法 A·z可表示为旋转和标量乘法的组合。向量旋转 ρ(z; j)可以同态地计算 Rot(ct; j),而哈达玛(逐分量)标量乘法通过将多项式 τ⁻¹(uⱼ) 相乘实现。1给出了同态矩阵乘法的明确描述。类似地,第二项 B ·z可通过在 B上应用槽位共轭后相乘得到。z。

算法 1. 矩阵乘法的同态评估

1: 过程 MatMult(密文ct ∈ R²_q, A ∈ C^{N/2×N/2})
2: 密文ct′ ← ⌊τ⁻¹(u₀)⌋ ·密文ct (mod q)
3: 对于 j= 1到 N/2 −1 执行
4: 密文ctⱼ ← ⌊τ⁻¹(uⱼ)⌋ · Rot(密文ct; j) (mod q)
5: 密文ct′ ←加密文ct′,和密文ctⱼ的和(模 q)
6: 结束循环
7: return ct′
8: 结束过程

算法1需要 (N/2 −1) 次旋转和 N次与标量多项式的乘法,但可以利用 Baby‐Step Giant‐Step算法的思想降低复杂度。设 N₁= O(√N) 是 N/2的一个除数,并记为N₂= N/(2N₁)。由 [33]可知,式(1) 可表示为
$$
A \cdot z= \sum_{0\leq j<N_2} \sum_{0\leq i<N_1} (u_{N_1\cdot j+i} \odot \rho(z; N_1 \cdot j+ i)) = \sum_{0\leq j<N_2} \rho \left( \sum_{0\leq i<N_1} \rho(u_{N_1\cdot j+i};−N_1 \cdot j)\odot \rho(z; i); N_1 \cdot j \right).
$$
对于算术电路的同态评估,我们首先计算 ρ(z; k) 的密文,其中 i= 1,…, N₁−1。对于每个索引 j,我们执行 N₁ 次标量乘法并聚合得到的密文。总共,矩阵乘法可以通过 (N₁−1)+(N₂−1) = O(√N) 次旋转和 N₁ · N₂= O(N) 次标量乘法同态地评估。

我们在明文的精度和密文模数的大小之间提供了一种权衡。输出明文包含来自标量多项式的舍入操作以及同态旋转所产生的误差。我们可以通过将缩放因子Δ ≥ 1乘以标量多项式来减小舍入误差的相对大小,而通过将输入密文的有效数字置于更高位数,可以控制旋转误差的相对大小。因此,若使用缩放因子以获得更高的明文精度,则在线性变换计算后,输出密文的模数会减小。

4.4 稀疏打包的密文

第4.1节中描述的打包方法允许我们将 个复数加密到单个密文ct中。然而,这仅适用于处理少量的数值在同态加密(HE)的某些应用中的槽位数量。在本节中,我们解释如何编码一个稀疏明文向量,并描述其与普通打包方法的关系。这一思想将应用于我们的自举方法中,为自举过程的延迟时间和摊销时间之间提供一种权衡。

设 n ≥ 2是 N的除数,且令 Y= X^{N/n}。HEAAN的原生明文空间是 Z[X]/(Xᴺ+ 1)中的一组小多项式,其具有一个子环Z[Y]/(Yⁿ+1)。注意,通过采用第4.1 节中普通打包方法的思想,可将 Z[Y]/(Yⁿ+1)与复坐标空间 C^{n/2}等同起来。具体而言,一个多项式 m(Y)被映射到向量w =(wⱼ)₀≤j<n/2,其中wⱼ= m(ξⱼ), ξ= exp(−2πi/n) = ζ^{N/n},且 ξⱼ= ξ^{5ʲ}对 0 ≤ j< n/2成立。若我们将一个明文多项式 m(Y) ∈ Z[Y]/(Yⁿ+1)视为 X中的多项式 m˜(X) = m(X^{N/n}),则通过普通解码函数 τ作用于 m˜的像由 τ( m˜) =(zⱼ)₀≤j<N/2得到,其中
$$
z_j= m˜(\zeta_j^{N/n}) = m(\xi_j^{5^j}) = w_j \pmod{n/2}
$$
对于 0 ≤ j< N/2。因此,z=(zⱼ)₀≤j<N/2可以理解为通过将w自身连接(N/n) 次而得到的向量。

使用私钥sk =(1, s)对明文多项式 m(Y) ∈ Z[Y]/(Yⁿ+1)进行加密后,将得到满足 〈ct, sk〉=m(Y)+e(X) (mod q)的密文ct ∈ R²_q对,其中 e(X) ∈ R为某个小多项式。我们可以采用密钥转换技术,实现对稀疏打包的槽位的旋转、共轭和线性变换功能。该方法的主要优势在于降低了任意线性变换的复杂度:在(n/2)‐稀疏打包密文上的总复杂度被限制为 O(√n)次旋转和 O(n)次标量乘法。

5 用于 HEAAN的自举

5.1 重加密过程概述

本节介绍了HEAAN方案自举过程的高层结构。我们采用密文打包方法,并结合高效的评估策略,以在内存和计算成本方面实现更好的性能。下面我们将更详细地描述重加密过程的各个部分。我们用ModRaise、 CoeffToSlot、 EvalExp、 ImgExt和 SlotToCoeff分别表示以下五个步骤。示意图见图 2。

模提升 。设ct为自举过程的输入密文,其密文模数 q满足 m(X) =[〈ct,sk〉] q 。我们首先注意到,其内积 t(X) = 〈ct,sk〉(mod Xᴺ+ 1)的形式为 t=qI+ m,其中某个小量 I(X) ∈ R具有界 ‖I‖∞ < K。因此,由于[〈ct,sk〉] {Q₀} = t(X),ct本身可被视为在大模数 Q₀≫ q下对 t(X) = t₀+ t₁X+ · · ·+ t_{N−1} X^{N−1}的加密。我们的自举过程旨在同态地并近似计算整数上的算术运算对 q F(t) =[t]_q的约简,从而我们可以生成一个原始消息 m=[t]_q的加密,其密文模数大于 q。

将多项式系数放入明文槽中 。给定输入密文ct∈ R²_{Q₀} ,其解密结构为 t(X) = 〈ct,sk〉,此步骤旨在将系数 t₀, . . . , t_{N−1}依次放入明文槽中,以便逐系数地计算模约减函数 F(t)。设z ′= τ(t) ∈ C^{N/2}为密文ct对应的明文槽向量。由于每个密文最多可存储 N/2个明文值,我们将生成两个密文,分别加密向量z ′₀=(t₀, . . . , t_{N/2−1}) 和z ′₁ =(t_{N/2}, . . . , t_{N−1})。

如第4.1节所述,回顾多项式系数向量与其对应的明文槽向量之间的线性关系。如果我们将矩阵 U分为两个方阵
$$
U_0= \begin{bmatrix}
1 & \zeta_0 & \dots & \zeta_0^{N/2-1} \
1 & \zeta_1 & \dots & \zeta_1^{N/2-1} \
\vdots & \vdots & \ddots & \vdots \
1 & \zeta_{N/2-1} & \dots & \zeta_{N/2-1}^{N/2-1}
\end{bmatrix} \quad \text{and} \quad U_1= \begin{bmatrix}
\zeta_0^{N/2} & \zeta_0^{N/2+1} & \dots & \zeta_0^{N-1} \
\zeta_1^{N/2} & \zeta_1^{N/2+1} & \dots & \zeta_1^{N-1} \
\vdots & \vdots & \ddots & \vdots \
\zeta_{N/2-1}^{N/2} & \zeta_{N/2-1}^{N/2+1} & \dots & \zeta_{N/2-1}^{N-1}
\end{bmatrix},
$$
然后我们得到一个恒等式 z′_k= \frac{1}{N}(U_k^T \cdot z′+ U_k^T \cdot \overline{z′}),其中 k= 0,1。因此,我们可以通过对明文向量 z′₀和 z′₁应用线性变换来生成它们的加密。可以将第 z′ 节中的一般方法应用于这一步。4.3应用于这一步。

复指数函数的评估 。 此步骤接收上一步的结果,并同态地计算模 q约简函数 F(t) =[t]_q。我们使用三角函数 S(t) := \frac{q}{2\pi} \sin\left(\frac{2\pi t}{q}\right)来近似 F(t),并采用针对复指数函数 E(t) := \frac{q}{2\pi} \exp\left(\frac{2\pi i t}{q}\right)的优化评估策略。

由于输入密文的明文槽包含 0 ≤ j< N的系数 tⱼ=qIⱼ+ mⱼ,输出密文将在相应的明文槽中加密 \frac{q}{2\pi}\exp\left(\frac{2\pi i tⱼ}{q}\right)= \frac{q}{2\pi} \exp\left(\frac{2\pi i mⱼ}{q}\right)。

虚部提取 。 我们取两个输入密文,它们在明文槽中加密了值 \frac{q}{2\pi}\exp\left(\frac{2\pi i mⱼ}{q}\right),其中 0 ≤ j< N。我们利用关系从中提取其虚部 \frac{q}{2\pi} \sin\left(\frac{2\pi mⱼ}{q}\right) ≈ mⱼ
$$
\sin\left(\frac{2\pi m_j}{q}\right)= \frac{1}{2}\left(\exp\left( \frac{2\pi i m_j}{q}\right)− \exp\left( −\frac{2\pi i m_j}{q}\right)\right)
$$
并应用第4.2节中描述的槽位共轭计算方法。

切换回系数表示 。最后一步是将两个密文的明文槽中所有的系数 mⱼ重新打包回单个密文。此过程恰好是 CoeffToSlot变换的逆过程。也就是说,当给定两个分别加密向量z₀=(m₀, . . . , m_{N/2−1})和z₁=(m_{N/2}, . . . , m_{N−1})的密文时, 我们的目标是生成对 m(X)的加密。由于 m(X)的明文向量z= τ(m)满足恒等式 z= U ·m= U₀ · z₀+ U₁ · z₁,,该变换也可表示为明文向量上的线性变换。

我们的自举过程返回一个关于 m(X)的加密,其密文模数为Q₁< Q₀,远大于初始模数 q,从而允许我们对该密文执行进一步的同态操作。

我们可以通过预先计算线性变换的组合来一起执行最后两个步骤。该(逆向)线性变换步骤仅消耗一个层级用于标量乘法,但需要进行多次槽旋转。

另一方面, EvalExp 对多项式 Pr(·) 进行同态评估,这是重加密中最消耗层级的部分,但得益于我们的递归评估策略,其计算成本相对较小:与深度线性相关。

5.2 使用稀疏打包密文的重加密

如第4.4节所述,使用稀疏打包密文在某些应用中具有优势,因为它降低了线性变换步骤的复杂度。然而,稀疏打包密文的重加密在 CoeffToSlot步骤之前需要额外的步骤。

设 n ≥ 2是 N的除数,且 Y= X^{N/n}如第4.4节所述。假设我们给定一个密文ct,其为 m(Y) ∈ Z[Y]/(Yⁿ+ 1)的加密,满足 〈ct, sk〉 ≈q · I(X) + m(Y),其中 I (X) = I₀+ I₁ · X+ · · ·+ I_{N−1} · X^{N−1} ∈ R。则该 ModRaise步将返回一个 q · I(X) + m(Y)的加密,但其并非˜ Y的一个多项式。我们的目标是在下一步CoeffToSlot之前生成一个 q · I(Y) + m(Y)的加密,其中˜为某个 I(Y) ∈ Z[Y]/(Yⁿ+1)。该过程如算法2中所述进行。

算法2. 部分和过程的同态评估

1: 过程 PartialSum(密文ct ∈ R²_q, n|N, n ≥ 2)
2: 密文ct′ ←密文ct (mod q)
3: 对于 j= 0到 log(N/n) −1执行
4: 密文ctⱼ ← Rot(密文ct′; 2ʲ ·(n/2)) (mod q)
5: 密文ct′ ←加(密文ct′,密文ctⱼ) (模 q)
6: 结束循环
7: 返回 ct′
8: 结束过程

单项式 Xᵏ 在同态 X → X−Xⁿ⁺¹+X²ⁿ⁺¹−· · ·−X^{N−n+1} 下消失,如果 k 不能被 (N/n) 整除;否则,它将乘以常数 (N/n)。因此, q·I(X)+m(Y) 在该同态下被映射为 (N/n)·(q·I(Y)+m(Y)),其中 I˜(Y) = I₀+ I_{N/n} · Y+· · ·+ I_{N−(N/n)} · Yⁿ⁻¹。为了高效地计算该同态,算法2反复使用旋转操作,将相同的值填入每个 j= 0, …, n/2 −1 对应的明文槽中索引为 j (mod n/2) 的位置。

如前所述,稀疏打包密文的主要优势在于, CoeffToSlot步可以表示为相对较小的矩阵乘法,仅需对˜ t(Y) = q · I(Y) + m(Y) 的系数向量进行一次加密,而完全打包槽在CoeffToSlot步中需要两个密文。更详细地说,对于明文向量 w ∈ C^{n/2}的t(Y),所需密文ct可通过 \frac{1}{n}(U′^T · w+ U′^T · \overline{w}) 计算得到,其中
$$
U′= \begin{bmatrix}
1 & \xi_0 & \xi_0^2 & \dots & \xi_0^{n-1} \
1 & \xi_1 & \xi_1^2 & \dots & \xi_1^{n-1} \
\vdots & \vdots & \vdots & \ddots & \vdots \
1 & \xi_{n/2-1} & \xi_{n/2-1}^2 & \dots & \xi_{n/2-1}^{n-1}
\end{bmatrix},
$$
如第4.1节所述。我们可以通过将 U′拆分为两个方阵,生成加密两个明文向量(w₀,…, w_{n/2−1}) 和 (w_{n/2},…, w_{n−1}) 的两个密文,或者当 n< N时,对(w₀,…, w_{n−1}) 进行单次加密,使用 n个明文槽。在后一种情况下, EvalExp和 ImgExt执行的操作与在完全打包的密文中相同,但由于只需处理单个密文, 内存和计算成本减少了一半。最后的 SlotToCoeff步骤也可表示为对n维向量的线性变换。

5.3 重加密的噪声估计

在本节中,我们结合噪声分析描述重加密过程的每一步。我们从 ‖I‖∞的上界 K开始。由于密文ct =(c₀, c₁)的每个系数都是 Z_q中的元素,且带符号的二进制私钥 s恰好有 h个非零系数,因此 〈ct, sk〉= c₀+ c₁s的每个系数可视为Z_q中(h+1)个元素的和,其范围被 q/2(h+1)所限制。因此, I(X) = ⌊ 1/q〈ct, sk〉 ⌋的所有系数均被 1/2(h+ 1) h+1所限制。实际上, cᵢ的系数看起来像是区间Z_q上的随机变量,而 1/q〈ct, sk〉的一个系数表现为在区间(−1/2, 1/2)上(h+ 1)个独立同分布的均匀随机变量之和。这一启发式假设为我们提供了对 ‖I‖∞更小的界 K= O(√h)。

我们现在考虑线性变换的同态评估期间的误差增长。如第4.3节所述,它会引发两种类型的误差,即来自标量多项式的舍入误差和密钥转换操作的误差。我们将一个足够大的缩放因子 Δ= O(q)乘以标量多项式,使得舍入后的多项式的精度大于输入明文的精度。这样我们就不需要考虑舍入误差,因为它们不会影响结果明文的精度。第二种误差是在应用密钥转换技术(例如旋转或共轭) 时被添加到明文中的。根据引理4,由于我们将密文模数 q设置得远小于 P, 因此密钥转换误差的上界为 P⁻¹ · q · B_{ks}+ B_{rs} ≈ B_{rs}。在矩阵乘法过程中,密钥转换误差会与矩阵的对角向量相乘。由于 1/N U₀和 1/N U₁的对角向量的无穷范数恰好为1,因此第二类误差的总量上界为 O(B_{rs})。

在 EvalExp步骤中,我们取两个密文,并使用复指数多项式的近似多项式 Pr(·)对其进行同态求值。相应明文槽的每个分量包含 tⱼ + eⱼ ,其中存在较小的误差 eⱼ ,使得 |eⱼ | ≤ O(B_{rs})。因此,期望值 E(tⱼ) 与 EvalExp得到的明文之间的误差可通过以下方式度量
$$
|E(t_j)− P_r(t_j+ e_j)| \leq |E(t_j)− E(t_j+ e_j)| + |E(t_j+ e_j)− P_r(t_j+ e_j)| \leq \Delta \cdot \frac{2\pi}{q}|e_j| + \Delta \cdot \frac{2^r}{\sqrt{2\pi(d_0+ 1)}} \left( \frac{e\pi K}{2^{r-1}(d_0+ 1)} \right)^{d_0+1},
$$
由于 E(·) 是解析的且 |E′(·)| ≤Δ·2π/q。第二项可由O(1) 界定,因此当 d₀= O(1) 且 r= O(log(qK)) 时可忽略不计,如第3.2节所述。结合前一步骤的误差界 |eⱼ| ≤ O(B_{rs}),我们得出 EvalExpencrypt E(tⱼ)=Δ· exp(2πitⱼ / q)的输出密文 ct在其明文槽中对应的误差被限定在 O(B_{rs})。

E(t) 的虚部是 Δ·q/2π S(t) =Δ · sin (2πt / q),这是对 Δ·q/2π m 的近似,其误差在 m=[t]_q 时被 O(q ·|m|³ / q³) 所限制。我们对输入明文(例如 |m| ≤ q²/³) 设置一个较小的界,以防止近似误差破坏明文的有效数字。因此, ImgExt 步骤不会改变自举误差的大小。

最后,在 SlotToCoeff步中,明文向量与矩阵 U₀和 U₁相乘,它们的对角向量大小为1。结果明文中的误差大小由 O(N · B_{rs})界定,因为它是 N个大小为 O(B_{rs})的误差之和。实践中,在假设这些误差表现为独立的高斯分布这一启发性假设下,我们得到一个更小的误差界 O(√N · B_{rs})。

总之,对于满足 〈ct,sk〉= m(mod q) 的输入密文 ct ∈ R²_q,我们的自举过程返回一个密文 ct′,使得对于模数 Q₁≫ q 和某个误差 e(其中 ‖e‖can ∞ ≤ O(√N · B_{rs})),有 〈ct′,sk〉= m+ e(mod Q₁)。该过程包括初始/ 最终的线性变换以及复指数函数的评估,因此自举的总深度(消耗的层级数) 为 O(log(Kq)) = O(log λ)。线性变换需要 O(√N) 次旋转,而指数函数的评估需要 r=O(log(Kq)) = O(log λ) 次同态乘法,这与解密公式的深度呈线性相关。如上所述,当我们处理具有 (n/2) 个槽的稀疏打包密文时,总复杂度可以显著降低:线性变换仅需 O(λ) 次旋转,且指数函数的评估复杂度减半。

6 实现

在本节中,我们为自举过程提出了一些参数集,并提供了实验结果。我们的实现基于HEAAN库[13],该库实现了崔等人[14]的同态加密方案。源代码公开发 布于GitHub[12]。

6.1 参数选择

我们采用阿尔布雷希特等人[1]的估计器来确保所提出参数的具体安全性。所有参数集均能针对LWE问题的已知攻击实现至少80位安全级别。

在HEAAN方案中,转换密钥具有最大的模数,且模数 Q₀ (在 ModRaise之后)的位大小是原模数的一半。我们使用标准差为 σ= 3.2的离散高斯分布来采样误差多项式,并设置私钥 s(X)的汉明重量为 h= 64。参数 d₀= O(1)和 r= O(log q)在上述章节中是渐近选择的,但在实际中,我们根据自举误差通过实验方式设定参数。我们采用7阶泰勒展开作为指数函数的初始近似,并选择足够大的迭代次数 r以保持输出明文的精度。

参数 logp是明文的位大小,明文精度表示自举后明文中有效位的数量。自举前后的层级 L₀和 L₁分别通过将 log Q₀和 log Q₁除以 log p得到。完整的参数集在表1中描述。

表1. 参数集

参数 log N log p log q r log Q₀ L₀ log Q₁ L₁ 明文精度
集合‐I 15 23 29 6 620 26 2 8 8 bits
第二组 15 27 37 7 620 22 64 2 12 bits
集合‐III 16 31 41 7 1240 40 31 3 16位
第四组 16 39 54 9 1240 31 44 8 24位

我们展示一些输入和输出明文的具体示例。为简便起见,我们显示四个槽中明文值的实部。所有值均除以因子 p以便清晰解释。

自举前:[0.777898 0.541580 0.603675 0.822638]
自举后:[0.777435 0.541021 0.603023 0.822321]

结果表明,误差向量被限制在2⁻¹¹ · p以内,即使用第一组参数的自举过程输出的密文具有10位精度。

自举前:[0.516015 0.772621 0.939175 0.345987]
自举后:[0.516027 0.772614 0.939172 0.346001]

同样,第二个示例表明,使用第二组参数时,自举误差被限制在2⁻¹⁶ · p以内,且输出明文具有15位精度。

6.2 实验结果

我们展示了基于所提出参数集的自举过程的性能。所有实验均在2.10 GHz Intel Xeon E5‐2620上以单个超线程执行。实验结果总结于表2中。线性变换包括三个步骤——PartialSum、 CoeffToSlot和 SlotToCoeff。摊销时间通过将总自举时间除以明文槽的数量得到。

表2. 使用参数集I到IV的自举时间

参数 槽的数量 线性变换 EvalExp 总时间 摊销时间
集合‐I 1 12.3 秒 12.3 秒 24.6 秒 24.6 秒
集合‐I 32 48.6 秒 12.3 秒 60.9 秒 1.9 秒
集合‐I 64 82.8 秒 12.3 秒 95.1 秒 1.5 秒
集合‐I 128 139.2 秒 12.3 秒 151.5 秒 1.2 秒
第二组 1 14.1 秒 12.5 秒 26.6 秒 26.6 秒
第二组 32 46.0 秒 12.5 秒 58.5 秒 1.8 秒
第二组 64 77.1 秒 12.5 秒 89.6 秒 1.4 秒
第二组 128 127.3 秒 12.5 秒 139.8 秒 1.1 秒
集合‐III 1 64 s 63 s 127 秒 127 秒
集合‐III 32 218 秒 63 s 281 秒 8.8 秒
集合‐III 64 343 秒 63 s 406 秒 6.3 秒
集合‐III 128 528 秒 63 s 591 秒 4.6 秒
第四组 1 58 s 68 s 126 秒 126 秒
第四组 32 200 秒 68 s 268 秒 8.4 s
第四组 64 307 s 68 s 375 s 5.9 s
第四组 128 456 s 68 s 524 s 4.1 秒

随着明文槽的数量增加,线性变换所需时间变长,而 EvalExp步骤的复杂度保持稳定。因此,我们可以通过改变槽位数量在延迟时间和摊销时间之间进行权衡。图3展示了自举阶段(第一组参数)中每个阶段的计算时间趋势。

7 结论

在本文中,我们提出了一种对HEAAN方案的密文ct进行重加密的方法。通过采用模约减函数的三角近似,我们的自举过程性能得到了显著提升。线性变换结果成为最耗时的部分,但我们使用了与[28,33]几乎相同的方法。寻找一种高效算法来近似计算线性变换将是一个有趣的开放问题。

【源码免费下载链接】:https://renmaiwang.cn/s/os2te 大整数乘法是计算机科学中的一个重要领域,特别是在算法设计和数学计算中有着广泛应用。它涉及到处理超过标准整型变量范围的数值运算。在C++编程语言中,处理大整数通常需要自定义数据结构和算法,因为内置的`int`、`long long`等类型无法满足大整数的存储和计算需求。以下是对这个主题的详细阐述:1. **大整数数据结构**: 在C++中,实现大整数通常采用数组或链表来存储每一位数字。例如,可以使用一个动态分配的数组,每个元素表示一个位上的数字,从低位到高位排列。这种数据结构允许我们方便地进行加减乘除等操作。2. **乘法算法**: - **暴力乘法**:最直观的方法是类似于小学的竖式乘法,但效率较低,时间复杂度为O(n^2)。 - **Karatsuba算法**:由Alexander Karatsuba提出,将两个n位数的乘法转化为三个较小的乘法,时间复杂度为O(n^1.585)。 - **Toom-Cook算法**:比Karatsuba更通用,通过多项式插值和分解进行计算,有不同的变体,如Toom-3、Toom-4等。 - **快速傅里叶变换(FFT)**:当处理的大整数可以看作是多项式系数时,可以利用FFT进行高效的乘法,时间复杂度为O(n log n)。FFT在数论和密码学中尤其重要。3. **算法实现**: 实现这些算法时,需要考虑如何处理进位、溢出等问题,以及如何优化代码以提高效率。例如,使用位操作可以加速某些步骤,同时要确保代码的正确性和可读性。4. **源代码分析**: "大整数乘法全解"的源代码应包含了上述算法的实现,可能还包括了测试用例和性能比较。通过阅读源码,我们可以学习如何将理论算法转化为实际的程序,并理解各种优化技巧。5. **加说明**: 通常,源代码附带的说明会解释
内容概要:本文详细介绍了一个基于Java与Vue技术栈的向量数据库语义检索与相似文档查重系统的设计与实现。系统通过集成BERT等深度学习模型将文本转化为高维语义向量,利用Milvus等向量数据库实现高效存储与近似最近邻检索,结合前后端分离架构完成从文档上传、向量化处理、查重分析到结果可视化的完整流程。项目涵盖需求分析、系统架构设计、数据库建模、API接口规范、前后端代码实现及部署运维等多个方面,并提供了完整的代码示例和模块说明,支持多格式文档解析、智能分段、自适应查重阈值、高亮比对报告生成等功能,具备高扩展性、安全性和多场景适用能力。; 适合人群:具备一定Java和Vue开发基础的软件工程师、系统架构师以及从事自然语言处理、知识管理、内容安全等相关领域的技术人员,尤其适合高校、科研机构、企业IT部门中参与智能文档管理系统开发的专业人员。; 使用场景及目标:①应用于学术论文查重、企业知识产权保护、网络内容监控、政务档案管理等需要高精度语义比对的场景;②实现深层语义理解下的文档查重,解决传统关键词匹配无法识别语义改写的问题;③构建可扩展、高可用的智能语义检索平台,服务于多行业数字化转型需求。; 阅读建议:建议读者结合提供的完整代码结构与数据库设计进行实践操作,重点关注文本向量化、向量数据库集成、前后端协同逻辑及安全权限控制等核心模块。在学习过程中应逐步部署运行系统,调试关键接口,深入理解语义检索与查重机制的工作原理,并可根据实际业务需求进行功能扩展与模型优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值