2010-10-14 40 views
9

期間對稱密鑰我有一個典型的HTTPS網頁的情況在瀏覽器和服務器之間的SSL握手小的困惑:如何瀏覽器產生SSL握手

我迄今瞭解的是,在SSL握手的過程中,客戶端(本例中爲瀏覽器)使用公鑰(從服務器接收的證書)對隨機選擇的對稱密鑰進行加密。這被髮送回服務器,服務器用私鑰解密它(對稱密鑰)。此對稱密鑰現在在會話的其餘部分用於加密/解密兩端的消息。這樣做的主要原因之一是使用對稱密鑰更快的加密。

問題 1)瀏覽器如何挑選並生成這個「隨機」選擇的對稱密鑰?

2)開發人員(或/和瀏覽器用戶)是否可以控制生成對稱密鑰的機制?

+0

客戶端不會生成會話密鑰;不加密它;並不傳送它。會話密鑰是通過密鑰協議協議派生的。你的描述基本上不正確。你的問題是建立在一個錯誤的假設上的。 – EJP 2017-03-20 01:08:39

回答

8

Here是HTTPS連接建立如何工作的非常好的描述。我將提供簡如何會話密鑰由雙方(客戶端和服務器),這個過程被稱爲「密鑰協商協議」獲得的,在這裏它是如何工作:

  1. 客戶端產生的48字節的「預主祕密「隨機值。
  2. 客戶端用隨機數據填充這些字節以使輸入等於128字節。
  3. 客戶端使用服務器的公鑰對其進行加密並將其發送到服務器。
  4. 然後主密鑰通過以下方式雙方產生:

    master_secret = PRF(
        pre_master_secret, 
        "master secret", 
        ClientHello.random + ServerHello.random 
    ) 
    

的PRF是「僞隨機函數」這也是在 規範中定義,是相當聰明的。它結合了祕密,ASCII標籤和 我們通過使用MD5和SHA-1散列 函數的密鑰散列消息 認證代碼(HMAC)版本給出的種子數據。一半的輸入被髮送到每個散列函數。它很聰明,因爲它很耐攻擊,即使面對MD5和SHA-1中的 弱點。這個過程可以自行反饋,並且永遠迭代以產生儘可能多的字節。

按照這個程序,我們獲得一個48字節的「主密鑰」。

+0

客戶端不會生成會話密鑰;不加密它;並不傳送它。會話密鑰是通過密鑰協議協議派生的。 – EJP 2017-03-20 01:08:18

+0

@EJP你是對的,我的回答完全不正確,我重寫了它。請檢查它並告訴我,如果你認爲現在好了。 – Andrey 2017-03-20 13:50:42