我想知道实数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
谢谢您的帮助!
首先,在 CKKS 中,时隙数始终为 N/2,其中 N 为poly_modulus_degree
。当你编码一个比这更短的向量时,其余的槽被简单地设置为零。因此,在您的情况下,纯文本插槽值将是[1.1, 2.2, 0.0, 0.0]
,比例为 4。但是,有一个重要的特殊情况:当您对单个值进行编码时,所有插槽都将保存该值。
然而,这根本不是实际明文数据的样子。没有一种简单的方法可以从明文系数数据中读取槽值:您建议的选项都与 CKKS 编码中发生的情况不匹配:
modulo coeff_modulus
(实际上这是在 RNS 表示中,即对每个coeff_modulus
素数取模);如果没有缩放,第 4 步将引入如此多的错误,以至于该过程将变得完全不可逆。
我真的很感谢你的帮助。我不清楚如何使用 CKKS 方案将消息向量编码和加密为密文,我无法在 SEAL 代码中打印出来。无论如何,我想知道:
如果问题很愚蠢,请不要笑我:)。谢谢你的帮助。