數字簽名技術已經廣泛使用於網絡安全協議或分布式系統中,目前比較流行的數字簽名算法有RSA和ECDSA。很多同學在產品設計中往往都難以區分RSA和ECDSA的優劣,所以筆者將基於自己的實踐,來給出一些初步的建議。
1. 密碼強度比較
Symmetric這是學術界普遍認可的密碼強度對照表。比如,3072-bit的RSA密碼強度,大約相當於283-bit的ECC密碼強度,大約相當於128-bit的對稱密碼算法的強度。換句話說,攻擊分組加密算法AES-128的難度,與攻擊數字簽名RSA-3072的難度相當。此外,我們應注意到,從RSA-1024到RSA-3072,模數長度增長了200%,但密碼強度僅增強了50%左右;拿密碼哈希函數來比較,這個安全強度的增長只是相當於從SHA1增強到SHA-256。
2. 性能比較
筆者基於開源的tommathlib實現了ECDSA(符合ANSI X9.62標准)和RSA簽名算法(符合PKCS#1 v2.1, e=65537)。
Verify表中數據是筆者基於自己的開發機器(Intel Xeon CPU E5520 @ 2.27GHz)上單線程運行得出的實驗結果。對於ECDSA來說,生成簽名與驗證簽名的開銷相差不大,而對於RSA來說,驗證簽名比生成簽名要高效得多,這是因為RSA可以選用小公鑰指數,比如{3, 5, 17, 257 or 65537},而安全強度不變。如果只看單次操作,那麼ECDSA的Sign操作比RSA的性能更好,而RSA的Verify要比ECDSA更好。
3. 結論
(1) RSA簽名算法適合於:Verify操作頻度高,而Sign操作頻度低的應用場景。比如,分布式系統中基於capability的訪問控制就是這樣的一種場景。
(2) ECDSA簽名算法適合於:Sign和Verify操作頻度相當的應用場景。比如,點對點的安全信道建立。