SSH 密鑰交換是否比密碼驗證更安全?
遠端使用者使用 SSH 通過 Internet 連接到我們總部的多項服務。SSH 密碼與他們的 LAN A/D 帳戶同步。
讓使用者使用 CD 或一張紙之類的東西將 SSH 密鑰的副本帶回家是否比讓使用者輸入密碼更安全?或者我應該兩者都需要?
我的問題可能會重新表述如下:SSH 的密碼認證協議是否存在漏洞?
正是這條資訊讓我懷疑:
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:. Are you sure you want to continue connecting (yes/no)?
您看到的消息是一個單獨的問題。它要求您確認您要連接的主機確實是您期望的主機。從伺服器,您可以通過執行獲取指紋
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
。然後,當您第一次遠端連接時,您可以確保指紋匹配。在這裡看到的主機密鑰解決了中間人攻擊的問題——也許 DNS 已被破壞,並且您正在連接到競爭對手的機器而不是您自己的機器。該機器收集您的憑據並透明地將您的連接轉發到真實伺服器,在您不知情的情況下竊取您的資訊。確保主機密鑰匹配可以防止這種情況發生,除非攻擊者實際上竊取了您伺服器的公鑰。
然而,一個問題仍然存在——你怎麼知道哪個鍵是正確的?第一次連接後,公鑰儲存在您的
~/.ssh/known_hosts
文件中,因此後續連接正常。但是第一次,您要麼需要某種帶外方式來獲取指紋,要麼遵循“TOFU”模型:首次使用時信任。但這一切都與密碼與密鑰無關,只是密鑰和密碼都可能通過這種攻擊被盜——從某種意義上說,這就是你要找的漏洞。
(至少)密碼比密鑰更糟糕的三個原因:
- 他們可以被暴力破解。典型的使用者選擇的 8 字元密碼具有大約 30 位的猜測熵。ssh 公鑰/私鑰對為 1024 位或更大。暴力破解 ssh 密鑰實際上是不可能的,但自動密碼猜測一直在發生。
- 他們可能很愚蠢。使用者通常會選擇可怕的密碼,即使有限制,他們也傾向於在多個地方使用更難的密碼。這顯然使攻擊更容易。
- 密碼可以被遠端竊取。當您使用 SSH 時,密碼線上路上被加密,但在受感染的系統上,用記錄所有密碼的伺服器替換 ssh 伺服器是很常見的。使用密鑰,私鑰保留在本地系統上,根本不會發送,因此在不實際損害客戶端電腦的情況下,它不能被盜。
此外,ssh 密鑰在與類似的東西一起使用時提供了便利
ssh-agent
——您無需每次都重新驗證即可輕鬆進行連接操作,同時仍保持合理的安全性。兩者都要求沒有顯著優勢,因為有足夠權限竊取私鑰的人也可以相當容易地竊取使用者密碼。如果您需要比這更多的安全性,請考慮使用 RSA SecurID 或WiKID等雙因素身份驗證系統。