Zum Hauptinhalt springen

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):

  1. 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.

  2. 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)
  3. 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):

  1. Längenprüfung: Wenn die Länge der Signatur S nicht k Oktette beträgt, Ausgabe "invalid signature" und Stopp.

  2. 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)
  3. 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