gpt4 book ai didi

c++ - 在 SEAL 中重新线性化一个密文

转载 作者:行者123 更新时间:2023-11-30 04:57:07 26 4
gpt4 key购买 nike

假设我计算了 2 的加法乘法 Ciphertexts并将结果放入第三个。如果我想对我的结果执行额外的数学运算 Ciphertext (目的地 Chipertext ),是否建议使用 evaluator.relinearize()这样做之前?因为如果我没理解错的话,对Ciphertext的一些操作导致结果Ciphertext大小大于 2。如果是,那么这是重新线性化 Ciphertext 的好方法吗? ?

  • EvaluationKeys ev_keys;
  • int size = result.size();
  • keygen.generate_evaluation_keys(size - 2, ev_keys); // We need size - 2 ev_keys for performing this relinearization.
  • evaluator.relinearize(result, ev_keys);

最佳答案

只有 Evaluator::multiply 会增加密文的大小。每个密文的大小至少为 2(新加密的大小为 2),大小为 a 和 b 的密文相乘得到大小为 a+b-1 的密文。因此,将两个大小为 2 的密文相乘最终会得到大小为 3 的密文。在几乎所有情况下,此时您都希望重新线性化以将大小恢复为 2,因为对大小为 3 的密文的进一步操作可以计算成本明显更高。

此规则有一些异常(exception)情况:假设您要计算许多产品的总和。在这种情况下,您可能只想重新线性化最终总和而不是单个被加数,因为计算大小为 3 的密文的总和仍然非常快。

为了使重新线性化成为可能,生成 key 的一方还需要生成评估 key ,如下所示:

EvaluationKeys ev_keys;
keygen.generate_evaluation_keys(60, ev_keys);

稍后评估方可以将它们用作:

evaluator.relinearize(result, ev_keys);

这里我使用 60 作为 generate_evaluation_keys 中的 decomposition_bit_count,这是最快和最经常的最佳选择。您可能永远不应该在 generate_evaluation_keys 中使用不同于 1(默认值)的 int count 参数。这适用于您让密文的大小超过 3 并且需要将它们从例如 3 降低的用例。 4 号或 5 号缩小到 2 号。

关于c++ - 在 SEAL 中重新线性化一个密文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com