A)我无法理解这些设置之间的关系:
parms.set_poly_modulus("1x^2048 + 1");
parms.set_coeff_modulus(coeff_modulus_128(2048));
parms.set_plain_modulus(1 << 8);
这张表来自海豹突击队手册。
我特别感兴趣的是数字 54 以及它是如何相对于parms.set_poly_modulus("1x^2048 + 1")
和计算的parms.set_coeff_modulus(coeff_modulus_128(2048))
。
B)我正在尝试为我的用例找到正确的参数。假设我有 10000 个介于 -180 和 +180 之间的小数,我想使用FractionalEncoder
. 执行的操作将是:减法、加法、乘法、平方和指数。结果将保存在一个单独的Ciphertext
变量中。
因此,就我的用例而言,最佳参数是什么:
n, q, t
在parms.set_poly_modulus("1x^n + 1"); parms.set_coeff_modulus(coeff_modulus_128(q)); parms.set_plain_modulus(t);
a
并且b
在seal::FractionalEncoder encoder(context.plain_modulus(), context.poly_modulus(), a, b, 2)
. 我正在使用a = 512和b = 128,这对于我的用例来说太高了。
如果我的用例发生变化,我如何自己计算这些参数?