CKKS Part3: CKKS的加密和解密
本篇文章翻译于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问题是区分形式为
众所周知,LWE问题和最坏情况下的格上问题一样困难,后者目前可以抵御量子计算机的攻击。因此,我们可以利用这样一个事实,即从成对的
假设我们已经生成了一个私钥s∈ℤ,,并发布n对类型
实际上,我们将使用p=(−A.s+e,A)作为我们的公钥,可以公开使用,因为密钥很难从中提取。我们选择了储存−A.s.而不是A.s.是为了方便,我们将在后面看到,但这并不能改变问题。
然后对消息
使用p对m进行加密:输出
使用s对c进行解密,输出
所以在加密阶段,我们使用公钥来屏蔽我们的消息。因此,消息隐藏在密文的第一个元素中,并带有掩码−A.s。请记住,A是均匀采样的,因此它确实可以有效地屏蔽μ。要删除它,我们可以使用c的第二个坐标,它只存储A,并将其与密钥s结合,以获得μ+e的解密。注意这里我们并没有得到原始信息μ,而是μ加上一些噪声e,这就是为什么我们说我们有一个近似的算术方案。如果e足够小,那么解密将接近原始μ。
因此,我们在这里看到了如何使用LWE问题来构建一个公钥密码方案,该方案可以抵御量子攻击。上述实现的问题在于,私钥大小
RLWE#
这就是为什么我们会考虑在理想格上引入误差问题的环学习和环上误差的学习,这是LWE的一个变种,但在环上。即所有的运算不是向量
密钥大小不再是二次的,而是线性的,因为我们现在输出公钥p=(−a.s+e,a),其中a.s表示a与s的多项式乘积。因为所有操作都是在多项式之间完成的,所以私钥和公钥的大小都是一样的
乘法是在多项式上进行的,因此它的复杂性为
因此,通过使用RLWE而不是LWE,我们将获得更小的密钥,运算速度将更快,因此前面的方案变得更加实用。此外,RLWE仍然是一个难题,并提供了强大的安全保障,因此使用RLWE仍然提供了一个安全方案。
我们知道为什么使用多项式很重要,因为它们为高效安全的方案提供了基础。所以你现在可以理解为什么我们要费尽心机把向量转换成多项式
同态计算#
现在,我们已经明白了为什么我们要研究
所以我们说我们有一个私钥s和一个公钥p=(b,a)=(−a.s+e,a)。要加密消息μ,我们只需输出c=(μ+b,a),要用s解密它,我们计算c0+c1.s将大致给出原始信息。
加法#
现在假设我们有两条消息μ和μ′,我们将它们加密为
事实上,
这意味着,如果你将密文相加,然后解密,你将得到明文的相加!这意味着,通过这个简单的方案,您可以允许某人对加密数据执行加法操作,用户仍然可以解密数据并获得正确的结果。这是我们走向同态加密方案的第一步。
乘法#
尽管如此,我们仍然需要定义密文上的乘法,这更复杂。实际上,我们的目标是找到一个密文结果
因为两个密文相乘更复杂,我们现在将首先关注密文与明文相乘,并在后面的文章中了解如何在密文之间进行相乘。
下面介绍的是明文乘密文
假设我们有一个明文μ,加密成密文
事实上,当我们解密
因此,通过这加密数据和明文进行加法和乘法的实现,一旦我们对其进行解密,我们就会得到与对明文数据执行相同操作的结果。
因为我们还有一些操作需要解决,比如密文乘法、重新线性化和重缩放,所以我们现在还不介绍代码实现。一旦我们拥有了所有的构建块,我们将把所有东西放在一起,形成一个端到端的近似同态加密方案,类似于CKKS!
所以我希望你们理解了如何使用RLWE构建同态加密方案,下一站,密文到密文的乘法!
作者:Hang Shao
出处:https://www.cnblogs.com/pam-sh/p/15864191.html
版权:本作品采用「知识共享」许可协议进行许可。
声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)