https://mp.weixin.qq.com/s/6cY2CCEe_w1LfPnu36Xg3g
概述
公鑰密碼算法也常稱為非對稱密碼算法。其最大特點是其密鑰是成對出現的,其密鑰對由公鑰和私鑰組成。公鑰和私鑰是不相同的,已知私鑰可推導出公鑰,但已知公鑰不能推導出私鑰。公鑰可對外公開,私鑰由用戶自己秘密保存。
公鑰密碼算法有兩種基本應用模式:一是加密模式,即以用戶公鑰作為加密密鑰,以用戶私鑰作為解密密鑰,實現多個用戶的加密信息只能由一個用戶解讀;二是認證模式,即以用戶私鑰進行數字簽名,以用戶公鑰驗證簽名,實現一個用戶的簽名可以由多個用戶驗證。用於加解密中的密鑰對,稱為加密密鑰對。用於簽名驗證中的密鑰對稱為簽名密鑰對。
目前的公鑰密碼主要有RSA、ECC、IBC三類,針對RSA我國沒有相應的標准算法出台,而針對ECC和IBC,我國分別有相應的SM2、SM9標准算法發布。
RSA
1977年,麻省理工學院的三位數學家Rivest、Shamir、Adleman創建了一個比較完善的公鑰密碼算法,就是著名的RSA算法。RSA算法在過去一直是最受歡迎的公鑰密碼算法,其算法比較簡單,加密解密都只是一個模冪運算,速度快,效率高。在相當長的一段時間內,RSA在公鑰密碼算法中占據着主導地位,並得到了廣泛的應用。
也許因為RSA密碼的特殊地位和重要應用,國際上破解RSA的研究工作從來沒有間斷並在不斷推進。目前RSA 1024已失去其安全性,將被淘汰。目前看來,RSA 2048(及以上)是安全的,而RSA算法復雜度隨着模長的增加,運算量成指數級上升,同時也相應增加了密鑰存儲量。
2011年,國家密碼管理局下發通知,停止審批RSA密碼應用新建項目。
ECC(SM2)
1985年, Miller和 Koblitz分別獨立提出了橢圓曲線密碼(ECC)。和RSA相比,ECC算法的數學理論比較復雜,單位安全強度相對較高。ECC安全性建立在離散對數求取困難性基礎上,它的破譯或求解難度基本上是完全指數級的,而破解RSA的難度是亞指數級的。ECC公鑰密碼是單位比特強度最大的公鑰密碼,256比特的ECC公鑰密碼的安全強度比2048比特的RSA公鑰密碼強度還要強。要達到同樣的安全強度,ECC所需的密鑰長度遠比RSA低。
2012年,國家密碼管理局發布ECC國密標准算法SM2。
IBC (SM9)
基於標識的密碼(Identity-Based Cryptography)簡稱IBC,是與RSA、ECC相比具有其獨特性的又一種公鑰密碼。這種獨特性表現在其公鑰是用戶的身份標識,而不是隨機數(亂碼)。
IBC這個概念最初出現於1984年Shamir(RSA密碼創始人之一)的論文中,IBC密碼系統公鑰和私鑰采用一種不同於RSA和ECC的特殊方法產生,即公鑰是用戶的身份標識,而私鑰通過綁定身份標識與系統主密鑰(master key)生成。
Miller在1985年創建橢圓曲線密碼(ECC)后不久,在其一篇未發表的手稿中首次給出了計算雙線性對的多項式時間算法。但因為當時雙線性對在公鑰密碼中尚未取得有效應用,因此沒有引起研究者的關注。當雙線性對在公鑰密碼學中獲得諸多應用后,其計算的重要性也日趨顯著,時隔19年之后,Miller於2004年重新整理了當年的手稿,詳盡地論述了雙線性對的計算。雙線性對的有效計算奠定了IBC密碼算法基礎。
2016年,國家密碼管理局於發布IBC國密標准算法即SM9。
三種公鑰密碼應用比較
RSA與ECC/SM2公鑰密碼是基於數字證書的公鑰密碼,IBC/SM9是無證書的基於標識的公鑰密碼。
基於數字證書的公鑰密碼是目前廣泛使用的公鑰密碼,由可信的權威機構(CA)為每個用戶簽發公鑰證書。
CA擁有用戶的身份和公鑰后,CA需要驗證用戶的有效性和合法性,如果驗證通過,CA為其頒發證書,而這個證書包含CA的私鑰對用戶公鑰和身份等信息的簽名。如果想要驗證用戶的公鑰,需通過CA的公鑰驗證用戶的證書。
IBC作為PKI體系的發展和補充,既保證了簽名的安全特性,又滿足了各種應用更靈活的安全需求。IBC應用於PKI中是無證書的(certificateless),由於標識本身就是實體的公鑰,這類系統就不再依賴證書,在某種程度上簡化了PKI的應用。
在IBC中,可信第三方是密鑰生成中心KGC(key generation center),類似於PKI中的CA,一旦用戶的身份標識確定,KGC僅僅只需要驗證該用戶是否擁有該身份標識。如果驗證成功,則KGC為用戶創建其私鑰,這個私鑰是根據用戶身份標識和KGC的根私鑰生成的。
IBC密碼的應用比傳統公鑰密碼的應用在某種程度上更加簡單,但是,其代價是IBC密碼的設計與計算卻比其他公鑰密碼復雜得多。在IBC算法中,除了RSA和ECC中所具有的運算外,還增加了復雜的雙線性對(bilinear)計算。因此,IBC密碼算法運行速度遠不如RSA和ECC。
