本篇文章翻译于CKKS EXPLAINED, PART 3: ENCRYPTION AND DECRYPTION,主要介绍CKKS方案的加密和解密。

介绍

在上一篇 CKKS Part2: CKKS的编码和解码 中,我们看到了如何实现CKKS的编码器和解码器,这使我们能够将向量转换为多项式,反之亦然。这一步是必要的,因为我们将看到,与直接使用向量相比,使用多项式构建同态加密方案要高效得多。

在本文中,我们将看到如何使用困难问题,例如LWE或RLWE来构建近似同态加密方案。CKKS使用近似算法而不是精确算法,这意味着一旦我们完成计算,我们可能会得到与直接计算略有不同的结果。这意味着,如果你加密2和3,将其密文相加,然后解密,你可能会得到4.99或5.01,但不是5。其他方案,如BFV是精确的,这意味着他们将产生正好5。

那为什么要用CKKS呢?CKKS更适用于实数运算,我们可以得到近似但接近的结果,而BFV更适用于整数运算。

在本文中,我们将看到如何使用LWE和RLWE实现近似算术同态加密方案的加密和解密。

LWE

CKKS是一种公钥加密方案,其中生成一个私钥和一个公钥。公钥用于加密,可以共享,私钥用于解密,必须保密。

CKKS的基础和许多其它同态加密方案,是在论文 On lattices, learning with errors, random linear codes, and cryptography 中引入的误差学习(LWE)问题,它最初是在格上、误差学习、随机线性码和密码学中引入的。LWE问题是区分形式为\((a_i,b_i)=(a_i,<a_i,s>+e_i)\)的噪声对和随机选取的(a_i,b_i)。这是\(a_{i},s\in Z_{q}^{n}\),ai是随机采样,s是我们的私钥,\(e_i∈ℤ^q\)是噪声,通常是高斯噪声,用来使问题变得更难。如果我们不引入e,这个问题会更容易解决,因为我们可以使用高斯消去法来解线性方程组。

众所周知,LWE问题和最坏情况下的格上问题一样困难,后者目前可以抵御量子计算机的攻击。因此,我们可以利用这样一个事实,即从成对的\((a_i,<a_i,s>+e_i)\)中找到一个秘密s是困难的,并在此基础上构建一个密码系统。

假设我们已经生成了一个私钥s∈ℤ,,并发布n对类型\((a_i,<a_i,s>+e_i)\),可以用矩阵形式写成(A,A.s+e)和\(A∈ℤ^{n×n}_q\),\(e∈ℤ^n_q\)。正如LWE问题所述,很难从这对信息中恢复私钥,因此我们可以使用它来创建公钥。

实际上,我们将使用p=(−A.s+e,A)作为我们的公钥,可以公开使用,因为密钥很难从中提取。我们选择了储存−A.s.而不是A.s.是为了方便,我们将在后面看到,但这并不能改变问题。

然后对消息\(m∈ℤ^n_q\)使用公钥和私钥进行加密和解密,我们可以使用以下方案:

使用p对m进行加密:输出\(c=\left( \mu ,0 \right)+p=\left( \mu -A.s+e,A \right)=\left( c_{0,}c_{1} \right)\)。

