5

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

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

4

1 回答 1

9

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

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

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

智威汤逊、JWS 和 JWE
图像是从这个页面提取的。


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

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

使用嵌套签名和/或加密的 JWT。在嵌套 JWT 中,JWT 分别用作封闭 JWS 或 JWE 结构的有效负载或明文值。

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

11.2. 签名和加密顺序

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

于 2018-10-11T09:39:30.790 回答