SSH 密鑰類型的的選擇(RSA, DSA or Other)


SSH 密鑰類型的的選擇(RSA, DSA or Other)

來源

在用 ssh-keygen 生成密鑰對時,通常會面臨是使用RSA還是DSA的選擇:RSA or DSA, this is a question! 今天在這里分析一下:

原理與安全性

RSA 與 DSA 都是非對稱加密算法。其中RSA的安全性是基於極其困難的大整數的分解(兩個素數的乘積);DSA 的安全性是基於整數有限域離散對數難題。基本上可以認為相同密鑰長度的 RSA 算法與 DSA 算法安全性相當。

有點要注意,RSA 的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA 就一定需要作大數分解。不過也不必太過擔心,RSA 從誕生以來,經歷了各種攻擊,至今未被完全攻破(依靠暴力破解,小於1024位密鑰長度的 RSA 有被攻破的記錄,但未從算法上被攻破)。

用途:

DSA 只能用於數字簽名,而無法用於加密(某些擴展可以支持加密);RSA 即可作為數字簽名,也可以作為加密算法。不過作為加密使用的 RSA 有着隨密鑰長度增加,性能急劇下降的問題。

性能:

相同密鑰長度下,DSA 做簽名時速度更快,但做簽名驗證時速度較慢,一般情況驗證簽名的次數多於簽名的次數。

相同密鑰長度下,DSA (在擴展支持下)解密密文更快,而加密更慢;RSA 正好反過來,一般來說解密次數多於加密次數。不過由於非對稱加密算法的先天性能問題,兩者都不是加密的好選擇。

業界支持:

在業界支持方面,RSA 顯然是贏家。RSA 具有更為廣泛的部署與支持。

使用 ssh-keygen 時的選擇:

上面說了那么多,可以看到RSA 與 DSA 各有優缺點。回到開頭的問題,在使用 ssh-keygen 時,RSA 與 DSA到底選哪個? 比較有意思的是,這個問題最終答案與上面那些優缺點無關。雖然理論上可以生成更長長度的 DSA 密鑰 (NIST FIPS 186-3),但ssh-keygen在生成 DSA 密鑰時,其長度只能為1024位(基於NIST FIPS 186-2);而 ssh-keygen 在 RSA 的密鑰長度上沒有限制。

由於小於1024位密鑰長度的 RSA 已經有被攻破的記錄,所以說現在:RSA 2048 位密鑰是更好的選擇。

其它選擇:

RSA 與 DSA 各有優缺點,那有沒一個更好的選擇呢?答案是肯定的,ECC(Elliptic Curves Cryptography):橢圓曲線算法。

ECC 與 RSA 相比,有以下的優點:

(1)相同密鑰長度下,安全性能更高,如160位ECC已經與1024位RSA、DSA有相同的安全強度。
(2)計算量小,處理速度快,在私鑰的處理速度上(解密和簽名),ECC遠 比RSA、DSA快得多。
(3)存儲空間占用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多, 所以占用的存儲空間小得多。
(4)帶寬要求低使得ECC具有廣泛得應用前景。

在 ssh-keygen 中,ECC 算法的相應參數是 “-t ecdsa”。可惜的是由於橢圓曲線算法只有在較新版本的 openssl 與 ssh-keygen 中才被支持,而無法得到普遍使用而去完全替代 RSA/DSA。不過由於橢圓曲線算法的優點,使其取代 RSA/DSA 而成為新一代通用的非對稱加密算法成為可能,至少 SET 協議的制定者們已經把它作為下一代 SET 協議中缺省的公鑰密碼算法了。

參考:

1)http://security.stackexchange.com/questions/5096/rsa-vs-dsa-for-ssh-authentication-keys

2)http://iask.sina.com.cn/b/7132379.html

3)http://msdn.microsoft.com/zh-cn/library/ms978415.aspx

4)http://topic.csdn.net/u/20091019/10/DF64616B-4EA0-440A-B96F-A0F2A751CA50.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM