基于LWE的高效重加密方法

安全数据逆向转移:基于误差学习的部分同态加密中带有辅助数据的实用重加密

摘要

同态加密能够支持对加密数据进行有意义的操作,从而允许用户以加密形式将数据外包给云服务。然而,一般情况下,同态加密无法对使用不同密钥的密文进行操作。为解决此问题,重加密通过将不同的密钥统一为一个新的密钥,使得对这些密文的操作成为可能。本文聚焦于布拉克斯基和瓦伊昆塔纳坦(CRYPTO 2011)提出的方案,提出了一种实用重加密方法。我们实现高效重加密的策略是简单地重写解密电路,然后利用辅助信息对其进行同态求值。特别地,我们的方法仅需少量同态操作即可完成重加密,且可应用于多种场景,例如在云中协同计算多个用户数据时的安全密钥交换。

关键词

同态加密,LWE假设,重加密,安全密钥交换

引言

同态加密是一种公钥加密,其额外特性是支持对加密数据执行某些操作(无需解密)。在2000年之前,我们只知道存在支持对加密数据执行简单操作(例如仅支持加法或乘法)的同态加密方案(如[13, 19, 24])。首个同时支持加法和乘法操作的方案是BGN方案[4],该方案利用了椭圆曲线上的配对。然而,BGN方案只能处理多次加法和一次深度的乘法。

2009年,Gentry首次提出了一种具体的全同态加密(FHE)方案构造方法,能够支持对加密数据的任意操作。目前,全同态加密方案有望应用于云计算中;事实上,云计算的近期发展使用户能够轻松将其数据外包给云服务。然而,另一方面,个人和企业面临新的隐私与安全性问题(例如,参见[11]中的相关问题)。此时,全同态加密使得用户可以以加密形式将数据发送到云,而云仍能对加密数据执行有意义的计算。由于云中的所有数据始终处于加密格式,因此无论云中进行何种操作,用户数据的机密性都能得到保障。

在杰内特取得突破之后,许多研究人员提出了大量新的全同态加密方案及其实现方法。目前存在四种主要的全同态加密方案:基于理想格的方案[16, 17]、基于整数的方案[9, 12,15]、基于带误差学习(LWE)的方案[5, 6, 7],以及最后的基于NTRU的方案[22]。这些方案的构造

全同态加密方案始于部分同态加密(SHE)方案,该方案可支持对加密数据进行有限次数的加法和乘法运算。杰内特的关键技术称为自举方法,可使某些SHE方案变为完全同态。具体而言,自举方法通过重加密将“脏”密文转换为“更干净”的密文(即,该方法可通过重加密刷新密文噪声)。重加密需要同态地评估SHE方案的解密电路(例如,详见[17, 18]中的方法细节)。目前所知的重加密过程开销过大,因此全同态加密不具实用性(例如,参见[15, 17]中的实验结果)。最近,阿尔佩林‐谢里夫和佩克特[1]提出了一种在基于误差学习的方案中更快的自举方法,但其对于现实生活中的应用仍似乎远未达到实用程度。

本文的目的是提出一种可实际应用的新型重加密方法。本文重点关注布拉克斯基和瓦伊昆塔纳坦[6]提出的方案,其安全性基于多项式LWE假设的计算困难性。我们实现实用重加密的基本策略是简单地重写相关SHE方案的解密电路,然后同态地评估该电路。特别是,我们使用辅助信息来对密文进行重加密,且我们的重加密方法可用于密文的安全密钥交换。杰内特的自举方法需要大量的同态操作来进行重加密,而我们的方法仅需少量同态操作,因此能够提供实用的性能。我们还讨论了带辅助信息的重加密方法的安全性,并证明在该方案所依赖的多项式LWE假设下,我们的方法仍然是安全的。

符号

$\mathbb{Z}$和$\mathbb{Q}$分别表示整数环和有理数域。对于素数$p$,具有$p$个元素的有限域记为$\mathbb{F} p$。对于两个整数$z$和$d$,令$[z]_d$表示$z$模$d$在区间$[-d/2, d/2)$内的归约($z$模$d$在区间$[0, d)$内的归约)记为”$z(\text{mod } d)$”。对于$\vec{A}=(a_0, a_1,…, a {k-1})$,令$|\vec{A}|_\infty$表示由$\max_i |a_i|$定义的∞‐范数。我们还用$\langle \vec{A}, \vec{B}\rangle$表示两个相同长度向量$\vec{A}$和$\vec{B}$的内积。

2. 基于LWE的SHE方案

在本节中,我们简要回顾布拉克斯基和瓦伊昆塔纳坦提出的SHE方案的构造及其同态正确性。对于该构造,需要以下四个参数:

  • $n$:一个$2^x n + 1$次幂的整数,用于定义该方案的基环($R=\mathbb{Z}[x]/(x^n+1)$)。该次数有时被称为lattice dimension。
  • $q$:一个素数,满足$q \equiv 1 \mod 2n$,用于定义密文空间的环$R_q = \mathbb{F}_q[x]/(x^n + 1)$。条件$q \equiv 1 \mod 2n$对该构造而言不是必需的,但对可证明安全性[6,定理 1]是必要的。
  • $t$:一个整数,用于确定明文空间$R_t =(\mathbb{Z}/t\mathbb{Z})[x]/(f(x))$。
  • $\sigma$:定义离散高斯误差分布的参数$\chi= D_{\mathbb{Z}^n,\sigma}$(我们通过对高斯分布$N(0, \sigma)$进行采样,为一个$n$维向量的每个分量生成值,然后将其四舍五入到最接近的整数)。

