我想知道您可以使用ssh-keygen -t
(dsa | ecdsa | ed25519 | rsa | rsa1)创建不同类型的密钥。由于提供了不同的类型,我认为每种类型都比其他类型具有特定的优势。真的吗?这些是什么?由于 RSA 是默认类型 (问题 39321),这是最安全的吗?是否有一个是最多安全的?
答案1
没有一种算法是“最安全的”。一旦算法达到需要巨大数学突破或数十亿年计算能力的地步,强度比较就变得毫无意义。
RSA之所以普遍,是因为它很普遍。它已经存在很长时间了,因此每个实现都支持 RSA,因此每个实现都不断提供 RSA 以实现互操作性。
RSA只要您选择足够大的密钥大小,它就是安全的:1024 是不可破解的,但几年后可能会被 NSA 级别的攻击者破解; 2048(OpenSSH 当前版本的默认大小ssh-keygen
)从中期来看是安全的。 (RSA1 是 SSH 协议的旧版本,它有弱点,不应该再使用。反正它已经快要灭绝了。)
DSA仅限于 1024 位密钥。通常无法比较不同算法的密钥大小,但 DSA 和 RSA 之间的强度大致相同。 OpenSSH 仅支持 1024 位密钥,因为这是旧 DSA 标准 (FIPS 186-2) 中的最大大小,并且 SSH 协议未更新。由于 DSA-1024 被认为较弱,因此它在某种程度上已被弃用,并且OpenSSH 7.0默认情况下在服务器配置中禁用它(在 SSH 协议中使用 DSA 密钥称为ssh-dss
)。
电子CDSA是一个较新的算法系列;对于相同的安全级别,它比 RSA 或 DSA 快得多,并且密钥更小。 ECDSA 支持不如 RSA 普遍,部分原因是它较新,部分原因是高效实现技术的专利。 OpenSSH 支持的任何密钥大小都是安全的。
埃德25519是 ECDSA 的较新替代方案。对于最终用户来说,它与 ECDSA 相比没有显着优势(对于实施者来说,它带来的专利侵权风险较小)。但由于它较新,您可能想要连接到尚不支持它的机器;使用 ECDSA 则不太可能出现这种情况。
因此,默认的 RSA 很好,但如果您使用功能较弱的计算机(例如低端智能手机、路由器等),则更喜欢 ECDSA(或 Ed25519)(如果支持)。
答案2
网上有类似的答案信息安全 Stackexchange 站点。在实际工作中,大家都应该各司其职。
- RSA 是通用的,应该可以在任何地方使用
- DSA 在最近的 openssh (7.1) 中被禁用,并且使用周随机数生成器可能会表现更差
- ECDSA 的计算量较小,但在当今的计算机上您不会注意到其中的差异。缺点也是密钥长度固定(与 DSA 相同)。
- ED25519 不太普遍,但不应包含任何国家机构的任何后门来源问题
- RSA1 是旧 SSHv1 协议的 RSA 密钥,该协议已过时,不应被任何现代服务器接受。
答案3
在其他答案的基础上,截至 2019 年,ED25519 正在得到广泛使用和支持;我关注的大多数专家都认为它是比 ECDSA 更好的选择(因为它被认为没有任何国家安全机构的任何后门)。
综上所述,ECDSA 并不完全可信,RSA 1 已经过时。 DSA 已经过时了。 RSA (v2) 即将过时。如果您期待的话,就只剩下 ED25519 了。
如果有什么事情阻止我使用 ED25519,我会回退到具有更大密钥大小的 RSA v2(对我来说是 4096 位)。
这是一个非常好的讨论:
https://security.stackexchange.com/questions/50878/ecdsa-vs-ecdh-vs-ed25519-vs-curve25519
我特别喜欢这个答案:
https://security.stackexchange.com/a/53387/37051
来自Ed25519 简介,有一些速度上的好处,还有一些安全上的好处。更有趣的安全优势之一是它不受多种侧通道攻击的影响:
- 没有秘密数组索引。该软件从不从 RAM 中的秘密地址读取或写入数据;地址的模式是完全可以预测的。因此,该软件不会受到缓存定时攻击、超线程攻击和其他依赖于通过 CPU 缓存泄漏地址的旁道攻击。
- 没有秘密分支条件。该软件从不执行基于秘密数据的条件分支;跳跃的模式是完全可以预测的。因此,该软件不会受到依赖于通过分支预测单元泄漏信息的旁道攻击。
从答案中布莱恩明顿