ProblemNested JWS + JWE vs JWE mit authentifizierte Verschlüsselung
ich signieren und verschlüsseln wollen (effektiv, verschleiern) einige Informationen ('token') auf meinem Server (eine vertrauenswürdige Umgebung) und senden Sie die Chiffriertext zu eine Client-Maschine (nicht sehr vertrauenswürdige Umgebung), die von meiner clientseitigen Software gelesen und verifiziert werden soll. Dieser Typ der Umgebung ermöglicht es mir, einen privaten Schlüssel auf dem Server für asymmetrisches Signieren zu haben, aber ich kann einen geheimen Schlüssel für symmetrisches Signieren auf einer Clientseite nicht "verstecken".
Alternativen
Ich wählte für die Signierung und Verschlüsselung JWT als Standard und Nimbus JOSE+JWT library als Implementierung zu verwenden. Nimbus Bibliothek bietet zwei Optionen für sign + encrypt: Verschachtelung von JWS in JWE oder Verwendung von JWE mit authentifiziertem Verschlüsselungsalgorithmus (A128CBC_HS256, A192CBC_HS384 oder A256CBC_HS512). Algorithm Selection Guide for Nimbus states:
Die Verschlüsselung in JOSE wird immer authentifiziert, was bedeutet, dass die Integrität des Chiffretexts vor Manipulationen geschützt ist. Authentifizierte Verschlüsselung macht das Verschachteln eines HMAC JWT innerhalb einer JSON Web Encryption (JWE) redundant; Verwenden Sie nur JWE-Verschlüsselung.
Die Verschlüsselungsmethoden AxxxCBC_HSxxx verwenden jedoch nur symmetrische Schlüssel. Darüber hinaus sollte der Ersatz des direkten JWE-Algorithmus durch den RSA-JWE-Algorithmus nicht helfen, da ein Missbraucher CEK (bestehend aus Verschlüsselungsschlüssel und Schlüssel für HMAC) selbst generieren und mit einem öffentlichen Schlüssel verschlüsseln kann.
Frage
Trotz des Zitat über die Redundanz von verschachtelten JWTs, schloss ich, dass für meinen Fall ist JWE + JWS Verschachtelung der einzige praktikable Ansatz. Habe ich recht?
Danke für die ausführliche Antwort. Nur zur Klarstellung: Ich muss mich auf einem Server anmelden und die Echtheit/den Aussteller auf einem Client überprüfen. Ich muss nicht auf einem Server überprüfen. Der Server wird einen privaten Schlüssel haben, und der Client kann relativ sicher einen öffentlichen Schlüssel haben. – Alexey
OK, ja, es gibt kein Problem, wenn Ihr Server den öffentlichen Schlüssel mit Ihrem Client teilt –