CKKS EXPLAINED, PART 2: FULL ENCODING AND DECODING
Introduction
在之前的文章《解析CKKS:第一部分,基本编码和解码》中,我们了解到为了在加密的复数向量上进行计算,我们必须首先构建一个编码器和一个解码器,将我们的复数向量转化为多项式。
编码器和解码器的步骤是必要的,因为加密、解密和其他机制都是基于多项式环进行的。因此,我们需要一种将实值向量转化为多项式的方法。
我们还了解到,通过使用规范嵌入
因此,在本文中,我们将探讨如何实现原始论文《用于近似数算术的同态加密》中使用的编码器和解码器,这将是我们从头开始实现CKKS的第一步。
让我们以一个具体的例子来说明通过规范嵌入建立同构映射的概念。
假设我们有一个复数向量空间
首先,我们需要选择一个规范嵌入
现在,我们可以使用规范嵌入
将复数向量的每个元素分别与根
进行求值。假设求值结果分别为 。 使用这些求值结果构建一个多项式,例如
。 将多项式
模掉多项式 ,得到在多项式环 中的一个同余类。
通过这个过程,我们将复数向量
在CKKS方案中,这样的同构映射使得我们可以在复数向量空间中进行方便的计算,然后将结果转换回多项式环中的同余类,从而实现在加密状态下对复数向量进行计算。
CKKS encoding
与上一篇文章的不同之处在于,编码多项式的明文空间现在是
为了解决这个问题,让我们来看一下规范嵌入
因为
回想一下之前的图像,当

在这张图片上,我们可以看到
因此,
==这个操作,将
现在,我们可以从
我们面临的一个问题是,我们不能直接使用
这个细节很重要,因为它意味着我们必须找到一种将
这个想法很简单:
因为基是正交的(但不一定是标准正交的),我们有
最后,一旦我们得到了坐标
一旦我们投影到
为了保持精度,在舍入过程中我们引入一个缩放因子
因此,最终的编码过程如下:
取一个元素
。 将其扩展为
。 将其乘以
以保持精度。 将其投影到
: 。 使用
进行编码: 。
解码过程则简单得多,对于多项式


评论区
欢迎分享你的思考、补充或问题。