1

我需要在我的软件的多个实例之间传递 JSON 编码的签名(有时还额外加密)对象。这里明显的选择是 JWT。

然而,JWT 显然允许签名和加密令牌(JWS 和 JWE)或将 JWS 嵌套到 JWE(嵌套 JWE)中。

虽然这两种方法对我来说似乎都是合理的,但有没有一种“标准”的方式来做到这一点?我还没有找到这方面的任何细节。

4

1 回答 1

3

简短的回答

当签名和加密都需要时,您应该首先对消息进行签名,然后对结果进行加密。也就是说,将 JWS 嵌套到 JWE 中是一种有效的方法。

长答案

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

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

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

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

JWT 显然允许签名和加密令牌(JWS 和 JWE)或将 JWS 嵌套到 JWE(嵌套 JWE)中。

虽然这两种方法对我来说似乎都是合理的,但有没有一种“标准”的方式来做到这一点?我还没有找到这方面的任何细节。

嵌套 JWT的概念在RFC 7519中定义:

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

关于操作的顺序,建议先对消息进行签名,然后对结果进行加密,如同一文档中所述:

11.2. 签名和加密顺序

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

于 2019-01-15T14:45:38.153 回答