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

JWT 中 EC 和 RSA 簽名算法簡介

學習非對稱加密的基本知識,並了解兩種流行的 JWT 簽名金鑰算法 - EC 和 RSA 的優缺點。

Charles
Charles
Developer

背景

在數碼世界中,加強數據傳輸安全性的追求一直保持不變且不斷演變。如今,JSON Web Tokens (JWT) 被廣泛採用,在 OAuth 2.0 和 OIDC 中發揮著至關重要的作用。但授權伺服器如何驗證和信任從客戶端發送的 JWT 令牌呢?令牌如何由發行者發出和簽名?在本文中,我們將討論非對稱加密,並深入探討 Logto 在其 JWT 令牌中使用的不同簽名算法的優缺點。

了解非對稱加密

非對稱加密,也稱為公鑰加密,是計算機安全和加密學中的基礎概念,涉及使用一組獨特的相關金鑰:公鑰和私鑰。這些金鑰的角色乍看之下似乎是反直覺的,但它們對於數據安全至關重要。

  • 公鑰:正如其名稱所示,公鑰是設計用於公開共享的。在 JWT 和類似系統的環境中,公鑰用於簽名驗證,而不是加密。當數據使用私鑰簽名且接收者擁有相應的公鑰時,他們可以驗證數據確實是由私鑰持有者簽名的,並且在傳輸過程中未被篡改。然而,在傳統的非對稱加密使用中,例如 HTTPS,公鑰用於加密,只有持有配對私鑰的目標伺服器才能解密加密數據。
  • 私鑰:相反,私鑰是應當僅由其合法擁有者知曉的重要秘密。在 JWT 的環境中,私鑰用於創建數字簽名,任何擁有相應公鑰的人都可以驗證此簽名。此外,在更傳統的非對稱加密環境中,私鑰確實用於解密,允許訪問已使用公鑰安全加密的數據。

這種獨特的金鑰排列方式,即公鑰驗證或加密數據,私鑰簽名或解密,構成了數碼世界中安全數據傳輸和用戶身份驗證機制的基礎。查看這篇文章以獲取更多詳情。

非對稱加密算法:RSA vs EC

RSA (Rivest-Shamir-Adelman)EC (橢圓曲線)算法是非對稱加密中最常用的兩種“數學函數”。作為開發人員,我們在處理身份驗證框架及其 JWT 時經常面臨在這些算法之間進行選擇的情況。但是哪一個會是你的選擇呢?讓我們深入探討每個的優缺點。

RSA 簽名算法

  • 優點:
    1. 廣泛支持:RSA 在各種平台和庫中得到廣泛支持,確保了在廣泛的環境中的兼容性。
    2. 長期可靠性:RSA 擁有可靠安全性的悠久歷史,其算法已被加密界充分理解。
  • 缺點:
    1. 金鑰大小:為了達到與 EC 相同的安全水準,RSA 金鑰需要更長,導致令牌大小更大且計算開銷增加。
    2. 性能:RSA 操作通常比 EC 慢,這在高流量應用中可能是個缺點。

EC 簽名算法

  • 優點:
    1. 效率:EC 提供了比 RSA 更優的性能,非常適合資源有限或高流量負載的應用。
    2. 紧凑金鑰大小:EC 金鑰比其 RSA 對應物短得多,同時提供等效的安全級別。這減少了存儲和網絡需求,加快了加密操作。
    3. 安全性:EC 因其強大的安全性而備受推崇,由橢圓曲線背後的複雜數學強化,能抵禦暴力攻擊。
  • 缺點:
    1. 支援受限:某些較舊的系統和庫可能缺乏全面的 EC 支援,可能導致兼容性問題。例如 Cloudflare Zero Trust 不支援 EC 簽名的令牌。
    2. 複雜性:由於涉及的數學複雜性,實現 EC 可能更為複雜。

Logto 的 JWT 簽名算法選擇

Logto 向來致力於最高標準的安全性和靈活性,並趨向於在其核心使用最現代且具有性能的解決方案。EC 提供了強大的安全性和計算效率的優勝組合,使其成為現代身份驗證和授權需求的理想選擇。因此,EC 自我們產品的早期階段起就是我們的預設簽名金鑰算法。

但是,我們也收到了許多用戶的反饋,指出 EC 簽名的令牌與某些第三方系統和框架(尤其是舊有的)不兼容。因此,我們一直在努力為 RSA 算法提供支持,以確保 Logto 在所有身份驗證需求中保持靈活多變。

在即將發布的版本中,Logto Cloud 將引入“私鑰輪換”功能,允許你在租戶中創建新 OIDC 私鑰和 cookie 金鑰。(私鑰用於簽名你的 JWT 令牌,cookie 金鑰用於簽名你的 cookies。)

旋轉 OIDC 金鑰的控制台 UI 截圖

此功能有助於降低長期金鑰暴露或妥協的風險。定期輪換私鑰應該是任何組織安全策略中的基本實踐,也是 Logto 強烈建議的。

此外,在輪換 JWT 簽名金鑰時,我們還將提供從 EC 和 RSA 中選擇簽名金鑰算法的選項。所以,如果由於不支持的 JWT 簽名算法而無法連接到第三方平台,現在是時候輪換並為你的新私鑰選擇 RSA 算法了。

由於此設置位於租戶設置頁面中,該 UI 將不對 OSS 用戶可用。但不用擔心,你仍然可以通過升級到最新版本並在 Logto 根目錄中執行以下 CLI 命令來實現這一點。

總之

非對稱加密有助於在你的身份驗證系統中保護你的 JWT 令牌。EC 和 RSA 算法都是加密學中不可或缺的流行算法。了解這些算法的優缺點和數學原理有助於為你的應用程序在使用身份驗證和授權框架時做出更好的決策。

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