Skip to content

RFC 7518 - JSON Web Algorithms (JWA)

概要

RFC 7518は、JSON Web Algorithms(JWA) を定義する標準仕様である。JWAはJOSEフレームワーク(JWS・JWE・JWK)で使用する暗号アルゴリズムの識別子と、それぞれのアルゴリズムの使用方法を規定する。

JWSのalgヘッダー、JWEのalgencヘッダー、JWKのktyパラメータなど、JOSEで使用するすべてのアルゴリズム識別子はJWAで定義されている。

解決する課題

JWSやJWEといった仕様がアルゴリズムに依存せず汎用的に定義されるためには、アルゴリズムの識別子と使用方法を別途標準化する必要がある。JWAはこの役割を担い、以下を実現する:

  • アルゴリズム識別子の統一(RS256A256GCM等)による相互運用性の確保
  • 各アルゴリズムの具体的な使用方法(鍵サイズ、パラメータ等)の明文化
  • 新アルゴリズム追加のための拡張ポイントの提供

アルゴリズムの分類

JWAは大きく以下の3カテゴリに分類される:

JWS用アルゴリズム(alg

JWS(RFC 7515)のalgヘッダーパラメータに使用する署名・MACアルゴリズム。

HMAC(対称MAC)

alg値アルゴリズム鍵長要件
HS256HMAC using SHA-256256bit以上必須
HS384HMAC using SHA-384384bit以上任意
HS512HMAC using SHA-512512bit以上任意

HMACは共有秘密鍵を使用するMAC(メッセージ認証コード)であり、署名者と検証者が同じ鍵を持つ必要がある。公開検証が不要なサービス間通信に適している。

RSASSA-PKCS1-v1_5

alg値アルゴリズム鍵長要件
RS256RSASSA-PKCS1-v1_5 using SHA-2562048bit以上推奨
RS384RSASSA-PKCS1-v1_5 using SHA-3842048bit以上任意
RS512RSASSA-PKCS1-v1_5 using SHA-5122048bit以上任意

公開鍵暗号を使用したデジタル署名。広く実装されているが、RSASSA-PSSより安全性が低い。

RSASSA-PSS

alg値アルゴリズム鍵長要件
PS256RSASSA-PSS using SHA-256 and MGF1 with SHA-2562048bit以上任意
PS384RSASSA-PSS using SHA-384 and MGF1 with SHA-3842048bit以上任意
PS512RSASSA-PSS using SHA-512 and MGF1 with SHA-5122048bit以上任意

RSASSA-PKCS1-v1_5より安全なパディングスキームを採用。新規実装ではPS256以上が推奨される。

ECDSA(楕円曲線デジタル署名)

alg値アルゴリズム曲線要件
ES256ECDSA using P-256 and SHA-256P-256推奨
ES384ECDSA using P-384 and SHA-384P-384任意
ES512ECDSA using P-521 and SHA-512P-521任意

RSAより短い鍵長で同等のセキュリティを提供する。モバイル・IoT環境等のリソース制約環境に適している。

none(署名なし)

alg値説明要件
noneJWSを署名なしで使用する(Unsecured JWS)任意

外部のセキュリティ機構(TLS等)で保護されている場合のみ使用可能。本番環境での使用は原則禁止。

JWE鍵管理アルゴリズム(alg

JWE(RFC 7516)のalgヘッダーパラメータに使用するCEK鍵管理アルゴリズム。

RSAベース

alg値アルゴリズム概要推奨
RSA-OAEPRSAES-OAEP with SHA-1RSA-OAEPによるCEK暗号化
RSA-OAEP-256RSAES-OAEP with SHA-256SHA-256版(より安全)
RSA1_5RSAES-PKCS1-v1_5非推奨(Bleichenbacher攻撃)

AES鍵ラップ

alg値アルゴリズム鍵長
A128KWAES Key Wrap with 128-bit128bit
A192KWAES Key Wrap with 192-bit192bit
A256KWAES Key Wrap with 256-bit256bit

直接鍵使用

alg値説明
dir共有対称鍵をCEKとして直接使用(鍵ラップなし)

ECDH-ES(楕円曲線Diffie-Hellman)

alg値説明
ECDH-ESECDH-ESでCEKを直接導出(鍵合意)
ECDH-ES+A128KWECDH-ES + AES-128 Key Wrapで鍵を暗号化
ECDH-ES+A192KWECDH-ES + AES-192 Key Wrap
ECDH-ES+A256KWECDH-ES + AES-256 Key Wrap

AES-GCMによる鍵ラップ

alg値説明
A128GCMKWAES-GCM 128-bitでCEKを暗号化
A192GCMKWAES-GCM 192-bitでCEKを暗号化
A256GCMKWAES-GCM 256-bitでCEKを暗号化

パスワードベース

alg値説明
PBES2-HS256+A128KWPBES2-HMAC-SHA256 + AES-128 Key Wrap
PBES2-HS384+A192KWPBES2-HMAC-SHA384 + AES-192 Key Wrap
PBES2-HS512+A256KWPBES2-HMAC-SHA512 + AES-256 Key Wrap

JWEコンテンツ暗号化アルゴリズム(enc

JWE(RFC 7516)のencヘッダーパラメータに使用するコンテンツ暗号化アルゴリズム。

AES-CBC + HMAC-SHA2(複合型AEAD)

enc値アルゴリズムCEK長
A128CBC-HS256AES-128-CBC + HMAC-SHA-256256bit
A192CBC-HS384AES-192-CBC + HMAC-SHA-384384bit
A256CBC-HS512AES-256-CBC + HMAC-SHA-512512bit

2つのサブキー(暗号化用とMAC用)に分割して使用する複合型AEAD構造。

AES-GCM(ネイティブAEAD)

enc値アルゴリズムCEK長
A128GCMAES-GCM 128-bit key128bit
A192GCMAES-GCM 192-bit key192bit
A256GCMAES-GCM 256-bit key256bit

GCMモードはネイティブなAEAD(Authenticated Encryption with Associated Data)を提供し、暗号化と認証を一体化。CBC+HMACより実装がシンプルで、多くのハードウェアで高速化サポートがある。

JWK鍵タイプ(kty

JWK(RFC 7517)のktyパラメータで使用する鍵タイプ識別子。

kty値説明主な用途
RSARSA鍵JWS: RS256等、JWE: RSA-OAEP等
EC楕円曲線鍵JWS: ES256等、JWE: ECDH-ES等
octオクテット列(対称鍵・HMAC鍵)JWS: HS256等、JWE: A256KW等(CEK直接)

EC鍵の曲線

crv値曲線用途
P-256NIST P-256ES256, ECDH-ES
P-384NIST P-384ES384, ECDH-ES
P-521NIST P-521ES512, ECDH-ES

アルゴリズム選択指針

セキュリティに関する考慮事項

非推奨アルゴリズム

以下のアルゴリズムは既知の脆弱性があるため、新規実装では使用しないこと:

アルゴリズム理由
RSA1_5Bleichenbacher攻撃に脆弱
none署名なし。意図せず受け入れると認証バイパス

アルゴリズム置換攻撃

JWSの検証時、algヘッダーの値をそのまま信用してはならない。検証側は事前に許可するアルゴリズムをホワイトリストで定義し、ヘッダーの値ではなくホワイトリストに基づいてアルゴリズムを選択すること。

IV(初期化ベクタ)の一意性

AES-GCMを使用する場合、同じ鍵に対してIVを再使用してはならない。IVの再使用はGCMの認証機能を完全に破壊し、秘密鍵の漏洩にもつながる。JWAでは96ビット(12バイト)のランダムIVが必須とされている(REQUIRED)。

鍵長の選択

各アルゴリズムの推奨鍵長より短い鍵を使用しないこと。特にHMACの秘密鍵は使用するハッシュアルゴリズムの出力長以上のエントロピーを持つ必要がある。

関連仕様

参考文献