【发布时间】:2017-10-21 21:47:29
【问题描述】:
我的印象是,某种同态加密方案允许您执行任意数量的加法,然后是单次乘法,之后噪声变得太大。但是当我尝试以下它似乎工作:
publicKey.Encrypt(ctx1, to_ZZX(2));
publicKey.Encrypt(ctx2, to_ZZX(3));
publicKey.Encrypt(ctx3, to_ZZX(10));
Ctxt ctRes = ctx1;
ctRes += ctx2;
ctRes *= ctx3;
ctRes *= ctx3;
ZZX ptRes;
secretKey.Decrypt(ptRes, ctRes);
std::cout << "(2 + 3) * 10 * 10= " << ptRes[0] << std::endl;
再执行一次乘法会产生错误的结果。
在需要引导之前允许的操作数量和/或类型是否可预测?它取决于什么?基础值或任何初始化参数?
【问题讨论】:
-
我现在没时间回答,但是有一个名为 L 的隐式参数,它代表“级别”,表示您可以按顺序执行多少次乘法(因此,在您的示例中,似乎 L = 2)。看看自己的Helib的代码中的例子...
标签: c++ cryptography