Technologieaustausch

[Grundlagen der Kryptographie] Vollständig homomorphes Verschlüsselungsschema basierend auf LWE (Learning with Errors)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Lernmittel:
Vollständig homomorphe Verschlüsselung I: Theorie und Grundlagen (Lehrer Yu Yu von der Shanghai Jiao Tong University)
Vollständig homomorphe Verschlüsselung II: Theorie und Konstruktion der vollständig homomorphen Verschlüsselung (Lehrer Xiang Xie)


Heutzutage basieren die vollständig homomorphen Verschlüsselungsschemata der zweiten Generation (wie BGV und BFV) und der dritten Generation alle auf LWE. Jetzt basieren auch die erweiterten vollständig homomorphen Schemata auf LWE, daher fasst dieser Artikel das Grundwissen von LWE zusammen.
Bedenken Sie zunächst, wir möchten eine Nummer verschlüsseln ssS, jetzt mit einer Reihe von ai a_iAichchchchchRechts ssSVerschlüsseln und abrufen ais a_isAichchchchchSTatsächlich kann es durch Lösen des größten gemeinsamen Teilers GCD gelöst werden ssS .Wenn jedoch ein zufälliges Rauschen hinzugefügt wird ei e_itichchchchch,erhalten ais + ei a_is+e_iAichchchchchS+tichchchchch, dann wird es schwierig zu lösen sein ssS Wert. Dieser Prozess ist mein einfaches Verständnis von LWE. Der sogenannte Fehler ist ein Rauschen.

Fügen Sie hier eine Bildbeschreibung ein

Der Berechnungsprozess der vollständig homomorphen Verschlüsselung ist in drei Schritte unterteilt: Schlüsselgenerierung KeyGen, Verschlüsselung Enc, homomorphe Berechnung Eval und Entschlüsselung Dec. ,

KeyGen:

Fügen Sie hier eine Bildbeschreibung ein
Konstruieren Sie zunächst die obige Gleichung, s ⋅ A + e = s A + e scdot A + e = sA+eSA+t=SA+t, und holen Sie sich dann den öffentlichen Schlüssel pk ( − EIN -EINAUnd s A + e sA+eSA+tSpleißen) und der private Schlüssel sk ( ssS und 1 Spleißen). Daher wird erhalten, dass das Ergebnis der Multiplikation zwischen pk und sk ein Zufallsrauschen e (nahe 0) ist.

Enc:

Der für die Verschlüsselung verwendete öffentliche Schlüssel pk, r ist ein Zufallsvektor, der nur 0 oder 1 enthält, und m ist die zu verschlüsselnde Information (in das unterste Bit des Vektors eingefügt).
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Dez:

Nachdem Sie das innere Produkt des für die Entschlüsselung verwendeten privaten Schlüssels sk und ct berechnet haben, suchen Sie nach Mod 2, um das Entschlüsselungsergebnis zu erhalten.

Fügen Sie hier eine Bildbeschreibung ein
Nachweis der Richtigkeit:
Fügen Sie hier eine Bildbeschreibung ein
Multiplizieren Sie sk und pk, um 2e zu erhalten (die von KeyGen erfüllte Bedingung), und bilden Sie dann das innere Produkt mit r, um ein kleines gleichmäßiges Rauschen zu erhalten. Das Endergebnis ist m+ ein kleines gleichmäßiges Rauschen, sodass das Rauschen durch Mod 2 eliminiert werden kann. Holen Sie sich das Entschlüsselungsergebnis m. Aus diesem Grund ist das konstruierte Rauschen 2e und nicht e. Nach meinem Verständnis ist es praktisch, Mod 2 zu verwenden, um das Rauschen während der Entschlüsselung zu eliminieren.

Sicherheitsnachweis:

Fügen Sie hier eine Bildbeschreibung ein
Wenn pk pseudozufällig ist und r eine ausreichend hohe Entropie aufweist (d. h. die Zufälligkeit ist stark?), sind sowohl pk als auch pk mal r pseudozufällig. Nach der Addition von natürlichen und Vektoren mit m ist das Verschlüsselungsergebnis ebenfalls pseudozufällig.