使用s对c进行解密,输出\(u'=c_{0}+c_{1}.s=\mu -A.s+e+A.s=\mu +e 约等于u\)

所以在加密阶段,我们使用公钥来屏蔽我们的消息。因此,消息隐藏在密文的第一个元素中,并带有掩码−A.s。请记住,A是均匀采样的,因此它确实可以有效地屏蔽μ。要删除它,我们可以使用c的第二个坐标,它只存储A,并将其与密钥s结合,以获得μ+e的解密。注意这里我们并没有得到原始信息μ,而是μ加上一些噪声e,这就是为什么我们说我们有一个近似的算术方案。如果e足够小,那么解密将接近原始μ。

因此,我们在这里看到了如何使用LWE问题来构建一个公钥密码方案,该方案可以抵御量子攻击。上述实现的问题在于,私钥大小\(\Theta \left( n \right)\) ,则公钥大小由于矩阵A和计算操作为\(\Theta \left( n^{2} \right)\)。由于n将决定我们方案的安全性,如果我们使用LWE来构造我们的方案,它在实践中效率太低,密钥的大小\(\Theta \left( n^{2} \right)\)和复杂性会使其变得太不切实际。

RLWE

这就是为什么我们会考虑在理想格上引入误差问题的环学习和环上误差的学习,这是LWE的一个变种,但在环上。即所有的运算不是向量\(\Zeta _{q}^{n}\)之间的运算,而不是在环上\(\Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\),N是2的次幂。现在a,s,e从\(\Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\)上采样,其中a仍然均匀采样,s是一个小秘密多项式,e是一个小噪声多项式。切换到RLWE有两个主要优点:

密钥大小不再是二次的,而是线性的,因为我们现在输出公钥p=(−a.s+e,a),其中a.s表示a与s的多项式乘积。因为所有操作都是在多项式之间完成的,所以私钥和公钥的大小都是一样的\(\Theta \left( n \right)\) 。

乘法是在多项式上进行的,因此它的复杂性为\(\Theta \left( n\log \left( n \right) \right)\)使用Discrete Fourier Transform for polynomial multiplication,离散傅里叶变换进行多项式乘法,而不是\(\Theta \left( n^{2} \right)\)因为我们必须做矩阵向量乘法。

因此,通过使用RLWE而不是LWE,我们将获得更小的密钥,运算速度将更快,因此前面的方案变得更加实用。此外,RLWE仍然是一个难题,并提供了强大的安全保障,因此使用RLWE仍然提供了一个安全方案。

我们知道为什么使用多项式很重要,因为它们为高效安全的方案提供了基础。所以你现在可以理解为什么我们要费尽心机把向量转换成多项式\(\Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\),反之亦然,因为我们现在可以利用多项式环的代数结构。

同态计算

现在,我们已经明白了为什么我们要研究\(\Zeta _{q}\left[ X \right]/\left( X^{N}+1 \right)\),以及如何基于此获得加密方案,让我们看看如何在密文上定义加法和乘法,从而获得同态加密方案。

所以我们说我们有一个私钥s和一个公钥p=(b,a)=(−a.s+e,a)。要加密消息μ,我们只需输出c=(μ+b,a),要用s解密它,我们计算c0+c1.s将大致给出原始信息。

加法

现在假设我们有两条消息μ和μ′,我们将它们加密为\(c=(c_0,c_1)\)和\(c′=(c′_0,c′_1)\)。那么\(c_{add}=c+c′=(c_0+c′_0,c_1+c′_1)\)是μ+μ′的正确加密,也就是说,当我们用s解密它时,我们得到(近似地)μ+μ′。

事实上,\(c_{add}\)的解密机制产生了$$c_{add,0}+c_{add,1}.s=c_{0}+c_{0}'+\left( c_{1}+c_{1}' \right).s=c_{0}+c_{1}.s+c_{0}'+c_{1}'.s=u+u'+2e约等于u+u'$$因为我们说过e可以忽略不计。

这意味着,如果你将密文相加,然后解密,你将得到明文的相加!这意味着,通过这个简单的方案,您可以允许某人对加密数据执行加法操作,用户仍然可以解密数据并获得正确的结果。这是我们走向同态加密方案的第一步。

乘法

尽管如此,我们仍然需要定义密文上的乘法,这更复杂。实际上,我们的目标是找到一个密文结果\(c_{mult}\),这样当我们用私钥s解密它时,我们就得到了明文的乘积。

因为两个密文相乘更复杂,我们现在将首先关注密文与明文相乘,并在后面的文章中了解如何在密文之间进行相乘。

下面介绍的是明文乘密文

假设我们有一个明文μ,加密成密文\(c=(c_0,c_1)\)和一个明文μ′。然后,为了获得乘法的密文,我们只需要输出\(c_{mult}=(μ′.c_0,μ′.c_1)\)。

事实上,当我们解密\(c_{mult}\)时$$u'.c_{0}+u'.c_{1}.s=u'.\left( c_{0}+c_{1}.s \right)=u'.\left( u+e \right)=u'.u+u'.e约等于u'.u$$

