【发布时间】:2015-12-30 07:11:38
【问题描述】:
我了解对称密钥和非对称密钥之间的区别。我了解密钥用于计算签名然后验证它们。然而,深入一点,我想了解更多我在网上找不到的东西。
是否向消费者提供了验证内容的密钥?如果使用对称密钥,那不是让消费者能够更改 JWT 内容吗?
当使用非对称密钥时,签名是用私钥还是公钥计算?消费者是否获得了公钥/私钥?
【问题讨论】:
标签: jwt signature encryption-asymmetric
我了解对称密钥和非对称密钥之间的区别。我了解密钥用于计算签名然后验证它们。然而,深入一点,我想了解更多我在网上找不到的东西。
是否向消费者提供了验证内容的密钥?如果使用对称密钥,那不是让消费者能够更改 JWT 内容吗?
当使用非对称密钥时,签名是用私钥还是公钥计算?消费者是否获得了公钥/私钥?
【问题讨论】:
标签: jwt signature encryption-asymmetric
没有人会加密 JWT 的有效负载。一切都是为了签名! RSA 或 ECDSA(均为非对称)签名可以仅使用公共密钥进行验证,对于对称签名签名,您将需要身份验证服务。
最常见的 JWT 签名算法:
HMAC + SHA256
RSASSA-PKCS1-v1_5 + SHA256
ECDSA + P-256 + SHA256
【讨论】:
对称密钥只能以点对点的方式使用,因此接收者修改只有他和发送者拥有共享密钥(并且他是预期接收者)的 JWT 是没有意义的。
非对称密钥签名(在 JWT 中以及一般情况下)由发送方使用私钥生成,并由接收方使用公钥进行验证。消费者/接收者仅获得带外发生的公钥(即通过您用来交换安全数据的另一种通信方式)。
【讨论】:
通过使用发送方的私钥签名的非对称 JWT (JWS),令牌的接收方基本上接收 明文 中的有效负载(标头/声明) base64 编码。这就是为什么它们需要在安全套接字层 (SSL) 环境中传输的原因。为了验证接收到的签名,接收方使用公钥重新计算接收到的有效载荷的签名。如果接收到的签名和计算的签名这两个签名不匹配,则有效载荷不能被信任——它是无效的 因此,这种非对称 JWS 不是包含敏感“声明”(例如社会安全号码)的好方法,因为有效负载的内容未加密。 在 JWT 中包含此类敏感数据,可以使用 Json Web Token Encrypted JWE。在 JWE 中,整个 Payload 都是加密的。
【讨论】: