無密鑰 SSL 的工作原理是什麼?| 前向保密

無密鑰 SSL (Keyless SSL)使無法共用其私密金鑰的組織能夠在維持 SSL/TLS 加密的同時遷移到雲端。

學習目標

閱讀本文後,您將能夠:

  • 解釋 TLS 握手中的步驟以及工作階段金鑰和私密金鑰之間的區別
  • 瞭解無密鑰 SSL 如何將使用私密金鑰的 TLS 握手部分與握手的其他部分分開
  • 瞭解 Diffie-Hellman 和 RSA 握手的區別
  • 瞭解什麼是前向保密

複製文章連結

什麼是無密鑰 SSL?

無密鑰 SSL 是向使用雲供應商進行 SSL 加密的公司提供的服務。通常情況下,雲供應商必須知道公司的私密金鑰,但 Keyless SSL 是避免這樣做的一種方法。出於監管原因,許多組織無法共用其私密金鑰。通過使用無密鑰 SSL,這些公司在保證金鑰安全的同時,仍能使用 TLS 和雲服務。

SSL(更確切的叫法是 TLS),是一種用於在網路上驗證身份和加密通信的協定。SSL/TLS 要求使用所謂的公開金鑰和私密金鑰,如果某家公司使用該協議來保護往返其網站的流量(請參見 HTTPS),私密金鑰通常仍由該公司持有。但是當該公司遷移到雲端並由供應商提供 TLS 加密時,私密金鑰將改為由該供應商持有。

無密鑰 SSL 基於這樣一個事實:私密金鑰僅在 TLS 握手期間使用一次,即 TLS 會話開始時。雲供應商不直接使用私密金鑰來生成工作階段密鑰,而是通過安全通道從公司獲取工作階段密鑰,並使用這些密鑰進行加密。這樣依然使用私密金鑰,但不用與公司以外的任何人共享。

例如,假設 Acme Co. 實施 SSL。Acme Co. 將在一個自己擁有和控制的伺服器上存儲其私密金鑰。如果 Acme Co. 轉移到雲,並使用雲服務提供商提供來代管 web,那麼該提供商將持有私密金鑰。然而,如果 Acme Co. 所轉移到的雲有實施無密鑰 SSL 的供應商,那麼私密金鑰可以保留在 Acme Co. 擁有和控制的伺服器上,與在非雲 SSL 一樣。

無密鑰 SSL 的工作原理是什麼?

無密鑰 SSL 基於這樣一個事實:私密金鑰僅在 TLS 握手期間使用一次,即 TLS 工作階段開始時。無密鑰 SSL 通過拆分 TLS 握手的步驟來實現。提供無密鑰 SSL 的雲供應商將這個過程的私密金鑰部分遷移到另一台伺服器上,通常是客戶的內部部署伺服器。

當在握手過程中需要私密金鑰來解密或加密數據時,供應商的服務器會將必要的數據轉發給客戶的私密金鑰服務器。私密金鑰在客戶伺服器上對數據進行加密或解密,並將數據發送回供應商的伺服器,TLS 握手將像往常一樣繼續進行。

無密鑰 SSL 僅在供應商角度來看是「無密鑰的」:供應商從不看到客戶的私密金鑰,但客戶仍持有並使用私密金鑰。同時,在客戶端仍如常使用公開金鑰。

什麼是工作階段金鑰?

工作階段密鑰是在 TLS 握手完成後,通過 TLS 進行安全通信的雙方使用的對稱密鑰。一旦雙方同意了一組工作階段密鑰,就不再需要使用公開金鑰和私密金鑰了。TLS 為每一個工作階段產生不同的工作階段密鑰。

生成工作階段密鑰的步驟是什麼?

這取決於在 TLS 握手中使用哪種密鑰交換演算法。兩種主要演算法是 RSA 密鑰交換演算法和臨時 Diffie-Hellman 密鑰交換演算法。

RSA 密鈅交換

在 RSA 握手中,TLS 握手中創建工作階段密鑰的步驟如下:

  1. 客戶端向伺服器發送一個明文「hello」消息,其中包括它們想要使用的協定版本、支持的密碼套件列表和一個稱爲「客戶端隨機數」的隨機數資料短字符串。
  2. 服務器用它的 SSL 憑證、首選的密碼套件和一個不同的隨機資料短字符串(稱爲「伺服器隨機數」)回應(明文)。
  3. 客戶端創建另一個隨機數資料集,稱爲「預主密鑰」。客戶端從伺服器的憑證中獲得公開金鑰,用來加密預主密鑰,並將其發送給伺服器;僅持有私密金鑰的伺服器才能解密預主密鑰。
  4. 伺服器解密預主密鑰。注意,這是唯一一次使用私密金鑰!
  5. 現在客戶端和伺服器都有客戶端隨機數、伺服器隨機數和預主密鑰。雙方各自獨立地將這三者合併成工作階段密鑰。它們應該得到相同的結果,並且工作階段期間的所有後續通信都使用這些新密鑰進行加密。

無密鑰 SSL 在第 4 步開始發揮作用。使用無密鑰 SSL後,雲供應商不是自行解密預主密鑰,而是通過加密通道將其發送到客戶代管或控制的一個伺服器。客戶的私密金鑰解密預主密鑰,然後將解密的預主密鑰發回雲供應商。雲供應商的伺服器使用它來生成工作階段密鈅,TLS 通信如常繼續。

臨時 Diffie-Hellman 密鈅交換

臨時 Diffie-Hellman(DHE)握手(「臨時」是指同一個密鈅永遠不使用兩次)使用 Diffie-Hellman 演算法來生成工作階段密鈅,這種算法用於在不安全的通道上交換密鈅。在這種 TLS 握手中,私密金鑰認證與工作階段密鑰生成是兩個獨立的過程。

除了使用的演算法以外,DHE 握手和 RSA 握手的主要區別是預主密鑰生成的方式。在 RSA 握手中,預主密鑰由客戶端生成的隨機資料組成;在 DHE 握手中,客戶端和伺服器使用協定的參數來分別計算相同的預主密鑰。

  1. 正如在 RSA 握手中一樣,客戶端發送想要使用的協定版本、支持的密碼套件列表和客戶端隨機數。
  2. 伺服器用它選擇的密碼套件、伺服器隨機數和它的 SSL 憑證進行回應。在這裡,DHE 握手開始與 RSA 握手存在差異:伺服器也發送其 Diffie-Hellman (DH) 參數,其將用於計算預主密鑰。它也將使用伺服器的私密金鑰加密用戶端隨機數、伺服器隨機數和 DH 參數。這是唯一一次使用私密金鑰,它驗證伺服器是其聲稱的身份。
  3. 客戶端使用公開金鑰解密伺服器的消息,並驗證 SSL 證書。然後客戶端用它的 DH 參數回應。
  4. 通過使用客戶端的 DH 參數和伺服器的 DH 參數,雙方分別計算預主密鑰。
  5. 然後,雙方將這個預主密鑰與客戶機隨機數和伺服器隨機數組合起來,以獲得工作階段密鑰。

私密金鑰僅在第 2 步使用,這是無密鑰 SSL 發揮作用的時候。此時,SSL/TLS 供應商將客戶端隨機數、伺服器隨機數和伺服器的 DH 參數發送到客戶控制的具有私密金鑰的伺服器。這些信息將使用私密金鑰進行加密,並以加密的形式發送回雲供應商,後者將其傳遞給客戶端。客戶端可使用公開金鑰解密這些數據,握手繼續進行。這樣一來,雲供應商不需要接觸私密金鑰。

雖然臨時 Diffie-Hellman 握手的時間比 RSA 握手稍長,其具備稱為前向保密的優勢。由於私密金鑰僅用於認證,攻擊者不能用來發現任何給定的工作階段金鑰。

什麼是前向保密?什麼是完美前向保密?

前向保密確保,即使私密金鑰暴露,加密數據仍維持加密狀態。這也被稱為「完美前向加密」。如果每個通信工作階段都使用獨一無二的工作階段密鈅,且工作階段密鈅是另外從私密金鑰生成的,則有可能實現前向加密。如果單一工作階段密鈅泄露,僅這個工作階段能被攻擊者破解;所有其他工作階段將都保持加密

在設置了前向保密的協定中,私密金鑰用於首次握手過程中的認證,不會用於加密。臨時 Diffie-Hellman 握手從私密金鑰獨立生成工作階段密鈅,因此具備前向保密性。

相比之下,RSA 沒有前向保密性;私密金鑰泄露後,攻擊者可以解密過去工作階段的工作階段密鑰,因爲他們可以解密預主密鑰,且客戶端隨機數和伺服器隨機數都是明文形式。通過結合這三者,攻擊者能推導出任何給定工作階段密鈅。

Cloudflare 如何實施無密鑰 SSL?

Cloudflare 是第一個發佈無密鑰 SSL 的雲供應商,讓面臨嚴格安全限制的企業(例如銀行)能夠遷移到雲。Cloudflare 同時支援 RSA 和 Diffie-Hellman 握手,因此公司可以通過Diffie-Hellman 集成前向保密,防止攻擊者在竊取其私密金鑰後解密其資料。

Cloudflare 伺服器與私密金鑰伺服器之間的所有通信均通過安全的加密通道進行。此外,儘管需要額外訪問私密金鑰伺服器,Cloudflare 發現無密鑰 SSL 對效能的影響可以忽略不計。

有關無密鑰 SSL 工作原理的更多技術細節,請查看這篇部落格文章。要進一步瞭解 Cloudflare 無密鑰 SSL 的更多資訊,歡迎探索我們的無密鑰 SSL 服務