实数明文形式 CKKS 编码 Microsoft SEAL

The form of Plaintext in real number CKKS Encoding Microsoft SEAL

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

明文形式:

感谢您的帮助!

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

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

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

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

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

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

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