2013-03-19 8 views
6

Ich habe die JSON Web Encryption (JWE) Spezifikation mit der latest draft being 08 gelesen, da wir JSON Web Tokens (JWT) in unserem Authentifizierungsserver unterstützen.Validierung des Herausgebers eines Sicherheitstokens, das mit JSON Web Encryption (JWE) verschlüsselt wurde?

Mit der asymmetrischen Verschlüsselungsmethode, die definiert wird, wird der symmetrische Schlüssel (Content Master Key) mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. Dies ist sinnvoll, damit nur der Empfänger es entschlüsseln kann und auch sicher sein kann, dass das Token für sie bestimmt war.

Normalerweise würde ich erwarten, auch etwas zu sehen, das beweist, wer der Token ist von, z.B. eine Signatur, die unter Verwendung des privaten Schlüssels des Herausgebers erstellt wurde, der unter Verwendung ihres öffentlichen Schlüssels verifiziert werden kann. Die Signaturen scheinen jedoch auch von dem Inhaltshauptschlüssel oder dem öffentlichen Schlüssel des Empfängers abgeleitet zu sein, ohne den privaten Schlüssel des Herausgebers zu erwähnen.

Ohne dieses scheint es mir wie - solange das Format des Tokens, das erwartet wurde, bekannt war - jemand mit dem öffentlichen Schlüssel des Empfängers (d. H. Irgendjemand) könnte ein gültiges Token generieren; nicht nur ein vertrauenswürdiger Authentifizierungsserver.

Ich bin kein Experte für Kryptografie (weit davon entfernt), also bin ich sicher, dass ich hier etwas vermisse. Wie überprüft der Empfänger, dass ein asymmetrisch verschlüsseltes Token von einem vertrauenswürdigen Aussteller stammt?

Da der JSON Web Signaturen (JWS) Spezifikation hat Signaturen definieren, dass der Emittent den privaten Schlüssel verwenden und können mit ihren öffentlichen Schlüssel überprüft werden, frage ich mich, ob die Idee ist, dass die Nutzlast des JWE Token sollte ein JWS-Token sein?

Antwort

4

JWT ermöglicht sicherlich verschachtelte Nutzdaten. Tatsächlich gibt es einen specific reference zu dem in der Spezifikation, wo der cty (content-type) Header-Parameter auf JWT gesetzt werden kann, um anzuzeigen, dass die Nutzlast tatsächlich eine andere JWT ist.

Also würden Sie höchstwahrscheinlich ein JWE erstellen und es in ein JWS, unterzeichnet mit Ihrem privaten Schlüssel, einbinden. Dies scheint auch die Schlussfolgerung (oder zumindest eine Lösung) von this thread auf der JOSE Mailingliste zu sein. Es gibt eine weitere related thread zur Reduzierung der Nutzlastgröße. Im Allgemeinen lohnt es sich, diese Mailing-Liste im Auge zu behalten, da die Leute, die hinter der Spezifikation stehen, dort herumhängen.

+1

Cool, danke für die Referenzen. Bei genauerem Nachlesen der Spezifikation scheint dies auch in Abschnitt 10 zu geschehen, und es gibt einige zusätzliche Hinweise: "Während syntaktisch die Signierungs- und Verschlüsselungsoperationen für verschachtelte JWTs in beliebiger Reihenfolge angewendet werden können, sollten Absender die Nachricht normalerweise signieren und dann verschlüsseln Sie das Ergebnis (und verschlüsseln Sie damit die Signatur.) Dadurch werden Angriffe verhindert, bei denen die Signatur entfernt wird und nur eine verschlüsselte Nachricht hinterlassen wird, sowie die Privatsphäre für den Unterzeichner gesichert wird. Darüber hinaus werden Signaturen über verschlüsselten Text in vielen Ländern nicht als gültig angesehen. " –

+0

Ja, ich denke, das macht Sinn, da die verschlüsselte Nachricht selbst durch GCM oder ein Encrypt-then-HMAC-Schema integeritätsgeschützt ist. Es ist auch das Gegenteil von dem, was Mike Jones auf der Mailing-Liste vorgeschlagen hat. Es gibt immer genug Spielraum, um bei der Umsetzung dieses Krams irgendwo herumzuschlüpfen :). –

+0

Ich muss JWE entschlüsseln und den Claimset in JAVA extrahieren. Gibt es eine Bibliothek, die das macht? – user243655