OpenSSH 如何決定使用哪個主機金鑰?

OpenSSH 如何決定使用哪個主機金鑰?

預設情況下,在我目前的版本(6.9p1)中,OpenSSH Server 將建立四種類型的主機金鑰:

$ ls /etc/ssh/ssh_host_*_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub

透過測試,我注意到,至少使用相同版本的 OpenSSH 用戶端(6.9p1),無論客戶端的金鑰類型為何,主機都會使用 ECDSA 金鑰。

OpenSSH 在哪裡決定支援的演算法的優先順序?此資訊是否可編輯或硬編碼到目前版本的源代碼中?

更重要的是,為什麼 OpenSSH 決定優先考慮 ECDSA 演算法?

答案1

訂單由客戶端使用HostKeyAlgorithms配置選項選擇。我的系統上的預設值(根據手冊頁)是:

  1. [電子郵件受保護]
  2. [電子郵件受保護]
  3. [電子郵件受保護]
  4. [電子郵件受保護]
  5. [電子郵件受保護]
  6. [電子郵件受保護]
  7. [電子郵件受保護]
  8. [電子郵件受保護]
  9. ECDSA-SHA2-Nistp256
  10. ECDSA-SHA2-NISTP384
  11. ECDSA-SHA2-nistp521
  12. ssh-ed25519
  13. SSH-RSA
  14. ssh-DSS

若要覆寫它,請執行以下操作:

ssh -oHostKeyAlgorithms=ssh-ed25519 [email protected]

答案2

更重要的是,為什麼 OpenSSH 決定優先考慮 ECDSA 演算法?

ECDSA 是在 openssh 5.7 版本中引入的,你可能會發現此處發布說明。特別指出:

依照 RFC5656 的規定,實現金鑰交換 (ECDH) 和主機/用戶金鑰 (ECDSA) 的橢圓曲線加密模式。在相同的等效對稱金鑰長度以及較短的金鑰下,ECDH 和 ECDSA 比普通 DH 和 DSA 提供更好的效能。

…………

支援使用新 ECDSA 金鑰類型的憑證主機和使用者金鑰 - ECDSA 金鑰可以經過認證,並且 ECDSA 金鑰可以充當 CA 來簽署憑證。

當客戶端和伺服器都支援時,256 位元曲線欄位中的 ECDH 是首選金鑰協商演算法。第一次學習主機金鑰時,首選 ECDSA 主機金鑰,或可使用 ssh-keyscan(1) 學習。

也,RFC 5656狀態:

許多估計認為 2^80-2^90 次操作是不可行的,因此建議使用至少 160-180 位的橢圓曲線。本文檔中所需的曲線為 256 位元、384 位元和 521 位元曲線;實作不應使用小於 160 位元的曲線

相關內容