本文译自:StackExchange security.stackexchange.com/questions/5…git
当咱们在Linux/Unix系统(windows下需用git的bash工具)中经过ssh-keygen
生成 ssh
认证密钥时,你要(用-t type
来)选择建立一对RSA或者DSA密钥。这二者之间有什么区别?是什么缘由让人们选择其中一个而不选另一个?算法
DSA(用于数字签名算法)的签名生成速度很快,验证速度很慢,加密时更慢,但解密时速度很快,安全性与RSA密钥相等,而密钥长度相等。此为一些重要的话,如今是一些观点。windows
RSA算法(可用于加密和数字签名)的安全性基于这样的事实:大整数的因式分解 被认为是‘难以破解’ (困难的) ,而DSA安全性基于离散对数问题。今天已知用于分解大整数块的最快算法是通用数字场筛(能够理解为对简单合理筛或二次筛的改进算法),也是解决有限域中的离散对数问题的最快算法,该算法以DSA指定的大素数为模。安全
如今,若是安全性能够被认为是平等的,那么咱们固然会同意更快的算法,可是,再一次,没有明确的赢家。bash
若是你的计算机安装了OpenSSL,请运行openssl speed
。您将看到DSA在生成签名时执行的很快,但在验证具备相同密钥长度的签名时速度要慢得多。一般来讲你想要验证得(速度)更快,若是你处理的是一个已签名的文件,(而若是你的)签名只生成一次,这很好,但文件签名最终可能会被用户频繁地验证 (这就很差了,由于验证速度很慢)。ssh
二者都支持某种形式的加密方法,开箱即用的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位。3d
今天,你最好使用RSA 2048位密钥(也能够直接生成4096位的RSA密钥)。code
FIPS 186-4规定了三种可用于数据保护的数字签名生成和验证技术:数字签名算法(DSA),椭圆曲线数字签名算法(ECDSA)和Rivest-Shamir Adelman算法( RSA)。
实际上,OpenSSH 7.0及以上版本默认禁用了ssh-dss
(DSA)公钥算法。官方没有给出具体的解释,但其中可能有OpenSSH的DSA密钥位数生成的缘由,同时生成签名时随机性差,可能会泄漏私钥,且以如今机算机的算力,DSA 1024-bit已经实际上可破解,建议不使用。
本期介绍DSA与RSA就到这里,具体项目中如何选择,根据状况生成,通常来讲,仍是推荐你们使用RSA算法。
\(•ㅂ•)/♥ 共勉~