首页 > 解决方案 > 在 SEAL 2.3.1 中设置 FractionalEncoder

问题描述

我正在使用这个参数设置:

parms.set_poly_modulus("1x^2048 + 1"); // n = 2048
parms.set_coeff_modulus(coeff_modulus_128(2048)); // q = 54-bit prime
parms.set_plain_modulus(1 << 8); // t = 256

使用此编码FractionalEncoder encoder(context.plain_modulus(), context.poly_modulus(), A, B, C);A=512, B=128C=2

如果我理解正确,那么AB的设置取决于n的大小,这意味着 A + B <= 2048 必须成立,对吗?

使用上面的poly_moduluscoeff_modulisplain_modulus设置决定AB的大小时,一般规则是什么?由于选择较小的值并没有充分利用明文大小的潜力。我的猜测是A应该增加,因为B仅用于小数部分的精度。

标签: c++seal

解决方案


A 和 B 取决于您需要多少精度以及计算的复杂程度:更大的 A 和 B 会使加密更精确,它们也会使允许的乘法深度更小。后者是分数编码器表现不佳的原因之一。根据您的任务,您可能希望继续关注并使用包含新编码方法的下一个版本 (SEAL 3.0)。


推荐阅读