JWT 签名算法概述
探索 JSON Web Token (JWT) 的签名算法,涵盖两种最流行的非对称加密方法:RSA 和 EC。了解每种算法的优缺点以及 Logto 如何使用它们来保护你的 JWT 令牌。
什么是 JWT?
JSON Web Token (JWT) 是一种紧凑、URL 安全的方式,用于安全地表示声明。其结构包括一个头部、负载和签名。
如今,JWT 已被广泛采用,在 OAuth 2.0 和 OIDC 中发挥着关键作用。但是授权服务器如何验证和信任来自客户端的 JWT 呢?令牌是如何由发行者颁发和签名的?在这篇博客文章中,我们将讨论非对称加密,并深入探讨 Logto 在其 JWT 令牌中使用的不同签名算法的优缺点。
JWT 结构
Logto 为所有的 JWT 令牌签名,包括 ID 令牌和访问令牌。签名的 JWT 也称为 JWS (JSON Web Signature)。签名的 JWT 结构由三部分组成:头部、负载和签名,并用点(.
)分隔。
JOSE(JSON 对象签名和加密)头部
头部通常包括以下部分:
负载
负载包含声明,即关于某实体(通常是用户)的陈述和附加数据。例如,一个 ID 令牌可能包含以下声明:
签名
签名用于验证 JWT 的发送者不是冒充者,并且消息没有被篡改。使用签名的 JWT 时,必须验证令牌签名以确保令牌的完整性。查看这篇指南了解 如何验证 JWT 令牌以保护你的 API。
什么是非对称加密?
非对称加密,也称为公钥加密,是计算机安全和加密学的基础概念,涉及到一对独特的相关密钥:公钥和私钥。
公钥和私钥的定义
- 公钥:顾名思义,公钥是设计用于开放共享的。在 JWT 及类似系统中,公钥用于签名验证,而不是加密。当数据使用私钥签名且接收者拥有相应的公钥,他们可以验证数据确实由私钥持有者签名,并在传输过程中没有被篡改。
- 私钥:相反,私钥是一个严格保守的秘密,只应该由其合法所有者知晓。在 JWT 的上下文中,私钥用于创建数字签名,可由任何具有相应公钥访问权限的人验证。
这种独特的密钥安排构成了数字世界中安全数据传输和用户认证机制的基础。 查看 这篇博客文章 获取更多细节。
流行的 JWT 签名密钥算法:RSA 与 EC
RSA (Rivest-Shamir-Adelman) 和 EC (椭圆曲线) 算法是非对称加密中最常用的两种“数学函数”。
作为开发者,在处理认证框架及其 JWT 时,我们经常需要在这些算法之间做出选择。但是你会选择哪个呢?让我们深入探讨每种算法的优缺点。
RSA 签名算法(例如 RSASHA256)
- 优点:
- 广泛支持:RSA 在各种平台和库中得到了广泛支持,确保了在广泛环境中的兼容性。
- 长期可靠:RSA 拥有长期可靠的安全性,其算法被密码学界广泛理解。
- 缺点:
- 密钥长度:与 EC 相比,RSA 密钥长度更长,以实现相同的安全水平,导致令牌更大和计算开销增加。
- 性能:与 EC 相比,RSA 操作通常较慢,这在高流量应用中可能是一个缺点。
EC 签名算法(例如 ECDSASHA384)
- 优点:
- 效率:EC 的性能优于 RSA,非常适合资源受限或高流量负载的应用。
- 密钥紧凑:EC 密钥比其 RSA 对应密钥要短得多,并提供相当的安全级别。这减少了存储和网络需求,加速了加密操作。
- 安全性:EC 以其坚固的安全性而著称,由于椭圆曲线背后的复杂数学,使其能抵御暴力攻击。
- 缺点:
- 支持有限:一些旧系统和库可能缺乏全面的 EC 支持,可能导致兼容性问题。例如,Cloudflare Zero Trust 不支持 EC 签名的令牌。
- 复杂性:由于所涉及的数学复杂性,实现 EC 可能更加复杂。
Logto 的 JWT 签名算法选择
Logto 一直致力于最高标准的安全性和灵活性,倾向于在其核心使用最现代和高性能的解决方案。EC 提供了坚固的安全性和计算效率的完美结合,使其非常适合现代认证和授权需求。因此,EC 一直是我们产品早期阶段以来的默认签名密钥算法。
然而,我们也意识到,EC 签名的令牌不兼容一些第三方系统和框架,尤其是遗留系统。因此,我们还引入了通过旋转私钥来更改 JWT 签名密钥算法的功能。
所以,如果你由于不支持的 JWT 签名算法而无法连接到第三方平台,现在是时候旋转并为你的新私钥选择 RSA 算法了。
这一特性还帮助缓解了长期密钥曝光或泄露的风险。定期旋转私钥应该是任何组织的安全策略的基本实践,这也是 Logto 强烈推荐的。
回顾:常用的 JWT 签名算法:RSA 和 EC
签名 JWT 令牌可以确保传 输数据的完整性和真实性。签名算法的选择会对应用程序的安全性、性能和兼容性产生重大影响。
RSA 和 EC 算法都是密码学中的重要和热门算法。理解这些算法的优缺点和其背后的数学原理,有助于你为应用程序选择更好的认证和授权框架。
Logto 将继续为你探索和提供更安全和强大的用户体验。