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 算法可供选择:
- HS256
- HS384
- HS512
- RS256
- 等等
但是 OpenSSL dgst
的选项只有:-sha256
、-sha384
、-sha512
。
由于 JWT 算法有各种前缀(HS、RS、ES、PS),我想知道是否可以在不考虑前缀的情况下应用可用的 OpenSSL 算法,只要位长正确即可。
例如,RS256 = -sha256
与 HS256 = -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 填充相反)。
我目前将 OpenSSL dgst -sha256 [...]
用于具有 alg: RS256
的 JWT header。
官方 JSON Web Token 网站上有 11 种 JWT 算法可供选择:
- HS256
- HS384
- HS512
- RS256
- 等等
但是 OpenSSL dgst
的选项只有:-sha256
、-sha384
、-sha512
。
由于 JWT 算法有各种前缀(HS、RS、ES、PS),我想知道是否可以在不考虑前缀的情况下应用可用的 OpenSSL 算法,只要位长正确即可。
例如,RS256 = -sha256
与 HS256 = -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 填充相反)。