1

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

4

1 回答 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 回答