使用公钥登录 SSH 比使用密码更好吗?

使用公钥登录 SSH 比使用密码更好吗?

我不是在问密码与密钥身份验证。

我曾多次看到(甚至亚马逊 AWS)表示,即使 SSH 存在重大漏洞,密钥身份验证也会使此类漏洞不易受到攻击。但是,如果密钥验证方式存在漏洞怎么办?这不是只是根据身份验证机制做出假设吗?

为什么会有这样的想法呢?是因为我们都知道密码是一种糟糕的身份验证形式,所以假设只是“使用私钥”?

答案1

我认为你指的是所谓的挑战-响应模型。通过这种方法,密钥对永远不会以可能被从线路上嗅探的方式暴露,就像通过线路发送密码的情况一样。因此,它被认为更安全。

中的一个答案此安全 SE 问答题为:使用公钥登录 SSH 比保存密码更好吗?解释使用公钥/私钥对的优点。

摘抄

在公钥的情况下,我们的情况非常不同。在这种情况下,服务器存储了用户的公钥。接下来发生的是服务器创建一个随机值(随机数),使用公钥对其进行加密并将其发送给用户。如果用户是应该的用户,他可以解密质询并将其发送回服务器,然后服务器确认用户的身份。这是经典的挑战-响应模型。

因此,考虑到通过发送 NONCE 来使用密钥对的方式,它们永远不会真正被中间人所知,并且只有密钥的公共部分是公开的。

如果您确实怀疑,您可以放弃使用该密钥对,而只需重新生成一组全新的密钥对。

什么是随机数?

摘抄

在安全工程中,随机数是在加密通信中仅使用一次的任意数字。它在本质上与随机数类似,因此得名。它通常是在身份验证协议中发出的随机数或伪随机数,以确保旧通信不能在重放攻击中重复使用。例如,随机数用于 HTTP 摘要访问身份验证来计算密码的 MD5 摘要。每次出现 401 身份验证质询响应代码时,随机数都不同,因此几乎不可能进行重放攻击。

参考

答案2

是的,SSH 的公钥身份验证机制可能存在漏洞。但密码或质询响应身份验证机制也可能存在漏洞。因此基本上仅就这个因素而言,两种身份验证方法都被认为是相同的。

公钥认证的好处

私钥永远不会通过网络发送。服务器拥有公钥,并用该公钥加密一些随机数据。该数据只能用私钥解密。然后,加密的数据被发送到客户端,客户端将其解密并将其发送回服务器。

暴力破解该数据也是不可能的。客户端只能尝试解密一次。如果出错,则必须使用新加密的数据重新开始。然后还有一个时间限制,即客户端只有几秒钟的时间来响应。

公钥认证的缺点

SSH私钥可以通过密码进行保护,出于安全考虑,建议这样做。但这不是必需的。
因此,如果客户端系统没有受私钥密码保护,并且某人获得了对系统的物理访问权限或该密钥的副本,那么他们就可以访问远程系统。

代理密钥转发的缺点

客户端系统可能且常见地使用“密钥代理”来存储 SSH 私钥。当 ssh 客户端需要使用该私钥执行某些操作时,它会将请求发送到密钥代理。
也可以通过 SSH 连接转发对此密钥代理的访问,这样您就可以在远程系统上使用本地 SSH 密钥(例如,如果您想 ssh 到另一个机器),这也是很常见的。

这样做的缺点是如果远程系统受到威胁,或者其他人具有 root 访问权限,他们可以在您连接到该系统时使用您的 ssh 密钥。

通过密钥转发,SSH 守护程序会在远程系统上放置一个命名套接字,用于与 SSH 密钥代理进行通信。该套接字受基本文件系统权限的保护,因此只有您的用户才能访问它。然而,由于 root 可以做任何它想做的事情,并且文件系统权限对其没有任何意义,因此 root 用户可以访问该套接字并使用您的私钥。

请注意,这并不意味着他们得到了您的私钥,只是他们可以使用它。 SSH 密钥代理从不发送密钥本身,它仅响应公钥身份验证所需的“解密此数据”请求。

相关内容