| RSA-Signaturen | ElGamal-Signaturen |
Das im Folgenden betrachtete Verfahren DSA (Digital Signature Algorithm) - auch bekannt als U.S. Federal Information Processing Standard 186 unter dem Namen DSS (Digital Signature Standard) - ist eine Variante des ElGamal-Schemas und verlangt explizit die Verwendung von SHA-1 als Hashalgorithmus. Im Gegensatz zu RSA-Signaturen, deren Sicherheit auf dem Problem der Primfaktorenzerlegung großer Zahlen beruht, basieren DSA-Signaturen darauf, dass die Berechnung diskreter Logarithmen in
für große Primzahlen
nicht mit realistischem Zeitaufwand zu bewältigen ist.
, sodass
gilt.
mit
und
. Die Wahl muss außerdem so erfolgen, dass
ein Teiler von
ist.
der zyklischen Untergruppe mit Ordnung
in
)
mit
.
.Das Tupel
wird von A als öffentlicher Schlüssel bekanntgegeben und die Zahl
stellt den zugehörigen geheimen Schlüssel dar.
Um eine Nachricht
zu signieren, werden folgende Schritte ausgeführt:
mit
.
.
,
für die gilt:
.
.Das Paar
bildet nun die Signatur der Nachricht
.
Unter Verwendung des öffentlichen Schlüssels
von A kann B wie folgt eine Signatur
einer Nachricht
prüfen:
Die Signatur wird nur dann als gültig erkannt, wenn
gilt.
Wenn das Tupel
eine gültige Signatur darstellt, so gilt:
Am Beispiel des ASCII-Strings "DSA ist ein im OpenPGP-Standard enthaltener Algorithmus." soll das Verfahren demonstriert werden. Dieser Satz besitzt als SHA-1 Hashwert - DSA schreibt die Verwendung von SHA-1 vor - die Zeichenkette AB00 EB6A FD5F 6308 8352 9F98 AE96 0F93 8A10 7F28 (eine 160 Bits lange Binärzahl in Hexadezimalschreibweise). Um die Berechnungen nicht unnötig zu verkomplizieren, werden wir in dem Beispiel nur die letzten 16 Bits, d.h. 7F28, verwenden. Die zu signierende Nachricht ist der Hashwert als Dezimalzahl, in unserem Fall also
.
Schlüsselgenerierung.
Die für dieses Beispiel verwendeten Primzahlen sind ebenfalls kleiner als verlangt, hier wählen wir
und
, somit folgt daraus, dass
. Sei
, dann ergibt sich
Der geheime Schlüssel ist
und der letzte Teil des öffentlichen Schlüssels berechnet sich wie folgt
Signatur erstellen.
Für die Erstellung benötigen wir eine geheime, zufällig gewählte Zahl
, in diesem Beispiel sei
. Den ersten Teil der Signatur erhalten wir nun als
Für den zweiten Teil ermitteln wir das multiplikative Inverse
und berechnen damit
Die Signatur für die Nachricht
ist damit das Paar
.
Signatur prüfen.
Die Prüfung der Signatur erfolgt mit folgenden Berechnungen:
Die Berechnungen liefern
und wir akzeptieren die als gültig erkannte Signatur.