RSA演算法與DSA演算法的區別
本文譯自: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演算法。
(???)/ 共勉~
TAG:SuperFullStack |