幾分準同型の暗号化スキームでは、任意の数の加算とそれに続く1回の乗算を実行でき、そのあとでノイズが大きくなりすぎるという印象を受けました。しかし、私が次のことを試してみると、うまくいくように思えます。helibでブートストラップが必要なのはいつですか?
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;
もう1回乗算を行うと間違った結果になります。
ブートストラップが予測可能になるまでに必要な操作の数や種類はありますか?それは何に依存していますか?基礎となる値または初期化パラメータのいずれか?
の下部にある指示に従って
あなたがブートストラップする必要がある場合は、その同じSRCファイルにparams.cppに見て、実行することにより、ブートストラップのための様々なパラメータをテストすることができます「params_xを...」私は今答える時間がありませんが、Lという名前の暗黙のパラメータがあります。これは "レベル"を表し、何回の乗算を順番に実行できるかを示しています(あなたの例ではL = 2と思われます)。自分のHelibのコードの例を見てください... –