JWT 中 EC 和 RSA 签名算法简介
了解非对称加密的基本知识,并了解两种流行的 JWT 签名密钥算法 - EC 和 RSA 的优缺点。
背景
在数字世界中,增强数据传输安全性的追求始终不变并不断发展。如今,JSON Web Tokens (JWT) 已被广泛采用,并在 OAuth 2.0 和 OIDC 中起着至关重要的作用。但是授权服务器是如何验证和信任从客户端发送的 JWT 令牌的呢?令牌是如何由发行者发布和签名的?在这篇博文中,我们将讨论非对称加密,并深入探讨 Logto 在其 JWT 令牌中使用的不同签名算法的优缺点。
了解非对称加密
非对称加密,也称为公钥加密,是计算机安全和加密中的基础概念,涉及使用一对独特的相关密钥:公钥和私钥。这些密钥的角色乍看起来可能有些违反直觉,但它们对于数据安全至关重要。
- 公钥:顾名思义,公钥旨在开放共享。在 JWT 和类似系统的上下文中,公钥用于签名验证,而不是加密。当数据由私钥签名并且接收者拥有相应的公钥时,他们可以验证数据确实是由私钥持有者签名且在传输过程中没有被篡改。然而,在传统的非对称加密用法中,如 HTTPS,公钥用于加密,加密后的数据只能由持有配对私钥的目标服务器解密。
- 私钥:相反,私钥是一个严格保密的秘密,应该只有其合法所有者知道。在 JWT 的上下文中,私钥用于创建数字签名,任何有访问相应公钥权限的人都可以验证。此外,在更传统的非对称加密上下文中,私钥确实用于解密,允许访问已使用公钥安全加密的数据。
这种独特的密钥排列方式,其中公钥验证或加密数据,而私钥签名或解密数据,构成了数字世界中安全数据传输和用户认证机制的基础。 查看这篇博文获取更多详细信息。
非对称加密算法:RSA 对比 EC
RSA (Rivest-Shamir-Adelman) 和 EC (椭圆曲线) 算法是非对称加密中两个最常用的“数学函数”。作为开发者,当处理身份认证框架和它的 JWT 时,我们通常会面临在这些算法之间的选择。但你会选择哪一个呢?让我们深入探讨每个算法的优缺点。
RSA 签名算法
- 优点:
- 广泛支持:RSA 在各个平台和库中得到了广泛支持,确保了在各种环境中的兼容性。
- 长期记录:RSA 有着可靠安全的悠久历史,其算法被加密界很好地理解。
- 缺点:
- 密钥大小:RSA 密钥较长,以达到与 EC 相同的安全水平,这导致令牌大小增加并增加计算开销。
- 性能:RSA 操作比 EC 慢,这在高流量应用中可能是个缺点。
EC 签名算法
- 优点:
- 效率:EC 具有优于 RSA 的性能,使其成为资源受限或高流量负载应用程序的理想选择。
- 紧凑的密钥大小:EC 密钥比 RSA 的对等密钥短得多,同时提供等同的安全级别。这导致减少的存储和网络需求以及加快的加密操作。
- 安全性:EC 以其 强大的安全性受到高度赞扬,由复杂的椭圆曲线数学强化,使其能够抵御暴力攻击。
- 缺点:
- 支持有限:一些较旧的系统和库可能缺乏全面的 EC 支持,可能导致兼容性问题。例如,Cloudflare 零信任不支持 EC 签名的令牌。
- 复杂性:由于涉及数学的复杂性,实现 EC 可能更加复杂。
Logto 的 JWT 签名算法选择
Logto 一直致力于最高标准的安全性和灵活性,并趋向于在其核心使用最现代和高性能的解决方案。EC 提供了强大安全性和计算效率的绝佳结合,使其成为现代身份认证和授权需求的理想选择。因此,从我们产品的早期阶段起,EC 一直是我们的默认签名密钥算法。
然而,我们也收到了来自用户的大量反馈,指出 EC 签名的令牌与一些第三方系统和框架,尤其是旧系统不兼容。因此,我们一直致力于提供对 RSA 算法的支持,确保 Logto 保持适应性和灵活性,以满足你所有的身份认证需求。
在即将发布的版本中,Logto Cloud 将引入“私钥轮换”功能,允许你在租户中创建新的 OIDC 私钥和 cookie 密钥。(私钥用于签署你的 JWT 令牌,cookie 密钥用于签署你的 cookie。)
此功能有助于减轻长期密钥曝光或妥协相关的风险。定期轮换私钥应该是任何组织安全策略中的基本实践,并且 Logto 强烈推荐这样做。
此外,在轮换你的 JWT 签名密钥时,我们还将提供从 EC 和 RSA 中选择签名密钥算法的选项。因此,如果你遇到由于不支持的 JWT 签名算法而无法连接到第三 方平台的问题,现在是时候轮换并为你的新私钥选择 RSA 算法了。
由于此设置位于租户设置页面中,UI 将不提供给 OSS 用户。但别担心,你仍然可以通过升级到最新版本并在 Logto 根目录中执行以下 CLI 命令来实现这一点。
简而言之
非对称加密有助于保护你的身份认证系统中的 JWT 令牌。EC 和 RSA 算法都是加密学中必不可少且流行的算法。理解这些算法的优缺点和背后的数学原理有助于为你的应用程序与身份认证和授权框架协调工作做出更好的决策。
Logto 将继续探索,为你提供更安全和更稳定的用户体验。