「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
以下の内容で最終確認済み。
https://tools.ietf.org/html/rfc7516
- JWEは、暗号化のオプション(暗号化されたJWT)。
- 暗号化されたデータを JSON (の Base64 URL Encode) 形式で表現するための仕様
- 暗号化されたSAML アサーションを Connect に移行するユースケースなどが想定される。
構成要素 †
JWE Compact Serialization or JWE JSON Serializationのどちらでも、基本的にすべてbase64urlでエンコードされる。
JOSEヘッダ †
JWEの基本的なヘッダ(≒JWE Compact Serializationの場合の保護ヘッダ)には、以下のものがある。
ヘッダの例 †
JWKをサポートする場合 †
TLS要件 †
JWSと同じ。
ヘッダ以降 †
認証付き暗号(AEAD)暗号化アルゴリズムについての知識が必要。
コンテンツ暗号化キー(CEK) †
- "alg"によって暗号化または決定される。
- ・・・
- 一部のアルゴリズムでは、空のオクテットシーケンスになる。
"enc"の認証付き暗号(AEAD)操作によって決定される。
- 平文を暗号化するときに使用される初期化ベクトル値。
- 一部のアルゴリズムでは、空のオクテットシーケンスになる。
追加認証データ(AAD) †
認証タグ(MAC) †
- 一部のアルゴリズムでは認証タグを使用しない場合がある。
詳細 †
暗号化アルゴリズムの以下の要素について理解が必要
キー管理モード †
キー暗号化 †
- 公開鍵: JwkSet?を登録(若しくはjwks_uriで公開)
- 秘密鍵: 証明書やJwkSet?
となるもよう(鍵交換だが、アリスとボブではなく単なる公開鍵暗号化)。
キーラッピング †
- 対称キーラッピングアルゴリズムの利用を意図したキー管理モード。
- 鍵ラップ・アルゴリズムを使用する。
- AES128KW
- AES192KW
- AES256KW
- AES128GCMKW
- AES192GCMKW
- AES256GCMKW
直接キー契約 †
鍵合意アルゴリズムの利用を意図したキー管理モード。
キーラッピングによる主要契約 †
対称キーラッピングアルゴリズムの対称鍵に、
合意アルゴリズムの利用を意図したキー管理モード。
直接暗号化 †
CEK値が当事者間で共有される鍵管理モード。
表現(エンコード) †
JWE Compact Serialization †
JWE JSON Serialization †
- Example
- Complete JWE JSON Serialization Representation
{
"protected":"<integrity-protected shared header contents>",
"unprotected":<non-integrity-protected shared header contents>,
"recipients":[
{"header":<per-recipient unprotected header 1 contents>,
"encrypted_key":"<encrypted key 1 contents>"},
...
{"header":<per-recipient unprotected header N contents>,
"encrypted_key":"<encrypted key N contents>"}],
"aad":"<additional authenticated data contents>",
"iv":"<initialization vector contents>",
"ciphertext":"<ciphertext contents>",
"tag":"<authentication tag contents>"
}
- JWE Using Flattened JWS JSON Serialization
受信者が 1 人のみの場合は Flattened JWE JSON Serialization を使える。
{
"protected":"<integrity-protected header contents>",
"unprotected":<non-integrity-protected header contents>,
"header":<more non-integrity-protected header contents>,
"encrypted_key":"<encrypted key contents>",
"aad":"<additional authenticated data contents>",
"iv":"<initialization vector contents>",
"ciphertext":"<ciphertext contents>",
"tag":"<authentication tag contents>"
}
保護ヘッダ・非保護ヘッダ †
JOSEヘッダは、以下のメンバの和集合。
保護ヘッダ †
- 認証された暗号化を利用して、完全性を保証。
- 認証付き暗号(AEAD)操作によって完全性保護されたヘッダ・パラメタを含むJSONオブジェクト。
- これらのパラメタは、受信者毎に共通。
- alg : 暗号化キーの値を暗号化または決定するために使用される暗号アルゴリズムを識別
- zip : 暗号化の前に平文に適用される「圧縮」アルゴリズム
- 例
- {"alg":"RSA-OAEP","enc":"A256GCM"}
共有 非保護ヘッダ †
JWE JSON Serializationの場合に必要な、受信者毎に共通の非保護ヘッダ
個別 非保護ヘッダ †
JWE JSON Serializationの場合に必要な、受信者毎に個別の非保護ヘッダ
アルゴリズム †
RSAES-OAEP and AES GCM †
RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 †
- "enc":"A128CBC-HS256"
- アルゴリズム
RFC 7518 - JSON Web Algorithms (JWA)
AES Key Wrap and AES_128_CBC_HMAC_SHA_256 †
手順 †
暗号化 †
{"alg":"RSA-OAEP","enc":"A256GCM"} など。
- ランダムなコンテンツ暗号化キーを生成。
乱数を生成する際の考慮事項については、RFC 4086を参照
- alg
- Key Wrapping, Key Encryption, or Key Agreement with Key Wrapping
- alg:RSAES-OAEPの場合、受信者の公開鍵で暗号化キーを暗号化したバイト列
- Direct Encryption
- alg:XXXXXの場合、共有対称鍵のバイト列とする。
※ JWE JSON Serializationを使用している場合は、上記を繰り返す。
- encアルゴリズムに初期化ベクトルが必要な場合
- ランダムなコンテンツ暗号化の初期化ベクトルを生成。
- encアルゴリズムに初期化ベクトルが必要でない場合
追加の認証データ暗号化パラメタ †
- 平文を
- 必要ならzipのアルゴリズムで圧縮
- encのアルゴリズムで暗号化する。
Serialization †
復号化 †
具体例 †
RSAES-OAEP and AES GCM †
RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256 †
AES Key Wrap and AES_128_CBC_HMAC_SHA_256 †
自作ライブラリ †
署名・暗号化アルゴリズム †
ココの署名・暗号化アルゴリズムを使用すると良い。
参考サイト †
-
検証サイト †
-
参考 †
Tags: :IT国際標準, :プログラミング, :通信技術, :認証基盤, :クレームベース認証, :暗号化