algorithm

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

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

仕様書

意味

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

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

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

値

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

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

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

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

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

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

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

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

文脈

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

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

メモ