1

我目前正在学习如何使用 SEAL,并且在 BFV 方案的参数中,有一个用于选择 PolyModulus 和 CoeffModulus 的辅助函数,但是这不是用于选择 PlainModulus 的,除了它应该是素数或 2 的幂是有什么方法可以知道使用哪个最佳值?

在给定的示例中,PlainModulus 设置为 parms.PlainModulus = new SmallModulus(256); 选择值 256 有什么特殊原因吗?

4

1 回答 1

2

在 BFV 中,plain_modulus基本上决定了数据类型的大小,就像在正常编程中使用 32 位或 64 位整数时一样。使用BatchEncoder数据类型时,适用于明文向量中的每个槽。

如何选择plain_modulus很重要:乘法中的噪声预算消耗与 成正比log(plain_modulus),因此有充分的理由使其尽可能小。另一方面,您需要确保在计算期间不会出现溢出情况,加密数字超过plain_modulus,除非您特别关心结果模数的正确性plain_modulus

在 BFV 的几乎所有实际用例中,您都应该使用BatchEncoder不浪费明文/密文多项式空间,这需要plain_modulus是素数。因此,您可能希望它是素数,除了一些玩具示例。

于 2019-10-21T17:46:07.160 回答