DAT-Zertifikat

1. Überblick

Das DAT-Zertifikat ist eine Spezifikation zur Steuerung der Ausstellungsberechtigung von DAT sowie zur Verwaltung der Signatur- und Verschlüsselungsalgorithmen und der Schlüssel (Key) des Tokens.

Jedes Zertifikat besitzt eine eindeutige ID (CID) und verwaltet den Token-Lebenszyklus sicher, indem es den Ausstellungszeitraum des DAT sowie die Gültigkeitsdauer (TTL) der erzeugten Tokens vorschreibt.

Bei DAT ist Key-Rolling keine Option. Da der Ausstellungszeitraum auf Spezifikationsebene im Zertifikat festgeschrieben ist, lassen sich nach Ablauf dieses Zeitraums mit dem Zertifikat keine neuen Tokens mehr erzeugen.


2. Zertifikatsstruktur

Wire-Format des Zertifikats
cid
uint64 (hexadezimal)
.
start
uint64 (dezimal)
.
duration
uint64 (dezimal)
.
ttl
uint64 (dezimal)
.
sig-alg
String
.
crypto-alg
String
.
sig-key
Base64Url
.
crypto-key
Base64Url
Bewegen Sie den Mauszeiger über ein Feld, um dessen Beschreibung anzuzeigen.
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key
Struktur
Beispielrefresh

2.1. Detailspezifikation der einzelnen Felder

CID : Hex (uint64)

  • Eine eindeutige Zertifikats-ID zur Identifizierung des Zertifikats. Sie wird dem Feld CID des DAT zugeordnet und bestimmt, welches Zertifikat bei der Verifizierung verwendet wird.
  • Die CID ist ein unveränderlicher Bezeichner. Beim Schlüsselwechsel wird dieselbe CID nicht wiederverwendet, sondern ein Zertifikat mit einer neuen CID ausgestellt.

DAT-Ausgabestart : uint64 (Unix Time)

  • Gibt den Startzeitpunkt in Sekunden (Seconds) an, ab dem mit diesem Zertifikat ein DAT ausgestellt werden kann.

DAT-Ausgabedauer : uint64 (Seconds)

  • Die Ausstellungs-Gültigkeitsdauer des Zertifikats. Nach Ablauf dieser Dauer (in Sekunden) ab DAT-Ausgabestart kann mit diesem Zertifikat kein neues DAT mehr ausgestellt werden.
  • Es handelt sich um eine Dauer (duration), nicht um einen absoluten Zeitpunkt. Der Endzeitpunkt errechnet sich als start + duration.

DAT TTL (Gültigkeitszeit) : uint64 (Seconds)

  • Die Gültigkeitsdauer (Time To Live) der mit diesem Zertifikat ausgestellten DATs. Bei der DAT-Erstellung wird der Wert expire gesetzt, indem dieser Wert zum Ausstellungszeitpunkt addiert wird.

Signaturalgorithmus : String / Enum

  • Der Signaturalgorithmus, der zum Erstellen und Verifizieren des Feldes signature des DAT verwendet wird.

Verschlüsselungsalgorithmus : String / Enum

  • Der Verschlüsselungsalgorithmus, der zum Ver- und Entschlüsseln des Feldes secure des DAT verwendet wird.

Signaturschlüssel : Base64Url (Binary)

  • Schlüsseldaten, die für Signierung und Verifizierung verwendet werden. (Je nach Algorithmus kann dies der Public/Private Key eines asymmetrischen Schlüsselpaars oder ein symmetrischer Schlüssel sein.)

Verschlüsselungsschlüssel : Base64Url (Binary)

  • Verschlüsselungsschlüsseldaten, die zur Ver- und Entschlüsselung des Feldes secure verwendet werden.

2.2. Zeitberechnung

end    = start + duration        Ende der Ausstellung
expire = end + ttl               endgültiger Ablauf des Zertifikats
  • Alle Berechnungen erfolgen in uint64, und nur ein Überlauf wird als Fehler abgelehnt.
  • duration = 0 und ttl = 0 sind zulässige Werte. Damit lassen sich ein Zertifikat, dessen Ausstellungsfenster sofort schließt, oder ein Zertifikat, dessen Tokens unmittelbar nach der Ausstellung ungültig werden, abbilden.
  • Da alle Felder vorzeichenlose Ganzzahlen sind, existieren negative Werte typbedingt nicht.

2.3. Konstruktor-Signatur

Alle Sprachimplementierungen verwenden die folgende Argumentreihenfolge.

(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
 signature_key, crypto_key)

Das dritte Argument ist eine Dauer, kein Endzeitpunkt

Übergibt man dem dritten Argument einen absoluten Endzeitpunkt (end), entsteht ohne jede Fehlermeldung ein Zertifikat mit einem völlig falschen Gültigkeitsfenster — denn der Wert fließt unverändert in start + duration ein.


3. Lebenszyklus des Zertifikats