Fügen Sie hier eine Bildbeschreibung ein

Das Folgende ist die formelhafte Beschreibung von Lehrer Xiang Xie:
Verschlüsselungsformel: Chiffretext c = öffentlicher Schlüssel pk ✖️ Zufall r + Klartext m
Entschlüsselungsformel: Klartext m = <Chiffretext sk, privater Schlüssel sk> mod q mod 2

Fügen Sie hier eine Bildbeschreibung ein
Auf dieser Basis kann Mod 2 verwendet werden, um den Wert von Klartext m zu entschlüsseln. Solange das Rauschen gering genug ist, kann die Genauigkeit garantiert werden.
Hier gibt es etwas, das unterschieden werden muss: das oben Genannte PK = (A, b = As‘ + 2e) PK=(A, b=As‘+2e)PK=(A,B=AS+2t)ist die BGV-Lösung und BFV ist PK = (A, b = As‘ + e) ​​PK=(A, b=As‘+e)PK=(A,B=AS+t)Der Unterschied besteht darin, dass BGV Informationen in niedrigen Bits codiert, während BFV Nachrichten in hohen Bits codiert (wird beim Erlernen von BFV erklärt).

Eval (additiver Homomorphismus und multiplikativer Homomorphismus):

Fügen Sie hier eine Bildbeschreibung ein
Beachten Sie, dass homomorphe Additionen oder Multiplikationen zu einer erheblichen Rauschakkumulation führen und die Multiplikation einen quadratischen Wachstumstrend aufweist.
Lassen Sie uns dann darüber sprechen, wie das Ergebnis der homomorphen Multiplikation entschlüsselt wird. Sie können die folgende Formel sehen: Die Multiplikation zweier Chiffretexte entspricht der Berechnung des Tensorprodukts des Chiffretexts bzw. des privaten Schlüssels und der anschließenden Berechnung des inneren Produkts. Offensichtlich haben sich also sowohl der Chiffretext als auch der private Schlüssel verdoppelt. Beispiel ist ein Äquivalenzbeweis.

Fügen Sie hier eine Bildbeschreibung ein

Die Frage ist also, wie man die Chiffretextgröße und die Größe des privaten Schlüssels nach der homomorphen Multiplikation wiederherstellen kann. Dies ist das Problem, das Key Switching löst.

Das Folgende ist die Beschreibung von Lehrer Xiang Xie:

Fügen Sie hier eine Bildbeschreibung ein

Tastenumschaltung

Ziel ist es, die Größe des Chiffretexts und des privaten Schlüssels wieder auf lineare Größe zu bringen.
Fügen Sie hier eine Bildbeschreibung ein
Finden Sie nun die Multiplikation der Chiffretexte c1 und c2:

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Der obige Prozess basiert auf dem Konzept der Bitzerlegung:

Fügen Sie hier eine Bildbeschreibung ein

Das Folgende ist die Beschreibung von Lehrer Xiang Xie:

Das Ziel des Key Switching: den privaten Schlüssel umwandeln s ~ Tilde sS~runter c ~ Tilde cC~ In privaten Schlüssel umwandeln ssSrunter ccC,Und c ~ Tilde cC~Und ccCSie sind alle mit demselben Klartext verschlüsselt.
Ein Kernkonzept hierbei ist der Key Switching Key (KSK), also die Verwendung eines privaten Schlüssels ssSzu verschlüsseln s ~ Tilde sS~

