Angriffe gegen Signaturen | DSA-Signaturen |
Die bei dem RSA-System (Ronald Rivest, Adi Shamir, Leonard Adleman) verwendete Transformation zur Verschlüsselung einer Nachricht ist bijektiv und kann deshalb mit nur minimalen Anpassungen für digitale Signaturen verwendet werden: vertauscht man im System die Verwendung von öffentlichem und geheimem Schlüssel, so entspricht dies dem Vorgang des Signierens.
Der Inhaber des geheimen Schlüssels (und nur dieser) kann durch das "Verschlüsseln" einer Nachricht eine Signatur erzeugen, die mittels des öffentlichen Schlüssels, der allgemein verfügbar ist, geprüft werden kann. Diese Signatur ist dabei ebenso lang wie die ursprüngliche Nachricht, welche sich allein aus der Signatur ermitteln lässt. Oft wird dies jedoch nicht benötigt und, um die Signatur zu verkürzen, verwendet man die schon erwähnten Hashverfahren.
Das RSA-System unterscheidet nicht zwischen Schlüsselpaaren für Ver-/Entschlüsselung und denen für Signaturen, sodass man den schon vorgestellten Algorithmus zur Schlüsselgenerierung dafür verwenden kann.
A möchte die Nachricht mit seinem privaten Schlüssel
signieren. Er berechnet hierfür
und erhält die Signatur der Nachricht
. Dieser Schritt entspricht dem Entschlüsseln im RSA-Kryptosystem. Das Paar
stellt nun die signierte Nachricht dar.
Um sicherzustellen, dass eine Nachricht wirklich von A signiert wurde und unverändert ist, überprüft B mit dem öffentlichen Schlüssel
von A die Signatur
und vergleicht das Ergebnis mit der empfangenen Nachricht
. Sind beide identisch, so wurde die Nachricht, nachdem A sie signiert hat, nicht verändert.
Die Korrektheit von RSA-Signaturen ergibt sich unmittelbar aus dem Nachweis über die Korrektheit des RSA-Systems zur Verschlüsselung von Nachrichten:
Der erste Schritt zum Signieren der Zeichenkette "RSA ist ein weit verbreitetes Public-Key-Verfahren." ist die Ermittlung des Hashwertes. RSA schreibt hierbei keinen speziellen Algorithmus vor und für dieses Beispiel werden wir der Einfachheit halber die Summe der ASCII-Werte als Hashwert betrachten.
Schlüsselgenerierung.
In der Praxis sollte man mindestens einen 768-Bit Schlüssel, besser jedoch 1024 Bits oder mehr verwenden. Für einen -Bit Schlüssel wählt man die Primzahlen
und
jeweils
Bits lang und zwar so, dass die Differenz
nicht zu klein ist (sonst liegen
und
in der Nähe von
und lassen sich ggf. effizient ermitteln). Dieses Beispiel hingegen benutzt sehr viel kleinere Primzahlen
und
und somit erhalten wir die 25-Bit Zahlen
Nun wählen wir den öffentlichen Exponenten zufällig und teilerfremd zu
gemäß der Gleichverteilung, in diesem Fall
. Mit dem erweiterten Euklidischen Algorithmus berechnen wir den geheimen Exponenten
:
Daraus folgt, dass und somit
.
Signatur erstellen.
Die Signatur zu
unter Verwendung des privaten Schlüssels
ergibt sich als
Signatur prüfen.
Die Korrektheit der Signatur s prüfen wir nun wie folgt:
Das berechnete Ergebnis ist gleich dem Hashwert der empfangenen Nachricht und die Signatur wird somit als gültig erkannt.
Aufgabe 1
Alice benutzt eine RSA-Signatur mit öffentlichem Schlüssel , um das Dokument
zu signieren und an Bob zu senden. Was ist ihre Signatur und wie verifiziert Bob diese? Ist es sinnvoll, dass Alice ihr Dokument zuerst (mit dem öffentlichen Schlüssel) verschlüsselt und dann das verschlüsselte Dokument signiert und beides (Chiffrat und Signatur) an Bob schickt?
Aufgabe 2
Betrachten Sie Signaturen gemäß dem RSA-Verfahren mit öffentlichem Schlüssel .
Aufgabe 3
Bei der Fälschung der digitalen Signatur von Alice nach dem RSA-Schema wählt Oskar , berechnet unter Verwendung des öffentlichen Schlüssels
von Alice
und sendet das Dokument/Unterschriftpaar
an Bob. Ist dieses eine gültige Unterschrift von Alice? Wie sinnvoll ist dieses Vorgehen von Oskar?
Wie kann man diesen Angriff von Oskar vermeiden?