[5] JWE (JSON Web Encryption) は、 暗号化したデータを交換できる JSON応用です。
[6] JWS 等で構成される JOSE 規格シリーズの1つです。
[8] JSON Web Encryption (JWE) は、 暗号化され一貫性保護されたメッセージを表現するデータ構造です。 >>7
[18] 1つの JWE は、 次により構成されます。 >>17
[10] 平文の機密性と一貫性、 並びにJWE被保護ヘッダーと JWE AAD の一貫性を保証するため、 被認証暗号化を使います。 >>17
[145] 追加被認証データ (AAD) は、 AEAD 操作への入力であって、 整合性保護されるものの、 暗号化はされないものです。 >>7
[146] JWE AAD は、 被認証暗号化操作で一貫性保護される追加の値です。 JWE JSON直列化でのみ出現し得ます。 >>7
[147] JWE には応用データとして平文を暗号化した暗号文の他に、 AAD を含めることができます。 平文の方は暗号化されているので傍受しても解読できませんが、 AAD は base64url 符号化されているだけなので、 傍受すると読まれてしまいます。 しかし一貫性保護の対称になっていますから、 AAD を改竄すると検知できます。
[148] 従って漏洩しても構わない、 解読前でも確認したいような、 しかし改竄されるとまずいデータを入れる場所として使うことができます。 JWE被保護ヘッダーも同条件ですが、 そちらは JWE としてのプロトコル要素です。 対して AAD は完全に応用が好きに使える場所となっているようです。
[143] RFC 7520 - Examples of Protecting Content Using JSON Object Signing and Encryption (JOSE), https://datatracker.ietf.org/doc/html/rfc7520#section-5.10
[144] >>143 AAD として vCard を入れた例が示されています。 どういう利用形態を想定して vCard を使った事例なのかは書かれていません。
[124] JWE には3種類の直列化があります。 応用はそのいずれを使うか、 そのどの機能を使うかを指定する必要があります。 JWE の実装は、その対象とする応用が必要とする機能のみ対応する必要があります。 >>123
[20] JWE は、 RFC 7159 JSON データや base64url
を使って記述されます。 JSON は、その定めるところにより、
値の前後に空白を挿入できます。
[14] JWE簡潔直列化は、 JWE の簡潔で URL安全な文字列としての表現です。 >>7
[13] JWE簡潔直列化は、 次のものを順に連結したものです。 >>17, >>123
BASE64URL
(RFC 3629 UTF8
(JWE被保護ヘッダー)).
BASE64URL
(JWE被暗号化鍵).
BASE64URL
(JWE初期化ベクトル).
BASE64URL
(JWE暗号文).
BASE64URL
(JWE認証タグ)[11] JWE簡潔直列化では、 JWE共有非被保護ヘッダーや JWE受信者毎非被保護ヘッダーは、 利用できません。 >>7, >>17, >>123
[15] JWE JSON直列化は、 JWE の JSONオブジェクトとしての直列化です。 JWE JSON直列化では複数の当事者に対して同じ内容を暗号化できます。 >>7
[30] JWE JSON直列化では、 JWE被保護ヘッダー、 JWE共有非被保護ヘッダー、 JWE受信者毎非被保護ヘッダーのうち 1つ以上は必須です。 >>17
[150]
ヘッダー引数と違って明言されていませんが、
JSONオブジェクトの重複メンバーは
ヘッダー引数の重複と同様に処理するべきと思われます。
[128] (完全)一般JWE JSON直列化構文は、 次のような最上位の JSONオブジェクトです。 >>123
protected
BASE64URL
(RFC 3629 UTF8
(JWE被保護ヘッダー))
でなければなりません。
すべての受信者に共有されます。
そうでない場合、
指定してはなりません。
>>123unprotected
iv
BASE64URL
(JWE初期化ベクトル)
でなければなりません。
そうでない場合、
指定してはなりません。
>>123aad
BASE64URL
(JWE AAD)
でなければなりません。
そうでない場合、
指定してはなりません。
>>123ciphertext
BASE64URL
(JWE暗号文)
でなければなりません。
>>123tag
BASE64URL
(JWE認証タグ)
でなければなりません。
そうでない場合、
指定してはなりません。
>>123recipients
[131] 各JSONオブジェクトは、 特定の受信者に固有の情報を表します。 >>123
[133]
各受信者に対してヘッダー引数
alg
と
enc
が必須であり、従って各受信者に対して
header
,
protected
,
unprotected
の最低でも1つは必須です。
>>123
[136]
平文値の取り扱いを指定するすべてのヘッダー引数は、
すべての受信者について同じでなければなりません。
主として enc
ヘッダー引数と、
その指定された算法に関するヘッダー引数が該当します。
これはJWE暗号文等がすべての受信者に対して共通であることからの帰結とされます。
>>123
protected
に入れなければならないという制約はなく、
すべてを header
内に入れても構わないようです。
しかし recipients
内のオブジェクトすべてで同じ値でなければならないということです。[135] 内側、外側のどちらのJSONオブジェクトにも、 これ以外の追加のメンバーを指定できます。 実装は、理解できないメンバーを無視しなければなりません。 >>123
[31] 平滑化JWE JSON直列化構文は、 単一の受信者の場合に最適化したもので、 次のような最上位 JSONオブジェクトです。 >>123, >>17
[138]
平坦化JWE JSON直列化構文は、
一般JWE JSON直列化構文の
recipients
を展開したものという形で規定されています。
>>123
明言されていませんが、
ここに規定されていない他の (recipients
以外の)
メンバーを指定することもまた認められると思われます。
[34] メッセージの暗号化は、次のようにします。 >>33
zip
が指定されている場合、BASE64URL
(RFC 3629 UTF8
(JWE被保護ヘッダー))
を計算した結果に設定します。crit
ヘッダー引数が要求するすべての欄を実装が理解、
処理できること、並びにそれらヘッダー引数の値が理解でき対応できることを検証します。alg
ヘッダー引数に指定された算法により決定した鍵管理モードに設定します。zip
が指定された場合、[57] 受信者が複数の場合、 すべての受信者に対して検証に成功しなければならないとしようが、 いずれか1つの受信者に対して検証に成功すれば良いとしようが、 応用の裁量で決められます。 どうするにせよ、 少なくても1つの受信者に対しては検証に成功していなければなりません。 そうでなければ非妥当としなければなりません。 >>33
[78] 特定の場面でどの算法を使うかは、 応用の裁量によります。 解読に成功したとしても、 応用が受理できる算法でなければ、 非妥当とするべきです。 >>33
[141] RFC 3218 timing attack の対策のため、 被暗号化鍵の 形式エラー, 詰めエラー, 長さエラーを区別してはなりません。 形式が不適切な鍵を受信した際は、 timing attack 対策のため、 無作為に生成した CEK に置き換えて次段階に進むことが強く推奨されます。 >>140