介绍

在上一篇 CKKS Part3: CKKS的加密和解密 ,我们看到了如何基于RLWE问题创建同态加密方案,实现同态加法和密文明文乘法。

虽然执行密文-明文乘法很容易,但正如我们将看到的,密文-密文要复杂得多。事实上,我们需要处理很多事情才能正确地完成它,比如找到正确的操作,这样一旦解密,我们就可以得到两个密文的乘积,以及管理密文的大小。

因此,本文将介绍密文乘法和重新线性化的概念,以减少生成的密文的大小。

基本概念

为了了解我们将如何在CKKS中执行密文-密文乘法,让我们回顾一下我们在前一篇文章中看到的内容。

首先,记住我们研究的是多项式空间\(R_{q}=\Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\)。我们将s作为我们的私钥,然后我们可以安全地输出一个公钥p=(b,a)=(−a. s+e,a),其中a均匀取样\(R_{q}\)、 e是一个小的随机多项式。

然后我们有\(\mbox{E}ncrypt\left( u,s \right)=c=\left( c_{0},c_{1} \right)=\left( u,0 \right)+p=\left( b+u,a \right)\in R_{q}^{2}\)是明文\(u \in \Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\)使用公钥p的加密操作。要使用私钥s解密密文c,我们执行以下操作:$$Decrypt\left( c,s \right)=c_{0}+c_{1}.s=u+e$$

然后我们发现定义一个在密文上的加法运算\(𝙲_{𝙰𝚍𝚍}(c,c′)\)很容易,所以一旦我们解密\(𝙲_{𝙰𝚍𝚍}\) 我们将大致得到两个基本明文的加法。

实现这一点的方法是定义\(𝙲_{𝙰𝚍𝚍}\) 具体如下:$$\mbox{C}{Add}\left( c,c' \right)=\left( c{0}+c_{0}',c_{1}+c_{1}' \right)=c+c'=c_{add}$$

事实上,如果我们对其应用解密操作,我们会得到:$$Decrypt\left( c_{add},s \right)=c_{0}+c_{0}'+\left( c_{1}+c_{1}' \right).s=c_{0}+c_{1}.s+c_{0}'+c_{1}'.s=Decrypt\left( c,s \right)+Decrypt\left( c',s \right)约等于u+u'$$

这里我们看到,对密文做加法非常简单,我们只需要将两个密文相加,我们可以使用常规的解密操作来解密结果,以获得两个对应明文的相加。

我们将看到,在进行密文乘法时,乘法和解密操作都更加复杂。

密文-密文乘法

现在我们看到了这一点,我们看到我们的目标是找到操作\(𝙲_{𝙼𝚞𝚕𝚝},𝙳𝚎𝚌𝚛𝚢𝚙𝚝𝙼𝚞𝚕𝚝\), 对于两个密文c,c′我们有:\(DecryptMult\left( \mbox{C}_{Mult}\left( c,c' \right),s \right)=Decrypt\left( c,s \right).Decrypt\left( c',s \right)\),切记\(Decrypt\left( c,s \right)=c_{0}+c_{1}.s\),我们展开上面的式子得到:

\[Decrypt\left( c,s \right).Decrypt\left( c',s \right)=\left( c_{0}+c_{1}.s \right).\left( c_{0}'+c_{1}'.s \right)=c_{0}.c_{0}'+\left( c_{0}.c_{1}'+c_{0}'.c_{1} \right).s+c_{1}.c_{1}'.s^{2}=d_{0}+d_{1}.s+d_{2}.s^{2}\]
02-06 20:22