「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>JWT]]

* 目次 [#re273910]
#contents

*概要 [#sf29c23e]
JWEは、暗号化のオプション(暗号化されたJWT)。
-暗号化されたデータを JSON (の Base64 URL Encode) 形式で表現するための仕様
-暗号化された[[SAML]] アサーションを Connect に移行するユースケースなどが想定される。

*構成要素 [#n03afb80]

**JOSEヘッダ [#e1356469]
JOSEヘッダは、以下のメンバの和集合。

***JWE Protected Header [#kfb01963]
認証された暗号化を利用して、完全性を保証。

-パラメタ

--alg : [[暗号化キー>#bfd76ff6]]の値を暗号化または決定するために使用される暗号アルゴリズムを識別

--enc : [[暗号文>#v135760d]]と[[認証タグ>#j00511a1]]を生成するために「平文で認証された暗号化を実行するために」使用されるコンテンツ暗号化アルゴリズムを識別

--zip : 暗号化の前に平文に適用される「圧縮」アルゴリズム

-例
--{"alg":"RSA-OAEP","enc":"A256GCM"}

***JWE Shared Unprotected Header [#ma48290f]
[[JWE JSON Serialization>#j471416b]]の場合に必要らしい。

***JWE Per-Recipient Unprotected Header [#mec07b39]
[[JWE JSON Serialization>#j471416b]]の場合に必要らしい。

***[[JWK]]をサポートする場合 [#tc7fd975]

**JWE暗号化キー [#bfd76ff6]
"enc"の暗号化キーは、"alg"によって暗号化または決定される。

**JWE初期化ベクター [#z7fc7e40]
"enc"によって決定される。

**[[JWE暗号文>JWT#m5b94cda]] [#v135760d]
"enc"によって、平文から暗号化される。

**JWE認証タグ [#j00511a1]
"enc"によって、[[追加の認証データ暗号化パラメタ>#ad797074]]と平文から暗号化される。

*詳細 [#t67ef595]

**表現(エンコード) [#le7f9bcc]
-[[構成要素>#n03afb80]]([[ヘッダ>#e1356469]]、[[キー>#bfd76ff6]]、[[初期ベクター>#z7fc7e40]]、[[暗号文>#v135760d]]、[[認証タグ>#j00511a1]])を以下のように表現(エンコード)したもの。
-以下の2つの表現(エンコード)方法があり、どちらでも、[[構成要素>#n03afb80]]は、base64urlでエンコードされる。

***JWE Compact Serialization [#c33082e5]
-のデータを JSON (の Base64 URL Encode) 形式で表現する。
-「Base64」ではなく「Base64 &color(red){URL};」なので「=」は含まれない。
-例

--[[ヘッダ>#e1356469]].[[キー>#bfd76ff6]].[[初期ベクター>#z7fc7e40]].[[暗号文>#v135760d]].[[認証タグ>#j00511a1]]
--
 BASE64URL (UTF-8 (JWE Protected Header))
 .
 BASE64URL(JWE Encrypted Key)
 .
 BASE64URL(JWEInitialization Vector)
 .
 BASE64URL(JWE Ciphertext)
 .
 BASE64URL(JWE Authentication Tag)

***JWE JSON Serialization [#j471416b]

**アルゴリズム [#head797a]

***[[RSAES-OAEP and AES GCM>#u6a363cb]] [#zd0e348e]
{"alg":"RSA-OAEP","enc":"A256GCM"}

***[[RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256>#p5537b05]] [#p51dc747]
{"alg":"RSA1_5","enc":"A128CBC-HS256"}

***[[AES Key Wrap and AES_128_CBC_HMAC_SHA_256>#z57bfc52]] [#tb96fbcc]
{"alg":"RSA1_5","enc":"A128CBC-HS256"}

***[[JWAを確認>JWA#o355e9ee]] [#iefde689]

*手順 [#x13d150f]

**暗号化 [#k0d929b6]

***[[JWE Protected Header>#kfb01963]]の決定 [#ncaa4347]
{"alg":"RSA-OAEP","enc":"A256GCM"} など。

***[[暗号化キー>#bfd76ff6]]の生成 [#s20810d3]
-ランダムなコンテンツ暗号化キーを生成。~
乱数を生成する際の考慮事項については、RFC 4086を参照

-alg
--Key Wrapping, Key Encryption, or Key Agreement with Key Wrapping
---alg:RSAES-OAEPの場合、受信者の公開鍵で暗号化キーを暗号化したバイト列

--Direct Key Agreement
---alg:XXXXXの場合、空のバイト列とする。

--Direct Encryption
---alg:XXXXXの場合、共有対称鍵のバイト列とする。

-Base64urlエンコードする。

※ [[JWE JSON Serialization>#j471416b]]を使用している場合は、上記を繰り返す。

***[[初期化ベクター>#z7fc7e40]]の生成 [#b2ecbf49]
-enc

--encアルゴリズムに初期化ベクターが必要な場合
---ランダムなコンテンツ暗号化の初期化ベクターを生成。

--encアルゴリズムに初期化ベクターが必要でない場合
---空のバイト列とする。

-Base64urlエンコードする。

***追加の認証データ暗号化パラメタ [#ad797074]
-[[JWE Compact Serialization>#c33082e5]]の場合
--ASCII(BASE64URL(UTF8([[JWE Protected Header>#kfb01963]])))

-[[JWE JSON Serialization>#j471416b]]の場合
--ASCII(BASE64URL(UTF8([[JWE Protected Header>#kfb01963]]))|| '.' || BASE64URL(JWE AAD))

※ AADとは、詳細不明だが、[[JWE JSON Serialization>#j471416b]]の場合に必要らしい。

***[[暗号文>#v135760d]]の生成 [#p3e87c31]
-平文を
--必要ならzipのアルゴリズムで圧縮
--encのアルゴリズムで暗号化する。

-Base64urlエンコードする。

***[[認証タグ>#j00511a1]]の生成 [#w9ce54de]
-[[追加の認証データ暗号化パラメタ>#ad797074]]をencのアルゴリズムで暗号化する。
-Base64urlエンコードする。

***Serialization [#m74f662c]
-[[JWE Compact Serialization>#c33082e5]]
-or [[JWE JSON Serialization>#j471416b]]

**復号化 [#g7091459]
-[[暗号化>#k0d929b6]]の逆プロセス
-としては、を使用する。

**具体例 [#y795b705]

***RSAES-OAEP and AES GCM [#u6a363cb]
https://tools.ietf.org/html/rfc7516#appendix-A.1.1

***RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 [#p5537b05]
https://tools.ietf.org/html/rfc7516#appendix-A.2.1

***AES Key Wrap and AES_128_CBC_HMAC_SHA_256 [#z57bfc52]
https://tools.ietf.org/html/rfc7516#appendix-A.3.1

*自作ライブラリ [#a1a37be5]

**署名・暗号化アルゴリズム [#p4042a8b]
[[ココ>.NETの署名・暗号化アルゴリズム]]の署名・暗号化アルゴリズムを使用すると良い。

**参考サイト [#n362c23f]
-

**検証サイト [#k6c39e4c]
-

*参考 [#cc575d12]
-RFC 7516 - JSON Web Encryption (JWE)~
https://tools.ietf.org/html/rfc7516

**[[JWA - JWE用>JWA#o355e9ee]] [#xd6c0477]

**[[暗号化アルゴリズム]] [#gc5974cd]
***[[.NETの署名・暗号化アルゴリズム]] [#db2f0e77]

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:暗号化]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS