與 PKCS #1 標準相比,其他非 RSA 算法如何?
可以說,PKCS 標準套件具有以利潤為導向的偏見,因為它們由 RSA 推廣,並以 RFC 和其他方式的形式將它們的算法推廣到其他人之上。
我正在考慮這種資訊偏差可能包括關於替代算法的虛假資訊或遺漏,這些替代算法可能同樣好,甚至更好。
還有哪些其他算法可以填補 PKCS#1 RSA 算法目前持有的空間?
RSA 是兩種算法,一種用於非對稱加密,另一種用於數字簽名。
對於非對稱加密,RSA 的主要競爭對手是:
- 拉賓密碼系統
- 埃爾加馬爾
- NTRUE加密
- Diffie-Hellman密鑰交換(實際上,密鑰交換幾乎與非對稱加密一樣好,因為非對稱加密的大多數用途是發送密鑰,然後是對稱加密)。
- 麥克埃利斯
對於簽名,有上述的變體;對於類似 ElGamal 的簽名,最著名的變體是DSA。
與幾乎所有其他競爭算法相比,RSA 的最大優勢在於它有一個標準( PKCS#1 ),它明確規定了每個字節應該去哪裡。為了獲得廣泛的工業認可,這樣的標準是必不可少的——它甚至是一個免費的標準。僅此一點就可以解釋 RSA 目前的主導地位。在這一點上,唯一可以與 RSA 抗衡的算法是DSA、其橢圓曲線變體ECDSA、Diffie-Hellman及其橢圓曲線變體。只有 DSA 標準本身是免費的。
就性能而言,RSA公鑰運算非常快,比離散對數的公鑰運算快得多。另一方面,對於私鑰操作,DSA 和 DH 的橢圓曲線變體比 RSA 快得多。這可以通過使用帶有命令行工具的OpenSSL來看到。
openssl speed
在便宜且不那麼新的 1.6 GHz AMD CPU(在 64 位模式下)上,我得到了這個:$ openssl speed rsa2048 dsa2048 ecdsap224 ecdhp224 Doing 2048 bit private rsa's for 10s: 1996 2048 bit private RSA's in 9.99s Doing 2048 bit public rsa's for 10s: 70600 2048 bit public RSA's in 9.99s Doing 2048 bit sign dsa's for 10s: 7311 2048 bit DSA signs in 9.99s Doing 2048 bit verify dsa's for 10s: 6218 2048 bit DSA verify in 9.99s Doing 224 bit sign ecdsa's for 10s: 43073 224 bit ECDSA signs in 10.00s Doing 224 bit verify ecdsa's for 10s: 9760 224 bit ECDSA verify in 9.99s Doing 224 bit ecdh's for 10s: 11474 224-bit ECDH ops in 9.99s OpenSSL 0.9.8k 25 Mar 2009 built on: Thu Feb 10 01:45:33 UTC 2011 options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr2) compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM available timing options: TIMES TIMEB HZ=100 [sysconf value] timing function used: times sign verify sign/s verify/s rsa 2048 bits 0.005005s 0.000142s 199.8 7067.1 sign verify sign/s verify/s dsa 2048 bits 0.001366s 0.001607s 731.8 622.4 sign verify sign/s verify/s 224 bit ecdsa (nistp224) 0.0002s 0.0010s 4307.3 977.0 op op/s 224 bit ecdh (nistp224) 0.0009s 1148.5
(我稍微編輯了輸出,使數字以圖形方式對齊。)
這在 224 位曲線上測試了 2048 位 RSA 與 2048 位 DSA,以及 ECDSA 和 ECDH,據說應該提供類似的安全性。RSA 在私鑰性能方面被打敗了,但在公鑰操作方面確實大放異彩。
此外(這在此基準測試中並不明顯),DSA 和 ECDSA 提供比 RSA 更短的簽名(ECDSA 比 P-224 為 56 字節,而 RSA-2048 為 256 字節)。
DSA 和 Diffie-Hellman 在上個世紀得到了美國聯邦政府的大力推動,因為當時 RSA 還在申請專利。否則,FIPS 186-3 將不會作為免費標準存在。如今,許多政府組織都在推動採用橢圓曲線密碼學,因為依賴單一原語“感覺不安全”:萬一 RSA 被嚴重破壞,應該已經開發了一組替代算法。
從上圖可以看出,ECDSA 和 ECDH 是 RSA 的不錯競爭對手,並且在某些特定情況下具有優勢。然而,對 RSA 的支持並不像對 RSA 那樣廣泛,因為相關標準要更新得多,並且涉及更高級別的數學(在某些時候,實現者——編寫實際程式碼的人——必須了解正在發生的事情,而 RSA更容易理解)。
未來,NTRU 可能是一個更快的替代方案,但現在它已獲得專利,而且仍然很新(這是專利的好處之一:它迫使世界其他地區在部署算法之前稍等片刻,並且這為密碼分析員留下了時間來完成他們的工作)。