預設情況下,在我目前的版本(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
答案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 位元的曲線