该方案(在第2.1节中构造)的安全性依赖于以下多项式LWE假设(PLWE),它是Lyubashevsky、佩克特和Regev提出的环LWE假设的一个简化版本:给定参数$(n, q, t, \sigma)$,多项式LWE假设PLWEn,q,χ(在赫尔米特标准型中)是指无法区分以下两个分布:

  • [P1] : One samples $(a_i, b_i)$ uniformly from $(R_q)^2$.
  • [P2] :首先均匀地选取$s \leftarrow \chi= D_{\mathbb{Z}^n,\sigma}$,然后通过均匀采样$a_i \leftarrow U R_q$,并设置$b_i= a_is+ e_i$,来抽取$(a_i, b_i)\in(R_q)^2$。

请注意,这一假设独立于$t$(参见[6,命题 1]中关于缩放噪声$b_i= a_is+ te_i$而非第二种分布P2的安全性)。

2.1 SHE方案的构造

在[6]中提出了对称密钥和公钥变体方案。下文中,我们仅给出公钥变体方案的构造。注意,我们通过标准映射将$R$视为$\mathbb{Z}^n$:
$$
R \ni a_0+ a_1x+…+ a_{n-1}x^{n-1} \mapsto(a_0, a_1,…, a_{n-1}) \in \mathbb{Z}^n.
$$

2.1.1 密钥生成

我们选择一个元素$s \leftarrow \chi$,然后通过上述的识别方式得到$s \in R$。我们还采样一个均匀随机元素$a_1 \in R_q$和一个误差$e\leftarrow \chi$。将$pk=(a_0, a_1)$与$a_0= -(a_1s+ te)$设为公钥,$sk=s$设为私钥。

2.1.2 加密

对于明文$m \in R_t$和公钥$pk=(a_0, a_1)$,加密时采样$u, f, g\leftarrow \chi$并通过以下方式计算“新鲜密文”(新鲜密文指未经运算操作的密文)
$$
\text{Enc}(m, pk)=(c_0, c_1) \in(R_q)^2
=(a_0u+ tg+ m, a_1u+ tf), \tag{1}
$$
其中明文$m$在条件$t< q$下以自然的方式被视为$R_q$中的一个元素。

2.1.3 同态操作

尽管上述加密在$R_q$中生成了一个仅包含两个环元素的新鲜密文,但如下定义的同态乘法会使密文长度变长。因此,我们需要为任意长度的密文定义同态操作;给定两个密文$ct=(c_0 ,…, c_\zeta)$和$ct’ =(c’ 0 ,…, c’ \eta)$,同态加法$\dotplus$通过按分量相加计算
$$
ct\dotplus ct’=(c_0 + c’ 0 ,…, c {\max (\zeta,\eta)} + c’ {\max (\zeta,\eta)})
$$
(如有必要,用零填充)。类似地,同态减法通过分量间的减法实现。相比之下,同态乘法$*$是
由以下方式计算:
$$
ct * ct’=(\hat{c}_0,…, \hat{c}
{\zeta+\eta}),
$$
其中,令$z$表示一个符号变量并进行设置
$$
\sum_{i=0}^{\zeta+\eta} \hat{c} iz^i=\left( \sum {i=0}^{\zeta} c_iz^i \right) \cdot \left( \sum_{j=0}^{\eta} c’_jz^j \right).
$$

2.1.4 解密

给定一个(新鲜的或同态操作后的)密文$ct=(c_0,…, c_\zeta)$,使用私钥$sk=s$进行的解密计算如下
$$
\text{Dec}(ct, sk)=\left[\sum_{i=0}^{\zeta} c_is^i\right] q (\text{mod } t).
$$
我们也可以简单地重写
$$
\text{Dec}(ct, sk)=\left[\langle ct, sk\rangle\right]_q (\text{mod } t), \tag{2}
$$
其中集合$\langle ct,sk\rangle:=\sum
{i=0}^\zeta c_isk^i \in R_q$。

给定一个通过(1)生成的新鲜密文$ct=(c_0, c_1)$,我们有
$$
\langle ct, sk\rangle=(a_0u+ tg+ m)+ s \cdot(a_1u+ tf)
= m+ t \cdot(g+ sf - ue) \tag{3}
$$
在环$R_q$中,如果值$(g+ sf - ue)$对模$q$没有发生回绕(所有误差$e, f, g, u\leftarrow \chi$必须足够小),则我们有$[\langle ct, sk\rangle]_q= m+ t \cdot(g+ sf - ue)$在基环$R$中”(详见下面的引理1)。在这种情况下,我们可以通过对$t$取模操作来恢复正确的明文$m$,这展示了任意fresh密文的解密机制。对于两个新鲜密文$ct_1,$和$ct_2,$,我们显然有
$$
\begin{cases}
\langle ct_1 \dotplus ct_2, sk\rangle= \langle ct_1, sk\rangle+ \langle ct_2, sk\rangle \
\langle ct_1 * ct_2, sk\rangle= \langle ct_1, sk\rangle \cdot \langle ct_2, sk\rangle
\end{cases} \tag{4}
$$
根据同态操作的构造方式。这两个等式表明该加密方案的同态正确性成立(参见下面的(5))。

2.2 同态正确性

“同态正确性”意味着在对密文执行若干同态操作后,解密过程能够恢复出对应明文上的运算结果。由[20,引理33]的证明可知,密文上的同态操作对应于明文空间$R_t$的环结构(此处称该方案在$R_t$上具有同态正确性)。具体地,根据等式(4),我们有
$$
\begin{cases}
\text{Dec}(ct\dotplus ct’, sk)= m+ m’ \in R_t \
\text{Dec}(ct * ct’, sk)= m \times m’ \in R_t
\end{cases} \tag{5}
$$
对于分别对应于明文$m, m’$的密文$ct,ct’$。然而,在第2.1节中构造的方案仅给出一个SHE方案(而非FHE方案),且其正确性在以下条件下成立(下面的引理对于选择合适的参数$(n, q, t, \sigma)$以避免解密失败非常重要):

