【问题标题】:JWT Using Asymmetric EncryptionJWT 使用非对称加密
【发布时间】:2020-08-25 20:12:26
【问题描述】:

我想问一下,在使用非对称加密时,我们使用客户端的公钥加密数据,所以客户端可以使用他们的私钥解密数据,对吗?

我刚刚找到了使用 RSA 签署 JWT 的教程,但我发现他们使用服务器私钥而不是客户端的公钥来加密数据,并且在客户端之间共享服务器的公钥。

它甚至安全吗?因为如果公钥因为可共享而落入坏人之手,那么每个人都可以解密它吗?

那么,这样签署 jwt 可以吗?

参考:tutorial1 tutorial2

【问题讨论】:

  • 不要将 RSA 解密与 RSA 签名混淆,它不是。 RSA 签名需要特殊的填充,如 RSA-PSS。同样,RSA 加密也需要像 PKCS#1 v1.5 或 RSA-OAEP 这样的填充。如果没有适当的填充,绝不能使用 RSA。

标签: encryption jwt rsa encryption-asymmetric


【解决方案1】:

所以客户可以使用他们的私钥解密数据吗?

是的,在加密数据的情况下,这是正常的方式。

但在 JWT 的情况下,它不是要加密只有接收者才应该解密的东西,而是要签署一个令牌。

目标是,只有一个实例,例如身份验证服务器或通常是令牌颁发者,可以对令牌进行签名,但每个人都可以使用公钥验证签名。

因为如果公钥因为可共享而落入坏人之手,那么每个人都可以解密它吗?

公钥不能落入坏人之手,因为它是公开的。因此,根据定义,每个人都可以看到它。

令牌的内容(即有效负载)没有加密,只是经过 base64url 编码,并且可以被任何人读取,例如在https://jwt.io

那么,这样签署 jwt 可以吗?

是的

【讨论】:

  • 谢谢,您的回答很有帮助!
【解决方案2】:

在这种情况下,目的不是加密数据以使其他人无法读取(“机密性”),而是对数据进行签名,以便使用公钥的其他人可以验证您拥有私钥密钥,您实际上签署了数据。本例中的数据是 JWT 标头和有效负载的哈希。私钥用于签名,因此只有一个实体 - 身份验证服务器 - 可以签署 JWT。公钥用于签名验证,以便任何拥有公钥的第三方都可以验证 JWT。公钥不能用于创建有效的签名。

所以是的,它是安全的!

【讨论】:

  • 谢谢你,你的回答很有帮助!
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 2020-10-26
  • 2011-04-05
  • 2012-08-08
  • 2019-07-29
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多