DPoP (RFC 9449)
DPoP (Demonstrating Proof of Possession) nach RFC 9449 bindet ein OAuth-Token an einen Schlüssel des Clients, sodass ein gestohlenes Token ohne den passenden privaten Schlüssel nicht verwendet werden kann.
RFC 9449 wurde im September 2023 veröffentlicht. Bei jeder Anfrage schickt der Client neben dem Token einen DPoP-Nachweis mit: ein kurzes, mit seinem privaten Schlüssel signiertes JWT, das Methode (htm), Adresse (htu), Zeitpunkt (iat) und eine eindeutige Kennung (jti) enthält. Das Token selbst verweist auf den öffentlichen Schlüssel. Der Server prüft, dass Nachweis und Token zusammengehören und der Nachweis frisch ist.
Gegenüber klassischen Bearer-Tokens, die jeder verwenden kann, der sie besitzt, ist das ein erheblicher Gewinn an Sicherheit. Für Agenten, die viele Anfragen über verschiedene Systeme stellen, begrenzt DPoP den Schaden, wenn ein Token in Protokollen oder fremden Systemen landet.
Beispiel
Ein Agent ruft mit einem Token die Schnittstelle einer Bank auf. Jede Anfrage trägt einen frischen DPoP-Nachweis, signiert mit dem Schlüssel des Agenten. Gelangt das Token durch einen Fehler in ein Protokoll, kann ein Angreifer damit nichts anfangen, weil ihm der private Schlüssel fehlt.
Abgrenzung
Ein Bearer-Token wirkt wie Bargeld, ein DPoP-gebundenes Token wie eine Karte mit PIN. Mutual TLS erreicht eine ähnliche Bindung über das Client-Zertifikat der Verbindung. Key Binding bei SD-JWT bindet nicht ein Zugangstoken, sondern einen Nachweis an seinen Inhaber.
In der Praxis
- Binden Sie Zugangstokens von Agenten mit DPoP an einen Schlüssel, statt Bearer-Tokens zu verwenden.
- Prüfen Sie serverseitig Zeitpunkt und Kennung jedes Nachweises, um Wiederverwendung zu erkennen.
- Bewahren Sie den privaten Schlüssel des Agenten in einem geschützten Speicher auf und wechseln Sie ihn regelmässig.
Bezug zu KYA
KYA prüft das verwandte Prinzip bei Nachweisen: das Key-Binding-JWT eines SD-JWT VC, das die Vorlage an Empfänger, Zeitpunkt und den Schlüssel des Agenten bindet. Ohne diese Bindung gilt die Verbindung zwischen Agent und Mandat als nicht belegt.
Zugehöriger Prüfschritt: Agent und Auftraggeber (subject_agent_binding). Nennen alle Teile denselben Agenten, ist der Auftraggeber benannt, hält der Agent den gebundenen Schlüssel?
Häufige Fragen
Was schützt DPoP?
DPoP schützt vor der Verwendung gestohlener Tokens. Ohne den privaten Schlüssel, an den ein Token gebunden ist, kann niemand einen gültigen DPoP-Nachweis erzeugen.
Was steht in einem DPoP-Nachweis?
Methode und Adresse der Anfrage, der Zeitpunkt, eine eindeutige Kennung und der öffentliche Schlüssel im Header. Optional kommen ein Hash des Tokens und eine Nonce des Servers hinzu.
Was ist der Unterschied zwischen DPoP und Mutual TLS?
Beide binden Tokens an einen Schlüssel. Mutual TLS nutzt das Client-Zertifikat der Verbindung, DPoP einen signierten Nachweis auf Ebene der Anwendung, der auch über Zwischenstationen funktioniert.
Prüft KYA DPoP-Nachweise?
Nein, DPoP betrifft den Zugang zu Schnittstellen. KYA prüft das verwandte Key Binding bei Nachweisen, das die Vorlage eines Mandats an den Schlüssel des Agenten bindet.