我知道在SEAL 2.3.1中,解码和解密错误将静默失败。即尝试对某些计算结果进行解码/解密时,没有任何迹象表明噪声错误不足或违反了plain_modulus,poly_modulus设置。这些指标是否存在于任何更高版本中,例如在3.0、3.1、3.2中还是不正确的解码或解密是否仍然默默失败?
答案 0 :(得分:1)
自SEAL 2.3.1以来没有重大变化,除了自SEAL 3.0以来,CKKS方案的存在使答案更加复杂。
解密。SEAL 3.2.0没有给出任何噪声预算为零的指示。您必须针对BFV方案单独进行测试; CKKS方案没有类似的干净概念。此外,说解密失败有点误导:解密总是成功并给出一些输出明文,但是Ciphertext-Plaintext对可能具有最大噪声(对于BFV)。用户可能想实现先检查噪声水平然后解密的功能,但这样做会降低性能,因此SEAL自动进行可能没有意义。
解码。使用CKKS方案时,例如,当给定的明文太大时,SEAL 3.2.0会引发解码错误(使用CKKSEncoder
时)。但是,通过有效使用Evaluator
/ Decryptor
不可能产生这样的纯文本。如果规模和消息太大以至于其乘积围绕coeff_modulus
,则CKKS解码将是不正确的,但是Evaluator
无法检测到这一点,CKKSEncoder
都无法检测到。对于BFV,IntegerEncoder
可以检测到解码溢出错误,并且会在这种情况下抛出错误(如SEAL 2.3.1所示),但是对于BatchEncoder
,则没有错误的解码,因此根本无法检测到这种情况。 。请注意,永远不会以加密形式检测到plain_modulus
溢出。