Signieren Sie sensible API-Aufrufe mit dem privaten Schlüssel des Benutzers
Der Proof-of-Action (PoA)-Mechanismus ist ein zentrales Sicherheitsmerkmal von OmniOmni, das die Integrität und Authentizität sensibler Aktionen gewährleistet, die von Benutzern und Kundensystemen durchgeführt werden. Er bietet eine robuste Methode zur Verifizierung, dass eine bestimmte Aktion von der berechtigten Partei autorisiert wurde. PoA wird in verschiedenen Szenarien eingesetzt, darunter:
Investitionsgenehmigungen: Überprüfung, dass eine Investitionsanfrage vom Investor autorisiert wurde.
Übertragungsautorisierungen: Bestätigung, dass eine Token-Übertragung sowohl vom Absender als auch vom Empfänger genehmigt wurde.
Falls Sie nicht eine der ecrop-Lösungen zur Verwaltung von Parteien (Endbenutzern) nutzen, beachten Sie, dass bei der Erstellung einer Partei deren öffentlicher Schlüssel zusammen mit den Identifikationsdetails der Partei übermittelt werden muss. Dies ist eine Voraussetzung für das Funktionieren von PoA. Eine Änderung des öffentlichen Schlüssels erfordert zudem eine erneute Identifizierung der Partei.
PoA nutzt kryptografische Signaturen und Zeitstempel, um die Authentizität von Aktionen zu überprüfen. Hier ist eine Übersicht über den Prozess:
Anfrage-Signierung (Client-seitig): Wenn ein Benutzer oder ein Kundensystem eine sensible Aktion initiiert (z. B. eine Investition genehmigt), werden die folgenden Daten zu einer einzelnen Zeichenkette zusammengefügt, getrennt durch Punkte (.):
HTTP-Methode (z. B. POST, PATCH)
Anfrage-Payload (bei JSON, alle Leerzeichen entfernen)
URI (beginnend mit RESTful-Ressourcennamen; Suchparameter sollten alphabetisch sortiert sein)
Zeitstempel (UTC, ISO 8601-Format)
Geräte-ID (eindeutiger Identifikator für das Gerät, das die Anfrage stellt. Bei mobilen Anwendungen ist dies die Geräte-ID des Mobilgeräts, bei API-Anfragen entspricht sie dem für die Authentifizierung verwendeten Client-Token.)
Signaturerstellung: Ein SHA-256-Hash der Zeichenkette wird erstellt und anschließend mit dem privaten Schlüssel der handelnden Partei (Benutzer oder Kundensystem) verschlüsselt. Die resultierende Signatur wird dann Base64-kodiert.
Anfrage-Header: Die folgenden Header werden in der API-Anfrage übermittelt:
X-Signature: Die Base64-kodierte Signatur.
X-Signature-DateTime: Der zur Signaturerstellung verwendete Zeitstempel.
X-Signature-DeviceId: Die Geräte-ID (falls verwendet).
Signaturüberprüfung (Server-seitig): Nach Erhalt der Anfrage überprüft OmniOmni die Signatur mit den folgenden Schritten:
Abruf des öffentlichen Schlüssels der handelnden Partei. (Genauere Details zur Schlüsselabfrage müssen noch geklärt werden.)
Rekonstruktion der signierten Datenzeichenkette basierend auf den Anfrageinformationen.
Verifizierung der empfangenen Signatur mithilfe des öffentlichen Schlüssels des Endbenutzers.
Schlüsselverwaltung: Die Sicherheit des PoA-Mechanismus hängt stark von der sicheren Verwaltung der privaten Schlüssel ab. Stellen Sie sicher, dass private Schlüssel niemals offengelegt und sicher gespeichert werden.
Genauigkeit des Zeitstempels: Genaue Zeitstempel sind entscheidend zur Vermeidung von Replay-Angriffen. Synchronisieren Sie Ihre Systemuhr mit einer zuverlässigen Zeitquelle.
Fehlermanagement: Implementieren Sie eine robuste Fehlerbehandlung, um Szenarien zu verwalten, in denen die Signatur ungültig ist oder nicht verifiziert werden kann.
Datenformat: JSON Web Signature (JWS) - RFC 7515
JWS ist eine kompakte, URL-sichere Methode zur Darstellung signierter Inhalte mithilfe von JSON-Datenstrukturen. Es ermöglicht die digitale Signierung von Informationen wie HTTP-Anfragen und -Antworten auf eine kompakte und sichere Weise.Signiermethode: JSON Web Algorithms (JWA) - RFC 7518
JWA definiert eine Reihe von Algorithmen zur Sicherung digitaler Signaturen und zur Verschlüsselung von JSON-Daten. Es legt fest, welche Algorithmen mit JWS verwendet werden können, um Integrität und Authentizität zu gewährleisten.