8. Signaturschema mit Anhang (Signature Scheme with Appendix)
Ein Signaturschema mit Anhang (Signature Scheme with Appendix) besteht aus einer Signaturgenerierungsoperation und einer Signaturverifikationsoperation, wobei die Signaturgenerierungsoperation unter Verwendung des privaten RSA-Schlüssels des Unterzeichners eine Signatur aus einer Nachricht erzeugt und die Signaturverifikationsoperation die Authentizität der Signatur unter Verwendung des öffentlichen RSA-Schlüssels des Unterzeichners verifiziert.
Um eine Nachricht M zu signieren, wendet der Unterzeichner eine Nachrichtenkodierungsoperation auf M an, um eine kodierte Nachricht EM zu erzeugen, und wendet dann das Signaturprimitiv an, um eine Signatur S zu erzeugen. Um eine Signatur S zu verifizieren, wendet der Verifizierer das Verifikationsprimitiv auf S an, um die kodierte Nachricht EM wiederherzustellen, und wendet dann die Verifikationsoperation an, um zu bestimmen, ob die Signatur für die Nachricht gültig ist.
Zwei Signaturschemata werden in diesem Dokument spezifiziert: RSASSA-PSS und RSASSA-PKCS1-v1_5.
Obwohl nicht obligatorisch, wird RSASSA-PSS für neue Anwendungen empfohlen. RSASSA-PKCS1-v1_5 ist für die Kompatibilität mit bestehenden Anwendungen enthalten.
8.1. RSASSA-PSS
RSASSA-PSS kombiniert die RSASP1- und RSAVP1-Primitive (Abschnitt 5.2) mit der EMSA-PSS-Kodierungsmethode. Es basiert auf dem von Bellare und Rogaway vorgeschlagenen probabilistischen Signaturschema (Probabilistic Signature Scheme, PSS) [RSARABIN] [PSS].
Die Sicherheit von PSS basiert auf der Schwierigkeit des RSA-Problems und dem Zufallsorakelmodell des MGF. Es wurde bewiesen, dass unter dem Zufallsorakelmodell, wenn das MGF sich wie ein Zufallsorakel verhält und das RSA-Problem schwierig ist, das PSS-Signaturschema gegen Angriffe mit gewählter Nachricht (Chosen Message Attack) sicher ist.
RSASSA-PSS ist nicht deterministisch: Für eine gegebene Nachricht können mehrere mögliche Signaturen erzeugt werden. Dies liegt daran, dass während der Signaturgenerierungsoperation ein zufälliger Salzwert enthalten ist.
8.1.1. Signaturgenerierungsoperation (Signature Generation Operation)
RSASSA-PSS-SIGN (K, M)
Eingabe (Input):
- K: privater RSA-Schlüssel des Unterzeichners
- M: zu signierende Nachricht, eine Oktettzeichenkette beliebiger Länge
Ausgabe (Output):
- S: Signatur, eine Oktettzeichenkette der Länge k, wobei k die Länge des RSA-Modulus n in Oktetten ist
Fehler (Errors):
- "message too long" (Nachricht zu lang)
- "encoding error" (Kodierungsfehler)
Schritte (Steps):
-
EMSA-PSS-Kodierung: Wende die EMSA-PSS-Kodierungsoperation auf die Nachricht M an, um eine kodierte Nachricht EM der Länge ⌈(modBits-1)/8⌉ Oktette zu erzeugen, wobei modBits die Länge des RSA-Modulus n in Bits ist: EM = EMSA-PSS-ENCODE(M, modBits - 1). Wenn die Kodierungsoperation "message too long" oder "encoding error" ausgibt, gebe den entsprechenden Fehler aus und stoppe.
-
RSA-Signatur:
- Konvertiere die kodierte Nachricht EM in einen ganzzahligen Nachrichtenrepräsentanten m: m = OS2IP(EM)
- Wende das RSASP1-Signaturprimitiv an: s = RSASP1(K, m)
- Konvertiere den Signaturrepräsentanten s in eine Signatur S der Länge k: S = I2OSP(s, k)
-
Gebe die Signatur S aus.
8.1.2. Signaturverifikationsoperation (Signature Verification Operation)
RSASSA-PSS-VERIFY ((n, e), M, S)
Eingabe (Input):
- (n, e): öffentlicher RSA-Schlüssel des Unterzeichners
- M: Nachricht, eine Oktettzeichenkette beliebiger Länge
- S: zu verifizierende Signatur, eine Oktettzeichenkette der Länge k
Ausgabe (Output):
- "valid signature" (gültige Signatur) oder "invalid signature" (ungültige Signatur)
Schritte (Steps):
-
Längenprüfung: Wenn die Länge der Signatur S nicht k Oktette beträgt, Ausgabe "invalid signature" und Stopp.
-
RSA-Verifikation:
- Konvertiere die Signatur S in einen ganzzahligen Signaturrepräsentanten s: s = OS2IP(S)
- Wende das RSAVP1-Verifikationsprimitiv an: m = RSAVP1((n, e), s). Wenn RSAVP1 "signature representative out of range" ausgibt, Ausgabe "invalid signature" und Stopp.
- Konvertiere den Nachrichtenrepräsentanten m in eine kodierte Nachricht EM der Länge emLen = ⌈(modBits - 1)/8⌉: EM = I2OSP(m, emLen)
-
EMSA-PSS-Verifikation: Wende die EMSA-PSS-Verifikationsoperation an: Result = EMSA-PSS-VERIFY(M, EM, modBits - 1). Wenn Result = "consistent", Ausgabe "valid signature"; andernfalls Ausgabe "invalid signature".
8.2. RSASSA-PKCS1-v1_5
RSASSA-PKCS1-v1_5 kombiniert die RSASP1- und RSAVP1-Primitive (Abschnitt 5.2) mit der EMSA-PKCS1-v1_5-Kodierungsmethode. Es ist mit dem IFSSA-Schema in IEEE 1363 [IEEE1363] kompatibel, wobei die Hash-Funktion des DigestInfo-Werts zur Generierung des Nachrichtenrepräsentanten verwendet wird.
Die Sicherheit von RSASSA-PKCS1-v1_5 hängt von der Schwierigkeit des RSA-Problems ab. Obwohl es keinen bekannten Angriff gibt, der dieses Schema erfolgreich bricht, gibt es auch keinen Sicherheitsbeweis wie bei PSS.
8.2.1. Signaturgenerierungsoperation (Signature Generation Operation)
RSASSA-PKCS1-V1_5-SIGN (K, M)
Die Schritte sind ähnlich wie bei RSASSA-PSS, verwenden jedoch die EMSA-PKCS1-v1_5-Kodierungsmethode
8.2.2. Signaturverifikationsoperation (Signature Verification Operation)
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S)
Die Schritte sind ähnlich wie bei RSASSA-PSS, verwenden jedoch die EMSA-PKCS1-v1_5-Verifikationsmethode