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已經實際上可破解,建議不使用。
?
總結
以上是生活随笔為你收集整理的RSA算法与DSA算法的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 网络实例三(获取URL响应头的
- 下一篇: golang编译工具LiteIDE的调试