引理 1 (Condition for successful decryption).
For a ciphertext recovers the correct result if $\langle ct, sk\rangle \in R_q$ does not wrap around mod $q$. In other words, if it satisfies the condition $|\langle ct, sk\rangle| \infty < q/2$, then the decryption can output the correct result, where for $a= \sum {i=0}^{n-1} a_ix^i \in R_q$ let $|a|_\infty= \max |a_i|$ denote the ∞-norm of its coefficient representation.

3. 带辅助信息的重加密方法

在本节中,我们开始介绍重加密的典型应用。接下来,我们简要回顾Gentry的自举方法的基本思想,然后提出我们的带辅助信息的实用重加密方法。

3.1 重加密的典型应用

假设有两个用户$U_1$和$U_2$使用一个云服务器$C$,每个用户$U_i$生成自己的同态加密密钥对($pk_i, sk_i$)。然后,每个用户$U_i$将其数据$m_i$以同态加密形式(即$\text{Enc}(m_i, pk_i)$)发送到云$C$,用于私有数据存储和云端计算$C$(在此设定下,使用对称密钥变体方案更为合适,但本文仅考虑公钥变体)。

在这种情况下,由于两个加密密钥不同(通常情况下,使用不同密钥的加密数据不满足同态正确性),云$C$无法对两个密文$\text{Enc}(m_i, pk_i), i= 1, 2$进行操作以实现诸如$U_1$和$U_2$之间的协同计算(如统计分析)。此时,可应用重加密来统一加密密钥;具体而言,存在一个评估者$A$,其希望获得两个数据$m_1$和$m_2$之间统计分析的结果,且$A$生成一个新的密钥对$(pk_{\text{new}}, sk_{\text{new}})$。

公钥$pk_{\text{new}}$被公开分发。对数据$m_1$和$m_2$进行操作的最简单方法是每个用户$U_i$将加密数据$\text{Enc}(m_i,pk_i)$解密以获得明文数据$m_i$,然后使用公钥$pk_{\text{new}}$重新加密为$\text{Enc}(m_i,pk_{\text{new}})$并发送到云。然而,由于每个用户$U_i$都需要对每份数据$m_i$进行解密和加密,该方法在处理更大体积的数据时效率较低。

重加密是一种在不泄露明文数据的情况下,将密文转换为使用新密钥的密文的procedure(例如,参见[3]以了解代理重加密的基本概念)。一旦每个用户$U_i$仅向云发送私钥$sk_i$的加密数据$\text{Enc}(sk_i ,pk_{\text{new}})$,重加密便使云$C$能够从原始公钥$pki$安全地交换密钥至新公钥$pk_{\text{new}}$(即在此情况下,重加密可在不解密的情况下将$\text{Enc}(m_i , pki)$转换为$\text{Enc}(m_i ,pk_{\text{new}})$)。换句话说,重加密使每个用户$U_i$能够将密钥交换操作安全地外包给云$C$(注意:只要分析者$A$安全地管理新私钥$sk_{\text{new}}$,云就无法获取关于$m_i$的任何信息)。在完成重加密操作后,云$C$可以执行
$$
\text{Enc}(m_1 , pk_{\text{new}}) \quad \text{and} \quad \text{Enc}(m_2 , pk_{\text{new}})
$$
对加密数据进行运算,并将运算结果发送给分析者$A$。最后,分析者$A$可通过使用$sk_{\text{new}}$解密获得期望结果。

备注 2. Damgård等人[14]扩展了第2.1节中的加密方案,以实现多个参与方之间的分布式解密。在上述应用中,该技术使我们能够构建以下场景:云$C$和化验员$A$分别拥有分布式的私钥(即没有人持有主私钥$sk_{\text{new}}$)。在此设定下,$C$和$A$均无法单独解密$\text{Enc}(m_i,pk_{\text{new}})$,但如果$C$和$A$之间执行特定协议,则可以正确恢复运算结果。因此,分布式解密有助于为我们的应用构建更安全的协议。

3.2 关于安全性和我们目标的说明

自从Blaze等人[3]提出了代理重加密的概念,关于代理重加密的研究已被广泛探讨(例如,参见[10]及其参考文献)。它允许一个半诚实的代理将原本加密给某个用户(用户$U_1$)的密文转换为另一个用户(用户$U_2$)所对应的、加密相同明文的密文。

就代理重加密而言,我们的方案属于一种单向单次CPA‐安全的代理重加密。在代理重加密框架中,存在一个重加密密钥生成算法,该算法输入$U_1$的私钥和$U_2$的公钥,并输出一个重加密密钥$r$。由于我们的系统具有同态性质,重加密密钥本身也是一个密文。此外,重加密过程也可以通过同态性质轻松实现。因此,我们无需将重加密的密钥生成算法与重加密过程分开考虑。在我们的情况下,从公钥加密方案的角度来讨论安全性是十分自然的(有关我们重加密的安全性讨论,请参见第4节)。

作为一种代理重加密方案,我们的方案尚未达到文献中讨论的高安全性水平。在本文中,我们想强调的是,我们的目标是在密码学意义上,以最低的安全性(例如单次CPA安全性)提供一种相当高效的重加密方法。具体而言,尽管在基于配对的方案中已提出了多种重加密方法,但我们的底层方案基于格,因此有望实现更高效的性能(例如,参见[20,第1.2]节中关于[6]的SHE方案与基于配对方案的性能比较)。

3.3 自举方法回顾

