「[[マイクロソフト系技術情報 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 に移行するユースケースなどが想定される。
JWEは、暗号化のオプション(暗号化されたJWT)。
-暗号化されたデータを JSON (の Base64 URL Encode) 形式で表現するための仕様
-暗号化された[[SAML]] アサーションを Connect に移行するユースケースなどが想定される。

*構成要素 [#n03afb80]
**ヘッダ [#e1356469]
**キー [#bfd76ff6]
**初期ベクター [#z7fc7e40]
**暗号文 [#v135760d]
**認証タグ [#j00511a1]

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

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

-パラメタ

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

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

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

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

***JWE Shared Unprotected Header [#ma48290f]

***JWE Per-Recipient Unprotected Header [#mec07b39]

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

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

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

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

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

*詳細 [#t67ef595]

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

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

-フォーマット([[JWS Compact Serialization>JWS#xe1c18e7]])
--[[ヘッダ>#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]

*手順 [#x13d150f]

**作成 [#k0d929b6]
以下、

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

の場合の例。

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

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ~
= BASE64URL(UTF8({"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エンコードする。

***[[追加認証データ>#x3b5d5e4]] [#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))

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

-Base64urlエンコードする。

***[[認証タグ>]]の生成 [#w9ce54de]
-[[追加認証データ>#x3b5d5e4]]と平文から認証タグを生成する。
-Base64urlエンコードする。

**検証 [#g7091459]

*自作ライブラリ [#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