RSA密钥在SSH中的惊人持久性

2020-05-29 23:39:56

一般来说,SSH(协议)和OpenSSH(协议的主要实现)拥有(或曾经拥有)四种不同类型的SSH密钥:RSA、DSA(现在已被推荐)、ECDSA和ED25519,这里按照它们被添加到SSH的顺序列出(ED25519是最新的)。由于RSA是最旧的,您可以合理地认为它是仍然受到积极支持的三个版本中使用最少的一个。相反,使用RSA密钥仍然非常常见,既有旧密钥,也有新生成的密钥。这有很多原因,但很大一部分原因可以归结为RSA是每个SSH实现都支持的通用默认密钥类型,而且SSH实现的数量比您预期的要多。

一个小原因是,人们通常不会改变有效的密码,特别是在他们对事物进行身份验证的方式上(只要看看所有的旧密码就知道了)。现有的RSA密钥组可以正常工作,所以很多人觉得没什么需要更改它们。然而,这仅适用于老年人使用旧密钥的环境(可以包括个人机器上使用的密钥和用于个人物品的密钥,如您的个人Github帐户)。

接下来,仍然有一定数量的SSH助手软件不支持全系列的SSH密钥类型。它有些不支持Ed25519密钥(通常是每个人都可以选择的密钥类型),有些只支持RSA密钥,甚至不支持ECDSA密钥。如果这听起来既不可能又荒谬,那么,直到2017年,Gnome Keyring才支持ECDSA密钥(参见bug#641082)。

除此之外,并不是世界上所有的地方都是OpenSSH(以及与之对话的东西);还有各种附加的SSH库和完整的实现,无论是用(和用于)C语言还是其他语言。这些实现都支持RSA,因为RSA实际上是SSH的通用密钥类型(每个人在客户端和服务器端都支持它),但它们对其他密钥类型的支持往往参差不齐。您必须实现一个密钥类型,它将用于Bersa;您不能实现更多。然后,一旦您处于某些东西(无论是客户端还是服务器)只处理RSA密钥的环境中,为了安全起见,您开始默认使用RSA密钥。

这就是我自己如何得到最近的RSA密钥的。我的iOS toUnix文件复制环境只能在我的iOS设备上生成RSA密钥(不管是什么原因),而我的Yubikey4不支持Ed25519密钥(如果我必须在RSA和ECDSA之间选择,我更喜欢RSA)。

好消息是对Ed25519键的支持越来越普遍。它可能永远不会完全通用,但我希望越来越多的程序会觉得它们可以默认生成Ed25519密钥,然后为人们提供一个密钥,如果这在您的旧SSH设备上不起作用,请选择RSA选项。

PS:因为我查到了这一点,ECDSA密钥被添加到OpenSSH5.7中,它在2011年1月发布了最新版本(VIA)。这是不到十年的历史,所以他们没有取代RSA密钥可能也就不足为奇了,特别是因为Ed25519密钥支持是在几年后才出现的。