RSA算法与DSA算法的区别
当我们在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已经实际上可**,建议不使用。