SSH 密钥类型、rsa、dsa、ecdsa,是否有简单的答案可供选择?

信息安全 SSH 密钥生成
2021-08-10 23:06:15

作为一个对密码学知之甚少的人,我想知道我在创建 ssh 密钥时所做的选择。

ssh-keygen -t type, 其中 type 是 dsa,rsa 和 ecdsa 中的一个。

谷歌搜索可以提供有关类型之间差异的一些信息,但不能提供任何结论性的信息。所以我的问题是,对于密码学知识很少的开发人员/系统管理员是否有任何“简单”的答案,何时选择哪种密钥类型?

我希望得到“对 X 和 Y 使用 DSA,对 Z 使用 RSA,对其他所有东西使用 ECDSA”这样的答案,但我也意识到很可能没有这样简单的答案。

4个回答

实际上,RSA 密钥在任何地方都可以使用。ECDSA 支持较新,因此某些旧客户端或服务器可能会遇到 ECDSA 密钥问题。根据 SSH 标准(RFC 4251及后续标准),DSA 密钥曾经在任何地方都可以使用,但最近发生了变化:OpenSSH 7.0 及更高版本默认不再接受 DSA 密钥。

ECDSA 的计算量更轻,但您需要一个非常小的客户端或服务器(例如 50 MHz 嵌入式 ARM 处理器)才能注意到差异。

目前,假设密钥足够大(RSA 或 DSA 为 2048 位,ECDSA 为 256 位),没有任何与安全相关的理由偏爱一种类型而不是其他任何类型;密钥大小由-b参数指定。但是,某些ssh-keygen版本可能会拒绝 1024 位以外的大小的 DSA 密钥,这目前是完整的,但可以说没有预期的那么健壮。因此,如果您沉迷于一些轻微的偏执狂,您可能更喜欢 RSA。

总而言之,做ssh-keygen -t rsa -b 2048,你会很开心。

正如 gilles 所说,DSA 是有风险的,因为如果您在带有错误 RNG 的盒子上进行签名(并且使用带有 ssh 客户端的密钥登录实际上是在进行签名),那么您的密钥可能会受到损害。鉴于 Debian OpenSSL 随机数生成器的惨败, AIUI 这使得 Debian 基本上放弃了 DSA用于其基础设施上使用的密钥。

http://meyering.net/nuke-your-DSA-keys/

ECDSA 相对较新,通过一些快速搜索,它似乎是在 5.7 中引入的。Afaict 这些系统中的大多数都不受支持,可能应该被迁移,但我们都知道这不会发生。例如,Debian 挤压和 ubuntu 清醒。ECDSA 的优势在于,对于相同级别(假定的)安全性,密钥可以比 RSA 或 DSA 密钥小得多。不幸的是,它具有 DSA 对不良随机数生成器敏感的缺点。也有人担心传统上使用的椭圆曲线可能已经被后门使用。

ED25519 是一个更新的选项,由 openssh 6.5 引入。它是 ECDSA 算法的一种变体,但它解决了随机数生成器问题并使用了“无所不能”曲线。从长远来看,这可能是最好的选择,但目前仍有一些受支持的系统没有足够新的 openssh。

因此,IMO 使 RSA(使用 2048 位或 4096 位密钥,具体取决于您的偏执程度)仍然是一般用途最合理的选择。

编辑:更新到 2017 年 3 月的当前情况。

使用 RSA。不是出于安全原因,而是出于兼容性原因。

我不建议使用 DSA 密钥。从 OpenSSH 7.0 开始,SSH 默认不再支持 DSA 密钥。正如OpenSSH 7.0 的发行说明所说,“在运行时默认禁用对 ssh-dss 主机和用户密钥的支持”。因此,使用 DSA 密钥 (ssh-dss) 只会让人头疼。

ECDSA 密钥可能会更好,但遗憾的是,ECDSA 密钥也会在某些平台上引起兼容性问题。在 Fedora 上,gnome-keyring-daemon 不会自动获取 ECDSA SSH 密钥,因此当您尝试在 Fedora 上使用它时,不会自动提示您输入密码来解锁您的 SSH 密钥。

RSA 密钥完全没有这些兼容性问题。它们是使用最广泛的,因此似乎得到了最好的支持。因此,我建议您生成 RSA 密钥,以免以后遇到麻烦。


作为编辑说明,OpenSSH 禁用 DSA 支持的决定有点令人费解:1024 位 DSA 密钥的安全性与 1024 位 RSA 密钥大致相同,因此不清楚为什么 OpenSSH 禁用了对 1024 位 DSA 密钥的支持但保留了支持用于 1024 位 RSA 密钥。(OpenSSH 仍然支持 RSA;它有一个特殊的检查来禁用 768 位或更短的 RSA 密钥,但对于 DSA,它只是禁用所有 DSA 密钥,无论长度如何。)此外,OpenSSH 曾经支持超过 768 位的 DSA 密钥长度为 1024 位;目前尚不清楚为什么对它们的支持已被禁用。哦,好吧,就这样吧。

DSA 和 ECDSA 具有固定长度的密钥,它们是美国政府标准,这意味着它们比公众更了解这些标准。RSA 更为人所知,您可以使用它生成更长的密钥(默认为 2048,而不是 DSA 的 1024 位固定长度),因此(可以说)更好用。