【问题标题】:Send a private key with JWT使用 JWT 发送私钥
【发布时间】:2017-04-01 22:08:08
【问题描述】:

我可以使用 JWT 交换私钥吗? 我必须使用这个私钥来解密早期的加密数据。我使用 TLS 在服务器和客户端之间交换信息。安全吗?交换密钥是一个有效的想法吗? 示例:

标题

{
  "alg": "HS256",
  "typ": "JWT"
}

有效载荷

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "private_key": Base64(generated private key)
}

签名

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  passphrase
)

【问题讨论】:

  • 密钥是从服务器发送到客户端的,不是吗?我不明白您为什么要将它包含在 JWT 令牌中而不是单个传输中。例如客户端使用token进行身份验证时,它总是会发送token和加密密钥,当不需要时
  • 是的,这是从服务器发送到客户端的特殊密钥。我想交换这个密钥来解密从另一个实体加密的特定内容。
  • @pedrofb 通常将其视为机密内容。

标签: encryption jwt


【解决方案1】:

建立安全通信后,每个利益相关者都会生成/拥有自己的私钥。只交换公钥。应防止私钥交换。

无论如何,如果你真的需要通过 JWT 格式发送私钥,那么你应该阅读JSON Web Key (JWK) specification (RFC7517) section 7。 该过程非常简单:创建一个 JWE,其中 JWK 作为有效负载和强制标头加上(可选)cty 标头参数,值为 jwk+json。

例子:

JWE 标头:

{
    "alg":"A256KW",
    "enc":"A256GCM",
    "cty":"jwk+json"
}

JWE 有效载荷(JWK):

{
    "kty":"oct",
    "alg":"A128KW",
    "k":"GawgguFyGrWKav7AX4VKUg"
}

【讨论】:

  • 我可以使用 JWK 发送配对生成的密钥(不是 RSA,不是 ECC)吗?
  • 一个 JWK 对象是一个键。如果你想发送一个密钥集(JWKSet)那么它几乎是相同的过程,只是头部改变(见第7节)
猜你喜欢
  • 2018-03-05
  • 2020-06-17
  • 2019-08-27
  • 2022-08-06
  • 1970-01-01
  • 2017-01-27
  • 2017-08-31
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多