Ich hatte den Eindruck, dass etwas homomorphe Verschlüsselungsschemata Ihnen erlauben, eine beliebige Anzahl von Additionen durchzuführen, gefolgt von einer einzelnen Multiplikation, nach der das Rauschen zu groß wird. Aber wenn ich folgendes versuche, scheint es zu funktionieren:Wann wird Bootstrapping im Helib benötigt?
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;
Die Ausführung einer weiteren Multiplikation erzeugt das falsche Ergebnis.
Ist die Anzahl und/oder die Art der Operationen erlaubt, bevor das Bootstrapping benötigt wird? Wovon hängt es ab? Die zugrunde liegenden Werte oder einer der Initialisierungsparameter?
Ich habe keine Zeit, jetzt zu antworten, aber es gibt einen impliziten Parameter namens L, der auf "level" steht und angibt, wie viele Multiplikationen Sie nacheinander ausführen können (in Ihrem Beispiel scheint es also, dass L = 2). Schauen Sie sich die Beispiele im Code des eigenen Helibs an ... –