结合 JWE 和 JWS

Posted

技术标签:

【中文标题】结合 JWE 和 JWS【英文标题】:Combining JWE and JWS 【发布时间】:2019-03-16 06:13:10 【问题描述】:

刚刚了解 JOSE,我知道 JWE 用于加密,JWS 用于签名。我似乎无法找到一个既加密又签名的有效负载示例。

假设我有一个有效载荷hello world。做这样的事情是正确的吗? JWS(JWE('hello world') 用加密的 JWE 作为 JWS 的负载?

【问题讨论】:

是的,这是正确的,但顺序很重要。您应该先签名,然后加密 (JWE(JWS(payload)))。详情请见tools.ietf.org/html/rfc7519#section-11.2。 【参考方案1】:

JSON Web Token (JWT) 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。 JWT 是以下类型令牌的通用名称

JSON Web Signature (JWS):负载经过编码和签名,因此可以验证声明的完整性

JSON Web Encryption (JWE):它们的有效负载是加密的,因此声明对其他方隐藏

图片是从这个page中提取的。


做这样的事情是正确的吗? JWS(JWE('hello world') 将加密的 JWE 作为 JWS 的负载?

它是一个嵌套的JWT,它的概念在RFC 7519中定义:

采用嵌套签名和/或加密的 JWT。在 嵌套的 JWT,一个 JWT 被用作一个有效载荷或明文值 分别包含 JWS 或 JWE 结构。

可以添加 JWE 作为 JWS 有效负载的声明,但建议使用其他方法:首先签署消息,然后加密结果,如前所述在同一个文档中:

11.2. Signing and Encryption Order

虽然从语法上讲,嵌套的签名和加密操作 JWTs 可以按任何顺序应用,如果签名和加密都是 必要的,通常生产者应该在消息上签名,然后 加密结果(从而加密签名)。这可以防止 剥离签名的攻击,只留下一个加密的 消息,以及为签名者提供隐私。此外, 加密文本上的签名在许多情况下被认为是无效的 司法管辖区。

【讨论】:

我明白了——我的印象是 JWT 通常用于身份验证。如果我想加密整个段落并将其作为 JSON 有效负载发送,JWT 仍然是执行此操作的合适方法吗? 最好先签名后加密(请参阅顺序很重要。您应该先签名,然后加密。有关详细信息,请参阅tools.ietf.org/html/rfc7519#section-11.2) @FlorentMorselli 这就是我要找的报价 :)

以上是关于结合 JWE 和 JWS的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 JWS + JWE 与具有身份验证加密的 JWE

在 Spring Boot 中使用 Keycloak 实现 JWT、JWE 和 JWS(签名 JWT)

一篇文章带你分清楚JWT,JWS与JWE

web服务与javaweb结合

JWT在python中加密有效载荷? (JWE)

编码实战2022年还在用jjwt操作jwt?,推荐你使用nimbus-jose-jwt,爽到飞起~