SSH 公钥认证——总是要求用户生成自己的密钥对?

SSH 公钥认证——总是要求用户生成自己的密钥对?

今天我和一个合作伙伴一起工作,我需要使用 上传文件到我的服务器scp。我在服务器的 SSH 配置中关闭了密码,所以我希望他们使用公钥身份验证。我在服务器上为他们生成了密钥对,并给了他们私钥,并将公钥放在相应的authorized_keys文件中。

在他们设置工作时遇到一系列问题后,他们终于让一位更有经验的系统管理员介入,他责备我以这种方式处理密钥生成。他说,通过向他们提供在我的系统上生成的私钥,我使他们能够对在同一服务器上生成的其他密钥进行暴力攻击。

我甚至问过他“所以,如果我在服务器上有一个帐户,并且我可以使用密码登录,但我想自动执行某些操作,并在该系统上生成一个密钥对,那么这是否会给我一个攻击媒介来暴力破解其他用户的密钥?”他说是的

我从未听说过这件事,是真的吗?有人能告诉我关于这次攻击的讨论吗?

答案1

嗯……不,在大多数情况下,由于系统上随机数的生成方式不正确,所以这种说法是不正确的。但是,如果开发人员(在 Linux 中是内核开发人员)没有注意确保随机数源是“好的”,那么理论上服务器可能会生成有偏差的随机数。如果随机数存在偏差,那么对服务器密钥的攻击可能会比暴力破解更快。但是,这更多的是一个理论问题,而不是实际问题 - 实际上,与对加密软件的旁道攻击或以其他方式访问服务器相比,RNG(随机数生成器)中的弱点是一种不太可能发生的攻击。

所以,长话短说,不,他错了。除了基本的加密基础(默认生成 DSA 密钥吗?RSA?),一个 ssh 密钥不包含有关在同一系统上生成的任何其他 ssh 密钥的任何信息。

答案2

私钥的主要特点是它对用户来说是私密的,只有用户自己知道。作为用户,我不希望其他人生成我的私钥,因为这意味着其他人可以访问我的私钥,因此有机会采取行动,如果他们是我在将密钥的公钥部分设置为有效凭据的系统上。

从你的角度来看,你也承担了更多的责任。你不仅需要保证你的系统安全,以免不适当的公钥被安装到任何地方,你还有责任确保你生成的私钥在整个生命周期内都是安全的。如果对给定的密钥对进行了不良操作以进行身份​​验证,并且用户知道其他人拥有(或曾经拥有)该密钥的副本,或者密钥的传输方式不够安全,那么他们可以转过身(无论对错)说他们保存的副本是完全安全的,所以一定是你的副本在你这边或传输过程中被泄露了。这听起来可能只是掩饰,这是因为它是:从你和用户的角度来看,你都要确保谁对正确标记的内容负责。

因此,无论你的专家提出的担忧是否有效(据我所知,这种攻击在理论上是可能的,但据我所知,远的除非在数学或一般实现中发现新的严重漏洞(这不太可能),否则在下一代或几代人中都无法实际实现,无论是戴用户帽还是戴管理员帽,我都希望用户完全控制他们的私钥和管理员(当然还有地球上的其他人),不允许靠近他们。

即使你不同意上述观点,密钥传输问题也绝非易事:你如何 100% 确定私钥已被目标用户看到,并且仅有的目标用户,并且没有以不安全的方式存储(有意或无意)(例如留在电子邮件收件箱或临时文件中,导致其与所述邮件分离且未加密)。如果您使用需要用户进行身份验证的安全传输方法,您如何获取身份验证详细信息系统安全地提供给用户?当然,对于大多数用途来说,有办法让密钥传输“足够安全”(其中“足够”很大程度上取决于密钥允许人们访问哪些内容),但如果用户生成密钥并分发公共部分,那么从这个意义上来说,您完全不用担心密钥分发问题(您只需要担心用户如何保证私有部分的安全,但没有什么可以阻止真正粗心的用户在那里不安全,所以无论您做什么,这都是一个问题)。

最后一点:如果您的私钥都是在同一个地方生成的,那么可能会出现一个问题,那就是如果后来发现这个地方的密钥生成设置不正确,就像去年 Debian/Lenny 的 OpenSSL 包中发现的问题一样。在这种情况下,您需要撤销和重新生成大量私钥。这可能是您的外部专家对此事的担忧的一部分。

答案3

我敢肯定这是胡说八道。私钥应该是随机生成的。因此,只要这种随机性没有偏差,不同的私钥之间就不会存在联系。

答案4

随机种子通常来自/dev/随机除非您以某种方式将 ssh-keygen 更改为使用另一个随机种子(如果这样做您会知道的),否则任何人都不可能破解该密钥并找出如何生成新密钥来破解您的系统。

相关内容