JOSE関連のRFCを読んだので内容についてまとめます
の続きです。
RFC7518 は、JWS, JWE, JWK で使われるアルゴリズムについて定義しています。
Cryptographic Algorithms for Digital Signatures and MACs
は JWS で使う署名についてCryptographic Algorithms for Key Management
と 5 章 Cryptographic Algorithms for Content Encryption
はいずれも JWE で使うアルゴリズムや暗号化についてCryptographic Algorithms for Keys
は JWK で使う暗号鍵についてそれぞれ解説されています。 JWE は今までもあまり積極的には扱っていなかったので、ここでも JWS と JWK で使われるアルゴリズムについて見ていきます。
JWS で使えるアルゴリズムとしては、以下のものが規格で定義されています。
このうち、実装者に必須とされているのは HS256 であり、RS256 と ES256 は推奨となっています。
RSASSA-PKCS1-v1_5 デジタル署名については、RFC3447 に定義されています。
これと、SHA-256 や SHA-384 などのハッシュを組み合わせて作られるのが RS256 や RS384 になります。
ECDSA は楕円曲線暗号を用いたデジタル署名です。 同じ暗号強度で、RSA より短い鍵長で済むなどの利点があり、近年使われるようになってきています。
例として、P-256 曲線と SHA-256 を用いた署名は以下のように生成されます。
(R,S)
となる。(R と S はそれぞれ 256bit の非負な整数)RSASSA-PKCS1-v1_5 とは別の、RSASSA-PSS というものもあるようです。この辺りは RSA のパディングの話と関わってくると思うのですが、筆者が詳しくないので別の機会に調べられればと思います。
alg に指定する値としては PS256, PS384, PS512 があります。
JWK の kty(Key Type)パラメータには、EC, RSA, oct の 3 つの値がこの規格で定義されています。 実装者は RSA と oct が必須で、EC は推奨とされています。
EC の公開鍵では、crv と x という 2 つのパラメーターが必須です。crv には P-256, P-384, P-521 などの楕円曲線を指定する値が入ります。 また、秘密鍵の方では d というパラメータが追加で必要になります。
ESA の公開鍵については、n(Modules) と e(Exponent) という 2 つのパラメータが必須です。 秘密鍵の方は、追加で d というパラメータが必要になります。
暗号アルゴリズムについての筆者の知識が足りなかったことと、RFC にはそこまで記載がなかったため、あまり解説できることがありませんでした。 ひとまず JOSE 関連の RFC に目を通したことで、JOSE RFC が何を規定する規格なのかということや、JWT がどのようにして規格化されているのかがわかってよかったです。