2.4. Signature Generation (Signaturerzeugung)
2.4. Signature Generation (Signaturerzeugung)
Die Signaturerzeugung verwendet eine kryptografische Hash-Funktion H und eine Eingabenachricht m. Die Nachricht wird zuerst von H verarbeitet, was den Wert H(m) ergibt, der eine Sequenz von Bits der Länge hlen ist. Normalerweise wird H so gewählt, dass seine Ausgabelänge hlen ungefähr gleich qlen ist, da die Gesamtsicherheit des Signaturverfahrens von dem kleineren Wert von hlen und qlen abhängt. Die relevanten Standards unterstützen jedoch alle Kombinationen von hlen und qlen.
Die folgenden Schritte werden dann angewendet:
-
H(m) wird unter Verwendung der bits2int-Transformation und einer zusätzlichen modularen Reduktion in eine Ganzzahl modulo q transformiert:
h = bits2int(H(m)) mod qWie in der Beschreibung von bits2octets angemerkt wurde, ist die zusätzliche modulare Reduktion nicht mehr als eine bedingte Subtraktion.
-
Ein Zufallswert modulo q, genannt k, wird erzeugt. Dieser Wert darf nicht 0 sein, daher liegt er im Bereich [1, q-1]. Der größte Teil des Rests dieses Dokuments wird sich um den Prozess drehen, der zur Erzeugung von k verwendet wird. In einfachem DSA oder ECDSA sollte k durch eine Zufallsauswahl ausgewählt werden, die einen Wert unter den q-1 möglichen Werten mit gleichmäßiger Wahrscheinlichkeit wählt.
-
Ein Wert r (modulo q) wird aus k und den Schlüsselparametern berechnet:
-
Für DSA:
r = g^k mod p mod q(Die Potenzierung wird modulo p durchgeführt, was eine Zahl zwischen 0 und p-1 ergibt, die dann weiter modulo q reduziert wird.)
-
Für ECDSA: Der Punkt kG wird berechnet, seine X-Koordinate (ein Element des Körpers, über dem E definiert ist) wird in eine Ganzzahl konvertiert, die modulo q reduziert wird, was r ergibt.
Wenn sich r als null herausstellt, sollte ein neues k ausgewählt und r erneut berechnet werden (dies ist ein äußerst unwahrscheinliches Ereignis).
-
-
Der Wert s (modulo q) wird berechnet:
s = (h+x*r)/k mod qDas Paar (r, s) ist die Signatur. Wie eine Signatur kodiert werden soll, wird nicht von den DSA- und ECDSA-Standards selbst abgedeckt. Eine übliche Methode ist die Verwendung einer DER-kodierten ASN.1-Struktur (eine SEQUENCE von zwei INTEGERs, für r und s, in dieser Reihenfolge).