Eine Signatur ist kryptografische Realisierung einer Unterschrift unter ein Dokument (daher auch elektronische Unterschrift genannt). Die Signatur soll mindestens so sicher sein wie eine herkömmliche Unterschrift.
Die Funktion einer herkömmlichen Unterschrift besteht darin, eine Verbindung zwischen einer Person und einem Dokument herzustellen.
Beispielsweise verpflichtet sich A in einem Kaufvertrag für ein Auto, den Kaufpreis von 5000 Euro zu zahlen. Der Vertragspartner B hält den unterschriebenen Vertrag in den Händen und möchte seinen Anspruch gegenüber dem Unterzeichner A geltend machen.
Im Normalfall geht alles gut, A erhält das Auto und B den Kaufpreis. Es sind aber verschiedene Szenarien denkbar, in denen die Vertragsabwicklung schiefgeht. So könnte A behaupten, die Unterschrift unter dem Vertrag stamme nicht von ihm. A könnte mit Absicht eine falsche Unterschrift unter den Vertrag setzen, um von dem Vertrag zurücktreten zu können. Oder B könnte im Nachhinein den Kaufpreis fälschen, indem er eine 0 an den Betrag anhängt. Genauso könnte A behaupten, B hätte den Vertrag gefälscht und eine 0 an den Kaufpreis angehängt.
Die erforderlichen Eigenschaften einer Unterschrift sind damit folgende:
Der Empfänger B oder ein Dritter kann die Unterschrift nicht fälschen. Dies ist schwierig zu realisieren, denn durch Üben gelingt es, eine Unterschrift nachzuahmen.
Es ist nicht möglich, Teile des unterschriebenen Dokuments zu verfälschen oder auszutauschen.
Beispielsweise vergleicht die Bank die Unterschrift unter einer Überweisung mit der hinterlegten Unterschrift.
B klagt vor Gericht auf Vertragserfüllung, aber A streitet ab, den Vertrag unterschrieben zu haben. Für den Beweis ist dann ein graphologisches Gutachten erforderlich; dieses hat allerdings nur begrenzte Aussagekraft.
Das RSA-Signaturverfahren ist die Umkehrung des RSA-Verschlüsselungsverfahrens.
Beim RSA-Verschlüsselungsverfahren verschlüsselt der Sender B die Nachricht m mit dem öffentlichen Schlüssel e des Empfängers A und erzeugt so die verschlüsselte Nachricht c:
c = me mod n
Der Empfänger A entschlüsselt die verschlüsselte Nachricht c mit dem eigenen privaten Schlüssel d und erhält so die Nachricht m:
m = cd mod n
Beim RSA-Signaturverfahren verschlüsselt der Sender A das Dokument m mit dem eigenen privaten Schlüssel d und erzeugt so die Signatur s:
s = md mod n
Der Empfänger B entschlüsselt die Signatur s mit dem öffentlichen Schlüssel e des Senders A und erhält so das Dokument m:
m = se mod n
Der Empfänger B erhält das Dokument m erst dadurch, dass er die Signatur s mit dem öffentlichen Schlüssel des Senders A entschlüsselt. Stellt das Dokument m einen sinnvollen Text dar, so ist sichergestellt, dass A das Dokument signiert hat (vgl. untenstehende Sicherheitsprobleme).
Wir betrachten inwieweit die RSA-Signatur die Eigenschaften einer Unterschrift erfüllt.
Nur der Unterzeichner A kennt den privaten Schlüssel d, der das Gegenstück zu dem öffentlichen Schlüssel von A darstellt. Somit kann nur A von ihm signierte Dokumente erstellen.
Das Dokument ergibt sich erst durch Entschlüsselung aus der Signatur.
Der Empfänger B muss sicherstellen, dass der öffentliche Schlüssel e zu A gehört.
Der Empfänger B muss beweisen, dass A den öffentlichen Schlüssel e veröffentlicht hat. Außerdem muss m = se mod n einen sinnvollen Text ergeben.
Einige Details sind bei der Verwendung der RSA-Signatur zu berücksichtigen.
s'' = s·s' = md·m' d = (m·m')d = (m·m-1·m'')d = m'' d
Damit hat B eine gültige Signatur s'' für m'' erlangt.
c = me mod n
Der Angreifer bittet hierzu einfach A unter einem Vorwand, das Dokument c zu signieren. Treuherzig berechnet A die Signatur
s = cd mod n = m
und C erhält den gewünschten Klartext m. Jedoch könnte A Verdacht schöpfen, weil die Signatur ein Klartext ist, der ihm bekannt vorkommt. Darum geht C geschickter vor und veranlasst A zum Signieren des Dokuments
c' = xe·c mod n
wobei x ∈ ℤn* eine von C gewählte Zahl ist. Nun bildet A die Signatur (modulo n gerechnet)
s' = c'd = (xe·c)d = xed·cd = x·m
und erkennt an der Signatur s' nicht, dass er einen Geheimtext entschlüsselt hat. C berechnet (modulo n)
x-1·s' = x-1·x·m = m und erhält somit den entschlüsselten Geheimtext m.
In der Praxis jedoch entfallen diese Möglichkeiten, wie im Folgenden dargestellt wird.
In der bisherigen Darstellung muss das gesamte Dokument, auch wenn es mehrere Megabyte lang ist, mit dem privaten Schlüssel des Senders verschlüsselt werden, um es zu signieren. Dies ist für die Praxis natürlich ungünstig; ferner werden weitere Sicherheitsprobleme aufgeworfen, wenn das Dokument in Teilstücke zerlegt wird, die Zahlen < n entsprechen.
Daher wird nicht das gesamte Dokument signiert, sondern nur eine Art Fingerabdruck des Dokuments, der mithilfe einer kryptografischen Hashfunktion gebildet wird. Ein solcher Fingerabdruck hat eine feste Länge von beispielsweise lediglich 32 Byte, während das Dokument beliebig lang sein kann. Der Vorteil besteht darin, dass die Signatur entsprechend wesentlich kürzer ist, ohne dass sie wesentlich unsicherer wird – im Gegenteil, die oben angegebenen Angriffe auf die RSA-Signatur sind jetzt nicht mehr möglich. Das Dokument selbst wird zusätzlich als Klartext übermittelt.
Zunächst bildet der Sender A mithilfe einer öffentlich bekannten Hashfunktion h vom Dokument m einen Hashwert x = h(m) und signiert diesen. Er bildet also
s = (h(m))d mod n.
und sendet sodann das Paar (m, s) an den Empfänger.
Der Empfänger B berechnet mit der öffentlich bekannten Hashfunktion h seinerseits den Wert x = h(m), außerdem berechnet er
y = se mod n
Anschließend überprüft B, ob x und y übereinstimmen (Bild 1).
A | C | B | ||
Hash-Funktion h | ||||
Schlüssel veröffentlichen | ||||
n, e | ||||
Signatur erstellen | ||||
berechnet Hashwert x = h(m) | ||||
berechnet Signatur s = (h(m))d mod n | ||||
Signatur prüfen | ||||
berechnet x = h(m) | ||||
berechnet y = se mod n | ||||
prüft ob x = y |
Bild 1: Erstellen und Prüfen einer RSA-Signatur für ein Dokument m
[BNS 05] A. Beutelspacher, H.B. Neumann, T. Schwarzpaul: Kryptografie in Theorie und Praxis. Vieweg (2005)
[Bu 00] J.A. Buchmann: Introduction to Cryptography. Springer (2000)
[RSA 78] R.L. Rivest, A. Shamir, L.M. Adleman: A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM, 21, 2, 120-126 (1978)
[Lan 18] H.W. Lang: Kryptografie für Dummies. Wiley (2018)
Weiter mit: [Diffie-Hellman-Schlüsselvereinbarung] oder [up]