Skip to content
Snippets Groups Projects

Prüfung DVDV-Signature

Merged Markus Flögel requested to merge Pruefung-der-DVDV-Signatur into main
Files
2
@@ -154,7 +154,7 @@ Der dekodierte Inhalt (Payload) der Adressierungsinformationen sieht beispielhaf
}
```
### Signaturprüfung der vom Self-Service Portal (SSP) signierten Adressierungsinformationen (Parameter `destinationSignature`)
### Signaturprüfung der vom Self-Service Portal (SSP) signierten Adressierungsinformationen (Parameter `destinationSignature`) {#checkDestinationSignature}
Bei den signierten Adressierungsinformationen handelt es sich um signierte JSON Web Tokens (JWTs).
Um die Signatur der vom Self-Service-Portal signierten JWTs zu überprüfen, ist es notwendig, auf die verwendeten Schlüssel (im Format JSON Web Key, kurz JWK) zugreifen zu können.
Das Self-Service-Portal stellt ein JSON Web Key Set (JWKS) öffentlich zugänglich über den Endpunkt `/.well-known/jwks.json` bereit.
@@ -276,12 +276,16 @@ Im folgenden Beispiel wird die Bibliothek [nimbus-jose-jwt](https://connect2id.c
</Tabs>
### Signaturprüfung der DVDV-Dienst gelieferten DestinationParameters (Header `jws-signature`)
Die vom DVDV-Dienst gelieferten Daten enthalten den `Zustellpunkt` sowie dessen Signatur `destinationParametersSignature`. Die destinationParametersSignature wird in diesem Fall im Header `jws-signature` der Response des Endpunktes `/destinations/{id}` zurückgegeben.
Bei der Signatur handelt es sich um eine Detached JSON Web Signature in der Compact Serialization (siehe https://datatracker.ietf.org/doc/html/rfc7515#section-3.1 und https://datatracker.ietf.org/doc/html/rfc7515#appendix-F).
### Signaturprüfung der vom DVDV gelieferten Zustellpunkt-Parameter (`destinationParameters` bzw. HTTP-Header `jws-signature`) {#checkDestinationParametersSignature}
Beispiel eines Zustellpunktes
Die vom DVDV gelieferten Daten enthalten den Zustellpunkt sowie dessen Signatur (`destinationParametersSignature`).
Die `destinationParametersSignature` wird in der Routing API im gleichnamigen Feld und in der API des DVDV über den HTTP-Header `jws-signature` zurückgegeben.
Bei der Signatur handelt es sich um eine JSON Web Signature (JWS) in der Compact Serialization gemäß [RFC 7515, Abschnitt 3.1](https://datatracker.ietf.org/doc/html/rfc7515#section-3.1).
Die Signatur liegt als Detached Signature gemäß [RFC 7515, Anlage F](https://datatracker.ietf.org/doc/html/rfc7515#appendix-F) vor.
Bei einer Detached Signature sind die eigentlichen Inhaltsdaten (Payload) nicht Teil der übertragenen Signatur, sondern werden separat übermittelt.
Für eine Signaturprüfung müssen die separat übermittelten Inhaltsdaten (Payload) daher zunächst wieder zur Signaur hinzugefügt werden (siehe unten).
Beispiel eines Zustellpunktes (`destinationParameters`):
```json
{
"encryptionKid": "NFNb7k84r61G9ayAAJItJCNGl7wKWif9HyBAgicJq_8",
@@ -324,20 +328,18 @@ Beispiel eines Zustellpunktes
}
```
Beispiel einer Detached JWS aus dem Header der Response:
Beispiel einer Detached JWS (`destinationParametersSignature`):
```
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjNTNjd6UVE3QWFMdHFuSkthV2Y3N0FjM1d3WTItTEtXVVZTM1dJRUsyY2sifQ..At8ecdCMaUHQIo-22FKHBIocZ7hFxIHQxo0u_61tMKvDUy_BStKt46Aqh7lt41OLfIwEu6b4ZjLmWTeMi5SV-KMEAdRnYp5_WAmVhJttDkpf3d32uBcql0xJChAd93mr4qUnMvo-p3ltYgiKkG6_IHt8lUPt6BaH_BqWvidmtM5_Hd1SyW92OkEm1d50eMIJMxwY2e7_4qGKWqnMTel-dmY4HXlfqwfkkwkfvzVxQgOLtw0pzPKx3qODxuiOx6CVzr_QTrs12ugt7YkVkXSuVT40vekPw006O6aDOyETITK6OmDGnAB3iRqEX_qcOco2GWT0o66J2IARbtd12Hd0OpI0seqLONmSGNxcIxMcQwp5SAQa92xKkGFHgW86zAi6DQGggAh-Pb7MMN-i20jv1iC5hEpcd_eSKFDAGp_paEJkjOy-WPyhsksssdpival9OkXCQmHQnGzqu-RS4CS5l3gkAL-q5HoZHGD-YbXaYXRac4nyCrvmYg5yDBFSOvi4v07bokXiIp52tVAhuagmishsIDPI52ke4hkhHP68mUIQaA8UBhekNxPoEpXWfNwBmJpMc4Aa17Ko5WGYPG01_w11EXZ2q80-T4eINWdfAZAhrrmJwSmPQwnsrnuwTTOpl89vSeXi17KM-VxAf9kGrvE5scAtwGEjTlr56LEUieI
```
#### Erzeugung der vollständigen Signatur inklusive Payload
Die Prüfung der Signatur kann nur auf eine vollständige Signatur erfolgen. Für die Umwandlung muss der Payload (`Zustellpunkt`) als Bas64Encoded String der Signature hinzugefügt werden.
Dabei ist für das Json des Payload zu beachten, dass :
- alle semantisch unbedeutenden nicht-druckbaren Zeichen (Leerzeichen, Tabs, Line Feed \n, Carriage Return \r) vor und nach den strukturierenden Zeichen ([, {, ], }, :, ,) aus dem JSON-Payload entfernt werden
- die Attribute des JSON-Objekts in alphabetischer Reihenfolge sortiert werden
Die Prüfung der Signatur kann nur auf einer vollständige Signatur erfolgen.
Für die Umwandlung einer Detached Signature in eine gewöhnliche JSON Web Signature muss der Payload (`destinationParameters`) als Base64-URL-Encoded String der Signature hinzugefügt werden.
Dabei ist für das JSON des Payload zu beachten, dass
- alle semantisch unbedeutenden nicht-druckbaren Zeichen (Leerzeichen, Tabs, Line Feed `\n`, Carriage Return `\r`) vor und nach den strukturierenden Zeichen ([, {, ], }, :, ,) aus dem JSON-Payload entfernt werden und
- die Attribute des JSON-Objekts in alphabetischer Reihenfolge sortiert werden.
<Tabs
defaultValue="java"
@@ -363,19 +365,20 @@ Dabei ist für das Json des Payload zu beachten, dass :
#### Prüfung der vollständigen Signatur
Um die Signatur zu überprüfen, ist es notwendig auf die verwendeten Schlüssel (im Format JSON Web Key, kurz JWK) zugreifen zu können.
Der Zustelldienst stellt ein JSON Web Key Set (JWKS) öffentlich zugänglich über den Endpunkt /.well-known/jwks.json bereit.
Da der Zustelldienst mit mehreren Instanzen betrieben werden kann, kann es auch mehrere Endpunkte zum JWKS geben. Diese Endpunkte können dynamisch aus dem Payload (`Zustellpunkt`) erzeugt werden. Dabei setzt sich der Endpunkt aus dem Attribut `submissionUrl` + '/.well-known/jwks.json' zusammen.
Vor der eigentlichen Signatureprüfung müssen alle Grundvorraussetzungen des JWT bzw. des JWKS geprüft werden.
1. Prüfung auf erlaubten Algorithmus PS512 im Header des JWT.
2. Url zum JWKS aus dem Payload des JWT ermitteln und diese Url um den Pfad `/.well-known/jwks.json` erweitern. Dabei muss auch geprüft werden, ob die Url zum JWKS erlaubt ist.
3. Ermitteln des PublicKey über die KeyId die im Header hinterlegt ist.
4. Prüfung dass der PublicKey eine Länge von 4096 bit besitzt.
5. Prüfung das der PublicKey den Algorithmus PS512 verwendet.
Der Zustelldienst stellt ein JSON Web Key Set (JWKS) öffentlich zugänglich über den Endpunkt <ApiLink api="submission-api" to="/.well-known/jwks.json" /> bereit.
Da der Zustelldienst mit mehreren Instanzen betrieben werden kann, kann es auch mehrere Endpunkte zum JWKS geben.
Diese Endpunkte können dynamisch aus dem Payload (`Zustellpunkt`) erzeugt werden.
Dabei setzt sich der Endpunkt aus dem Attribut `submissionUrl` + '/.well-known/jwks.json' zusammen.
Vor der eigentlichen Signaturprüfung muss die Einhaltung einiger Grundvoraussetzungen geprüft werden:
1. Prüfung auf erlaubten Algorithmus `PS512` im Header des JWT gemäß den [Vorgaben für kryptographische Verfahren](../crypto/details.md).
2. Erweiterung der URL des zuständigen Zustelldienstes (`submissionUrl`) aus dem Payload des JWT (`destinationParameters`) um den Pfad `/.well-known/jwks.json`. Dabei muss geprüft werden, ob die URL zu einem vertrauenswürdigen Zustelldienst gehört.
3. Ermitteln des öffentlichen Schlüssel über die Key-ID (`kid`), die im Header des JSON Web Signature hinterlegt ist.
4. Prüfung dass der öffentliche Schlüssel eine Länge von 4096 bit besitzt.
5. Prüfung das der öffentliche Schlüssel eine Verwendung des Algorithmus `PS512` erlaubt.
6. Prüfung der Signatur.
<Tabs
defaultValue="java"
values={[
Loading