在介绍我们的重加密方法之前,我们简要回顾一下杰内特的用于重加密的自举方法。为了构建一个全同态加密方案,杰内特提出了自举方法,以使SHE方案变为完全同态的。该方法通过重加密将“脏”密文转换为“更干净”的密文(即,可以通过重加密将具有大量噪声的密文转化为具有较小噪声的密文)。这种重加密的基本思想是同态地评估SHE方案的解密电路。例如,对于第2.1节中的SHE方案,解密操作(2)需要对密文$ct$计算$[\langle ct,sk\rangle] q$。请注意,此操作与多项式的四舍五入有关
$$
\frac{\langle ct, sk\rangle}{q} \in R\otimes
{\mathbb{Z}} \mathbb{Q}= \mathbb{Q}[x]/(x^n +1) \tag{6}
$$
其系数为floating point,且非常接近于一个具有整数系数的多项式(即属于$R=\mathbb{Z}[x]/(x^n+ 1)$的元素),否则将导致解密失败。对于一个数$p$和一个元素$f \in R \otimes_{\mathbb{Z}} \mathbb{Q}$,我们用${f} p$表示形式为$f$的floating point近似值
$$
{f}_p= f_0+ f_1/2+ \cdots+ f_p/2^p
$$
使得$f=\sum
{i=-\infty}^{d} f_i/2^i$满足某些$d$和$f_i \in R$。然后,无需计算(6),而只需同态地计算
$$
\left{\frac{\langle ct, sk\rangle}{q}\right}_p \tag{7}
$$
对于某些$p$。然后,杰内特[16]提出了压平方法,通过在公钥中增加额外信息(而不仅仅是直接加密$sk$的值)来改变此类解密过程,以实现对(7)的评估。然而,重加密所需的同态操作数量巨大,因此该方法不具实用性(例如,参见[15, 17]中的全同态加密方案的实现结果)。

3.4 实用重加密策略

在上述自举方法中,主要的操作是对加密数据执行(mod$q$)操作$[\langle ct,sk\rangle]_q$(实际上,在加密数据上执行舍入函数(7)代价非常高)。相比之下,我们提出的实用重加密策略是将解密过程(2)重写为不含(mod$q$)操作的形式,然后同态地评估该形式。为了避免使用(mod$q$)操作,让我们fix一个提升映射
$$
L_q: R_q= R/qR\rightarrow R
$$
满足$L_q(a) (\text{mod } q)= a$对任意元素$a \in R_q$(注意下面的映射$L_q$不能成为环同态,它仅仅是作为集合的态射)。对于$L_q \rightarrow a \mapsto a (\text{mod } q)$,最简单的映射是标准遗忘映射,由”$\text{mod } q$”给出,适用于任意元素。给定一个通过(1)生成的新鲜密文$ct=(c_0, c_1)\in(R_q)^2$,我们有
$$
\begin{cases}
L_q(c_0)= L_q(a_0)u+ tg+ m+ qx_0 (\exists x_0 \in R) \
L_q(c_1)= L_q(a_1)u+ tf+ qx_1 (\exists x_1 \in R)
\end{cases} \tag{8}
$$
在基环$R$上,其中公钥$pk=(a_0, a_1)\in(R_q)^2$且$u, f, g\leftarrow \chi$(则$u, f, g \in R$)。类似地,公钥$pk=(a_0, a_1)$与私钥$sk\leftarrow \chi$之间存在一个关系。
$$
L_q(a_0)+ L_q(a_1)sk= -te+ qy(\exists y \in R), \tag{9}
$$
其中$e\leftarrow \chi$,然后$e \in R$。解密(2)需要在$R_q$上计算$\langle ct,sk\rangle= c_0 + c_1sk$。但我们在此考虑在基环$R$上的计算;根据关系式(8)和(9),我们显然有(以下关系类似于(3))
$$
L_q(c_0)+ L_q(c_1)sk= L_q(a_0)u+ tg+ m+ qx_0 +(L_q(a_1)u+ tf+ qx_1) sk = u(te+ qy)+ m+ tg+ sktf +qx_0 + skqx_1 = m+ t(ue+ g+ skf)+ qz(\exists z \in R).
$$
注意,元素$z$依赖于提升映射的选择。设$\xi$表示$R$的一个满足$\xi= -qz(\text{mod } t)$的辅助元素。则新鲜
密文$ct$的解密(2)可重写为
$$
\text{Dec}(ct, sk)= L_q(c_0)+ L_q(c_1)sk+ \xi(\text{mod } t) \tag{10}
= m \in R_t.
$$
换句话说,辅助元素$\xi$能够在不使用任何$(\text{mod } q)$运算的情况下恢复对应的明文$m$。此外,由于不使用$(\text{mod } q)$运算,公式(10)可以在不受引理1条件限制的情况下恢复明文$m$。

辅助元素$\xi$的构造

这里让我们给出一种构造辅助元素$\xi$的方法。根据关系式(10),我们显然有
$$
\xi= m- L_q(c_0)- L_q(c_1)sk(\text{mod } t), \tag{11}
$$
这表明我们可以利用新鲜密文$ct=(c_0, c_1)$及其对应的明文$m$来构造目标元素$\xi$。具体需要以下步骤:假设用户$U$拥有其自身的密钥对$(pk,sk)$(这一假设对于第3.1节中描述的应用是自然的)。然后,给定明文$m \in R_t$,

  1. 用户$U$首先通过公式(1)生成一个新鲜密文$ct=(c_0, c_1)$,
  2. 然后他使用私钥$sk$通过公式(11)计算辅助元素$\xi$。

换句话说,作为明文$m$的密文,用户生成了一个由新鲜密文$ct$和辅助元素$\xi$组成的密文对$(ct, \xi)$(有关此类密文对的安全性,请参见第4节)。

3.5 带辅助信息的重加密过程

