1. 密碼強度比較
Symmetric |
ECC |
RSA |
80 | 163 | 1024 |
112 | 233 | 2240 |
128 | 283 | 3072 |
192 | 409 | 7680 |
這是學術界普遍認可的密碼強度對照表。比如,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 |
Sign |
|
RSA-1024 |
12 us | 511 us |
RSA-2048 |
30 us | 3270 us |
ECDSA-192 |
590 us | 490 us |
表中數據是筆者基於自己的開發機器(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操作頻度相當的應用場景。比如,點對點的安全信道建立。
//歡迎技術交流![email protected]