JWT 的标准算法如何与 OpenSSL dgst 保持一致?

How are the standard algorithms for JWT aligned with the OpenSSL dgst?

我目前将 OpenSSL dgst -sha256 [...] 用于具有 alg: RS256 的 JWT header。 官方 JSON Web Token 网站上有 11 种 JWT 算法可供选择:

但是 OpenSSL dgst 的选项只有:-sha256-sha384-sha512

由于 JWT 算法有各种前缀(HS、RS、ES、PS),我想知道是否可以在不考虑前缀的情况下应用可用的 OpenSSL 算法,只要位长正确即可。 例如,RS256 = -sha256HS256 = -sha256 一样有效。

JWT 在 JSON Web 签名 (JWS) 中编码,如 RFC 7515 "JSON Web Signature (JWS)" 中所定义。你说的“十一个JWT算法”,指的是JWS使用的签名算法。它们的值定义在 RFC 7518 的 3.1 "alg" (Algorithm) Header Parameter Values for JWS“JSON Web 算法 (JWA)”:

   +--------------+-------------------------------+--------------------+
   | "alg" Param  | Digital Signature or MAC      | Implementation     |
   | Value        | Algorithm                     | Requirements       |
   +--------------+-------------------------------+--------------------+
   | HS256        | HMAC using SHA-256            | Required           |
   | HS384        | HMAC using SHA-384            | Optional           |
   | HS512        | HMAC using SHA-512            | Optional           |
   | RS256        | RSASSA-PKCS1-v1_5 using       | Recommended        |
   |              | SHA-256                       |                    |
   | RS384        | RSASSA-PKCS1-v1_5 using       | Optional           |
   |              | SHA-384                       |                    |
   | RS512        | RSASSA-PKCS1-v1_5 using       | Optional           |
   |              | SHA-512                       |                    |
   | ES256        | ECDSA using P-256 and SHA-256 | Recommended+       |
   | ES384        | ECDSA using P-384 and SHA-384 | Optional           |
   | ES512        | ECDSA using P-521 and SHA-512 | Optional           |
   | PS256        | RSASSA-PSS using SHA-256 and  | Optional           |
   |              | MGF1 with SHA-256             |                    |
   | PS384        | RSASSA-PSS using SHA-384 and  | Optional           |
   |              | MGF1 with SHA-384             |                    |
   | PS512        | RSASSA-PSS using SHA-512 and  | Optional           |
   |              | MGF1 with SHA-512             |                    |
   | none         | No digital signature or MAC   | Optional           |
   |              | performed                     |                    |
   +--------------+-------------------------------+--------------------+

所以这些算法不仅仅包括摘要算法;它们与(非对称)签名算法相结合。在大多数情况下,OpenSSL 能够确定用于后者的算法,因为该信息存储在您通过 -sign 选项作为命令的一部分提供给它的私钥中。如果您查看 openssl dgst manual,它会提到:

When signing a file, dgst will automatically determine the algorithm (RSA, ECC, etc) to use for signing based on the private key's ASN.1 info.

查看不同的 JWA 算法,我看到了一些注意事项:

  • 没有特定的文件格式来捕获 HMAC 密钥,因此对于 HS 类型的算法,您需要使用与 HMAC 相关的参数 openssl dgst,如手册中所述。问题 Explanation of -hmac flag in open SSL 可能会有帮助。
  • 快速浏览手册,运行 openssl dgst 时我没有看到任何更改填充的选项。如果这是真的,那么您可能无法将它用于 PS 类型的算法,因为这些算法使用带有 PSS 填充的 RSA 签名(与“默认”PKCS 填充相反)。