我们希望将代币用于某些服务(我们拥有和开发),并且我们正在考虑实施 JWE 或 Paseto。
令牌和有效负载应加密(一些字符串或 json)。
使用 JWE 或其他东西而不是仅仅使用某种算法加密有效负载并将其用作令牌有什么好处?
我们希望将代币用于某些服务(我们拥有和开发),并且我们正在考虑实施 JWE 或 Paseto。
令牌和有效负载应加密(一些字符串或 json)。
使用 JWE 或其他东西而不是仅仅使用某种算法加密有效负载并将其用作令牌有什么好处?
为什么 JWE 比仅使用 RSA/HMAC 加密内容/有效负载更好?
HMAC 将是“签名”(在技术上我不知道),但它不是加密,它确保完整性和真实性。JOSE 上下文中的 RSA 可以是公钥加密密钥管理(使用“包装”随机内容加密密钥对接收者进行加密)以实现机密性,或者是数字签名(完整性和真实性,但不是机密性)。
使用这两种协议中的任何一种都可以超越准系统加密,它可以确保您最终不会得到未经身份验证的加密。JOSE 和 PASETO 始终确保他们使用的密码(或密码组合)的完整性。
您可以在 PASETO 和 JOSE 上找到很多两极分化的意见,最终归结为您对服务的偏好。
您可以使用 JOSE 实现 PASETO 可以做的所有事情。PASETO 有使用 RSASSA-PSS、ECDSA 和 EdDSA 的公共令牌(签名)——JOSE 也有。PASETO 有使用 AES 和 XChaCha 的本地(对称加密)令牌 - JOSE 也有(前者总是,后者尚未注册并得到广泛支持)。
OTOH,您无法实现 JOSE 对 PASETO 所做的一切。JOSE 支持使用收件人的公钥对收件人进行加密。PASETO 本身并不 - 这就是 PASERK,一个独立的 - 相当新的协议,非常缺乏库支持,来自 PASETO 的作者。
听起来您想要做的是对称加密。使用这两种协议中的任何一种,归结为您是否想要加密敏捷性(JOSE)(PASETO)以及是否有现有的库/模块可用于您打算使用的语言。
我已经在他们(几乎)完整的 javascript 运行时规范中实现了JOSE和PASETO 。
编辑覆盖原始问题中的评论:
我们只是看不到使用 JWE 的任何好处
好处是保密。任何人都可以解码和读取的签名有效负载。只有预期收件人可以加密的。您应该决定是否只想要真实和完整性保护的令牌(即 JWS 或公共 PASETO)或机密令牌(即 JWE 或本地 PASETO)。