Diffie-Hellman

為什麼使用 diffie-hellman-group1-sha1 而不是 diffie-hellman?

  • April 14, 2021

對於 SSH,為什麼使用 Diffie-Hellman-group1-sha1 而不僅僅是 Diffie-Hellman?換句話說,為什麼要使用散列函式?

這已由標準、RFC 4253中描述的協議的步驟 4 和 5 指定:

  1. S 生成一個隨機數 y (0 < y < q) 併計算 f = g^y mod p。S 接收 e。它計算 K = e^y mod p, H = hash (V_C || V_S || I_C || I_S || K_S || e || f || K)(這些元素根據它們的類型進行編碼;見下文) , 以及 H 上的簽名 s 及其私有主機密鑰。S 將 (K_S || f || s) 發送給 C。簽名操作可能涉及第二個散列操作。
  1. C 驗證 K_S 確實是 S 的主機密鑰(例如,使用證書或本地數據庫)。也允許 C 接受密鑰而無需驗證;但是,這樣做會使協議對主動攻擊不安全(但在許多環境中短期內出於實際原因可能是可取的)。然後 C 計算 K = f^x mod p, H = hash (V_C || V_S || I_C || I_S || K_S || e || f || K),並驗證 H 上的簽名 s。

這個值 (H) 稱為交換雜湊,用於 驗證密鑰交換。交換雜湊應該保密。

簽名算法必須應用於 H,而不是原始數據。大多數簽名算法包括散列和附加填充(例如,“ssh-dss”指定 SHA-1 散列)。在這種情況下,首先使用 HASH 對數據進行散列以計算 H,然後在簽名操作中使用 SHA-1 對 H 進行散列。

然後它去定義 diffie-hellman-group1-sha1,只是為了表明 SHA-1 確實是上面提到的雜湊:

“diffie-hellman-group1-sha1”方法指定 Diffie-Hellman 密鑰交換與 SHA-1 作為 HASH,和 Oakley Group 2

$$ RFC2409 $$(1024 位 MODP 組)。必須支持此方法的互操作性,因為所有已知的實現目前都支持它。請注意,此方法使用片語“group1”命名,即使它指定使用 Oakley Group 2。


所以基本上它是用於密鑰交換的參數的散列。沒有它,攻擊者可能會更改參數(描述中的“主動攻擊”)並且交換不會被驗證。

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