3. Cryptographic Algorithms for Digital Signatures and MACs (デジタル署名と MAC の暗号アルゴリズム)
JWS は、JWS Protected Header (JWS 保護ヘッダー) と JWS Payload (JWS ペイロード) の内容に対してデジタル署名を行うか、MAC を作成するために暗号アルゴリズムを使用します。
3.1 "alg" (Algorithm) Header Parameter Values for JWS (JWS の "alg" パラメータ値)
本仕様書が JWS に対して定義する "alg" (algorithm) Header Parameter (ヘッダーパラメータ) の値は以下のとおりです:
| "alg" パラメータ値 | デジタル署名または MAC アルゴリズム | 実装要件 |
|---|---|---|
| HS256 | HMAC using SHA-256 (SHA-256 を使用した HMAC) | Required (必須) |
| HS384 | HMAC using SHA-384 (SHA-384 を使用した HMAC) | Optional (任意) |
| HS512 | HMAC using SHA-512 (SHA-512 を使用した HMAC) | Optional (任意) |
| RS256 | RSASSA-PKCS1-v1_5 using SHA-256 (SHA-256 を使用した RSASSA-PKCS1-v1_5) | Recommended (推奨) |
| RS384 | RSASSA-PKCS1-v1_5 using SHA-384 (SHA-384 を使用した RSASSA-PKCS1-v1_5) | Optional (任意) |
| RS512 | RSASSA-PKCS1-v1_5 using SHA-512 (SHA-512 を使用した RSASSA-PKCS1-v1_5) | Optional (任意) |
| ES256 | ECDSA using P-256 and SHA-256 (P-256 と SHA-256 を使用した ECDSA) | Recommended+ (推奨+) |
| ES384 | ECDSA using P-384 and SHA-384 (P-384 と SHA-384 を使用した ECDSA) | Optional (任意) |
| ES512 | ECDSA using P-521 and SHA-512 (P-521 と SHA-512 を使用した ECDSA) | Optional (任意) |
| PS256 | RSASSA-PSS using SHA-256 and MGF1 with SHA-256 (SHA-256 と MGF1 with SHA-256 を使用した RSASSA-PSS) | Optional (任意) |
| PS384 | RSASSA-PSS using SHA-384 and MGF1 with SHA-384 (SHA-384 と MGF1 with SHA-384 を使用した RSASSA-PSS) | Optional (任意) |
| PS512 | RSASSA-PSS using SHA-512 and MGF1 with SHA-512 (SHA-512 と MGF1 with SHA-512 を使用した RSASSA-PSS) | Optional (任意) |
| none | No digital signature or MAC performed (デジタル署名または MAC なし) | Optional (任意) |
注: 実装要件列の "+" は、仕様の将来のバージョンで要件の強度が増加する可能性があることを示します。
3.2 HMAC with SHA-2 Functions (SHA-2 関数を使用した HMAC)
Hash-based Message Authentication Codes (HMACs) (ハッシュベースメッセージ認証コード) は、秘密鍵と暗号ハッシュ関数を使用して MAC を生成することを可能にします。このアルゴリズムは RFC 2104 [RFC2104] で定義されています。
鍵要件: このアルゴリズムでは、ハッシュ出力と同じサイズ (例えば、"HS256" の場合は 256 ビット) またはそれ以上の鍵を使用しなければなりません (MUST)。
HMAC アルゴリズム値:
| "alg" パラメータ値 | MAC アルゴリズム |
|---|---|
| HS256 | HMAC using SHA-256 (SHA-256 を使用した HMAC) |
| HS384 | HMAC using SHA-384 (SHA-384 を使用した HMAC) |
| HS512 | HMAC using SHA-512 (SHA-512 を使用した HMAC) |
検証要件: HMAC 値の比較は、タイミング攻撃を防ぐために定数時間で実行しなければなりません (MUST)。
3.3 Digital Signature with RSASSA-PKCS1-v1_5 (RSASSA-PKCS1-v1_5 を使用したデジタル署名)
このセクションでは、RFC 3447 [RFC3447] のセクション 8.2 で定義されている RSASSA-PKCS1-v1_5 デジタル署名アルゴリズムと SHA-2 ハッシュ関数の使用を定義します。
鍵要件: このアルゴリズムでは、2048 ビット以上のサイズの鍵を使用しなければなりません (MUST)。
アルゴリズム値:
| "alg" パラメータ値 | デジタル署名アルゴリズム |
|---|---|
| RS256 | RSASSA-PKCS1-v1_5 using SHA-256 (SHA-256 を使用した RSASSA-PKCS1-v1_5) |
| RS384 | RSASSA-PKCS1-v1_5 using SHA-384 (SHA-384 を使用した RSASSA-PKCS1-v1_5) |
| RS512 | RSASSA-PKCS1-v1_5 using SHA-512 (SHA-512 を使用した RSASSA-PKCS1-v1_5) |
3.4 Digital Signature with ECDSA (ECDSA を使用したデジタル署名)
Elliptic Curve Digital Signature Algorithm (ECDSA) (楕円曲線デジタル署名アルゴリズム) [DSS] は楕円曲線暗号を使用し、より短い鍵長とより高速な処理で RSA と同等のセキュリティを提供します。
サポートされている曲線とハッシュ関数:
- P-256 曲線と SHA-256
- P-384 曲線と SHA-384
- P-521 曲線と SHA-512
ECDSA P-256 SHA-256 署名生成手順:
- 秘密鍵を使用して ECDSA P-256 SHA-256 で JWS Signing Input (JWS 署名入力) のデジタル署名を生成し、(R, S) のペアを生成します。それぞれが 256 ビットの符号なし整数です
- R と S をビッグエンディアン順のオクテットシーケンスに変換します。それぞれの長さは 32 オクテットです
- R、次に S の順序で 2 つのオクテットシーケンスを連結します
- 結果の 64 オクテットシーケンスが JWS Signature (JWS 署名) 値になります
アルゴリズム値:
| "alg" パラメータ値 | デジタル署名アルゴリズム |
|---|---|
| ES256 | ECDSA using P-256 and SHA-256 (P-256 と SHA-256 を使用した ECDSA) |
| ES384 | ECDSA using P-384 and SHA-384 (P-384 と SHA-384 を使用した ECDSA) |
| ES512 | ECDSA using P-521 and SHA-512 (P-521 と SHA-512 を使用した ECDSA) |
署名長:
- ES256: 64 オクテット (R と S はそれぞれ 32 オクテット)
- ES384: 96 オクテット (R と S はそれぞれ 48 オクテット)
- ES512: 132 オクテット (R と S はそれぞれ 66 オクテット)
3.5 Digital Signature with RSASSA-PSS (RSASSA-PSS を使用したデジタル署名)
このセクションでは、RFC 3447 [RFC3447] のセクション 8.1 で定義されている RSASSA-PSS デジタル署名アルゴリズムと、MGF1 マスク生成関数および SHA-2 ハッシュ関数の使用を定義します。
主要なパラメータ:
- RSASSA-PSS ハッシュ関数と MGF1 ハッシュ関数は同じハッシュ関数を使用します
- ソルト値のサイズはハッシュ関数の出力サイズと同じです
- 鍵サイズ要件: 2048 ビット以上
アルゴリズム値:
| "alg" パラメータ値 | デジタル署名アルゴリズム |
|---|---|
| PS256 | RSASSA-PSS using SHA-256 and MGF1 with SHA-256 (SHA-256 と MGF1 with SHA-256 を使用した RSASSA-PSS) |
| PS384 | RSASSA-PSS using SHA-384 and MGF1 with SHA-384 (SHA-384 と MGF1 with SHA-384 を使用した RSASSA-PSS) |
| PS512 | RSASSA-PSS using SHA-512 and MGF1 with SHA-512 (SHA-512 と MGF1 with SHA-512 を使用した RSASSA-PSS) |
3.6 Using the Algorithm "none" (アルゴリズム "none" の使用)
JWS 仕様書 [JWS] は、完全性保護を提供しない Unsecured JWS (非セキュア JWS) を作成するために使用する "alg" 値 "none" を定義しています。
セキュリティ警告: 実装は、このアルゴリズムを使用することのセキュリティへの影響を理解しなければなりません (MUST)。"alg" 値 "none" は、完全性保護が必要ない場合にのみ使用すべきです (SHOULD)。