首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用身份验证加密的嵌套JWS + JWE与JWE

使用身份验证加密的嵌套JWS + JWE与JWE
EN

Stack Overflow用户
提问于 2017-10-26 15:29:39
回答 1查看 1.3K关注 0票数 1

问题

我希望在我的服务器(受信任的环境)上对某些信息(“令牌”)进行签名和加密(实际上是混淆),并将密码文本发送到客户端计算机(不完全可信的环境),由我的客户端软件读取和验证。这种类型的环境允许我在服务器上拥有一个用于非对称签名的私钥,但我不能在客户端“隐藏”用于对称签名的密钥。

替代品

我选择使用JWT作为标准,使用Nimbus JOSE+JWT库作为签名和加密的实现。尼姆布斯库为签名+加密提供了两个选项:将JWS嵌套到JWE或使用JWE与经过身份验证的加密算法(A128CBC_HS256、A192CBC_HS384或A256CBC_HS512)。Nimbus算法选择指南声明:

JOSE中的加密总是经过身份验证的,这意味着密文的完整性受到保护,不会被篡改。因此,通过身份验证的加密使得在JSON加密( JWE )中嵌套HMAC JWT是多余的;只使用JWE加密即可。

但是,AxxxCBC_HSxxx加密方法只使用对称密钥。此外,用RSA JWE算法代替直接JWE算法也没有帮助,因为滥用者可以自己生成CEK (由加密密钥和HMAC密钥组成),并使用公钥对其进行加密。

问题

尽管引用了嵌套JWT的冗余性,但我的结论是,就我的情况而言,JWE+JWS嵌套是唯一可行的方法。我说的对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 08:14:05

澄清

每个内容加密算法(AxxxGCMAxxxCBC_HSxxx)都使用对称密钥(CEK)。该密钥由密钥加密算法及其密钥管理模式(随机密钥、密钥协商、直接密钥.)决定。

你是对的,与AxxxGCM算法相反,AxxxCBC算法不是认证加密算法。但是,RFC7516第5.1节第15项。 (JWE规范)引入了一个标记,允许对加密文本进行身份验证并保护受保护的头部的完整性(这就是为什么AxxxCBC算法与HSxxx一起使用的原因)。

RFC7518 5.1节中的表证实了这一点。详情见下一节。

在任何情况下,您都需要2种JWE计算算法:

  • 密钥加密算法:您提到您有一个非对称密钥,因此我想您将根据您的密钥类型选择一个RSAECDH-ES算法。
  • 内容加密密钥:AxxxGCMAxxxCBC_HSxxx算法。使用JWE规范,两者都提供了经过身份验证的加密。就我个人而言,我更喜欢AxxxGCM算法,因为它们在我的环境中更快。

回答

您表示要签名和加密,但无法在客户端隐藏秘密密钥,因此签名将无法得到保证。

如果您只加密(仅限JWE),则您的服务器将无法验证令牌的颁发者。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46958289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档