繁體中文(台灣)
  • 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 vs EC

RSA (Rivest-Shamir-Adelman)EC (Elliptic Curve) 演算法是在非對稱加密中最常用的“數學函數”。

作為開發人員,當處理身份驗證框架及其 JWT 時,我們經常面臨在這些演算法之間進行選擇。但你會選擇哪一個呢?讓我們深入探討每個的優缺點。

RSA 簽名演算法(例如 RSASHA256)

  • 優點
    1. 廣泛支持:RSA 在各種平台和庫中得到廣泛支持,確保在廣泛的環境中具有兼容性。
    2. 長期歷史:RSA 具有長期可靠的安全記錄,其演算法也被密碼學界所理解。
  • 缺點
    1. 密鑰大小:RSA 密鑰相較於 EC,需要更長才能達到同等的安全級別,導致令牌尺寸更大並增加計算開銷。
    2. 性能:RSA 操作相較於 EC 較慢,可能在高流量的應用中成為缺點。

EC 簽名演算法(例如 ECDSASHA384)

  • 優點
    1. 效率:與 RSA 相比,EC 擁有卓越的性能,使其成為資源受限或高負載應用的理想選擇。
    2. 精簡的密鑰大小:EC 密鑰相比 RSA 更短,卻提供同等的安全級別。這減少了存儲和網絡要求,並加速了密碼學操作。
    3. 安全性:EC 因其強大的安全性而備受推崇,由於橢圓曲線複雜的數學方法,使其對抗暴力破解攻擊更具抵抗力。
  • 缺點
    1. 限定支持:一些舊系統和庫可能缺乏全面的 EC 支持,可能會導致兼容性問題。例如,Cloudflare Zero Trust 不支持 EC 簽名的令牌。
    2. 複雜性:由於涉及數學的複雜性,實施 EC 可能更加複雜。

Logto 對 JWT 簽名演算法的選擇

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

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

Logto Console UI 旋轉私鑰的截圖

因此,如果由於不支持的 JWT 簽名演算法而無法連接到第三方平台,那麼現在是時候旋轉並選擇新的 RSA 演算法的私鑰了。

這一功能也有助於降低長期密鑰暴露或損壞的風險。定期旋轉私鑰應該是任何組織安全策略中的基本實踐,也得到了 Logto 的高度推薦。

總結:常用的 JWT 簽名演算法:RSA 和 EC

簽名 JWT 令牌確保了傳輸數據的完整性和真實性。簽名演算法的選擇對應用的安全性、性能和兼容性有著顯著影響。

RSA 和 EC 演算法在密碼學中都是重要且流行的演算法。理解這些演算法的優缺點和數學原理有助於為你的應用程序與認證和授權框架做出更好的決定。

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