2017-10-21 2 views
2

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?

+1

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 ... –

Antwort

3

Die Berechnungsmenge, die von Ihrer spezifischen Instanz ausgeführt werden kann, hängt stark von den Parametern ab, die zum Initialisieren des Systems verwendet werden. Im Allgemeinen sind Multiplikationen (oder Operationen, die Multiplikation beinhalten) die teuersten. Der "L" -Parameter, der die Anzahl der Pegel in der Moduluskette anzeigt, ist der signifikanteste Faktor dafür, wie viele Berechnungen (und insbesondere Multiplikationen) durchgeführt werden können, bevor Bootstrapping benötigt wird.

Versuchen Sie, das auf eine größere Zahl einzustellen.

Ich empfehle dringend, Test_General.cpp in HElib src-Ordner zu lesen, die hier heruntergeladen werden kann: https://github.com/shaih/HElib. Sie können "make" in diesem Ordner ausführen, um eine ausführbare Datei mit dem Namen Test_General_x zu generieren und sie mit "Test_General_x L = 10 R = 5" ausführen, um L auf 10 zu setzen und 5 Runden dieser Berechnungen auszuführen (die Sie im Quellcode ändern könnten) . Spielen Sie mit den verschiedenen Parametern herum, ändern Sie L auf 15,20, ..., 60 oder ändern Sie andere Parameter und sehen Sie, wie sich dies auf die Laufzeit, die Anzahl der möglichen Berechnungen und Entschlüsselungsfehler auswirkt.

Wenn Sie Bootstrap benötigen, können Sie in params.cpp suchen in derselben src-Datei und testen Sie verschiedene Parameter für Bootstrapping durch Ausführen von „params_x ...“ nach den Anweisungen am unteren Rand des params.cpp

Verwandte Themen