Mik*_*ley 61

id_rsa.pub并且id_dsa.pub是公开密钥id_rsaid_dsa.

如果你问有关SSH,id_rsaRSA密钥,可以用SSH协议1或2中使用,而id_dsaDSA关键,只能用SSH协议2.使用 两者都是非常安全的,但DSA似乎是这些天的标准(假设所有客户端/服务器都支持SSH 2).

更新:由于这是写的DSA已被证明是不安全的.以下答案中提供了更多信息.

  • @AdamKatz DSA自2009年以来一直支持2048位和3072位密钥(根据[FIPS 186-3](http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf) ).大多数ssh客户端/服务器支持更大的DSA密钥,包括OpenSSH和PuTTY.大多数密钥生成器也支持更大的DSA密钥,但OpenSSH的ssh-keygen仍然不支持(即使ssh和sshd都这样做).对于Linux,您可以使用OpenSSL生成更大的DSA密钥,如[此博客文章](https://digitalelf.net/2014/02/using-2048-bit-dsa-keys-with-openssh/)中所述. (3认同)
  • 有趣的!我不知道这一点,这确实有助于拉平两者之间的差距(尽管缺乏 OpenSSH 支持是非常糟糕的)。不过,我不会说 DSA 是标准(无论是现在还是 2010 年),而 RSA 绝对是标准(而且我们正在过渡到像 Ed25519 这样的椭圆曲线系统)。 (2认同)

Ada*_*atz 43

SSH使用公钥/私钥对,因此 id_rsa您的RSA私钥(基于素数)也是如此,比您的id_dsa DSA私钥(基于指数)更安全.保持您的私钥安全,id_rsa.pubid_dsa.pub广泛分享您的和公钥.

DSA不安全

如果您的计算机的随机数生成器是低于标准,则DSA具有可猜测的参数,这将显示您的密钥. ECDSA(DSA的椭圆曲线升级)同样容易受到攻击.即使有良好的随机数,DSA还有其他强度问题PDF(这些也可以在Diffie-Hellman中找到).

OpenSSH创建不安全的1024位密钥(解决方法),现在默认禁用DSA.

尽可能使用Ed25519

椭圆曲线加密技术通过更小的密钥大小提高了复杂性. Ed25519(基于平面建模椭圆曲线的复杂性)是首选实施方案,因为它假设缺乏干预(泄露的文件表明美国国家安全局削弱了加密标准).

不幸的是,Ed25519仍然相当新,需要OpenSSH 6.5GnuPG 2.1(参见完整列表).

当Ed25519不可用时,使用带有4096位的RSA

RSA密钥大小为4096位,其复杂程度应与Ed25519相当.

由于担心RSA可能容易受到与DSA相同的强度问题,Ed25519仍然优于RSA,尽管将该漏洞应用于RSA预计会相当困难.

  • 仅一次更正:自2009年以来,DSA已支持2048位和3072位密钥(根据[FIPS 186-3](http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf) )).以上评论中的更多信息. (2认同)
  • Infosec SE有一个[这个问题很好的答案](https://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys/46781#46781)更深入.它引用了[Black Hat 2013 talk](https://isecpartners.com/media/105564/ritter_samuel_stamos_bh_2013_cryptopocalypse.pdf),表明DSA不再安全,即使在更大的密钥大小时也是如此. (2认同)
  • 我已经更新了这个答案,以便更全面地了解DSA的问题.它现在比(同样有效的)Infosec SE答案更详细.当您将鼠标悬停在某些链接上时,会有更多细节. (2认同)
  • 这篇文章教会了我很多,需要更多的支持。 (2认同)

Von*_*onC 8

rsa is considered more secure.

Not anymore (May 2020, ten years later), with OpenSSH 8.2, as reported by Julio

Future deprecation notice

It is now possible1 to perform chosen-prefix attacks against the SHA-1 hash algorithm for less than USD$50K.
For this reason, we will be disabling the "ssh-rsa" public key signature algorithm that depends on SHA-1 by default in a near-future release.

(See "SHA-1 is a Shambles: First Chosen-Prefix Collision on SHA-1 and Application to the PGP Web of Trust" Leurent, G and Peyrin, T (2020))

This algorithm is unfortunately still used widely despite the existence of better alternatives, being the only remaining public key signature algorithm specified by the original SSH RFCs.

The better alternatives include:

  • RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512。
    这些算法的优点是使用与“ ssh-rsa”相同的密钥类型,但使用安全的 SHA-2 哈希算法。
    这些自 OpenSSH 7.2 起就受到支持,并且如果客户端和服务器支持它们,则默认情况下已经使用它们。

  • ssh-ed25519 签名算法。
    自 OpenSSH 6.5 版本起就支持它。

  • RFC5656 ECDSA 算法:ecdsa-sha2-nistp256/384/521。
    OpenSSH 自 5.7 版起就支持这些。

要检查服务器是否使用弱 ssh-rsa 公钥算法进行主机身份验证,请在ssh-rsa从 ssh(1) 的允许列表中删除该算法后尝试连接到它:

ssh -oHostKeyAlgorithms=-ssh-rsa user@host
Run Code Online (Sandbox Code Playgroud)

如果主机密钥验证失败并且没有其他支持的主机密钥类型可用,则应升级该主机上的服务器软件。

OpenSSH 的未来版本将UpdateHostKeys默认启用允许客户端自动迁移到更好的算法。
用户可以考虑手动启用此选项


Adam Katz在评论中澄清:

正如您所指出的,自 OpenSSH 7.2(2016)以来,默认的 RSA 签名变体一直是 rsa-sha2-512。这解决了 SHA-1 的弱点,并提醒人们 RSA 本身仍然被认为是安全的。自 OpenSSH 8.2( 2020 年 2 月)以来,UpdateHostKeys 默认启用。任何形式的 RSA 都比任何形式的 DSA 更安全,尽管现在您应该更喜欢 ed25519,如我的回答中所述。

因此需要明确的是,DSA 并不是真正的“更好的选择”。

亚当补充道:

[这]可以理解为暗示 DSA 比 RSA 更安全,并且不应使用 RSA。

尽管 2016 年之前生成并部署在运行 OpenSSH < 8.2 的系统上的 RSA 密钥应该手动更新,但这些都不是真的。


Yan*_*min -10

一种使用DSA,一种使用RSA