实数明文形式 CKKS 编码 Microsoft SEAL
The form of Plaintext in real number CKKS Encoding Microsoft SEAL
我想知道实数CKKS编码中Plaintext的大小和形式,以小N为例:
- 输入向量数组 = [1.1, 2.2]
- N = 8,比例 Delta = 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
感谢您的帮助!
首先,在 CKKS 中,槽数始终为 N/2,其中 N 为 poly_modulus_degree
。当你编码一个比它短的向量时,其余的槽位被简单地设置为零。因此,在您的情况下,明文槽值将是 [1.1, 2.2, 0.0, 0.0]
,比例为 4。但是,有一个重要的特殊情况:当您对单个值进行编码时,所有槽都将保留该值。
然而,这根本不是实际明文数据的样子。没有一种简单的方法可以从明文系数数据中读取槽值:none 您建议的选项与 CKKS 编码中发生的情况相匹配:
- 输入向量的长度加倍及其复数共轭;
- 计算类似 FFT 的变换以将输入向量转换为复系数多项式;
- 复系数按指定比例缩放;
- 系数的实部被提取为整数
modulo coeff_modulus
(实际上这是在 RNS 表示中,即对每个 coeff_modulus
素数取模);
- 生成的 RNS 多项式被转换为 NTT 形式,这是使用 CKKS 时明文的默认状态。
如果不进行缩放,第 4 步将引入太多错误,以至于该过程将变得完全不可逆。
非常感谢您的帮助。我不清楚如何使用 CKKS 方案将消息向量编码和加密为密文,我无法在 SEAL 代码中打印出来。无论如何,我想知道:
- 从 2 到 5 的步骤将 N 大小的向量转换为 N 大小的 NTT 形式密文。
- 在步骤 1、
中将实数向量和复数向量加倍有何不同
- 我们如何在步骤 2 中将复数的实部和图像部分映射到 N/2 个槽?
如果问题很愚蠢,请不要笑我:)。感谢您的帮助。
我想知道实数CKKS编码中Plaintext的大小和形式,以小N为例:
- 输入向量数组 = [1.1, 2.2]
- N = 8,比例 Delta = 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
感谢您的帮助!
首先,在 CKKS 中,槽数始终为 N/2,其中 N 为 poly_modulus_degree
。当你编码一个比它短的向量时,其余的槽位被简单地设置为零。因此,在您的情况下,明文槽值将是 [1.1, 2.2, 0.0, 0.0]
,比例为 4。但是,有一个重要的特殊情况:当您对单个值进行编码时,所有槽都将保留该值。
然而,这根本不是实际明文数据的样子。没有一种简单的方法可以从明文系数数据中读取槽值:none 您建议的选项与 CKKS 编码中发生的情况相匹配:
- 输入向量的长度加倍及其复数共轭;
- 计算类似 FFT 的变换以将输入向量转换为复系数多项式;
- 复系数按指定比例缩放;
- 系数的实部被提取为整数
modulo coeff_modulus
(实际上这是在 RNS 表示中,即对每个coeff_modulus
素数取模); - 生成的 RNS 多项式被转换为 NTT 形式,这是使用 CKKS 时明文的默认状态。
如果不进行缩放,第 4 步将引入太多错误,以至于该过程将变得完全不可逆。
非常感谢您的帮助。我不清楚如何使用 CKKS 方案将消息向量编码和加密为密文,我无法在 SEAL 代码中打印出来。无论如何,我想知道:
- 从 2 到 5 的步骤将 N 大小的向量转换为 N 大小的 NTT 形式密文。
- 在步骤 1、 中将实数向量和复数向量加倍有何不同
- 我们如何在步骤 2 中将复数的实部和图像部分映射到 N/2 个槽?
如果问题很愚蠢,请不要笑我:)。感谢您的帮助。