1. 程式人生 > 其它 >加密與數字證書

加密與數字證書

加密與數字證書

非對稱加密

非對稱加密採用兩個金鑰(公鑰和私鑰)。在通訊時,私鑰僅由解密者儲存,公鑰由任何一個想與解密者通訊的傳送者(加密者)所知。公鑰加密的資料只能私鑰解密,同理,私鑰簽名的資料只能公鑰驗籤。這裡的簽名、驗籤實際上也是加密、解密操作,因為與公鑰加密的用途不同,所以叫做簽名,具體可以看加密和簽名的區別和聯絡 。非對稱加密的典型演算法有 RSA 演算法。

缺點:非對稱加密設計了較為複雜的數學演算法來生成金鑰,在實際通訊過程中,計算的代價較高,效率太低。

對稱加密

通訊雙方共享唯一金鑰 k,加解密演算法已知,加密方利用金鑰 k 加密,解密方利用金鑰 k 解密,保密性依賴於金鑰 k 的保密性。對稱加密的金鑰生成代價比公私鑰對的生成代價低得多。常用的堆成加密演算法有 AES,DES 等

對稱加密和非對稱加密的使用

雖然非對稱加密的效率低,但實際中一般兩者是相互配合使用。因為對稱加密的保密性完全依賴於金鑰的保密性。在雙方通訊之前,需要商量一個用於對稱加密的金鑰。我們知道網路通訊的通道是不安全的,傳輸報文對任何人是可見的,金鑰的交換肯定不能直接在網路通道中傳輸。因此,使用非對稱加密,對對稱加密的金鑰進行加密,保護該金鑰不在網路通道中被竊聽。這樣,通訊雙方只需要一次非對稱加密,交換對稱加密的金鑰,在之後的資訊通訊中,使用絕對安全的金鑰,對資訊進行對稱加密,即可保證傳輸訊息的保密性。

公鑰傳輸時的安全隱患

上述傳輸過程中進行非對稱加密時有一個前提,那就是要獲得正確的公鑰。設想一下的一個場景:

客戶端 C 和伺服器 S 想要使用 SSL/TLS 通訊,C 要先知道 S 的公鑰,而 S 公鑰的唯一獲取途徑,就是把 S 公鑰在網路通道中傳輸。要注意網路通道通訊中有幾個前提:

  1. 任何人都可以捕獲通訊包
  2. 通訊包的保密性由傳送者設計
  3. 保密演算法設計方案預設為公開,而(解密)金鑰預設是安全的

因此,假設 S 公鑰不做加密,在通道中傳輸,那麼很有可能存在一個攻擊者 A,傳送給 C 一個詐包,假裝是 S 公鑰。當 C 收穫了 A 的公鑰(卻以為是 S 的公鑰),C 後續就會使用 A 公鑰對資料進行加密,並在公開通道傳輸,那麼 A 將捕獲這些加密包,用 A 的私鑰解密,就截獲了 C 本要給 S 傳送的內容,而 C 和 S 二人全然不知。

也就是說傳送公鑰這一步沒有做到防篡改防冒充。靠數字簽名可以防篡改防冒充,但是數字簽名需要接收者持有傳送者的公鑰才能實現,這就進入了死鎖狀態。

為了公鑰傳輸的信賴性問題,第三方機構應運而生——證書頒發機構(CA,Certificate Authority)。

數字證書

CA 預設是受信任的第三方。CA 會將:證書的頒佈機構、有效期、公鑰、持有者(subject)等資訊用 CA 的私鑰進行簽名。並且將簽名結果和這些資訊放在一起,這就叫做數字證書

這樣,B 就可以去 CA 申請一個證書,然後將自己的證書發給 A,那麼 A 如何驗證這個證書確實是 B 的呢?當然是使用 CA 的公鑰進行驗籤。A 收到 B 發過來的數字證書後,A 使用 CA 的公鑰進行驗證,驗證通過即證明這確實是 B 證書,也就可以使用證書中包含的 B 的公鑰,按照之前討論的流程進行通訊。

注意:CA 的公鑰也是需要使用證書來分發的,所以 A 的電腦內必須存有 CA 的證書,證書裡包含了 CA 的公鑰。

可以看到,證書包含了證書持有人的公鑰和證書的簽名。另外,證書頒發機構是有層級關係的,下級 CA 的證書是需要由上級 CA 簽名的。換句話說一定存在根證書頒發機構,那麼他們的證書是由誰簽名的呢?答案是自籤,自己給自己認證。為什麼根證書可以自籤?這是基於最基礎的信任。
根證書不應該通過網路分發,因為通過網路分發的話,可能會被中間人攻擊。一般根證書都通過作業系統或者瀏覽器分發,在作業系統中會內建很多根證書,但是最初的作業系統也不能通過網路分發,因為中間人可以修改作業系統中的根證書。所以要保證安全只能靠最原始的方法,當面交流。硬體廠商會和證書籤發機構合作,在電腦、手機等裝置出廠的時候在其作業系統中內建簽發機構的根證書,再將這些裝置分發出去,這樣,這些裝置的使用者就可以安全地進行資訊交換了。所以,安全性就依賴於這些裝置在分發到消費者手中之前不會被惡意修改來保證了。

  • 什麼情況下瀏覽器提醒證書不可信?
  1. 證書不是權威 CA 頒發。有些企業為了貪圖便宜使用盜版的證書,沒有經過 CA 認證。也就是無法使用瀏覽器內建 CA 公鑰進行驗證。
  2. 證書過期。證書裡有一項就是有效期,一般就是一年或者兩年的時間。如果證書過期,那麼瀏覽器就會提示“證書不可信”
  3. 證書部署錯誤。可能是伺服器證書部署出錯,比如證書與域名不匹配,因為證書裡有一項是持有人資訊的。