數(shù)字簽名技術(shù)已經(jīng)廣泛使用于網(wǎng)絡(luò)安全協(xié)議或分布式系統(tǒng)中,目前比較流行的數(shù)字簽名算法有RSA和ECDSA关噪。很多同學(xué)在產(chǎn)品設(shè)計(jì)中往往都難以區(qū)分RSA和ECDSA的優(yōu)劣衔憨,所以筆者將基于自己的實(shí)踐严卖,來(lái)給出一些初步的建議。
1. 密碼強(qiáng)度比較
Symmetric
ECC
RSA
801631024
1122332240
1282833072
1924097680
這是學(xué)術(shù)界普遍認(rèn)可的密碼強(qiáng)度對(duì)照表梢什。比如奠蹬,3072-bit的RSA密碼強(qiáng)度,大約相當(dāng)于283-bit的ECC密碼強(qiáng)度嗡午,大約相當(dāng)于128-bit的對(duì)稱密碼算法的強(qiáng)度囤躁。換句話說(shuō),攻擊分組加密算法AES-128的難度荔睹,與攻擊數(shù)字簽名RSA-3072的難度相當(dāng)割以。此外,我們應(yīng)注意到应媚,從RSA-1024到RSA-3072严沥,模數(shù)長(zhǎng)度增長(zhǎng)了200%,但密碼強(qiáng)度僅增強(qiáng)了50%左右中姜;拿密碼哈希函數(shù)來(lái)比較消玄,這個(gè)安全強(qiáng)度的增長(zhǎng)只是相當(dāng)于從SHA1增強(qiáng)到SHA-256。
2. 性能比較
筆者基于開(kāi)源的tommathlib實(shí)現(xiàn)了ECDSA(符合ANSI X9.62標(biāo)準(zhǔn))和RSA簽名算法(符合PKCS#1 v2.1, e=65537)丢胚。
?Verify
Sign
RSA-1024
12 us511 us
RSA-2048
30 us3270 us
ECDSA-192
590 us490 us
表中數(shù)據(jù)是筆者基于自己的開(kāi)發(fā)機(jī)器(Intel Xeon CPU E5520? @ 2.27GHz)上單線程運(yùn)行得出的實(shí)驗(yàn)結(jié)果翩瓜。對(duì)于ECDSA來(lái)說(shuō),生成簽名與驗(yàn)證簽名的開(kāi)銷相差不大携龟,而對(duì)于RSA來(lái)說(shuō)兔跌,驗(yàn)證簽名比生成簽名要高效得多,這是因?yàn)镽SA可以選用小公鑰指數(shù)峡蟋,比如{3, 5, 17, 257 or 65537}坟桅,而安全強(qiáng)度不變。如果只看單次操作蕊蝗,那么ECDSA的Sign操作比RSA的性能更好仅乓,而RSA的Verify要比ECDSA更好。
3. 結(jié)論
(1) RSA簽名算法適合于:Verify操作頻度高蓬戚,而Sign操作頻度低的應(yīng)用場(chǎng)景夸楣。比如,分布式系統(tǒng)中基于capability的訪問(wèn)控制就是這樣的一種場(chǎng)景。
(2) ECDSA簽名算法適合于:Sign和Verify操作頻度相當(dāng)?shù)膽?yīng)用場(chǎng)景豫喧。比如石洗,點(diǎn)對(duì)點(diǎn)的安全信道建立。