Zum Hauptinhalt springen

Verschlüsseln

Über FIT-Connect versendete Daten sind oft schützenswert und müssen daher verschlüsselt werden.

Eine Übertragung über FIT-Connect besteht aus

  • einem Metadatensatz
  • einem Fachdatensatz
  • beliebig vielen Anlagen (optional)

Alle drei Datensatzarten müssen mit JSON Web Encryption (JWE) verschlüsselt und mit JWE-Compact Serialisierung serialisiert werden. Dokumente müssen als Binärdateien und nicht als Zeichenketten kodiert verschlüsselt werden.

Der vorher abgerufene Zustellpunkt beinhaltet die Schlüssel-ID des öffentlichen Verschlüsselungsschlüssels unter dem Feld encryptionKid. Damit können wir den öffentlichen Schlüssel des Zustellpunktes im JSON Web Key (JWK)-Format abrufen um Daten zu verschlüsseln.

Beispiel: Abruf des JWK eines Zustellpunktes
$ KID=...  # Wert des Feldes `encryptionKid`
$ SUBMISSION_API=https://submission-api-testing.fit-connect.fitko.dev
$ DESTINATION_ID=...
$ curl -X GET "$SUBMISSION_API/v1/destinations/$DESTINATION_ID/keys/$KID"
{
"kty": "RSA",
"key_ops": ["wrapKey"],
"x5c": [
"LS0tLS1CRUdJTiBDRVJU...jN1NGKzQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
],
"kid": "787f3a1c-7da7-44d7-9b79-9783b1ea9be8",
"alg": "RSA-OAEP-256",
"n": "sX2DX7rG5BoJd23...FlxHZt8T6ZqjRa1QcFnkq3_M4-tk",
"e": "AQAB"
}

Mit diesem Schlüssel könnten jetzt die oben genannten Datensätze verschlüsselt werden. Die so verschlüsselten Daten können ausschließlich von diesem Zustellpunkt gelesen werden.

Bevor wir mit der Verschlüsselung loslegen können müssen wir den eben abgerufenen JWK noch auf Gültigkeit überprüfen.

Überprüfen des öffentlichen Schlüssels (Zertifikatsprüfung)

Hinweis

In der Testumgebung ist die Absicherung der öffentlichen Schlüssel eines Zustellpunktes durch Zertifikate optional. Eine Prüfung der Zertifikate kann in diesem Fall zu Testzwecken entfallen.

Öffentliche Schlüssel MÜSSEN vor der Verwendung zwingend im Client auf Gültigkeit geprüft werden. Diese Prüfung umfasst folgende Schritte:

  • Überprüfung, dass der JSON Web Key gemäß den Vorgaben für kryptographische Verfahren eine Schlüssellänge von mind. 4096 Bit aufweist
  • Überprüfung, dass der JSON Web Key gemäß den Vorgaben für kryptographische Verfahren für die Verschlüsselung geeignet ist ("key_ops": ["wrapKey"])
  • Überprüfung, dass der JSON Web Key gemäß den Vorgaben für kryptographische Verfahren zur Nutzung des Verfahrens RSA-OAEP-256 geeignet ist ("kty":"RSA", "alg": "RSA-OAEP-256")
  • Überprüfung, dass der öffentliche Schlüssel mit dem im JSON Web Key hinterlegten Zertifikat übereinstimmt (Attribute n und e)
  • Überprüfung, dass das Zertifikat der Verwaltungs-PKI entstammt, d.h Überprüfung der Zertifikats-Kette bis zum Wurzelzertifikat (BSI) (Attribut x5c)
  • Überprüfung, dass der im Zertifikat angegebene Gültigkeitszeitraum nicht überschritten wurde
  • Überprüfung, dass das Zertifikat nicht zurückgezogen wurde (mittels Validierungsdienst, gegen eine Certificate Revocation List (CRL) und/oder einen OCSP-Endpunkt mit signierten Antworten)

Weitere Informationen zur Gültigkeitsprüfung finden sich in der technischen Richtlinie BSI TR-02103 des BSI.

Der folgende Code kann zur Validierung der Vorgaben für kryptographische Verfahren benutzt werden. Zusätzlich MUSS eine Zertifikatsprüfung inkl. Prüfung der Zertifikatskette erfolgen.

Diese Funktionalität wird durch das .NET-SDK bereits intern umgesetzt und ist durch einen Aufruf der SDK-Methode ClientFactory.GetSenderClient(...).SendAsync(...) automatisch mit abgedeckt:

var sender = ClientFactory
.GetSenderClient(FitConnectEnvironment.Testing, clientId, clientSecret, logger)
.SendAsync(sendableSubmission);

Der Quellcode oben ist ein Auszug aus dem Projekt ConsoleAppExample, das im Repository Codebeispiele - examples der FITKO hinterlegt ist. Eine Beschreibung des .NET-SDKs finden Sie im Hauptmenü unter "SDKs > .NET-SDK".


Nutzung des öffentlichen Schlüssels zur Verschlüsselung

Diese Funktionalität wird durch das .NET-SDK bereits intern umgesetzt und ist durch einen Aufruf der SDK-Methode ClientFactory.GetSenderClient(...).SendAsync(...) automatisch mit abgedeckt:

var sender = ClientFactory
.GetSenderClient(FitConnectEnvironment.Testing, clientId, clientSecret, logger)
.SendAsync(sendableSubmission);

Der Quellcode oben ist ein Auszug aus dem Projekt ConsoleAppExample, das im Repository Examples der FITKO hinterlegt ist. Eine Beschreibung des .NET-SDKs finden Sie im Hauptmenü unter "SDKs > .NET-SDK".