JWT 密钥 - 非对称和对称

Posted

技术标签:

【中文标题】JWT 密钥 - 非对称和对称【英文标题】:JWT Keys - Asymmetric and Symmetric 【发布时间】:2015-12-30 07:11:38 【问题描述】:

我了解对称密钥和非对称密钥之间的区别。我了解密钥用于计算签名然后验证它们。然而,深入一点,我想了解更多我在网上找不到的东西。

是否向消费者提供了验证内容的密钥?如果使用对称密钥,那不是让消费者能够更改 JWT 内容吗?

当使用非对称密钥时,签名是用私钥还是公钥计算?消费者是否获得了公钥/私钥?

【问题讨论】:

【参考方案1】:

没有人会加密 JWT 的有效负载。一切都是为了签名! RSA 或 ECDSA(均为非对称)签名可以仅使用公共密钥进行验证,对于对称签名签名,您将需要身份验证服务。

最常见的 JWT 签名算法:

HMAC + SHA256
RSASSA-PKCS1-v1_5 + SHA256
ECDSA + P-256 + SHA256

查看更多https://www.rfc-editor.org/rfc/rfc7518#section-3

【讨论】:

【参考方案2】:

对称密钥只能以点对点的方式使用,因此接收者修改只有他和发送者拥有共享密钥(并且他是预期接收者)的 JWT 是没有意义的。

非对称密钥签名(在 JWT 中以及一般情况下)由发送方使用私钥生成,并由接收方使用公钥进行验证。消费者/接收者仅获得带外发生的公钥(即通过您用来交换安全数据的另一种通信方式)。

【讨论】:

谢谢汉斯。我已经接受了你的回答,因为它解释了我关于非对称密钥的 q 。您能否扩展对称密钥仅用于点对点方式的含义?您的意思是应该在您拥有和完全控制的服务器之间使用它们吗? 不,我的意思是你在两方之间使用它们,这与你可以在一对多关系中使用的非对称密钥不同。 没错。使用对称密钥时谁生成密钥?即使收件人是预定目标,他们就不能更改 JWT 的内容以增加他们的权限或冒充他人吗? JWT 的接收者目标环境,因此它甚至不需要 JWT 模拟或增加权限 从回答中我还是不明白的是,通过非对称唱法,客户端可以用公钥验证内容。但是使用对称签名,客户端仍然可以验证内容吗?如何?或者只能由密钥所有者验证令牌的一致性,例如服务器?【参考方案3】:

通过使用发送方的私钥签名的非对称 JWT (JWS),令牌的接收方基本上接收 明文 中的有效负载(标头/声明) base64 编码。这就是为什么它们需要在安全套接字层 (SSL) 环境中传输的原因。为了验证接收到的签名,接收方使用公钥重新计算接收到的有效载荷的签名。如果接收到的签名和计算的签名这两个签名不匹配,则有效载荷不能被信任——它是无效的 因此,这种非对称 JWS 不是包含敏感“声明”(例如社会安全号码)的好方法,因为有效负载的内容未加密。 在 JWT 中包含此类敏感数据,可以使用 Json Web Token Encrypted JWE。在 JWE 中,整个 Payload 都是加密的。

【讨论】:

@simUser user3594395 刚刚说 JWS(签名令牌)的有效负载没有加密,如果需要加密,可以使用 JWE(加密 JWT)。这种说法没有错。我不明白你为什么写这个,即使是作为一个额外的答案。 OP没有问这个。 我只是在回顾我过去发布的答案。 JWS 和 JWE 都是优雅且良好的数学解决方案。任何一个都可以用于身份验证。但是,如果原始签名者想在 Auth 令牌中放入一些秘密,比如一张过期的信用卡,而不关心谁截获了密钥。我会的。使用 JWT 的工作不仅限于 Authentication。他们制作了很棒的代币,可以将受保护的数据保存在可能被破坏的地方。这是一个 JWT,其中包含我的信用卡和到期数据作为声明

以上是关于JWT 密钥 - 非对称和对称的主要内容,如果未能解决你的问题,请参考以下文章

简单聊几句对称和非对称加密

对称密钥与非对称密钥算法

非对称加密和对称加密

图文彻底搞懂非对称加密(公钥密钥)

密码学中的对称加密和非对称加密

对称加密和非对称加密