如果攻击者控制了服务器,并且用户尝试使用密码身份验证通过 SSH 连接到服务器,那么攻击者可以获取密码吗?
我的印象是有一种算法可以证明客户端持有密码而不泄露密码以防止恶意服务器 (1) 的情况,但本文另有说明:
最简单的可能是密码验证,其中服务器只是提示客户端输入他们尝试登录的帐户的密码。密码是通过协商加密发送的,因此对外界来说是安全的。
有人可以澄清这是否正确吗?
- 类似于社会主义百万富翁,但一侧只有盐渍的哈希?
如果攻击者控制了服务器,并且用户尝试使用密码身份验证通过 SSH 连接到服务器,那么攻击者可以获取密码吗?
我的印象是有一种算法可以证明客户端持有密码而不泄露密码以防止恶意服务器 (1) 的情况,但本文另有说明:
最简单的可能是密码验证,其中服务器只是提示客户端输入他们尝试登录的帐户的密码。密码是通过协商加密发送的,因此对外界来说是安全的。
有人可以澄清这是否正确吗?
如果散列是身份验证参数,而不是密码,那么散列就是身份验证参数。
为了更深入地解释该重言式:密码经过哈希处理,因此如果密码的数据存储受到破坏,则没有功能性身份验证凭据。出于这个原因,它是发送到服务器执行计算哈希工作的服务器的密码。发送密码的哈希与使用没有哈希的密码生成器完全相同。
他们仍然可以窃取密码,方法是强制身份验证存储生成原始密码,或者更有效地通过更改服务器的守护程序代码来记录您的密码尝试。
有人可以澄清这是否正确吗?
是的,服务器以纯文本形式知道密码是正确的。RFC 4252,第 8 节指定了 SSH 的“密码验证”,它写道(自由引用):
请注意,[...] 明文密码在数据包 [...] 中传输。
我也想提供一个答案,不是针对问题本身,而是针对
你能设计一个不向服务器发送密码或等于密码的值的协议吗?
答案是肯定的。
您应该确保您的协议执行以下操作:
但是,这主要是理论上的讨论。您应该尽可能使用 ssh 密钥,因为它们提供了更好的蛮力保护。
有人可以澄清这是否正确吗?
那是一个相对的问题。我的意思是这取决于邪恶的人对服务器的控制性质。如果他足够熟练地修改/捕获 SSH 守护程序(位于服务器端),他可以获得您的密码。但这在现实中不太实用,因为有最简单的方法可以通过暴力破解密码来为顽固的黑客获取密码。
但是使用 SSH 连接到服务器的最安全方法仍然是使用使用公钥/私钥对进行身份验证而不是密码,因为暴力破解它们是根本不可能的。