Fügen Sie hier eine Bildbeschreibung ein
Durch den Key Switching-Prozess kann der private Schlüssel abgeleitet werden s ⊗ s manchmal sSSwurde linear ssS, während sich der Chiffretext von ändert c ~ Tilde cC~wurde linear ccC .Und aus der letzten Zeile der Formel ist ersichtlich, dass nach dem Schlüsselwechsel ⟨ c, s ⟩ langle c, srangleC,Sund das Original ⟨ c ~ , s ⊗ s ⟩ langle Tilde c, manchmal srangleC~,SSEs gibt einen Geräuschunterschied zwischen 2 c ~ T e ~ 2tilde c^Ttilde e2C~Tt~ , dieser Teil kann sehr groß sein! Daher gibt es hier noch keine Möglichkeit, Key Switching zu implementieren.

Hier wird eine Gadget-Matrix G vorgestellt:
Fügen Sie hier eine Bildbeschreibung ein
Daher sieht der Vorgang des Schlüsselwechsels wie folgt aus:

Fügen Sie hier eine Bildbeschreibung ein
Zu diesem Zeitpunkt ist der zusätzliche Fehler sehr gering.
Zusammenfassend lässt sich sagen, dass durch Key Switching der ursprüngliche private Schlüssel erhalten wird s ~ = s ⊗ s Tilde s=s omal sS~=SSrunter c ~ = c ⊗ c Tilde c=Kotimes cC~=CC, wird in einen privaten Schlüssel umgewandelt ssSrunter ccCAchten Sie nach dem Schlüsselwechsel auf den Schlüssel s, cs, cS,CEs handelt sich nicht um die Originalwerte (doppelte Prüfung).

Fügen Sie hier eine Bildbeschreibung ein
Bei BGV nimmt das Rauschen der Addition linear zu, und das Rauschen der Multiplikation nimmt zwar direkt zu, wodurch die Multiplikation (wodurch sk extrem groß wird) unterstützt wird, ist das Rauschen tatsächlich ein sehr kleines Rauschen, das zum ursprünglichen Multiplikationsrauschen addiert wird ist auch sehr groß. Daher muss dieser Lärm weiter reduziert werden.

Modulreduzierung

Fügen Sie hier eine Bildbeschreibung ein
Zu diesem Zeitpunkt wurden homomorphe Multiplikations- und Additionsberechnungen mit geringer Tiefe durch LWE implementiert. Bei der Schlüsselumschaltung wird für jede Schicht ein neuer Schlüssel verwendet. Mit zunehmender Berechnungstiefe ist die Ausweitung des Rauschens jedoch explosionsartig, sodass sie noch nicht ausgeglichen ist . FHE (kann FHE in einer bestimmten Tiefe berechnen).
Jetzt hoffen wir, einen FHE zu implementieren, der eine bestimmte Tiefe berechnen kann, ohne Bootstrapping zu verwenden, das eine Modulo-Konvertierung erfordert.
Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Ich verstehe den Prozess in der Mitte nicht ganz. Kurz gesagt, es geht darum, den Chiffretext c vom Domänenmodulo q in den Domänenmodulo p (p<) umzuwandeln
Hier ist ein konkretes Beispiel:
Wenn keine Modulreduzierung durchgeführt wird, nimmt das Rauschen mit zunehmender Tiefe in einem doppelt exponentiellen Trend zu, und nach Level >= 3 treten Entschlüsselungsfehler auf.
Fügen Sie hier eine Bildbeschreibung ein
Wenn die Modulreduzierung auf jeder Ebene durchgeführt wird, wird das Rauschen ebenfalls innerhalb eines Absolutwertbereichs gehalten, auf Kosten einer kontinuierlichen Modulreduzierung.

Fügen Sie hier eine Bildbeschreibung ein

Wenn Sie also einen abgestuften FHE implementieren möchten, können Sie einen Modul festlegen B d B^dBD, dann können Sie eine Tiefe von berechnen ddDSchaltung (wo BBB ist die Rauschobergrenze des aktualisierten Chiffretexts).Berechnet ddDNach der Tiefe sollte der Modul auf reduziert werden BBB , um sicherzustellen, dass zu diesem Zeitpunkt kein Entschlüsselungsfehler vorliegt. BGV ist ein abgestufter FHE.

Fügen Sie hier eine Bildbeschreibung ein