Ssl

OpenVPN 2.4 tls-crypt 和 dh 與橢圓曲線

  • March 24, 2020
  1. 如果我從OpenVPN 2.4 手冊中正確理解,如果有人正在使用,ECDH TLS cipher suites那麼他們可以設置dh none。這將具有與使用 dh 密鑰相同的安全級別(或更好),這是一個正確的假設嗎?
  2. 關於 tls-auth,手冊說“如果您想使用密鑰文件不僅要進行身份驗證,還要加密 TLS 控制通道,請改用 –tls-crypt。”。

目前我在配置中沒有tls-auth或沒有tls-crypt設置,但在日誌中我看到

Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-ECDSA-AES256-GCM-SHA384, 521 bit EC, curve: secp521r1

這是否意味著tls-crypt如果使用橢圓曲線則不需要該選項?tls-crypt或者如果控制通道已經加密,即使沒有這個選項,還會增加什麼額外的安全性?如果使用UDP或TCP有什麼區別嗎?

謝謝!

  1. ECDH並且DH都是Diffie-Hellman 密鑰交換的變體,並且需要具有計算複雜除法的阿貝爾群。然而:
  • 為算法生成好的有限域DH相對容易(雖然很耗時),因此 OpenVPN 要求您openssl dhparam使用dh <filename>. 這樣,您就不會使用可能受到Logjam 攻擊的預定義組,這在 NSA 預算範圍內。但是,有限域中的因式分解是一個很好理解的主題,因此DHECDH具有可比安全級別的情況要慢。
  • 生成好的橢圓曲線是很困難的,所以你必須使用預定義的並且沒有ecdh <filename>選項。至於dh選項,您可以使用dh none橢圓曲線。橢圓曲線上的除法不是很發達,因此要獲得與DH現在類似的安全級別,您需要更小的曲線。
  1. 即使沒有tls-authortls-crypt選項,您的數據也將始終被加密。與前一點一樣,該TLS協議使用在密鑰交換中獲得的密鑰對數據進行加密。這些選項控制如何處理TLS 握手的 4 個數據包:

通常(如在HTTPS協議中)它們是未加密的,因為對等方彼此之間沒有任何先驗知識。但是使用 OpenVPN,您有一個優勢:您可以在伺服器和所有授權客戶端上配置一個公共對稱密鑰,它將對這 4 個數據包進行簽名或加密。

這將允許伺服器在為計算量大的協議分配資源之前ClientHello丟棄所有未簽名的消息。因此,它更容易在攻擊中倖存下來,攻擊者一次啟動數千個連接。 TLS``DDoS

使用tls-auth類似於WEP在 Wi-Fi 網路上配置公用密鑰以及每個客戶端的WPA-Enterprise身份驗證。主要區別在於WEP加密被嚴重破壞,而HMAC簽名或AES加密則沒有。因此,您將無法在 Wi-Fi 網路上重現上述配置(軟體不支持)。 3. UDPvsTCP選擇很簡單:UDP盡可能使用。TCP保證所有發出的 IP 數據包都不會失去,並且會按照發送的順序到達。

這聽起來不錯,但您的VPN隧道也會傳輸內部TCP連接。如果封包遺失,OpenVPN客戶端和建立內部TCP連接的程序都將開始重新傳輸。但是,來自內部連接的重傳數據包將在被重傳的數據包傳遞到達目的地。OpenVPN這會導致不必要的網路流量。

編輯DH:和的強度之間的比較ECDH可在例如Keylength.com上獲得:

  • 所需的DH組大小在列Discrete Logarithm Group中,
  • 具有等效強度的橢圓曲線的大小在列Elliptic Curve中,

例如橢圓曲線的以下配置:

ecdh-curve prime256v1

相當於DH使用和使用生成參數openssl dhparam -out /etc/openvpn/dh.pem 3072

dh /etc/openvpn/dh.pem

NIST 建議提供的值大致對應於OpenSSL 安全級別。預設安全級別為1 級,這意味著組的最少2048位數DH224橢圓曲線的位數。您可以使用該tls-cipher選項增加它(參見格式的OpenSSL 文件)。例如設置:

tls-cipher DEFAULT:@SECLEVEL=4

將導致 OpenVPN 連接失敗,直到您將上述兩個設置調整為所需的組大小(7680forDH384for ECDH)。

引用自:https://serverfault.com/questions/1007688