因此,通过这加密数据和明文进行加法和乘法的实现,一旦我们对其进行解密,我们就会得到与对明文数据执行相同操作的结果。

因为我们还有一些操作需要解决,比如密文乘法、重新线性化和重缩放,所以我们现在还不介绍代码实现。一旦我们拥有了所有的构建块,我们将把所有东西放在一起,形成一个端到端的近似同态加密方案,类似于CKKS!

所以我希望你们理解了如何使用RLWE构建同态加密方案,下一站,密文到密文的乘法!

CKKS Part3: CKKS的加密和解密的更多相关文章

  1. CKKS Part4: CKKS的乘法和重线性化

    本文翻译于CKKS EXPLAINED, PART 4: MULTIPLICATION AND RELINEARIZATION,主要介绍CKKS方案中的密文乘法和重线性化技术 介绍 在上一篇 CKKS ...

  2. CKKS Part2: CKKS的编码和解码

    该文章翻译自CKKS EXPLAINED, PART 2: FULL ENCODING AND DECODING,主要介绍CKKS方案中是如何编码和解码的(如何将复数向量转成整数多项式,以及如何求逆运 ...

  3. CKKS Part5: CKKS的重缩放

    本文翻译于 CKKS EXPLAINED, PART 5: RESCALING,主要介绍CKKS方案中最重要的技术- rescaling,重缩放技术 介绍 在CKKS的前一篇文章 CKKS Part4 ...

  4. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  5. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  6. 使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密

    在数据库实现加密与解密的文章,Insus.NET较早前也有写过,可以在本博客中可以搜索得到. 今天使用EncryptByPassPhrase和DecryptByPassPhrase来简单实现. 在数据 ...

  7. AES —— JAVA中对称加密和解密

    package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  8. 通过ios实现RSA加密和解密

    在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...

  9. PHP 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密

    <?php /* 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密 */ // 加密 $algorithm = MCRY ...

随机推荐

  1. C# 基础(更新中)

    Data Structure There're two types of variables in C#, reference type and value type. Enum: enum Colo ...

  2. Fibonacci String(hdu 1708)

    Fibonacci String Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 1067 - Combinations

    1067 - Combinations   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Giv ...

  4. Scale-Invariant Error

    目录 概 主要内容 代码 Eigen D., Puhrsch C. and Fergus R. Depth Map Prediction from a Single Image using a Mul ...

  5. Robust De-noising by Kernel PCA

    目录 引 主要内容 Takahashi T, Kurita T. Robust De-noising by Kernel PCA[C]. international conference on art ...

  6. Linux远程操作

    应用场景 公司开发时候,具体的应用场景是这样的1.linux服务器是开发小组共享 正式上线的项目是运行在公网 因此程序员需要远程登录到Linux进行项目管理或者开发 远程登录客户端有Xshell6,X ...

  7. <数据结构>XDOJ324,325图的优先遍历

    XDOJ324.图的广度优先遍历 问题与解答 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出广度优先搜索遍历序列,并且给出该无向图的连通分量的个数.在遍历时,当有多个点可选时,优先选择编号小的顶 ...

  8. Fences桌面图标分类

    1.简介 Fences也称为栅栏桌面, 可以用来分类和组织桌面上的图标. Fences可以将不同的图标放到不同的容器当中, 还可以自由的设置这个容器,比如移动和拉伸等等. 这样图标分类后,桌面就整洁多 ...

  9. AES对称加密算法实现:Java,C#,Golang,Python

    高级加密标准(Advanced Encryption Standard,简写AES),是一种用来替代DES的对称加密算法,相比DES,AES安全性更高,加密速度更快,因此被广泛使用. 理论上看,AES ...

  10. x86-2-保护模式(protect mode)

    x86-2-保护模式(protect mode) 引入保护模式的原因: 操作系统负责计算机上的所有软件和硬件的管理,它可以百分百操作计算机的所有内容.但是,操作系统上编写的用户程序却应当有所限制,比如 ...