2013-03-19 8 views
6

私は認証サーバーでJSON Webトークン(JWT)をサポートしているので、latest draft being 08というJSON Web暗号化(JWE)仕様を読んできました。JSON Web暗号化(JWE)で暗号化されたセキュリティトークンの発行者を検証していますか?

非対称暗号化方式を使用すると、受信者の公開鍵を使用して対称鍵(コンテンツマスターキー)が暗号化されます。これは、受取人だけがそれを解読することができ、トークンがそれらのために意図されていることを確かめるように意味があります。

通常、私はまた、トークンが誰であるかをから、から証明するものも期待しています。公開鍵を使用して検証できる発行者の秘密鍵を使用して作成された署名。ただし、署名は、コンテンツマスタキーまたは受信者の公開キーのいずれかから派生しているようにも見えますが、発行者の秘密キーは言及されていません。

これがなければ、予想されるトークンの形式が分かっている限り、受信者の公開鍵(つまり誰でも)が誰でも有効なトークンを生成する可能性があります。信頼できる認証サーバーだけではありません。

私は暗号化に関する専門家ではありませんので、私はここで何かが不足していると確信しています。受信者は、非対称に暗号化されたトークンが信頼できる発行元から来たことをどのように確認しますか?

は、JSONのWeb署名(JWS)仕様ことを考えるとは、発行者の秘密鍵を使用して署名を定義しないと、自分の公開鍵で検証することができ、私はアイデアがJWEトークンのペイロードがすべきことであるかどうかを思ったんだけどJWSトークンですか?

答えて

4

JWTはネストされたペイロードを許可します。実際にはcty(content-type)ヘッダーパラメーターをJWTに設定して、ペイロードが実際に別のJWTであることを示すことができる仕様にがあります。

あなたはおそらくJWEを作成し、その秘密鍵で署名されたJWSでラップします。これはまた、JOSEメーリングリストのthis threadからの結論(または少なくとも1つの解決策)であるようです。ペイロードサイズを小さくするには別のrelated threadがあります。一般的に、メーリングリストは、仕様の背後にいる人々がハングアップしている場所であるため、おそらく目をつける価値があります。

+1

参考までにありがとうございます。仕様書をさらに注意深く読んだら、セクション10もこれをカバーしているように見え、いくつかのガイダンスが追加されています: "構文的には、ネストされたJWTの署名と暗号化操作は任意の順序で適用できます。その結果を暗号化して(したがって、署名を暗号化する)、署名が剥奪される攻撃を防ぎ、暗号化されたメッセージだけを残し、署名者にプライバシーを提供する。 " –

+0

はい、暗号化されたメッセージ自体がGCMまたは暗号化とHMACのスキームで完全性保護されているので、意味があると思います。また、メーリングリストのMike Jonessuggestedとは対照的です。このようなものを実装している間は、いつもどこかに逃げるための範囲がたくさんあります:)。 –

+0

私はJWEを解読し、JAVAで主張を抽出する必要があります。それを行うライブラリはありますか? – user243655

関連する問題