这里我们说明如何执行重加密。为了实际进行重加密,我们需要同态地计算重写的解密公式(10)。如第3.1节中的应用所示,设$U, C, A$分别表示一个用户、一个云服务器和一个评估者。此外,用户$U$拥有由密钥参数$(n, q, t, \sigma)$生成的自己的密钥对$(pk, sk)$。假设给定明文$m \in R_t$,用户$U$使用$(pk,sk)$生成一个新鲜密文$ct, \xi$和辅助元素的组合$(ct_m)$,并将其存储在云$C$中。如同第3.1节所述,令$(pk_{\text{new}}, sk_{\text{new}})$表示评估者$A$从密钥参数$(n, q_{\text{new}}, t, \sigma)$生成的新密钥对(应使用相同的$(n, t)$进行重加密,此处为简便起见使用相同的$\sigma$)。然后,以下步骤使云$C$能够对密文$(ct, \xi)$进行重加密:

  1. 给定新的公钥$pk_{\text{new}}$,用户$U$首先生成一个新鲜密文
    $$
    ct’ = \text{Enc}(sk, pk_{\text{new}})
    $$
    初始私钥$sk$的密文,并将其发送到云$C$(与自举方法一样,重加密过程需要初始私钥的密文)。

  2. 然后,给定密文$ct’ =(c’ 0 , c’_1) \in(R {q_{\text{new}}})^2$,云$C$可以通过计算对(密文$ct, \xi$)进行重新加密
    $$
    L_q(c_0)\dotplus L_q(c_1) (c’ 0 , c’_0)\dotplus \xi \tag{12}
    =(L_q(c_0)+ L_q(c_1)c’_0 + \xi, L_q(c_1)c’_1) \in(R
    {q_{\text{new}}})^2,
    $$
    其中同态操作$\dotplus$和$
    $在第2.1节中定义(注意该操作是重写的解密公式(10)的同态求值)。更具体地,$(ct, \xi)$的重加密由以下方式给出
    $$
    \text{ReEnc}((ct, \xi), ct’, pk_{\text{new}})=(d_0, d_1) \in(R_{q_{\text{new}}})^2, \tag{13}
    $$
    其中
    $$
    \begin{cases}
    d_0= L_q(c_0)+ L_q(c_1)c’ 0+ \xi, \
    d_1= L_q(c_1)c’_1.
    \end{cases}
    $$
    事实上,根据引理1的条件(即在该条件下),上述密文可以使用新的私钥$sk
    {\text{new}}$正确解密
    $$
    |\langle ct_{\text{new}}, sk_{\text{new}}\rangle| \infty < q {\text{new}}/2, \tag{14}
    $$
    其中设置$ct_{\text{new}}= \text{ReEnc}((ct, \xi), ct’, pk_{\text{new}}))$

