繁體中文(香港)
  • security
  • encryption
  • jws
  • asymmetric
  • ec
  • rsa
  • public key
  • private key
  • token
  • signing jwt

JWT 簽名算法概覽

探索 JSON Web Token (JWT) 簽名算法,涵蓋兩種最流行的非對稱加密方法:RSA 和 EC。了解每種算法的優缺點以及 Logto 如何使用它們來保護你的 JWT 標記。

Charles
Charles
Developer

什麼是 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 Object Signing and Encryption) 標頭

標頭通常由以下部分組成:

  • typ:令牌的類型,為 JWT。
  • alg:所使用的簽名算法,例如 RS256 或 ES384。
  • kid:一個提示,指示使用了哪個密鑰來保護 JWT。

有效負載

有效負載包含聲明,即關於實體(通常是用戶)和附加數據的陳述。例如,一個 ID 標記可能包含以下聲明:

簽名

簽名用於驗證 JWT 的發送者不是冒名者,並且消息未被篡改。在使用簽名的 JWT 時,你必須驗證令牌簽名以確保令牌的完整性。查看這個指南了解如何驗證 JWT 令牌以保護你的 API

什麼是非對稱加密?

非對稱加密,也稱為公鑰加密,是計算機安全和加密學中的一個基礎概念,它涉及使用一對獨特的相關密鑰:公鑰和私鑰。

公鑰和私鑰的定義

  • 公鑰:公鑰,顧名思義,被設計為公開共享。在 JWT 和類似系統中,公鑰用於簽名驗證,而不是加密。當數據用私鑰簽名且接收方擁有相應的公鑰時,他們可以驗證數據確實是由私鑰持有者簽名的,並且在傳輸過程中未被篡改。
  • 私鑰:相對而言,私鑰是嚴密保護的機密,應僅由其合法擁有者知曉。在 JWT 中,私鑰用於創建數位簽名,可以由任何擁有相應公鑰的人驗證。

這種獨特的密鑰安排構成了數據安全傳輸和用戶身份驗證機制的基礎。 查看這篇文章以獲取更多詳情。

流行的 JWT 簽名密鑰算法:RSA 與 EC

RSA (Rivest-Shamir-Adelman)EC (Elliptic Curve) 算法是非對稱加密中使用最為普遍的兩種“數學函數”。

作為開發者,在處理身份驗證框架及其 JWT 時,通常需要在這些算法之間做出選擇。但是,你會選擇哪一種?讓我們深入探討每一個的優缺點。

RSA 簽名算法(例如 RSASHA256)

  • 優點
    1. 廣泛支持:RSA 在各種平台和庫中廣泛支持,確保在各種環境中具有兼容性。
    2. 長期可靠性:RSA 具有長時間的可靠安全性歷史,其算法對加密學界來說是透明的。
  • 缺點
    1. 密鑰大小:RSA 密鑰在達到與 EC 相同的安全水平時較長,導致更大的標記大小和增加的計算開銷。
    2. 性能:RSA 操作通常比 EC 慢,這在高流量應用中可能是一個缺點。

EC 簽名算法(例如 ECDSASHA384)

  • 優點
    1. 效率:EC 與 RSA 相比具有更好的性能,適用於資源受限或高流量負載的應用程序。
    2. 緊湊的密鑰大小:EC 密鑰比 RSA 密鑰短得多,同時提供等效的安全水平。這導致減少了存儲和網絡需求以及更快的加密操作。
    3. 安全性:EC 以其強大的安全性而聞名,由於橢圓曲線後面的複雜數學,使其能抵禦暴力攻擊。
  • 缺點
    1. 限制支持:一些較舊的系統和庫可能缺乏全面的 EC 支持,可能導致兼容性問題。例如 Cloudflare Zero Trust 不支持 EC 簽名令牌。
    2. 複雜性:由於數學複雜性,實現 EC 可能更為複雜。

Logto 的 JWT 簽名算法選擇

Logto 一直致力於提供最高標準的安全性和靈活性,並傾向於在其核心使用最現代和高效的解決方案。EC 提供了強大的安全性和計算效率的理想組合,非常適合現代身份驗證和授權需求。因此,自產品早期階段以來,EC 一直是我們的默認簽名密鑰算法。

然而,我們也認識到 EC 簽名的令牌與某些第三方系統和框架不兼容,特別是舊系統。因此,我們引入了一個功能來通過旋轉你的私鑰來更改你的 JWT 簽名密鑰算法。

Logto Console UI screenshot for rotating your private keys

所以如果你遇到由於不支持的 JWT 簽名算法而無法連接到第三方平台的問題,現在是時候旋轉並為你的新私鑰選擇 RSA 算法了。

此功能還有助於緩解與長期密鑰暴露或妥協相關的風險。定期旋轉私鑰應該是任何組織安全策略中的一個基本做法,並且 Logto 強烈建議這樣做。

回顧:常用的 JWT 簽名算法:RSA 和 EC

簽名 JWT 標記可確保所傳輸數據的完整性和真實性。簽名算法的選擇可能對你的應用程序的安全性、性能和兼容性產生重大影響。

RSA 和 EC 算法都是加密學中必要且流行的算法。理解這些算法的優缺點及其背後的數學原理,幫助更好地為你的應用程序作出使用驗證和授權框架的決策。

Logto 將繼續探索並為你提供更安全和強大的用戶體驗。