[11]
alg
は、暗号化アルゴリズムを表すヘッダー引数です。
[25]
JWS
のヘッダー引数
alg
(algorithm)
は、
JWS
で使う暗号アルゴリズムを識別するものです。
>>24
[30]
JWE
のヘッダー引数
alg
(algorithm)
は、
JWE
で
CEK 値の暗号化や決定に使う暗号算法を識別するものです。
>>26
[27]
JWK
の
alg
の値は、
StringOrURI
です。
IANA登録簿にあるものか、
耐衝突名が含まれる値であるべきです。
>>24
[37] JWE の仕様書では不明瞭ですが、 やはり同様と思われます。
[36]
JWK
の
alg
の値は、
大文字・小文字区別するASCII文字列です。
IANA登録簿に登録されたものか、
耐衝突名を含む値であるべきです。
>>32
[4] 実装が必須のものと、そうでないものがあります。 >>1, >>16
[17] alg
依存で、他のヘッダー引数を使ったり、
JWE被暗号化鍵値を生成したりします。
>>16
[21]
enc
や JWK の登録簿と共通になっていますが、
種別で区別されており、
現時点で複数の場面
(JWK を除く。)
で使えるものはありません。
[28]
JWS
の
alg
ヘッダー引数は、
必須です。
>>24
JWS の JOSEヘッダーに必ず含まれなければなりません。
alg=none
[6]
非保安JWS
は、
一貫性保護のない JWS です。
alg
の値 none
で表します。
>>5, >>23
JWS
は、
一貫性保護なしで作成して構いません。
>>5
[7]
alg=none
の場合、
空のオクテット列を JWS Signature value として使わなければなりません。
>>5
[8] 受信者は、 JWS Signature value が空のオクテット列であることを検証しなければなりません。 >>5
[9] 実装は、 非保安JWSに対応する場合であっても、 応用が当該オブジェクトの一貫性が保護されなくても受理可能と規定する場合を除き、 当該オブジェクトを妥当なものとして受理してはなりません。 >>5
[10] 実装は、既定で非保安JWSを受理してはなりません。 応用は、 downgrade attack を軽減するため、 非保安JWSを大域的に受理することを信号してはならず、 オブジェクト毎に受理することを信号するべきです。 >>5
[12]
このように仕様書で警告されているにも関わらず、
alg=none
は脆弱性の温床となっているようです。
[13]
JWS はデジタル署名するものですが、
署名のための暗号化アルゴリズムが「なし」
である、つまりデジタル署名しないことを表しています。
デジタル署名されていることを期待して JWS
を採用しているのに、
alg=none
が使われていると意味をなしません。
[14] おそらく、 暗号化アルゴリズムの適用が比較的高コストな操作であるため、 リスクの低い操作では適用しない応用が考えられて、 しかもデジタル署名を適用する場合としない場合で同一の構文とすることで処理の統一による簡略化が期待され、 このような方法が用意されているのでしょう。