Diffie-Hellman

TLS 協議:這些天仍然使用簡單的 diffie hellman 密鑰交換嗎?

  • September 18, 2018

或者它是否主要被 ecdh 用於密鑰交換和 rsa 用於身份驗證?

在 TLS 中,Diffie-Hellman(非 EC)可用於TLS_DH_*密碼套件(“靜態 DH”)和TLS_DHE_*密碼套件(“臨時 DH”)。

當伺服器的證書包含公共 DH 密鑰時,會發生靜態 DH。這從未獲得牽引力。從歷史上看,美國聯邦政府提倡使用 DH 進行密鑰交換,因為當時 RSA 仍然是專利。然而,實際上沒有人再這樣做了,除了可能在一些美國聯邦組織的一些舊的、隱藏的系統中,而不是為公眾消費。

Ephemeral DH 得到了相當廣泛的支持。例如,我自己的 Web 伺服器在 Ubuntu 16.04 上使用 Apache+mod_ssl 的預設 SSL 配置,並提供以下協議版本和密碼套件:

 TLSv1.0:
    server selection: uses client preferences
    3-- (key:  RSA)  RSA_WITH_AES_128_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_AES_128_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_AES_256_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_AES_256_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_CAMELLIA_128_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_CAMELLIA_256_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_CBC_SHA
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_CBC_SHA
 TLSv1.1: idem
 TLSv1.2:
    server selection: uses client preferences
    3-- (key:  RSA)  RSA_WITH_AES_128_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_AES_128_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_AES_256_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_AES_256_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_AES_128_CBC_SHA256
    3-- (key:  RSA)  RSA_WITH_AES_256_CBC_SHA256
    3-- (key:  RSA)  RSA_WITH_CAMELLIA_128_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_AES_128_CBC_SHA256
    3f- (key:  RSA)  DHE_RSA_WITH_AES_256_CBC_SHA256
    3-- (key:  RSA)  RSA_WITH_CAMELLIA_256_CBC_SHA
    3f- (key:  RSA)  DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
    3-- (key:  RSA)  RSA_WITH_AES_128_GCM_SHA256
    3-- (key:  RSA)  RSA_WITH_AES_256_GCM_SHA384
    3f- (key:  RSA)  DHE_RSA_WITH_AES_128_GCM_SHA256
    3f- (key:  RSA)  DHE_RSA_WITH_AES_256_GCM_SHA384
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_CBC_SHA
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_CBC_SHA
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_CBC_SHA256
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_CBC_SHA384
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_128_GCM_SHA256
    3f- (key:  RSA)  ECDHE_RSA_WITH_AES_256_GCM_SHA384

如您所見,這裡有很多DHE套房。伺服器的證書包含一個公共 RSA 密鑰,因此所有DHE套件都被標記為DHE_RSA,這意味著:“伺服器發送 DH 參數,用它的 RSA 密鑰簽名”。

現在,伺服器提供 DHE密碼套件並不意味著它們實際上已被使用。如上所示,我的伺服器遵循客戶端首選項,即在初始 TLS 握手期間使用它知道的在客戶端發送的列表中的第一個密碼套件。因此,如果客戶端支持DHE ECDHE密碼套件,但ECDHE首先發送套件,那麼伺服器將選擇這些ECDHE套件之一。

此外,現代 Web 瀏覽器傾向於放棄DHE支持。在我的機器(一台 macOS Sierra 筆記型電腦)上,我有三個最新的瀏覽器(Chrome、Firefox 和 Safari),它們都沒有提供DHE密碼套件支持(ECDHE_RSA如果伺服器支持它,所有這些都樂意協商,但回退到普通瀏覽器RSA如果伺服器不支持密鑰交換ECDHE)。從這個意義上說,DHE密碼套件是一個過時的功能。請注意,並非所有 TLS 都與 Web 瀏覽器與 Web 伺服器通信有關;有很多應用程序也使用 TLS,不一定遵循瀏覽器趨勢。此外,現代 Web 瀏覽器是自動更新的,因此它們始終處於“前沿”,而伺服器和應用程序可能會滯後相當長的一段時間(甚至很多年)。儘管如此,可以預期 TLS 庫會慢慢棄用DHE密碼套件,或者可能完全放棄支持,因為ECDHE密碼套件效率更高(例如,我自己的 TLS 庫支持但從支持or )。ECDH``ECDHE``DH``DHE

簡介: DHE密碼套件仍然可以在許多現有的伺服器上工作,但是當客戶端是 Web 瀏覽器時,在實踐中看不到太多的使用,而且隨著時間的推移,支持預計會減少和消失。正如你所說,確實,DHE被替換為ECDHE.

引用自:https://crypto.stackexchange.com/questions/62471