JWA
RFC 7518 JSON Web Algorithms (JWA) 他の規格と独立させることでJWAのみの更新でアルゴリズムの追加や廃止が可能
3.デジタル署名とMAC
table:JWSのalg
"alg" 識別子 アルゴリズム XML DSIG OID
HS256 HMAC using SHA-256 1.2.840.113549.2.9 必須 HS384 HMAC using SHA-384 1.2.840.113549.2.10 オプション
HS512 HMAC using SHA-512 1.2.840.113549.2.11 オプション
RS256 RSASSA-PKCS1-v1_5 using SHA-256 1.2.840.113549.1.1.11 推奨 RS384 RSASSA-PKCS1-v1_5 using SHA-384 1.2.840.113549.1.1.12 オプション
RS512 RSASSA-PKCS1-v1_5 using SHA-512 1.2.840.113549.1.1.13 オプション
ES256 ECDSA using P-256 and SHA-256 1.2.840.10045.4.3.2 推奨+ ES384 ECDSA using P-384 and SHA-384 1.2.840.10045.4.3.3 オプション
ES512 ECDSA using P-521 and SHA-512 1.2.840.10045.4.3.4 オプション
PS256 RSASSA-PSS using SHA-256 and MGF1 with SHA-256 1.2.840.113549.1.1.10 オプション PS384 RSASSA-PSS using SHA-384 and MGF1 with SHA-384 1.2.840.113549.1.1.10 オプション
PS512 RSASSA-PSS using SHA-512 and MGF1 with SHA-512 1.2.840.113549.1.1.10 オプション
none デジタル署名なしまたはMAC performed オプション
EdDSA EdDSA RFC 8037 3.1 crv が必要 ES256K ECDSA using secp256k1 curve and SHA-256 RFC 8812 3.2 HMAC with SHA-2機能
Hashベースのメッセージ認証コード(MAC)により、シークレットと暗号化関数を使用してMACを生成できます。
アルゴリズムはRFC 2104。
ハッシュ出力と同じサイズ(HS256の場合は256bit)以上の鍵を使用する必要があります。
3.3 RSASSA-PKCS1-v1_5 によるデジタル署名
RFC 3447 のセクション 8.2 の RSASSA-PKCS1_v1_5 デジタル署名と SHA-2 ハッシュ関数の使用を定義する。
RSAの鍵長は2048ビット以上。
3.4 ECDSAによるデジタル署名
ECDSA P-256 with SHA-256 の出力は (R, S) RとSは256bitの符号なし整数。
R,Sをそれぞれビッグエンディアンで32オクテットに変換する。(省略しない)
連結した64オクテットが署名。
P-384 SHA-384 では 384bit x2 96オクテット
P-521 SHA-512 では 528bit(Pad 7bit + 521 bit) x2 132オクテット
3.5. RSASSA-PSS によるデジタル署名
ハッシュ関数、MGF1マスク生成関数にSHA-256を使用するRSASSA-PSS
鍵長は2048bit以上
3.6. "none"
整合性保護を提供しない
JWS署名の値が空であること
実装はデフォルトで非セキュアJWSを受け入れてはいけない。
4.鍵管理の暗号アルゴリズム
4.1. "alg"
基本的にcekを暗号化する手法
鍵は公開鍵だったり楕円だったり別のAESの鍵だったりパスワードだったり
table:JWEの鍵管理 A.2
"alg" 識別子 アルゴリズム 付加ヘッダ 鍵 要求度
RSA1_5 RSAES-PKCS1-v1_5 RSA2048 推奨- RSA-OAEP RSAES-OAEP デフォルトパラメータ使用 RSA2048 推奨+ RSA-OAEP-256 RSAES-OAEP using SHA-256 and MGF1 with SHA-256 RSA2048 オプション
A128KW AES Key Wrap with default initial value using 128-bit key AES鍵 推奨 A192KW AES Key Wrap with default initial value using 192-bit key AES鍵 オプション
A256KW AES Key Wrap with default initial value using 256-bit key AES鍵 推奨
dir CEK 共通鍵の直接使用 推奨
ECDH-ES Elliptic Curve Diffie-Hellman Ephemeral Static key agreement using Concat KDF "epk","apu","apv" EC 推奨+ ECDH-ES+A128KW ECDH-ES using Concat KDF and CEK wrapped with "A128KW" "epk","apu","apv" EC 推奨
ECDH-ES+A192KW ECDH-ES using Concat KDF and CEK wrapped with "A192KW" "epk","apu","apv" EC オプション
ECDH-ES+A256KW ECDH-ES using Concat KDF and CEK wrapped with "A256KW" "epk","apu","apv" EC 推奨
A128GCMKW key wrapping with AES GCM using 128-bit key "iv","tag" AES鍵 オプション
A192GCMKW key wrapping with AES GCM using 192-bit key "iv","tag" AES鍵 オプション
A256GCMKW key wrapping with AES GCM using 256-bit key "iv","tag" AES鍵 オプション
PBES2-HS256+A128KW PBES2 with HMAC SHA-256 and "A128KW" wrapping "p2s","p2c" password オプション PBES2-HS384+A192KW PBES2 with HMAC SHA-384 and "A192KW" wrapping "p2s","p2c" password オプション
PBES2-HS512+A256KW PBES2 with HMAC SHA-512 and "A256KW" wrapping "p2s","p2c" password オプション
AxxxGCMKW は cekをAES-GCMで暗号化するだけ iv, tag はJWE本体とは別
PBES2-HSxxx+AxxxKW はその中で使われるPBKDF2にAxxxKWを重ねる形、 JWE自体がPBES2相当 cek が encrypted key に変換される前提のつくりなので、鍵生成系のアルゴリズム(ECDH-ES, PBES2)はAES Key Wrap をくぐらせてcekを暗号化する形に変換している
table:JWEの本文認証付き暗号 A.3
A128CBC-HS256 AES_128_CBC_HMAC_SHA_256 認証付き暗号アルゴリズム Section 5.2.3で定義 必須 A192CBC-HS384 AES_192_CBC_HMAC_SHA_384 認証付き暗号アルゴリズム Section 5.2.4で定義 オプション
A256CBC-HS512 AES_256_CBC_HMAC_SHA_512 認証付き暗号アルゴリズム Section 5.2.5で定義 必須
A128GCM AES GCM using 128-bit key 推奨 A192GCM AES GCM using 192-bit key オプション
A256GCM AES GCM using 256-bit key 推奨
5.2 AES_CBC_HMAC_SHA2 アルゴリズム
RFC 5652 Section 7 PKCS #7 Padding AEAD-CBC-SHA IVと認証タグは別
認証タグT 次を順にHMACにかけたもの キーはMAC_KEY
AAD A
初期化ベクトル IV
暗号化本文 E
AL は Aのビット数 64bit符号なし
6. 鍵暗号化
6.1. "kty" 鍵の種類
table:kty 鍵の種類
EC Elliptic Eurve DSS RFC 7518 6.2 推奨+
RSA RSA RFC 3447 RFC 7518 6.3 必須
oct オクテットシーケンス RFC 7518 6.4 必須
OKP オクテットキーペア RFC 8037 2. オプション
6.2.1.1 と 7.6 "crv"
table:JSON Web Key Elliptic Curve
P-256 RFC 7518 6.2.1.1 推奨+
P-384 RFC 7518 6.2.1.1 オプション
P-521 RFC 7518 6.2.1.1 オプション
Ed25519 RFC 8037 3.1 EdDSA
Ed448 RFC 8037 3.1 EdDSA
X25519 RFC 8037 3.2 ECDH-ES
X448 RFC 8037 3.2 ECDH-ES
secp256k1 RFC 8812 (COSE) 3.1 追加?
RFC 8812 4.3. ES256K