跳转至主要内容

偶尔,在解释如何设置SSH的公钥认证系统时,有人问我RSA和DSA密钥哪个更好。在接下来的几段中,我将尝试回答这个问题。在讨论之前,我会先透露一下,虽然我在以太网局域网和TCP/IP网络方面有一定的专业知识,但我对密码学的理解充其量只是个外行。下面的讨论是基于互联网的研究,其中有些是矛盾的,就像所有互联网的东西一样,有些链接比其他链接更可靠。

首先,什么是RSA和DSA密钥?

DSA或数字签名算法,是美国国家安全局为数字签名设计的一个美国政府标准。它源于ElGamal签名算法。其安全性是基于解决某些类型的对数函数的难度。它只能用于数字签名。

RSA的名字来自于作者Ron Rivest、Adi Shamir和Leonard Adleman的首字母,他们是第一次发表该算法的人。它是基于对大数进行分解的困难。与DSA不同,RSA可以用来加密整个信息。

我的理解是解决对数问题和因数问题同样难,但我找到一些参考资料,说对数问题更难(我也找到一些参考资料,说它们同样难)。

我认为不重要的事情,但你可能已经听到或将来可能听到。

  1. DSA的签名速度比RSA快,但RSA在验证阶段的速度更快,因为验证需要这两个阶段,所以差别并不重要。
  2. 正如我上面所说的,DSA只能用于认证,而RSA既可以用于认证,也可以用于加密消息。然而,SSH只使用密钥进行身份验证,所以同样,两者的区别并不重要。
  3. 对于同样的密钥长度,DSA会生成一个较小的签名文件。不过,由于每个密钥都要占用一个磁盘块,这也就无所谓了。
  4. DSA密钥最初被限制在1024位,但现在已经不是这样了。
  5. 我在"国家漏洞数据库"中搜索了"密钥和DSA"以及"密钥和RSA",发现有2个涉及DSA密钥的漏洞和5个涉及RSA密钥的漏洞。据我所知,所有这些漏洞都已在OpenSSL/OpenSSH的最新版本中得到解决,现在是OpenVOS互联网安全包的一部分。

有利于DSA的事情。

  1. DSA只能与SSH协议2一起使用,而RSA可以与协议1和2一起使用(参见"SSH 2″与"OpenSSL和OpenSSH第2版")。协议1有一些重大的设计缺陷,已经被协议2版本所取代。我认为这是一个稍稍偏向于使用DSA密钥的理由,这是一种内置的保护,避免使用旧的过时协议。

有利于RSA的事情。

  1. 一个不好的随机数发生器会泄露DSA密钥位(不要问我怎么泄露)。
  2. openssh.org网站似乎对哪个更好的问题不置可否,但新版本的ssh-keygen会在你不指定类型的情况下创建一个RSA密钥。
  3. 引用RSA密钥的RFCs似乎比DSA密钥更多(也更新)。

一些比较(文件大小包括不属于密钥的文本)。

DSA创建时间 RSA创建时间 DSA字节 RSA字节 DSA.pub字节 RSA.pub字节
1024位   1秒   1秒   736   951   610  230
2048位   8秒   2秒  1264  1743  1122  402
4096位  50秒  25秒  2304  3311  2146  742

 

无论你使用哪种密钥,真正重要的是密钥长度。鉴于目前的环境,我建议密钥长度为2048。这在今天看来可能是矫枉过正,但我不确定5年后是否会是这样。

至于使用哪种类型的密钥,我不得不倾向于RSA密钥。

© 2024Stratus Technologies.