本文译自:StackExchange
https://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys
当我们在Linux/Unix系统(windows下需用git的bash工具)中通过生成ssh认证密钥时,你要(用-t type来)选择创建一对RSA或者DSA密钥。这两者之间有什么区别?是什么原因让人们选择其中一个而不选另外一个?
Go with RSA
DSA(用于数字签名算法)的签名生成速度很快,验证速度很慢,加密时更慢,但解密时速度很快,安全性与RSA密钥相等,而密钥长度相等。此为一些重要的话,现在是一些观点。
RSA算法(可用于加密和数字签名)的安全性基于这样的事实:大整数的因式分解被认为是‘难以破解’(困难的),而DSA安全性基于离散对数问题。今天已知用于分解大整数块的最快算法是通用数字场筛(可以理解为对简单合理筛或二次筛的改进算法),也是解决有限域中的离散对数问题的最快算法,该算法以DSA指定的大素数为模。
现在,如果安全性可以被认为是平等的,那么我们当然会赞成更快的算法,但是,再一次,没有明确的赢家。
如果你的计算机安装了OpenSSL,请运行。您将看到DSA在生成签名时执行的很快,但在验证具有相同密钥长度的签名时速度要慢得多。通常来说你想要验证得(速度)更快,如果你处理的是一个已签名的文件,(而如果你的)签名只生成一次,这很好,但文件签名最终可能会被用户频繁地验证(这就不好了,因为验证速度很慢)。
两者都支持某种形式的加密方法,开箱即用的RSA和使用EI GAMAL(一种基于Diffie-Hellman密钥交换的非对称加密算法)的DSA。DSA解密速度通常很快,但加密较慢,而RSA则相反。同样,您会希望解密速度更快,因为一个加密文档可能会被频繁解密。
从商业角度来看,RSA显然是赢家,商业RSA证书比DSA证书被更广泛地部署。
关键是:(当查看)说DSA密钥必须长1024位,才能符合NIST(美国国家标准技术研究院)的FIPS 186-2(数字签名标准).因此,虽然理论上可能有更长的DSA密钥(FIPS 186-2也明确允许它们),但你仍然受限于1024位。
今天,你最好使用RSA 2048位密钥(也可以直接生成4096位的RSA密钥)。
FIPS 186-4规定了三种可用于数据保护的数字签名生成和验证技术:数字签名算法(DSA),椭圆曲线数字签名算法(ECDSA)和Rivest-Shamir Adelman算法( RSA)。
后记
实际上,OpenSSH 7.0及以上版本默认禁用了ssh-dss(DSA)公钥算法。官方没有给出具体的解释,但其中可能有OpenSSH,DSA密钥位数生成的原因,同时生成签名时随机性差,可能会泄漏私钥,且以现在机算机的算力,DSA 1024-bit已经实际上可破解,建议不使用。
本期介绍DSA与RSA就到这里,具体项目中如何选择,根据情况生成,一般来说,还是推荐大家使用RSA算法。
\(•ㅂ•)/ 共勉~
领取专属 10元无门槛券
私享最新 技术干货