公開密鑰、私密密鑰與非對稱加密技術
在本文中,我們介紹了公開密鑰、私密密鑰的概念,以及非對稱加密的原理。我們比較了它們與對稱加密的優缺點以及使用場景的不同。
你可能在很多場合聽過私密密鑰和公開密鑰,但你真的知道它們是什麼嗎?
非對稱加密 vs 對稱加密
私密密鑰和公開密鑰是非對稱加密(又稱為公開密鑰加密,PKC)的概念。
非對稱加密是指使用兩個不同的密鑰(私密密鑰 + 公開密鑰)來加密或簽名數據的方法,它對應於需要解密或簽名驗證的情況。公開密鑰是任何人可見的,而私密密鑰只對密鑰擁有者可用。你可以從它們的名稱中輕易看出。
同樣地,你可能猜到,對稱加密是指使用相同密鑰加密和解密數據的方法。
因此,我們使用簡單的註解來展示對稱和非對稱加密的加密/解密過程。
需要注意的是,對稱和非對稱加密算法中的加密/解密函數是不同的,並且通常使用不同的算法。常見的對稱加密算法包括 DES、AES、RC2、RC4 等,而常見的非對稱加密算法包括 RSA 和 EC。
Logto 使用 EC 算法來進行數據傳輸加密和解密,因為它比 RSA 更有效和安全,你可以閱讀這篇文章以了解更多詳情。Logto 將在下個版本中支持 RSA,以更好地與一些遺留系統兼容。
為什麼使用非對稱加密?
非對稱加密解決了對稱加密中的密鑰分發問題。
由於對稱加密使用相同的密鑰,在不安全的網絡連接中分發密鑰可能會有洩露密鑰給惡意第三方的風險。惡意第三方可以利用竊取的密鑰訪問任何用該密鑰加密的信息,這會帶來重大的安全風險。
非對稱加密的兩個常見用例
發送加密數據
發送者可以使用接收者的公開密鑰加密信息,而接收者則使用其私密密鑰解密信息。
由於公開密鑰理論上對許多人可用,在理想情況下,接收者可以從許多發送者那裡接收加密信息。此外,多個發送者不能知曉其他發送者向接收者發送的信息種類,因為只有接收者(私密密鑰的持有者)可解密和恢復信息。
公開密鑰和私密密鑰通常同時生成。我們上面提到的是在一方生成私密密鑰和公開密鑰,然後向其用戶分發公開密鑰。如果需要確保雙方之間的安全通信,那麼雙方都需要生成各自的私密密鑰和公開密鑰,然後交換各自的公開密鑰。這樣,雙方都有對方的公開密鑰,可以使用自己的私密密鑰和對方的公開密鑰進行加密和解密。
使用簽名來確保數據完整性
在非對稱加密中,持有私密密鑰的一方可以對其發送的數據進行簽名。隨後,擁有公開密鑰的接收者可以在接收數據後驗證數據與簽名的一致性,以確保數據在傳輸過程中沒有被篡改。
使用我們在前一節定義的註釋,簽名和簽名驗證可以表示如下:
數字簽名的驗證證明生成簽名的一方知道相應的私密密鑰。
你可能覺得上面提到的這兩個用例非常熟悉。在日常生活中,幾乎所有具有服務器-客戶端架構的服務都使用非對稱加密來確保數據安全。
作為快速增長的用戶身份框架,Logto 也廣泛使用 PKC 來確保用戶數據的安全。用戶完成登錄過程後,Logto 會向用戶發放訪問令牌,以授予他們訪問所需資源的特定權限。Logto 發布的公開密鑰用於驗證訪問令牌是否確實由 Logto 發行,並且沒有被惡意攻擊者篡改。
非對稱加密的缺點
一般而言,對稱加密的密鑰長度為 128 或 256 位,而非對稱加密的密鑰長度可以達到 4,096 位。這是因為私密密鑰和公開密鑰在數學上是相關的並且是唯一的密鑰對。理論上,知道公開密鑰可以計算出私密密鑰的值,但由於所涉及算法的複雜性,通常需要相當長的時間。為了使"破解"私密密鑰的任務變得"不可能",使用更長的密鑰長度是一個直接的方法。
重點
非對稱加密相比對稱加密在計算時消耗更多的計算資源和時間,這在之前的討論中已提到。在通信頻繁的應用中,大量使用非對稱加密可能會影響性能和用戶體驗。
在商業場景中,對稱加密和非對稱加密通常一起使用,以平衡性能和數據安全。在構建你自己的服務時,你可以考慮 各個階段的數據安全需求,並相應地選擇合適的加密算法。