这里我们简要描述一个原理,即对重加密密文的解密可以恢复相应的明文。给定一个重加密密文
$$
ct_{\text{new}}= \text{ReEnc}((ct, \xi), ct’, pk_{\text{new}})
$$
对于密文$ct=(c_0, c_1)$,我们考虑
$$
\langle ct_{\text{new}}, sk_{\text{new}}\rangle= L_q(c_0)+ L_q(c_1)c’ 0+ \xi+ L_q(c_1)c’_1sk {\text{new}}
= L_q(c_0)+ \xi+ L_q(c_1) \cdot \langle ct’, sk_{\text{new}}\rangle \tag{15}
$$
其中$ct’= \text{Enc}(sk, pk_{\text{new}})=(c’ 0, c’_1)$。非正式地,我们有
$$
\text{Dec}(ct
{\text{new}}, sk_{\text{new}})=[\langle ct_{\text{new}}, sk_{\text{new}}\rangle] {q {\text{new}}} (\text{mod } t)
= L_q(c_0)+ \xi +L_q(c_1) \cdot \text{Dec}(ct’, sk_{\text{new}})(\text{mod } t) = L_q(c_0)+ \xi+ L_q(c_1)sk(\text{mod } t), \tag{16}
$$
因此,根据公式(10),解密$\text{Dec}(ct_{\text{new}},sk_{\text{new}})$等于相应的明文$m$。此外,公式(16)表明,如果我们使用$\xi$的密文而不是原始元素$\xi$,则重加密方法可能无法正常工作(如果我们能使用$\xi$的密文进行重加密,那么显然我们的重加密方法在多项式LWE假设下是安全的,从而下面第4节的安全性讨论将是不必要的)。具体地,如果我们使用初始公钥$pk$对$\xi$加密得到的密文$ct’‘= \text{Enc}(\xi,pk)$,则公式(16)中将包含密文$ct’‘$所携带的噪声(该元素
$$
[\langle ct’‘, sk\rangle] {q {\text{new}}} = \xi+ q_{\text{new}}z_0
$$
对于某些$z_0$,元素$q_{\text{new}} z_0(\text{mod } t)$在公式(16)中仍作为噪声存在,因此对重加密的密文进行解密无法恢复正确的明文。

这里我们给出一个关于次数参数$n= 4$的简单示例。设$(n, q, t, \sigma)=(4, 1033, 20, 4)$为初始密钥参数,并令
$$
\begin{cases}
pk=(327+621x+519x^2 +885x^3 , 311+861x+625x^2 +661x^3) \
sk= x+4x +4x^3\leftarrow \chi(\text{with small coefficients})
\end{cases}
$$
为一个初始密钥对(注意$R_q = \mathbb{F} {1033}[x]/(x^4 + 1)$)。给定一个明文$m= 3+ 2x+ 4x^2 + x^3 \in R_t$,一个新鲜密文$ct=(c_0 , c_1) \in(R_q)^2$由以下给出
$$
\begin{cases}
c_0 = 243+ 292x+1018x^2 +821x^3 \
c_1 = 911+ 628x+275x^2 +840x^3
\end{cases}
$$
以及通过公式(11)构造的辅助元素由下式给出(此处我们使用标准遗忘映射$L_q$,由$R_q \ni a(\text{mod } q) \mapsto a \in R$定义)
$$
\xi= 12+ 19x+14x^2+9x^3 \in R_t.
$$
设$(pk
{\text{new}}, sk_{\text{new}})$为根据密钥参数$(n, q_{\text{new}}, t, \sigma)=(4, 1073741827, 20, 4)$生成的新密钥对,其中$pk_{\text{new}}=(a’ 0, a’_1)\in(R {q_{\text{new}}})^2$且
$$
\begin{cases}
a’ 0= 224156285+ 218138672x+271803344x^2+175962546x^3 \
a’_1= 561030593+ 610902088x+13527125
x^2+476812016x^3
\end{cases}
$$
$$
sk
{\text{new}}= 3+ 4x\leftarrow \chi(\text{with small coefficients})
$$
(注意$R_{q_{\text{new}}} = \mathbb{F} {1073741827}[x]/(x^4+1)$)。通过新的公钥$pk {\text{new}}$对初始私钥$sk$进行加密,得到一个新鲜的密文$\text{Enc}(sk, pk_{\text{new}})=(c’ 0, c’_1)\in(R {q_{\text{new}}})^2$
$$
\begin{cases}
c’ 0= 271540493+ 785050327x+249061504x^2+855259453x^3 \
c’_1= 132274992+ 184084287x+137137351x^2+965623301x^3
\end{cases}
$$
然后,通过计算得到一个重加密的密文$\text{ReEnc}((ct, \xi), ct’, pk
{\text{new}})=(d_0, d_1)\in(R_{q_{\text{new}}})^2$
$$
\begin{cases}
d_0= 243516610+ 1066115807x+1000403697x^2+850335202x^3 \
d_1= 132274992+ 184084287x+137137351x^2+965623301x^3
\end{cases}
$$
可以用新的私钥$sk_{\text{new}}$将其恢复为原始明文$m=3+ 2x+4x^2+ x^3$(即)。

3.6 重加密方法的特性

虽然自举方法在重加密过程中需要大量的同态操作,但我们的重加密方法仅需少量的同态操作。具体而言,操作(12)表明,该方法仅需一次同态乘法和两次同态加法。因此,我们的方法能够实现实际可用的性能,执行一次重加密仅需几毫秒,而当前的自举方法则需要几分钟(例如,参见[20]中第2.1节加密方案的实现结果)。然而,我们的方法仅适用于新鲜密文(似乎难以对经过同态操作的密文更新其辅助信息)。

尽管自举方法可以通过重加密来降低密文的噪声,但我们的重加密方法会使噪声增大。因此,如示例1所示,为了避免重加密密文的解密失败,需要设置$q_{\text{new}}$大于$q$。具体而言,设$ct_{\text{new}}$是由(13)给出的重加密密文。那么,对于初始密文$ct=(c_0 , c_1)\in(R_q)^2$以及初始私钥$sk$的密文$ct’ = \text{Enc}(sk, pk_{\text{new}})=(c’ 0 , c’_1) \in(R {q_{\text{new}}})^2$,根据方程(15)可得
$$
|\langle ct_{\text{new}} , sk_{\text{new}}\rangle| \infty \approx |L_q(c_1) \cdot \langle ct’, sk {\text{new}}\rangle| \infty \leq nqU \tag{17}
$$
其中$U$表示对于由新公钥$pk
{\text{new}}$生成的任何新鲜密文$ct’‘$,值$|\langle ct’‘,sk_{\text{new}} \rangle| \infty$的一个上界。我们还指出
$$
|\langle ct’, sk
{\text{new}} \rangle| \infty \leq U \quad \text{and} \quad |L_q(c_1)| \infty \leq q.
$$
(17)的最后一个不等式是由于众所周知的结果(例如,参见[20,引理3.2]),即对于任意两个元素$a, b \in R= \mathbb{Z}[x]/(x^n + 1)$,
$$
|a \cdot b| \infty \leq n \cdot |a| \infty \cdot |b| \infty
$$
成立。此外,上界$U$仅取决于选择参数$(n, t, \sigma)$(即,它与参数$q
{\text{new}}$无关)。事实上,Lauter等人[20]通过实验估计了给定参数$(n, q, t, \sigma)$下的$U= 2t\sigma^2\sqrt{n}$。然后,根据条件(14),只需设置
$$
q_{\text{new}} > 2nqU \tag{18}
$$
为了使用新私钥$sk_{\text{new}}$成功解密密文$ct_{\text{new}}$。然而,我们注意到,在对重加密的密文进行更复杂的安全计算时,需要更大的$q_{\text{new}}$,因为更多的同态操作会使密文噪声增大。

备注 3. 在示例1中,我们使用密钥参数$(n, q, t, \sigma)=(4, 1033, 20, 4)$。如果我们使用Lauter等人提出的估计$U= 2t\sigma^2\sqrt{n} \leq 211$,则不等式(18)表明,只需设置
$$
q_{\text{new}} > 2 \cdot 2^2 \cdot 210 \cdot 211 = 2^{23}
$$
以便成功解密重加密后的密文。事实上,我们在示例中取$q_{\text{new}} = 1073741827 \approx 2^{30}$。

3.7 与相关工作的比较

目前用于安全外包计算的主要方法是全同态加密[5, 7, 12, 16, 17]和Yao的混淆电路[26]。然而,这些方法在实际应用中效率不高,并且它们专注于单个密钥,因此不适用于第3.1节中使用多个密钥的应用场景。2012年,López等人[22]提出了一种支持多密钥的全同态加密方案,可用于我们的应用场景。然而,他们的方案以及当前已知的全同态加密方案距离实际应用仍有较大差距。与上述方法不同,Peter等人[25]在2013年提出了一种高效的多密钥外包多方计算方案。具体而言,他们利用Bresson等人[8]提出的加法同态加密方案,实现对不同密钥下密文的安全计算。他们的重加密过程需要服务器之间的交互,因此多个安全计算由两台服务器通过交互完成。

与[8], Wang等人[27]在2014年将两个非共谋服务器和基于ElGamal的代理重加密[2],相结合,并提出了两种高效的方案,用于对多个密钥加密的数据进行计算。根据[27, 表II],的实验结果,将一个密文转换为具有新密钥的密文大约需要30∼60毫秒。另一方面,我们的重加密性能依赖于$(n, q, t, \sigma)$和$(n, q_{\text{new}}, t, \sigma)$的参数设置,这些参数可根据用户希望外包的计算任务来确定。例如,如[20],中所述,当仅需执行低次乘法(例如标准差)时,由于我们的方法仅需少量同态操作,因此重加密只需几毫秒(另见[20,表1]中的实现结果)。此外,[27]在重加密后进行安全计算时需要非共谋服务器之间的通信,而我们的方法无需此类通信(特别是,我们的方法仅需一个服务器,例如云)。这主要是因为我们采用了[6]的部分同态加密方案,而[27]使用了[2]的加法型方案(更具体地说,[2]的加法版本不支持乘法运算,因此乘法运算需要解密,参见[27,图3]以细节)。请注意,本文未提供我们重加密方法的实验结果,因此无法更详细地与[25, 27]等最先进工作进行比较。

4. 安全性讨论

由于我们的重加密系统不是代理重加密,其安全准则与代理重加密的安全准则略有不同(参见第3.2节以了解差异)。在[25,27],中考虑了与我们类似的设置,并且重点集中在安全计算方面。我们重加密系统的安全性依赖于底层同态加密的密钥相关安全性(或称循环安全性)。因此,我们从公钥加密的角度讨论系统的安全性,而不是在真实/理想框架下进行讨论。

与第3.1节中一样,我们假设用户$U_1,U_2,…,U_r$生成其密钥对($pk_i,sk_i$),并将他们的数据$m_i$以$\text{Enc}(m_i, pk_i)$的形式存储到云服务器$C$中。同时,我们假设一个评估者$A$收集所有数据。为了处理加密形式的数据,$A$生成一个新的密钥对($pk_{\text{new}}, sk_{\text{new}}$),所有用户$U_1,U_2,…,U_r$通过发送$\text{Enc}(sk_i, pk_{\text{new}})$和$\xi_i$来实现数据的移交。我们假设用户和评估者均诚实执行协议,而窃听者$E$试图从移交过程中提取有关$m_i$的信息。

这里,我们考虑最简单的情况,即$n= 1$的情况。请注意,将此处的讨论推广到一般情况是直接的。

因此,我们考虑挑战者与攻击者之间的如下游戏。

步骤1. 挑战者首先运行密钥生成算法(针对用户1)以获得(公钥,私钥)。然后挑战者将公钥交给攻击者。

步骤2. 攻击者选择两条明文$m_0$和$m_1$,并将其发送给挑战者。

步骤3。 挑战者选择一个随机比特$b \in{0, 1}$并计算$ct_b= \text{Enc}(m_b, pk)$和$\xi$,其中$\xi$由$sk$计算得出。然后挑战者将$(ct_b, \xi)$发送给攻击者。

步骤4。 挑战者还运行密钥生成算法(用于评估者)以获得$(pk_{\text{new}},sk_{\text{new}})$。然后挑战者将$pk_{\text{new}}$提供给攻击者。

步骤5. 挑战者计算用于数据降级的$ct’ = \text{Enc}(sk,pk_{\text{new}})$(针对用户1)。然后挑战者将$ct’$发送给攻击者。

步骤6. 挑战者计算$\text{ReEnc}((ct_b , \xi), ct’, pk_{\text{new}})$(针对评估者),并将其发送给攻击者。

步骤7. 攻击者输出对$b$的猜测$b’$。

攻击者在此游戏中的优势定义为$\left|\Pr[b= b’] - 1/2\right|$。如果所有概率多项式时间对手的优势至多是可忽略的,则称我们之前章节中给出的重加密方法是secure。由于$\text{ReEnc}((ct_b , \xi), ct’, pk_{\text{new}})$可从$(ct_b , \xi), ct’, pk_{\text{new}}$计算得到,因此上述优势本质上与区分器$D$的区分概率相同:
$$
\left| \Pr[D(pk, ct_0 , \xi, pk_{\text{new}} , ct’)= 1] -\Pr[D(pk, ct_1 , \xi, pk_{\text{new}} , ct’)= 1] \right| \tag{19}
$$
在本节中,我们将讨论上一节给出的重加密方法的安全性。也就是说,我们将证明区分概率(19)可以忽略不计。在本节中,我们假设多项式LWE假设的计算困难性,第2.1节中的加密方案的安全性依赖于该假设。即,我们假设定义1中的两个分布P1和P2在计算上是不可区分的。给定$k \geq 1$,对于两个分布$P_1$和$P_2$,设
$$
P^{(k)}_1 :=(P_1)^k,
$$
$$
P^{(k)}_2 :={((a_1, b_1),…,(ak, bk)) \text{ where } ai \leftarrow U R_q, ei\leftarrow \chi, s\leftarrow \chi, bi= ais+ ei}.
$$
我们还假设$P^{(k)}_1$和$P^{(k)}_2$在计算上是不可区分的。为简便起见,我们在此将该假设称为(多项式)基于误差学习(k)假设。

在证明过程中,我们准备一些符号。给定四个元素$c, c’, v, w \in R_q$,考虑以下变换
$$
\tau(c,c’,v,w):(a_1, a_0) \mapsto(ca_1+ v, c’a_0+ w).
$$
由于$c$和$q$互素,若$(a_1, a_0)$从$P_1$中采样,则两个元素$c’a_0$和$ca_1$在$R_q$上均匀分布。在这种情况下,对于固定的$w$,$c’a_0+ w$也在$R_q$上均匀分布。特别地,注意到对于任意固定的$w$,$\tau(t,-t,0,w)(P_1)$与$P_1$相同且
$$
P_3:= \tau(t,-t,0,0)(P_2)
$$
是第2.1节加密方案的公钥分布(参见第2.1节的密钥生成)。我们首先观察到,在多项式LWE假设下,两个分布$P_1$和$P_3$是计算不可区分的,因为变换$\tau(t,-t,0,0)$起到了归约的作用。因此,我们有时将从$P_1$中采样的元素称为random public-key,而将从中采样的元素称为real public-key。换句话说,随机公钥和真实公钥是计算不可区分的。

这里让我们从以下声明开始:给定明文$m$,在基于误差学习(2)假设下,使用随机公钥对$m$的加密与在$R_q$上带有辅助信息$m$的随机四元组不可区分。即,$((a_1, a_0) ,(c_1, c_0), m)$与$((a_1, a_0) ,(b_1, b_0), m)$不可区分,其中$(a_0, a_1)$和$(b_0, b_1)$表示随机公钥,$\text{Enc}(m,pk)=(c_0, c_1)$是由(1)式给出的密文,对应第一个随机公钥$pk=(a_0, a_1)$(注意该密文$\text{Enc}(m, pk)$无法被解密)。

设$(a, b) \leftarrow \tau(t,t,0,0)(P_i)$且$(c, d) \leftarrow \tau(t,t,0,m)(P_i)$。如果$i= 1$,则$(a, c, b, d, m)$是一个带有辅助信息$m$的随机四元组。如果$i= 2$,则$(a, c, b, d, m)$由一个随机公钥$pk’ =(a, c)$和$\text{Enc}(m, pk’)= (b, d)$构成,并带有辅助信息$m$。因此,通过归约变换$\tau$以及假设$P_1$和$P_2$不可区分,可证明上述断言成立。

我们可以轻松地推广上述归约;设
$$
(a, b) \in \tau(t,t,0,v)(P_i) \quad \text{and} \quad (c, d) \in \tau(t,t,0,m)(P_i).
$$
如果$i= 1$,则$(a, c, b, d, m)$也是一个带有辅助信息$m$的随机四元组。如果$i= 2$,则$(a, c)$仍然是一个随机公钥,但我们应该将$(b, d)$称为什么尚不明确(无论如何,它都起着重要作用)。在这里,我们看到$(a, c, b, d, m) {i=1}$和$(a, c, b, d, m) {i=2}$是不可区分的。

接下来,我们考虑
$$
P_4:= \tau(u,u,v,m)(P_3),
$$
其中$u\leftarrow \chi$。如果$v= 0$,则$(P_3, P_4)$是真实公钥$pk$和对明文$m$的真实加密$\text{Enc}(m,pk)$所构成的密文对的分布。现在,我们考虑$v \neq 0$的情况。在这种情况下,$(P_3, P_4)$可以使用私钥$s$解密为$m+vs$。因此,我们称$P_4$(在$v \neq 0$的情况下)为从$P_3$中采样的真实公钥$pk$下的伪加密$\text{Enc}(m+ vs,pk)$的分布。此外,我们考虑
$$
P_5:= \tau(u,u,v,m)(P_1),
$$
其中$u\leftarrow \chi$。那么,在LWE假设下,$(P_3, P_4)$和$(P_1, P_5)$是不可区分的,且$(P_1, P_5, m)$与$(a, c, b, d, m)_{i=2}$相同。因此,给定一个从$P_3$中采样的真实公钥$pk$,真实加密$\text{Enc}(m,pk)$和伪加密$\text{Enc}(m+ vs, pk)$在附加信息$m$下均表现为随机的。

由于变换$\tau(u,u,v,m+z)$可以被分解为
$$
\tau(1,1,v,z) \circ \tau(u,u,0,m),
$$
我们可以将$\tau(u,u,-L_q(c_1),-L_q(c_0))$应用于$P_3$,其中$L_q(c_1)$和$L_q(c_0)$可以根据密文$\tau(u,u,0,m)(P_3)$按照方程(8)计算得到。因此,$\tau(u,u,-L_q(c_1),-L_q(c_0))(P_3)$可表示为$\text{Enc}(m- L_q(c_0)- L_q(c_1)s, P_3)$。

令$m’= m+ L_q(c_0)+ L_q(c_1)s$。作为一个推论,我们有以下结论:给定一个真实的公钥$pk$,$(pk, \text{Enc}(m’, pk), \xi)$看起来像一个带有辅助信息
$$
\xi= m’- L_q(c_0)- L_q(c_1)s
$$
的随机四元组。这意味着除了线性方程$m’- L_q(c_0)- L_q(c_1)s$之外,没有泄露任何其他信息。从线性方程组的角度来看,存在两个未知变量(即$m’$和$s$),但只有一个方程(即$m’- L_q(c_0)- L_q(c_1)s$)。因此我们既无法恢复$m’$,也无法恢复$s$。

最后,我们将构造$pk_{\text{new}}$和$\text{Enc}(sk, pk_{\text{new}})$。假设$pk=(a_0,-(a_0s+ te))$,并令$s’, u’\leftarrow \chi$和$\alpha\leftarrow R_q$。然后我们可以计算$pk_{\text{new}} =(\alpha a_0 ,- \alpha(a_0(s + s’) + te))$。同时我们计算$\tau(u’,u’,1,0)(P_3)$,这可以视为$\text{Enc}(sk, pk_{\text{new}} = s+ s’)$。该密文可通过使用$sk$进行解密。这完成了安全性证明。

5. 结论与未来工作

我们提出了一种在[6]的基于多项式LWE的同态加密中的高效重加密方法。该方法利用辅助信息以提高效率,但在多项式LWE假设下仍具有安全性。特别是,自举方法需要大量同态操作,而我们的方法仅需少量同态操作。然而,与自举方法不同,我们的方法无法刷新密文噪声,因此不能用于构造全同态加密方案(反而会使密文的噪声增大)。我们提出的重加密方法的一个典型应用是针对使用不同密钥进行协同计算密文时的安全密钥交换。本文中,我们仅展示了如何执行所提出的重加密,并讨论了其安全性。作为未来工作,我们希望将该方法应用于具体场景,并给出合适的加密方案参数和实验结果以进行比较最先进的代理重加密方案,例如[25, 27]。此外,我们希望考虑使用从CPA‐安全同态加密到CCA1‐安全同态加密的转换技术,来增强我们重加密方法的CCA1安全性。

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值