B.4. HTTP Message Transformations (HTTP-Nachrichtentransformationen)
B.4. HTTP Message Transformations (HTTP-Nachrichtentransformationen)
HTTP erlaubt Vermittlern und Anwendungen, Nachrichten zu transformieren, ohne die Semantik zu ändern. HTTP-Nachrichtensignaturen sollen unter vielen Umständen robust gegen solche Transformationen sein.
Beispiel: folgende HTTP-Anfrage wurde mit Ed25519 und Schlüssel test-key-ed25519 signiert:
HINWEIS: Zeilenumbruch gemäß RFC 8792
GET /demo?name1=Value1&Name2=value2 HTTP/1.1
Host: example.org
Date: Fri, 15 Jul 2022 14:24:55 GMT
Accept: application/json
Accept: /
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
Signaturbasis für diese Nachricht:
"@method": GET
"@path": /demo
"@authority": example.org
"accept": application/json, /
"@signature-params": ("@method" "@path" "@authority" "accept")
;created=1618884473;keyid="test-key-ed25519"
Die folgende Nachricht wurde um Accept-Language und einen Query-Parameter ergänzt. Da weder Sprache noch Query abgedeckt sind, bleibt dieselbe Signatur gültig:
HINWEIS: Zeilenumbruch gemäß RFC 8792
GET /demo?name1=Value1&Name2=value2¶m=added HTTP/1.1
Host: example.org
Date: Fri, 15 Jul 2022 14:24:55 GMT
Accept: application/json
Accept: /
Accept-Language: en-US,en;q=0.5
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
Die folgende Nachricht entfernt Date, fügt Referer hinzu und führt die beiden Accept-Zeilen zu einer zusammen. Date und Referer sind nicht abgedeckt; das Zusammenführen von Accept ist eine erlaubte Transformation laut Kanonisierung. Die Signatur bleibt gültig:
HINWEIS: Zeilenumbruch gemäß RFC 8792
GET /demo?name1=Value1&Name2=value2 HTTP/1.1
Host: example.org
Referer: https://developer.example.org/demo
Accept: application/json, /
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
Die folgende Nachricht permutiert die Reihenfolge der Felder, nicht aber die Reihenfolge der beiden Accept-Instanzen untereinander. Die Signatur bleibt gültig:
HINWEIS: Zeilenumbruch gemäß RFC 8792
GET /demo?name1=Value1&Name2=value2 HTTP/1.1
Accept: application/json
Accept: /
Date: Fri, 15 Jul 2022 14:24:55 GMT
Host: example.org
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
Die folgende Nachricht ändert die Methode zu POST und die Authority zu example.com (Host). Da Methode und Authority abgedeckt sind, ist dieselbe Signatur nicht mehr gültig:
HINWEIS: Zeilenumbruch gemäß RFC 8792
POST /demo?name1=Value1&Name2=value2 HTTP/1.1
Host: example.com
Date: Fri, 15 Jul 2022 14:24:55 GMT
Accept: application/json
Accept: /
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
Die folgende Nachricht vertauscht die Reihenfolge der beiden Accept-Felder. Da die Reihenfolge gleichnamiger Felder in HTTP semantisch ist, ändert sich der Wert in der Signaturbasis — dieselbe Signatur ist nicht mehr gültig:
HINWEIS: Zeilenumbruch gemäß RFC 8792
GET /demo?name1=Value1&Name2=value2 HTTP/1.1
Host: example.org
Date: Fri, 15 Jul 2022 14:24:55 GMT
Accept: /
Accept: application/json
Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519"
Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==: