JWA
RFC 7518 JSON Web Algorithms (JWA) 他の規格と独立させることでJWAのみの更新でアルゴリズムの追加や廃止が可能
RFC 8037 ECDH, EdDSA in JOSE
RFC 8812 CBOR Object Signing and Encryption (COSE) and JSON Object Signing and Encryption (JOSE) Registrations for Web Authentication (WebAuthn) Algorithms
ECDSA secp256k1 の追加
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 7518
概要
この仕様は、JSON Web Signature (JWS)、JSON Web Encryption (JWE)、およびJSON Web Key (JWK) 仕様で使用される暗号化アルゴリズムと識別子を登録するものです。これらの識別子用の複数のIANAレジストリを定義します。
1. はじめに
本仕様は、JSON Web Signature (JWS) JWS、JSON Web Encryption (JWE) JWE、およびJSON Web Key (JWK) JWK 仕様で使用される暗号化アルゴリズムと識別子を登録します。 これらの識別子用に複数のIANAレジストリを定義します。これらの仕様はすべて、JSONベースのRFC7159データ構造を利用しています。本仕様では、これらのアルゴリズムと鍵の種類に固有のセマンティクスと操作についても説明します。 アルゴリズムと識別子をJWS、JWE、およびJWK仕様ではなく本仕様に登録することで、必須、推奨、オプション、および非推奨のアルゴリズムが時間の経過とともに変更されても、それらを変更せずに維持することができます。また、これにより、本仕様を変更することなく、JWS、JWE、およびJWK仕様を変更することもできます。
本仕様で定義される名前は短くなっています。これは、結果として得られる表現を簡潔にすることが主な目標であるためです。
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 が必要 1.3.101.112 1.3.101.113
ES256K ECDSA using secp256k1 curve and SHA-256 RFC 8812 1.3.132.0.10 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. 楕円曲線鍵のパラメータ
JWK は楕円曲線 DSS 鍵を表すことができます。この場合、"kty" メンバの値は "EC" です。 6.2.1. 楕円曲線公開鍵のパラメータ
楕円曲線公開鍵は、有限体から抽出された2つの座標で表され、これらの座標は楕円曲線上の点を定義します。すべての楕円曲線公開鍵には、以下のメンバがなければなりません。
"crv"
"x"
以下のセクションで定義される3つの曲線の楕円曲線公開鍵には、以下のメンバもなければなりません。
"y"
6.2.1.1. "crv"(曲線)パラメータ
"crv"(曲線)パラメータは、鍵で使用される暗号曲線を識別します。本仕様で使用されるDSSの曲線値は次のとおりです。 "P-256"
"P-384"
"P-521"
これらの値は、セクション7.6で定義されているIANA「JSON Web Key Elliptic Curve」レジストリに登録されています。追加の「crv」値は、他の仕様によって登録できます。追加の曲線を登録する仕様では、登録された曲線の鍵を表すために使用するパラメータを定義する必要があります。「crv」値は大文字と小文字が区別される文字列です。
SEC1 SEC 1 ポイント圧縮は、これら3つの曲線のいずれにおいてもサポートされていません。 6.2.1.2. "x" (X座標) パラメータ
"x" (X座標) パラメータには、楕円曲線上の点のX座標が含まれます。これは、SEC1 SEC 1 のセクション2.3.5で定義されているように、座標のオクテット文字列表現をBase64URLエンコードして表します。このオクテット文字列の長さは、"crv" パラメータで指定された曲線の座標の全長でなければなりません。例えば、"crv" の値が "P-521" の場合、オクテット文字列の長さは66オクテットでなければなりません。 6.2.1.3. "y" (Y座標) パラメータ
"y" (Y座標) パラメータには、楕円曲線上の点のY座標が含まれます。これは、SEC1 SEC 1 のセクション2.3.5で定義されているように、座標のオクテット文字列表現をBase64URLエンコードして表します。このオクテット文字列の長さは、「crv」パラメータで指定された曲線の座標の全長でなければなりません。例えば、「crv」の値が「P-521」の場合、オクテット文字列の長さは66オクテットでなければなりません。 6.2.2. 楕円曲線秘密鍵のパラメータ
楕円曲線公開鍵を表すために使用されるメンバーに加えて、以下のメンバーが存在しなければなりません。
6.2.2.1. 「d」(ECC秘密鍵)パラメータ
「d」(ECC秘密鍵)パラメータには、楕円曲線秘密鍵の値が含まれます。これは、SEC1 SEC 1 のセクション2.3.7で定義されているように、秘密鍵値のオクテット文字列表現をBase64URLエンコードしたものとして表されます。このオクテット文字列の長さは、ceiling(log-base-2(n)/8)オクテット(nは曲線の次数)でなければなりません。 6.3. RSA鍵のパラメータ
JWKはRSA RFC3447鍵を表すことができます。この場合、「kty」メンバーの値は「RSA」です。以下に定義されるパラメータの意味は、RFC 3447のセクション3.1および3.2で定義されているものと同じです。 6.3.1. RSA公開鍵のパラメータ
RSA公開鍵には、以下のメンバーが必要です。
6.3.1.1. 「n」(係数)パラメータ
「n」(係数)パラメータには、RSA公開鍵の係数値が含まれます。これはBase64urlUIntエンコードされた値として表されます。
実装者によると、一部の暗号ライブラリは、返す係数表現の前にゼロ値のオクテットを追加することが分かっています。例えば、2048ビットの鍵に対して、256オクテットではなく257オクテットを返します。このようなライブラリを使用する実装では、base64urlエンコードされた表現からこの追加のオクテットを省略するように注意する必要があります。
6.3.1.2. 「e」(指数)パラメータ
「e」(指数)パラメータには、RSA公開鍵の指数値が含まれます。これはBase64urlUIntエンコードされた値として表現されます。
例えば、値65537を表現する場合、base64urlエンコードされるオクテットシーケンスは、3つのオクテット1, 0, 1で構成されている必要があります。 この値の最終的な表現は「AQAB」です。