问题
我想在我的服务器(受信任的环境)上签名和加密(有效地混淆)一些信息(“令牌”)并将密文发送到客户端机器(不太受信任的环境)以由我的客户端读取和验证软件。这种类型的环境允许我在服务器上拥有一个用于非对称签名的私钥,但我不能在客户端“隐藏”一个用于对称签名的密钥。
备择方案
我选择使用 JWT 作为标准,使用Nimbus JOSE+JWT 库作为签名和加密的实现。Nimbus库为签名 + 加密提供了两个选项:将 JWS 嵌套到 JWE 或将 JWE 与经过身份验证的加密算法(A128CBC_HS256、A192CBC_HS384 或 A256CBC_HS512)一起使用。Nimbus 算法选择指南指出:
JOSE 中的加密始终经过身份验证,这意味着密文的完整性受到保护,不会被篡改。因此,经过身份验证的加密使得将 HMAC JWT 嵌套在 JSON Web 加密 (JWE) 中是多余的;仅使用 JWE 加密。
但是,AxxxCBC_HSxxx 加密方法仅使用对称密钥。此外,用 RSA JWE 算法替换直接 JWE 算法应该无济于事,因为滥用者可以自己生成 CEK(由加密密钥和 HMAC 密钥组成)并使用公钥对其进行加密。
问题
尽管引用了嵌套 JWT 的冗余,但我得出的结论是,就我而言,JWE+JWS 嵌套是唯一可行的方法。我对吗?