Gitter und Popcorn
von Dario Stein
Gitter und Popcorn
Auf dem ActiveVB-Workshop in Essen habe ich in einem Vortrag angesprochen, wie man sogenannte Gitter zu Verschlüsselungszwecken einsetzen kann.
Ein Gitter ist eine regelmäßige Menge von Punkten (Vektoren) im Raum, die von endlich vielen Basisvektoren aufgespannt wird.
Das heißt, man bildet von diesen Basisvektoren beliebige ganzzahlige Kombinationen wie
Schlimmmer noch, auch
Dürfte man beliebige reelle Koeffizienten vor die Vektoren multiplizieren, wäre das Problem ein einfaches lineares Gleichungssystem. Die Schwierigkeit liegt darin, dass wir nur ganze Zahlen benutzen dürfen. Tatsächlich wird die Lösung dieses Problems mit zunehmender Dimension und Länge der Basis so schwierig, dass einige Verschlüsselungssysteme darauf ihre Sicherheit bauen. Die Lösung des SVP hat Bezüge zu kombinatorischen Problemen wie dem Rucksackproblem!
Eindimensionales SVP
Ich lade hier zu einer kleinen Spielerei ein. Wir wollen sehen, was das SVP so schwierig machen könnte. Man könnte denken, dass es sich um ein recht stabiles Problem handelt: Wir geben einem Rechenverfahren Basisvektoren ein und erhalten einen short vector als Ausgabe. Wenn sich die Basis ein wenig ändert, ändert sich auch der short vector nur wenig. Das geht zum Beispiel mit der Basis vom Einheitsgitter, da sind die Basisvektoren nämlich selbst short vectors. Allgemein klappt das aber nicht! Die Basis oben besteht aus riesigen aber fast parallelen Vektoren, kleine Änderungen an der Basis ändern auch den short vector empfindlich.
Wir untersuchen das in dem Extremfall, dass die Vektoren tatsächlich parallel werden würden, dann haben wir nur noch ein eindimensionales Problem.
Wie sieht aus und was wäre dort ein short vector? Gucken wir uns mal ein paar Beispiele an:
Für bekommen wir regelmäßige Punkte bei
Wir veranschaulichen uns die Situation in einem kleinen Programm, indem wir mit dem Mauszeiger den Wert für vorgeben können.
Const s = 100 Private Sub Form_Load() AutoRedraw = True BackColor = vbWhite Scale (-0.1, 0.5)-(1.1, -0.5) Line (-0.1, 0)-(1.1, 0) End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Cls Line (-0.1, 0)-(1.1, 0) Caption = CStr(X) DrawWidth = 3 For i = -s To s For j = -s To s PSet (i + j * X, 0) Next Next DrawWidth = 1 End Sub
Gucken wir uns die Situation für etwas veränderten Parameter an:
Erstaunlich, aus drei Gitterpunkten in sind schon zehn geworden. Für den Wert erhalten wir stattdessen folgendes Bild: Fast der ganze Zahlenstrahl ist gefüllt!
Rationale und irrationale Zahlen
Wie ist das möglich?
Wir haben festgestellt, dass sich für Punkte im Abstand von ergaben. Für erhalten wir Punkte im Abstand von . Mit etwas Überlegung kann man zeigen: Ist eine Bruchzahl mit gekürztem Zähler und Nenner, so ist tatsächlich stets der short vector im Gitter. Man bildet ein geeignetes Vielfaches und zieht danach eine ganze Zahl ab, so dass man den Zähler auf bekommt.
Und ? Das ist als Bruchzahl , also erhalten wir Punkte im Abstand von Zehnmillionsteln! Wenn das mal keine Abweichung ist.
Schlimmer noch? Was passiert, wenn sich überhaupt nicht als Bruchzahl darstellen lässt, also irrational ist, wie oder ? Dann kann es keinen short vector geben, die Abstände der Gitterpunkte werden stattdessen immer kleiner und kommen an jede Zahl beliebig nahe heran. Man könnte sagen, dass der Gitterweite am nächsten kommt.
Die Funktion, die diese Weite von in Abhängigkeit von angibt, lautet also
Die Popcorn-Funktion
Diese Funktion sieht auf den ersten Blick nicht auffällig aus, aber wir haben schon gesehen, wie extrem sie auf kleinste Änderungen von reagiert. Sie ist das absolute Gegenteil von stetig und es geht beliebig schlimm: Ein Beispiel: Für ist . Die Zahl unterscheidet sich von nur um ein Tausendstel, aber , was für ein Unterschied zu ! Dieses Beispiel kann man beliebig fortsetzen. Es gibt sogar in jedem noch so kleinen Abstand um irrationale Zahlen mit . Eine winzige Störung an der Basis ändert also alles.
Die Funktion ist die thomaesche Funktion , auf der Wikipedia-Seite finden wir auch ihren Graph gezeichnet. Der Gestalt des Graphs nach wird sie gemeinhin als Popcorn-Funktion bezeichnet.
Wir haben gesehen, dass die Bestimmung von short vectors eine komplexe, nicht stetige sondern fraktalhafte Struktur hat.
Anmerkungen
-
Die Popcornfunktion ist ein tolles Gegenbeispiel in einer Analysisvorlesung. Sie hat die überraschende Eigenschaft, dass sie an jeder rationalen Stelle unstetig ist (das Argument haben wir oben gesehen). Noch interessanter ist jedoch, dass sie an jeder irrationalen Stelle stetig ist.
-
In der Definition von Gitter wird ein Fall wie , der die gesamte Zahlengerade füllt, normalerweise explizit ausgeschlossen. Man möchte, dass die Gitterpunkte wirklich getrennt liegen, und fordert daher linear unabhängige Basisvektoren. Wir haben gezeigt: ist genau dann tatsächlich ein Gitter, wenn rational ist, und zwar mit Basis .
-
Es gibt "gute" und "schlechte" Basen für Gitter, in guten Basen lässt sich das SVP leicht lösen und hängt stabil von der Basis ab. Die Aufgabe, eine beliebige Gitterbasis in eine gute zu transformieren, heißt Gitterreduktion (lattice reduction). Für 2D-Gitter (und in kleinen Dimensionen) gibt es gute Verfahren, welche aber in hohen Dimensionen scheitern, was die Sicherheit von gitterbasierten Kryptosystemen ausmacht.
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.