【问题标题】:How are the standard algorithms for JWT aligned with the OpenSSL dgst?JWT 的标准算法如何与 OpenSSL dgst 保持一致?
【发布时间】:2021-04-07 00:57:34
【问题描述】:

我目前使用OpenSSL dgst -sha256 [...] 作为具有alg: RS256 的JWT 标头。 在JSON Web Token 官方网站上可以选择 11 种 JWT 算法:

  • HS256
  • HS384
  • HS512
  • RS256

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

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

【问题讨论】:

    标签: openssl jwt


    【解决方案1】:

    JWT 以 JSON Web 签名 (JWS) 进行编码,如 RFC 7515 "JSON Web Signature (JWS)" 中所定义。您提到的那些“十一种JWT算法”,是指用于JWS的签名算法。它们的值定义在 RFC 7518“JSON Web 算法 (JWA)”的3.1 "alg" (Algorithm) Header Parameter Values for JWS

       +--------------+-------------------------------+--------------------+
       | "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,它会提到:

    签名文件时,dgst会自动判断算法 (RSA、ECC 等)用于基于私钥的 ASN.1 进行签名 信息。

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 2016-04-02
      • 2014-07-20
      • 2018-12-06
      • 2013-07-16
      • 2014-08-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      相关资源
      最近更新 更多