阅读 1757

RSA算法与DSA算法的区别

本文译自:StackExchange security.stackexchange.com/questions/5…

当我们在Linux/Unix系统(windows下需用git的bash工具)中通过ssh-keygen生成 ssh认证密钥时,你要(用-t type来)选择创建一对RSA或者DSA密钥。这两者之间有什么区别?是什么原因让人们选择其中一个而不选另外一个?

Go with RSA


DSA(用于数字签名算法)的签名生成速度很快,验证速度很慢,加密时更慢,但解密时速度很快,安全性与RSA密钥相等,而密钥长度相等。此为一些重要的话,现在是一些观点。

RSA算法(可用于加密和数字签名)的安全性基于这样的事实:大整数的因式分解 被认为是‘难以破解’ (困难的) ,而DSA安全性基于离散对数问题。今天已知用于分解大整数块的最快算法是通用数字场筛(可以理解为对简单合理筛或二次筛的改进算法),也是解决有限域中的离散对数问题的最快算法,该算法以DSA指定的大素数为模。

现在,如果安全性可以被认为是平等的,那么我们当然会赞成更快的算法,但是,再一次,没有明确的赢家。

如果你的计算机安装了OpenSSL,请运行openssl speed。您将看到DSA在生成签名时执行的很快,但在验证具有相同密钥长度的签名时速度要慢得多。通常来说你想要验证得(速度)更快,如果你处理的是一个已签名的文件,(而如果你的)签名只生成一次,这很好,但文件签名最终可能会被用户频繁地验证 (这就不好了,因为验证速度很慢)。

两者都支持某种形式的加密方法,开箱即用的RSA和使用EI GAMAL(一种基于Diffie-Hellman密钥交换的非对称加密算法)的DSA。DSA解密速度通常很快,但加密较慢,而RSA则相反。同样,您会希望解密速度更快,因为一个加密文档可能会被频繁解密。

从商业角度来看,RSA显然是赢家,商业RSA证书比DSA证书被更广泛地部署。

关键是:(当查看) man ssh-keygen说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算法。

\(•ㅂ•)/♥ 共勉~

关注下面的标签,发现更多相似文章
评论