Die vier Abschnitte eines Zertifikats
Erzeugung
Beginn der Ausstellung
Ende der Ausstellung
Endgültiger Ablauf
Ausstellungsverzögerung (delay)
Ausstellung möglich (duration)
DAT TTL
Zeit, damit alle Knoten das Zertifikat abholen
DAT-Ausstellung und -Verifizierung möglich
Keine Ausstellung, nur Verifizierung
Ein Zertifikat läuft erst endgültig ab, nachdem es die Abschnitte Ausstellungsverzögerung → Ausstellung möglich → verbleibende DAT-TTL vollständig durchlaufen hat.
AbschnittAusstellungVerifizierungKriterium
Ausstellungsverzögerungissuable() == false
Ausstellung möglichissuable() == true
Verbleibende DAT-TTLAusstellungsfenster geschlossen, aber noch nicht abgelaufen
Nach endgültigem Ablaufexpired() == true
  • Die Ausstellungsfähigkeit wird über signable() && start <= now <= end bestimmt und schließt beide Enden ein.
  • Auch nachdem das Ausstellungsfenster geschlossen ist, lebt das Zertifikat noch um ttl weiter. Ein kurz vor Schließung des Fensters ausgestelltes Token muss seine volle Lebensdauer ausschöpfen können.
  • Der Abschnitt Ausstellungsverzögerung (delay) verschafft allen Knoten des Clusters Zeit, das neue Zertifikat abzuholen. Einzelheiten finden Sie im Dokument CMS-Synchronisierung.

4. Algorithmen

4.1. Signaturalgorithmen

Liste der Signaturalgorithmen zum Schutz des DAT vor Fälschung und Manipulation. Unterstützt werden symmetrische und asymmetrische Schlüsselverfahren.

NameVerfahrenAnmerkung
ECDSA-P256AsymmetrischElliptische-Kurven-Digitalsignatur (NIST secp256r1)
ECDSA-P384AsymmetrischElliptische-Kurven-Digitalsignatur (NIST secp384r1)
ECDSA-P521AsymmetrischElliptische-Kurven-Digitalsignatur (NIST secp521r1)
HMAC-SHA256-MFSSymmetrischKeyed-Hashing auf Basis eines 256-Bit-Geheimschlüssels fester Größe
HMAC-SHA384-MFSSymmetrischKeyed-Hashing auf Basis eines 384-Bit-Geheimschlüssels fester Größe
HMAC-SHA512-MFSSymmetrischKeyed-Hashing auf Basis eines 512-Bit-Geheimschlüssels fester Größe

MFS (Maximum Fixed Secret): Ein Verfahren, bei dem ein Geheimschlüssel fester Größe verwendet wird, dessen Bitlänge der Ausgabe (Output) des Hash-Algorithmus entspricht.

4.2. Verschlüsselungsalgorithmen

Liste der authentifizierten Verschlüsselungsalgorithmen (Authenticated Encryption) zum Schutz der vertraulichen Daten im DAT (Feld secure).

NameSchlüssellängeAufbau
IV-AES128-GCM128-BitIV(96bit) + Verschlüsselungsergebnis
IV-AES256-GCM256-BitIV(96bit) + Verschlüsselungsergebnis

IV (Initialization Vector) Einbettung: Bei jeder Verschlüsselung wird ein eindeutiger 96-Bit-NONCE (IV) erzeugt und dem Verschlüsselungsergebnis als Präfix (Prefix) vorangestellt. Bei der Entschlüsselung werden die ersten 96 Bit als IV abgetrennt und zur Entschlüsselung verwendet.

4.3. Prüfung der Schlüssellänge

Beim Einlesen eines Zertifikats wird geprüft, ob die Bitlänge des deklarierten Algorithmus mit der tatsächlichen Schlüssellänge übereinstimmt.

Enthält beispielsweise ein Zertifikat, das IV-AES256-GCM deklariert, einen 16-Byte-Schlüssel, so wird bereits der Import selbst abgelehnt. Ohne diese Prüfung würde man im Glauben, AES-256 zu verwenden, tatsächlich mit AES-128 arbeiten.


5. Verify-only-Export

Servern, die ausschließlich verifizieren, muss man den privaten Signaturschlüssel nicht geben. Das DAT-Zertifikat bietet dafür den verify-only-Export.

Verteilungswege des vollständigen und des verify-only-Zertifikats
DAT CMS
Ausstellungsserver
Reiner Verifizierungsserver
GET /v1/certs
Vollständiges Zertifikat (inkl. privatem Signaturschlüssel)
GET /v1/certs/verify-only
verify-only-Zertifikat
AnfrageZertifikatsverteilung
Signaturalgorithmussupport_verify_only()Ergebnis des verify-only-Exports
ECDSA-FamilietrueVom Signaturschlüssel wird nur der öffentliche Schlüssel herausgegeben (Base64 130 Zeichen → 87 Zeichen)
HMAC-FamiliefalseEs tritt ein expliziter Fehler auf

HMAC ist symmetrisch, daher existiert so etwas wie ein „nur zur Verifizierung geeigneter Schlüssel" gar nicht. Ein Versuch, verify-only zu exportieren, wird deshalb nicht stillschweigend übersprungen, sondern sofort als Fehler gemeldet. Da ein verify-only-Export fehlschlägt, sobald HMAC-Zertifikate darunter gemischt sind, sollten Sie die ECDSA-Familie verwenden, wenn Sie reine Verifizierungsknoten betreiben.

Der Verschlüsselungsschlüssel wird auch bei verify-only vollständig herausgegeben

Der AES-Schlüssel für das Feld secure ist symmetrisch und wird daher unabhängig von verify-only immer vollständig exportiert, denn zum Entschlüsseln wird derselbe Schlüssel benötigt wie zum Verschlüsseln.

Ein Server, der ein verify-only-Zertifikat erhalten hat, kann also:

  • keine Signatur fälschen — ohne privaten Schlüssel kann er kein neues DAT erzeugen.
  • die secure-Nutzlast entschlüsseln — ihm gegenüber besteht keine Vertraulichkeit.

verify-only ist ein Mittel zur Aufteilung der Ausstellungsberechtigung, nicht zur Aufteilung der Vertraulichkeit. Werte, die vor Verifizierungsknoten verborgen bleiben müssen, dürfen nicht in secure abgelegt werden.