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