非保安JWS

ヘッダー引数 alg (JOSEヘッダー)

[11] alg は、暗号化アルゴリズムを表すヘッダー引数です。

仕様書

意味

[25] JWSヘッダー引数 alg (algorithm (算法) ) は、 JWS で使う暗号アルゴリズムを識別するものです。 >>24

[30] JWEヘッダー引数 alg (algorithm (算法) ) は、 JWECEK 値の暗号化や決定に使う暗号算法 (cryptographic algorithm) を識別するものです。 >>26

[33] JWK鍵引数 alg (algorithm (算法) ) は、 と共に使う想定の算法を識別するものです。 >>32

[27] JWKalg の値は、 StringOrURI です。 IANA登録簿にあるものか、 耐衝突名が含まれる値であるべき (should) です。 >>24

[37] JWE の仕様書では不明瞭ですが、 やはり同様と思われます。

[36] JWKalg の値は、 大文字・小文字区別するASCII文字列です。 IANA登録簿に登録されたものか、 耐衝突名を含む値であるべき (should) です。 >>32

[3] デジタル署名MAC 用の alg >>1
[15] JWE 用の alg >>16

[4] 実装が必須のものと、そうでないものがあります。 >>1, >>16

[17] alg 依存で、他のヘッダー引数を使ったり、 JWE被暗号化鍵値を生成したりします。 >>16

[19] IANA登録簿 >>20 があります。 >>18

[21] encJWK の登録簿と共通になっていますが、 種別で区別されており、 現時点で複数の場面 (JWK を除く。) で使えるものはありません。

文脈

[28] JWSalg ヘッダー引数は、 必須です。 >>24 JWSJOSEヘッダーに必ず含まれなければなりません。

[31] JWE の仕様書では不明瞭ですが、 やはり必須と思われます。

[34] JWK では指定してもしなくても構いません>>32

処理

[29] JWS の実装は、 alg ヘッダー引数を理解し処理しなければなりません>>24

[35] JWE の仕様書では不明瞭ですが、 やはり必須と思われます。

alg=none

[6] 非保安JWS (Unsecured 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大域的 (at a global level) に受理することを信号 (signal) してはならずオブジェクト毎に受理することを信号するべきです>>5

[12] このように仕様書で警告されているにも関わらず、 alg=none脆弱性の温床となっているようです。

[13] JWSデジタル署名するものですが、 署名のための暗号化アルゴリズムが「なし」 である、つまりデジタル署名しないことを表しています。 デジタル署名されていることを期待して JWS を採用しているのに、 alg=none が使われていると意味をなしません。

[14] おそらく、 暗号化アルゴリズムの適用が比較的高コストな操作であるため、 リスクの低い操作では適用しない応用が考えられて、 しかもデジタル署名を適用する場合としない場合で同一の構文とすることで処理の統一による簡略化が期待され、 このような方法が用意されているのでしょう。

メモ