RSA算法與DSA算法的區別

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

當咱們在Linux/Unix系統(windows下需用git的bash工具)中經過ssh-keygen生成 ssh認證密鑰時,你要(用-t type來)選擇建立一對RSA或者DSA密鑰。這二者之間有什麼區別?是什麼緣由讓人們選擇其中一個而不選另一個?算法

Go with RSA


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算法。

\(•ㅂ•)/♥ 共勉~

相關文章
相關標籤/搜索