1

我想知道实数CKKS编码中明文的大小和形式,以小N为例:

  • 输入向量数组= [1.1, 2.2]
  • N = 8,比例增量= 2^2 = 4
  • 插槽数 = N/2 = 4

明文形式:

  • ptx = [4.4 8.8 0.0 0.0],大小为 N/2 或:
  • ptx = [4.4 8.8 0.0 0.0 | 0.0 0.0 0.0 0.0] 大小为 N 或:
  • ptx = [4.4 8.8 0.0 0.0 | 4.4 8.8 0.0 0.0] 大小为 N

谢谢您的帮助!

4

2 回答 2

1

首先,在 CKKS 中,时隙数始终为 N/2,其中 N 为poly_modulus_degree。当你编码一个比这更短的向量时,其余的槽被简单地设置为零。因此,在您的情况下,纯文本插槽值将是[1.1, 2.2, 0.0, 0.0],比例为 4。但是,有一个重要的特殊情况:当您对单个值进行编码时,所有插槽都将保存该值。

然而,这根本不是实际明文数据的样子。没有一种简单的方法可以从明文系数数据中读取槽值:您建议的选项都与 CKKS 编码中发生的情况不匹配:

  1. 输入向量的复数共轭长度加倍;
  2. 计算类似 FFT 的变换以将输入向量转换为复系数多项式;
  3. 复系数按指定比例缩放;
  4. 系数的实部被提取为整数modulo coeff_modulus(实际上这是在 RNS 表示中,即对每个coeff_modulus素数取模);
  5. 生成的 RNS 多项式转换为 NTT 形式,这是使用 CKKS 时明文的默认状态。

如果没有缩放,第 4 步将引入如此多的错误,以至于该过程将变得完全不可逆。

于 2020-06-01T16:35:32.843 回答
0

我真的很感谢你的帮助。我不清楚如何使用 CKKS 方案将消息向量编码和加密为密文,我无法在 SEAL 代码中打印出来。无论如何,我想知道:

  1. 25的步骤将 N 大小的向量转换为 N 大小的 NTT 形式的密文。
  2. 在步骤1中将实数向量和复数向量加倍有什么不同,
  3. 我们如何在步骤2中将复数的实数和图像部分映射到 N/2 个槽中?

如果问题很愚蠢,请不要笑我:)。谢谢你的帮助。

于 2020-06-02T07:22:35.173 回答