Zum Hauptinhalt springen

5. Producing and Consuming JWSs (JWS erstellen und verarbeiten)

5.1 Message Signature or MAC Computation (Berechnung der Nachrichtensignatur oder des MAC)

Um ein JWS zu erstellen, müssen (MUST) die folgenden Schritte ausgeführt werden. Die Reihenfolge der Schritte ist in Fällen nicht signifikant, in denen es keine Abhängigkeiten zwischen den Eingaben und Ausgaben der Schritte gibt.

  1. Erstellen Sie den Inhalt des JWS Payload.

  2. Berechnen Sie die codierte Darstellung des JWS Payload als ASCII(BASE64URL(JWS Payload)).

  3. Erstellen Sie den JWS Protected Header. Beachten Sie, dass die Menge an Leerraum zwischen Werten im JSON-Objekt des JWS Protected Header null sein muss und keine Zeilenumbruchzeichen vorhanden sein dürfen.

  4. Berechnen Sie die codierte Darstellung des JWS Protected Header als BASE64URL(UTF8(JWS Protected Header)).

  5. Berechnen Sie die JWS-Signing-Eingabe (JWS Signing Input) als:

    ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload))

    Beachten Sie, dass das '.'-Zeichen (Punkt) ein Trennzeichen zwischen den beiden Teilen ist.

  6. Berechnen Sie die JWS Signature in der für den jeweiligen verwendeten Algorithmus definierten Weise über die JWS-Signing-Eingabe. Die Algorithmusdetails sind in [JWA] definiert.

  7. Berechnen Sie die codierte Darstellung der JWS Signature als BASE64URL(JWS Signature).

  8. Wenn Sie eine JWS Compact Serialization produzieren, ist die endgültige Ausgabe:

    BASE64URL(UTF8(JWS Protected Header)) || '.' ||
    BASE64URL(JWS Payload) || '.' ||
    BASE64URL(JWS Signature)
  9. Wenn Sie eine JWS JSON Serialization produzieren, erstellen Sie ein entsprechendes JSON-Objekt wie in Abschnitt 7.2 beschrieben.

5.2 Message Signature or MAC Validation (Validierung der Nachrichtensignatur oder des MAC)

Beim Validieren eines JWS müssen (MUST) die folgenden Schritte ausgeführt werden. Die Reihenfolge der Schritte ist in Fällen nicht signifikant, in denen es keine Abhängigkeiten zwischen den Eingaben und Ausgaben der Schritte gibt. Wenn einer dieser Schritte fehlschlägt, schlägt die Validierung des JWS fehl.

  1. Analysieren Sie die JWS Compact Serialization oder JWS JSON Serialization, um die folgenden codierten Werte zu extrahieren:

    • Den codierten JWS Protected Header
    • Den codierten JWS Payload
    • Die codierte JWS Signature
  2. Base64url-decodieren Sie den codierten JWS Protected Header nach Konvertierung in eine ASCII-Oktettsequenz.

  3. Verifizieren Sie, dass die resultierende Oktettdarstellung ein vollständig gültiges JSON-Objekt ist, das UTF-8-codiert und wie in RFC 7159 [RFC7159] spezifiziert ist.

  4. Verifizieren Sie, dass der resultierende JWS Protected Header keine doppelten Mitgliedsnamen enthält.

  5. Bestimmen Sie den zu verwendenden Signatur- oder MAC-Algorithmus:

    • Wenn Sie die JWS Compact Serialization verwenden, wird der Algorithmus durch den Wert des "alg"-Header-Parameters im JWS Protected Header spezifiziert.
    • Wenn Sie die JWS JSON Serialization verwenden, wird der Algorithmus durch den Wert des "alg"-Header-Parameters im JOSE-Header für die zu verifizierende Signatur/MAC spezifiziert.
  6. Verifizieren Sie, dass der "alg"-Wert ein von der Implementierung unterstützter Algorithmus ist und dass dieser Algorithmus gemäß der Sicherheitsrichtlinie der Anwendung akzeptabel ist. Siehe Abschnitt 10.6 für Sicherheitsüberlegungen.

  7. Base64url-decodieren Sie den codierten JWS Payload und die codierte JWS Signature.

  8. Bestimmen Sie den zur Verifizierung der Signatur/des MAC zu verwendenden Schlüssel. Dies kann unter Verwendung einer der in Abschnitt 6 (Key Identification, Schlüsselidentifikation) beschriebenen Methoden erfolgen.

  9. Berechnen Sie die JWS-Signing-Eingabe wie in Abschnitt 5.1, Schritt 5 beschrieben.

  10. Validieren Sie die JWS Signature (oder MAC) gegen die JWS-Signing-Eingabe in der für den jeweiligen verwendeten Algorithmus definierten Weise. Die Algorithmusdetails sind in [JWA] definiert.

  11. Wenn die Validierung erfolgreich ist, ist das JWS gültig und der Payload kann von der Anwendung verwendet werden. Wenn die Validierung fehlschlägt, muss (MUST) das JWS abgelehnt werden.

5.3 String Comparison Rules (String-Vergleichsregeln)

Die Verarbeitung eines JWS beinhaltet notwendigerweise den Vergleich bekannter String-Werte mit Mitgliedern und Werten in JSON-Objekten und URIs. Zum Beispiel müssen zur Bestimmung, welcher Algorithmus zu verwenden ist, die Namen und Werte der Header-Parameter mit registrierten Namen und Werten verglichen werden.

JSON-Header-Parameter-Namen und JSON-String-Werte müssen (MUST) unter Verwendung des Unicode-String-Wertevergleichs verglichen werden. Dies bedeutet, dass:

  • Header-Parameter-Namen und -Werte exakt übereinstimmen müssen, Zeichen für Zeichen
  • Der Vergleich case-sensitive ist
  • Keine Unicode-Normalisierung vor dem Vergleich durchgeführt werden darf
  • Zeichen unter Verwendung ihrer Code-Point-Werte verglichen werden müssen

URIs, die in Header-Parametern verwendet werden, müssen (MUST) unter Verwendung der Simple String Comparison-Methode verglichen werden, die in Abschnitt 6.2.1 von RFC 3986 [RFC3986] definiert ist.

Implementierungen müssen sich bewusst sein, dass falsch durchgeführte String-Vergleiche zu Sicherheitsschwachstellen führen können. Siehe Abschnitt 10.13 für weitere Informationen zu Unicode-Vergleichs-Sicherheitsproblemen.