MS_JWA - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

JWA

概要

  • JWSJWEJWKで利用される
    各アルゴリズムおよびそれらの識別子を定義する。
  • これは、これらの識別子のためのいくつかの IANA レジストリを定義する。

移行メモ(正式名称): JWA = JSON Web Algorithms(RFC 7518)。
JOSE の 4 仕様(JWS / JWE / JWK / JWA)のうち、
「どのアルゴリズムを、どの識別子で呼ぶか」を一手に定めているのが JWA である。
単独で使うものではなく、他の 3 仕様から参照される辞書のような位置づけ。

詳細

JWS

alg(デジタル署名とMACのための暗号アルゴリズム)

alg Digital Signature or MAC Algorithm 実装要件
HS256 HMAC using SHA-256 Required
HS384 HMAC using SHA-384 Optional
HS512 HMAC using SHA-512 Optional
RS256 RSASSA-PKCS1-v1_5 using SHA-256 Recommended
RS384 RSASSA-PKCS1-v1_5 using SHA-384 Optional
RS512 RSASSA-PKCS1-v1_5 using SHA-512 Optional
ES256 ECDSA using P-256 and SHA-256 Recommended+
ES384 ECDSA using P-384 and SHA-384 Optional
ES512 ECDSA using P-521 and SHA-512 Optional
PS256 RSASSA-PSS using SHA-256 and MGF1 with SHA-256 Optional
PS384 RSASSA-PSS using SHA-384 and MGF1 with SHA-384 Optional
PS512 RSASSA-PSS using SHA-512 and MGF1 with SHA-512 Optional
none No digital signature or MAC performed Optional

補足(実装要件の記号): 「Recommended+」「Recommended-」という表記は、
RFC 7518 独自の記法である。

記号 意味
+ 将来、要件が上がると見込まれる(推奨度が増す方向)
- 将来、要件が下がると見込まれる(廃れる方向)

つまり ES256(Recommended+)は「今後さらに推奨される」、
RSA1_5(Recommended-)は「今後推奨されなくなる」という予告である。
実際、後述のとおり RSA1_5 は現在では使ってはならない。

なお、これらの用語の意味は
技術文書中での Shall / Should / Mayを参照。

主要なalg

取り敢えず以下を抑えると良さそう。

  • Required: HS256
  • Recommended: RS256 / ES256FAPI2
  • Else: PS256FAPI2

補足(alg: none は攻撃に使われる): 表の最後にある none は、
JWT の最も有名な脆弱性の原因である。

  1. 攻撃者が正規の JWT を入手する。
  2. ヘッダの algnone に書き換え、署名部分を空にする。
  3. 検証側が「alg ヘッダの値を信じて」検証をスキップすると通ってしまう。

同様に、RS256(公開鍵で検証)を HS256(共有鍵で検証)に
すり替える アルゴリズム混同攻撃もある
(公開鍵を HMAC のキーとして使わせる)。

対策は一つで、

  • 受け取った alg を信用せず、検証側が使うアルゴリズムを固定する。

ライブラリの API で「期待するアルゴリズムを明示する」形になっているか
必ず確認したい。

JWE

alg(鍵管理のための暗号アルゴリズム)

主なものを抜粋する。

alg Key Management Algorithm 実装要件
RSA1_5 RSAES-PKCS1-v1_5 Recommended-
RSA-OAEP RSAES OAEP using default parameters Recommended+
RSA-OAEP-256 RSAES OAEP using SHA-256 and MGF1 with SHA-256 Optional
A128KW / A256KW AES Key Wrap(128 / 256 bit) Recommended
dir 共有対称鍵を CEK として直接使用 Recommended
ECDH-ES ECDH Ephemeral Static key agreement using Concat KDF Recommended+
ECDH-ES+A128KW / +A256KW ECDH-ES + AES Key Wrap Recommended
A128GCMKW / A192GCMKW / A256GCMKW AES GCM による鍵ラップ Optional
PBES2-HS256+A128KW ほか PBES2(パスワード ベース) Optional

主要なalg

補足(RSA1_5 は使ってはならない): RSA1_5(RSAES-PKCS1-v1_5)は
Bleichenbacher 攻撃(パディング オラクル攻撃)に対して脆弱であり、
現在は使用してはならないとされている
(RFC 8725 / JOSE の後継仕様で非推奨化)。

鍵管理の現在の選択は次のとおり。

用途 推奨
RSA 鍵を使う RSA-OAEP-256RSA-OAEP は SHA-1 ベースなので 256 を選ぶ)
楕円曲線を使う ECDH-ES+A256KW
共有鍵がある dir + A256GCM

enc(コンテンツ暗号化のための暗号アルゴリズム)

enc Content Encryption Algorithm 実装要件
A128CBC-HS256 AES_128_CBC_HMAC_SHA_256 Required
A192CBC-HS384 AES_192_CBC_HMAC_SHA_384 Optional
A256CBC-HS512 AES_256_CBC_HMAC_SHA_512 Required
A128GCM AES GCM using 128-bit key Recommended
A192GCM AES GCM using 192-bit key Optional
A256GCM AES GCM using 256-bit key Recommended

主要なenc

  • Required: A128CBC-HS256 / A256CBC-HS512
  • Recommended: A128GCM / A256GCM

補足(GCM を選ぶ): *CBC-HS*
Encrypt-then-MAC を手組みしたもの
*GCMAEAD(認証付き暗号) である。
実装ミスの余地が小さく処理も速いため、
新規実装では A256GCM を選ぶのが定石である。

JWK用(鍵の暗号アルゴリズム)

種別 RFC 7518 の節
kty(Key Type) 6.1
非対称鍵(ECC) 6.2
非対称鍵(RSA) 6.3
対称鍵 6.4

補足(EdDSA / Ed25519 の追加): RFC 7518 の制定後、
RFC 8037EdDSA(Ed25519 / Ed448)と
kty: OKP(Octet Key Pair)が追加された。

特徴
EdDSA (Ed25519) 署名が短く高速。実装ミスに強い(曲線パラメータの選択余地が無い)

相互運用性の観点からは ES256 / RS256 が無難だが、
内部で閉じた用途なら EdDSA も有力な選択肢である。

参考


Tags: 移行, IT国際標準, プログラミング, 通信技術, 認証基盤, クレームベース認証, 暗号化

⚠️ **GitHub.com Fallback** ⚠️