3.2. Verifying a Signature (Signaturverifikation)
3.2. Verifying a Signature (Signaturverifikation)
Die Verifikation einer HTTP-Nachrichtensignatur nimmt als Eingabe den Signaturkontext (einschließlich der Zielnachricht, insbesondere der Felder Signature und Signature-Input) und die Anforderungen der Anwendung. Ausgang ist entweder eine erfolgreiche Verifikation oder ein Fehler.
Um eine Signatur zu verifizieren, MUSS der Verifizierende folgenden Algorithmus anwenden:
-
Parse der Felder
SignatureundSignature-Inputwie in Abschnitten 4.1 und 4.2; Extraktion der zu prüfenden Signaturen und ihrer Labels.1.1. Gibt es mehrere Signaturwerte, ist anhand von Richtlinie und Konfiguration zu bestimmen, welche Signatur verarbeitet wird. Wird keine passende Signatur gefunden, Fehler.
1.2. Hat der gewählte
Signature-Feldwert keinen zugehörigenSignature-Input-Wert (gleiches Label), Fehler. -
Parse des gewählten
Signature-Input-Wertes als parametrisierte Inner List: geordnete Liste abgedeckter Komponenten und Signaturparameter. -
Parse des zugehörigen
Signature-Feldwertes zum Byte-Array der zu prüfenden Signatur. -
Prüfung der Signaturparameter: Erfüllung der Anforderungen dieses Dokuments sowie zusätzlicher anwendungsspezifischer Anforderungen (z. B. welche Komponenten abgedeckt sein müssen, Abschnitt 3.2.1).
-
Ermittlung des Verifikationsschlüsselmaterials. Bekannt aus statischer Konfiguration oder externer Aushandlung, wendet der Verifizierende das passende Verfahren an. Ist der Schlüssel in den Signaturparametern identifiziert, wird der Schlüsselbezeichner zu geeignetem Material aufgelöst. Der Verifizierende bewertet die Vertrauenswürdigkeit des Materials im Kontext. Ist ein Schlüssel unbekannt, nicht vertrauenswürdig oder passt nicht zur Vorkonfiguration, MUSS die Verifikation fehlschlagen.
-
Ermittlung des Verifikationsalgorithmus:
6.1. Ausgangspunkt ist die Menge der für die Anwendung zulässigen Algorithmen. Wählt ein folgender Schritt einen nicht zulässigen Algorithmus, schlägt die Validierung fehl.
6.2. Ist der Algorithmus extern bekannt, diesen verwenden.
6.3. Lässt er sich aus dem Schlüsselmaterial ableiten (z. B. Algorithmusfeld am Schlüssel), diesen verwenden.
6.4. Ist er explizit in den Signaturparametern über einen Wert aus dem Register „HTTP Signature Algorithms“ angegeben, den referenzierten Algorithmus verwenden.
6.5. Wird der Algorithmus an mehreren Stellen angegeben (Kombination aus Konfiguration, Parameter
alg, Schlüsselmaterial), MÜSSEN die aufgelösten Algorithmen übereinstimmen; sonst MUSS die Verifikation fehlschlagen. -
Mit der empfangenen HTTP-Nachricht und den geparsten Signaturparametern die Signaturbasis nach Abschnitt 2.5 neu erzeugen. Der Eingabewert für
@signature-paramsist der Wert desSignature-Input-Feldes für diese Signatur, serialisiert nach Abschnitt 2.3. Das Label der Signatur ausSignature-Inputgehört nicht dazu. -
Ist das Schlüsselmaterial zum Algorithmus passend, die passende kryptografische Verifikation
HTTP_VERIFYauf Signatur, neu berechnete Signaturbasis, Schlüsselmaterial und Signaturwert anwenden.HTTP_VERIFYund konkrete Algorithmen stehen in Abschnitt 3.3. -
Das Ergebnis der Verifikationsfunktion ist das Endergebnis der kryptografischen Prüfung.
Schlägt ein Schritt fehl oder liefert einen Fehler, schlägt die Signaturvalidierung fehl.
Beispiel: Verifikation der Signatur mit Label sig1 der folgenden Nachricht mit test-key-rsa-pss (Anhang B.1.2) und RSASSA-PSS (Abschnitt 3.3.1):
POST /foo?param=Value&Pet=dog HTTP/1.1
Host: example.com
Date: Tue, 20 Apr 2021 02:07:55 GMT
Content-Type: application/json
Content-Digest: sha-512=:WZDPaVn/7XgHaAy8pmojAkGWoRx2UFChF41A2svX+T\
aPm+AbwAgBWnrIiYllu7BNNyealdVLvRwEmTHWXvJwew==:
Content-Length: 18
Signature-Input: sig1=("@method" "@authority" "@path" \
"content-digest" "content-length" "content-type")\
;created=1618884473;keyid="test-key-rsa-pss"
Signature: sig1=:HIbjHC5rS0BYaa9v4QfD4193TORw7u9edguPh0AW3dMq9WImrl\
FrCGUDih47vAxi4L2YRZ3XMJc1uOKk/J0ZmZ+wcta4nKIgBkKq0rM9hs3CQyxXGxH\
LMCy8uqK488o+9jrptQ+xFPHK7a9sRL1IXNaagCNN3ZxJsYapFj+JXbmaI5rtAdSf\
SvzPuBCh+ARHBmWuNo1UzVVdHXrl8ePL4cccqlazIJdC4QEjrF+Sn4IxBQzTZsL9y\
9TP5FsZYzHvDqbInkTNigBcE9cKOYNFCn4D/WM7F6TNuZO9EgtzepLWcjTymlHzK7\
aXq6Am6sfOrpIC49yXjj3ae6HRalVc/g==:
{"hello": "world"}
Mit den Zusatzanforderungen, dass mindestens Methode, Authority, Pfad, content-digest, content-length und content-type signiert sind und der Zeitstempel created zur Verifikationszeit ausreichend aktuell ist, ist die Verifikation erfolgreich.