我知道在 SEAL 2.3.1 中,解码和解密错误会默默地失败。即在尝试解码/解密某些计算结果时,没有迹象表明噪声不足错误或发现违反plain_modulus、poly_modulus 设置。这些指标是否存在于任何更高版本中,例如在 3.0、3.1、3.2 中,还是不正确的解码或解密仍然会静默失败?
问问题
128 次
1 回答
1
自 SEAL 2.3.1 以来没有重大变化,除了自 SEAL 3.0 以来 CKKS 方案的存在使答案更加复杂。
解密。SEAL 3.2.0 没有给出任何噪声预算为零的指示。对于 BFV 方案,您必须单独进行测试;CKKS 方案没有类似的干净的噪声概念。此外,说解密失败有点误导:解密总是成功并给出一些输出明文,但密文-明文对可能已经最大化噪声(对于 BFV)。用户可能希望实现一个先检查噪声级别然后解密的功能,但它有一些性能成本,并且由 SEAL 自动执行可能没有意义。
解码。当使用 CKKS 方案时,SEAL 3.2.0 会抛出解码错误(当使用 时CKKSEncoder
),例如,当给它的明文规模太大时。这样的明文应该不可能通过有效使用Evaluator
/Decryptor
虽然来产生。如果规模和消息太大以至于他们的产品环绕,CKKS 解码将是不正确的coeff_modulus
,但Evaluator
无法检测到这一点,也没有CKKSEncoder
。对于 BFV,IntegerEncoder
可以检测到解码溢出错误并在这些情况下抛出(如 SEAL 2.3.1 中),但由于BatchEncoder
没有错误解码,因此根本无法检测到这样的事情。请注意,plain_modulus
永远无法以加密形式检测到溢出。
于 2019-03-03T20:14:28.387 回答