SEAL 中的解码和解密错误指示器

Decoding and Decryption Error Indicators in SEAL

我知道在 SEAL 2.3.1 中,解码和解密错误会默默地失败。 IE。尝试解码/解密某些计算结果时,没有迹象表明噪声错误不足或发现违反 plain_modulus、poly_modulus 设置。这些指标是否存在于任何更高版本中,例如在 3.0、3.1、3.2 中还是不正确的解码或解密仍然失败?

自 SEAL 2.3.1 以来没有重大变化,除了自 SEAL 3.0 以来 CKKS 方案的存在使答案更加复杂。

解密。SEAL 3.2.0 没有给出噪声预算为零的任何迹象。您必须针对 BFV 方案单独进行测试; CKKS 方案没有类似的干净噪声概念。此外,说解密 失败 有点误导:解密总是成功并给出一些输出明文,但密文-明文对可能已经达到最大噪声(对于 BFV)。用户可能想要实现一个先检查噪音水平然后解密的功能,但它有一些性能成本并且可能没有意义由 SEAL 自动执行。

解码。 当使用 CKKS 方案时,SEAL 3.2.0 将抛出解码错误(当使用 CKKSEncoder 时),例如,当给它的明文规模过大。但是,通过有效使用 Evaluator/Decryptor 应该不可能产生这样的明文。如果规模和消息太大以至于它们的乘积环绕 coeff_modulus,CKKS 解码将不正确,但 Evaluator 无法检测到这一点,CKKSEncoder 也无法检测到这一点。对于 BFV,IntegerEncoder 可以检测解码溢出错误并在这些情况下抛出(如 SEAL 2.3.1),但对于 BatchEncoder 没有错误解码,因此根本无法检测到这种情况.请注意,plain_modulus 溢出永远无法以加密形式检测到。