Bearbeiten

Alter Artikel

Bearbeiten

GMR ist ein digitales Signaturverfahren, das nach seinen Erfindern Shafi Goldwasser, Silvio Micali und Ronald L. Rivest benannt ist.

Wie auch RSA beruht GMR auf der Faktorisierungsannahme, dass es bijektive Funktionen gibt, die schnell zu berechnen sind, bei denen die Berechnung der Umkehrfunktion jedoch sehr aufwändig ist.
Im Gegensatz zu RSA lässt sich für GMR jedoch beweisen, dass es selbst bei einem adaptiven aktiven Angriff nicht möglich ist, auch nur eine neue Signatur zu fälschen.

Das Verfahren im Einzelnen

Bearbeiten

Man benötigt ein kollisionsresistentes Permutationspaar mit Geheimnis   mit dem Definitionsbereich  . Der Besitzer des Geheimnisses kann die Umkehrfunktionen   und   leicht berechnen. Für alle anderen ist das schwer.

Um eine einzige Nachricht zu signieren muss der Sender eine Referenz aus   zufällig wählen und authentisch veröffentlichen. Um eine n bit lange Nachricht   zu signieren berechnet er die Signatur  . Der Empfänger kann die Umkehrfunktion davon berechnen und das Ergebnis mit der Referenz vergleichen.

Offensichtlich besteht das Problem darin, für jede Nachricht eine neue Referenz zu veröffentlichen. Dies wird mit Referenzbäumen realisiert.


http://www.infosec.pku.edu.cn/course/2004/GMR84.pdf – Originalpaper http://www.semper.org/sirene/publ/FoPf_91GMR.VIS91.ps.gz

Permutationspaar:

 
  • Verifizieren beginnend mit MSB
  • einfach zu berechnen

Umkehrpermutation:

 
  • Signieren beginnend mit LSB
  • Wurzelziehen mod n ist schwer, Berechnung nur mittels Kenntnis von p, q prim mit n = p · q

Probleme:

  • Jedes Zwischenergebnis ist die korrekte Signatur der bis dahin verkürzten Nachricht. → präfixfreie Nachricht
  • Einmalreferenzen   müssen authentisch sein. → Referenzenbaum

Handbook of Cryptography, S.468 ff.

Bearbeiten
  • GMR ist Einmal-Signatur-Schema → durch Erweiterung mit Referenzbaum kann man mehrere Nachrichten signieren
  • eher theoretischer Natur, aber trotzdem praktisch umsetzbar → Sirene: Fox/Pfitzmann
  • kollisionsfreie Permutation: es ist praktisch unmöglich ein Paar x,y \in D, x \neq y zu finden, für welches f_0(x) = f_1(y)
  • Einwegpermutation mit Falltür: unter Kenntnis einer Zusatzinformation (hier p, q) ist es effizient möglich f_0^{-1} und f_1^{-1} zu bestimmen.
  • Wenn ein Angreifer die Umkehrpermutation berechnen könnte, dann wäre es leicht eine Kollision zu finden: wähle x, berechne z = f_0(x) und y = f_1^{-1}(z), dann ist f_0(x) = f_1(y).
  • Wahl von p und q: p \equiv 3 \pmod 4 und q \equiv 7 \pmod 8 – notwendig, da sonst nicht gewährleistet ist, dass die Permutation kollisionsresistent ist (siehe Beweis) → Sicherheit kann auf Faktorisierungsannahme zurückgeführt werden

Parameter:

  … zufällig gewählter Verifikationsparameter (Referenz, eine binäre Zeichenkette)
  … öffentlicher Verifikationsschlüssel
  … privater Signierschlüssel

Eine binäre Zeichenkette   kann mit dem Verifikationsparameter   signiert werden. Man beachte dabei die umgekehrte Reihenfolge, in der die einzelnen Zeichen bearbeitet werden:

 

Der Signierer sendet Nachricht und Signatur   an den Empfänger. Dieser kann nun die Signatur überprüfen:

 
 

Ist die berechnete Referenz   gleich dem Verifikationsparameter  , so kann davon ausgegangen werden, dass die Nachricht   vom Besitzer des privaten Schlüssels signiert und seit dem nicht verändert wurde. Die Authentizität des Signierers muss auf andere Weise sichergestellt werden, zum Beispiel indem öffentliche Schlüssel zertifiziert werden.

Der Verifikationsparameter   sollte erst mit der Nachricht veröffentlicht werden, da es für einen Angreifer sonst über einen längeren Zeitraum mit entsprechend hohem Rechenaufwand möglich sein könnte, eine Kollision und somit eine andere Nachricht zu finden, welche bei gleichem Verifikationsparameter die gleiche Signatur erzeugt. [Quelle!?]


Referenzbaum

Bearbeiten
  • authentication trees
  • öffentlicher Binärbaum mit   Blattknoten
  • (vorerst) nicht-öffentliche   zufällige Referenzen  

Erstellen eines Referenzbaumes:

  1. Wähle zufällige Wurzelreferenz   und weitere Referenzen   und  .
  2. Erstelle mittels GMR Signatur für Verkettung von   und   mit dem Verifikationsparameter  :  
  3. Wähle zufällige Referenzen   und  . Signiere diese mit dem Verifikationsparameter  :  
  4. Und so weiter: Dies kann für jeden Ast beliebig oft wiederholt werden. Immer werden zwei neue zufällig gewählte Referenzen   mit der übergeordneten Referenz   signiert. Um   Blattknoten zu erhalten muss der Binärbaum   Ebenen haben.

Es muss mindestens die Wurzelreferenz öffentlich bekannt sein. Neue Äste können bei Bedarf erstellt werden. Soll eine Nachricht signiert werden, dann wählt man eine der noch nicht veröffentlichten Referenzen  . Diese wird mit einem noch nicht verwendeten Blattknoten als Verifikationsparamter signiert:  . Um eine Signatur zu überprüfen benötigt der Verifizierer immer mindestens die Referenzen und deren Signaturen des gesamten Astes vom Wurzelknoten bis zum entsprechenden Blattknoten sowie den Verifikationsparameter für die Nachricht   und dessen Signatur  .   und dessen Signatur werden, wie im Fall ohne Referenzbäume immer erst mit der Nachricht veröffentlicht.

→ Beispiel

 
Referenzbaum…
 
Referenzbaum…