謝宗曉 李達 馬春旺



1 概述
公鑰密碼算法的產生主要是為了解決密鑰分發(fā)困難的問題1)。1976年,Whitfield Diffie和Martin Hellman提出了公開密鑰加密的設計思想,但當時并未能給出實現(xiàn)的算法。之后,有多種算法被提出,但經得住考驗得到大面積應用的主要是Ron Rivest、Adi Shamir和Leonard Adleman在1978年提出的RSA算法。直到現(xiàn)在,RSA幾乎成了公鑰密碼領域事實上的標準。關于公鑰密碼算法的更多基礎知識,請參考文獻[1]。
RSA算法的安全性,主要是基于大整數質因數分解的困難性,這意味著如果這個整數太小,就很容易受到暴力攻擊。所以,RSA算法的密鑰,越來越長。NIST2)建議在2010年12月31日前停止使用RSA1024,升級至RSA2048。當然,到目前,也沒有明確的證據表明RSA1024已經被破解了,但是從當前計算能力的升級速度推測,RSA1024確實已經不安全了。
密鑰長度的不斷增加意味著效率在不停地降低,與一味地增加密鑰長度相比,尋求更合適的陷門單向函數是解決這個問題更佳途徑。Neal Koblitz3)和Victor Miller4)分別獨立地在1985年將橢圓曲線引入密碼學領域。
2 橢圓曲線密碼學
橢圓曲線密碼學(Elliptic curve cryptography,ECC)的數學基礎遠沒有RSA算法那么易于理解。首先,橢圓曲線和橢圓是兩碼事,兩者之間聯(lián)系不大。最常見的橢圓曲線方程,如公式(1)典型的二元三次方程。
但是這個方程的幾何表現(xiàn)形式并不是橢圓,或者說,跟橢圓基本沒什么關系。其圖形如圖1中的示例。
之所以被命名為橢圓曲線方程,是因為圓周長有固定的公式,很容易求解,但是橢圓就復雜得多,開始人們想利用微積分計算橢圓的周長,其最終表達式類似于公式(2)。
公式(2)中矩形框標識出來的分母,與公式(1)基本一致,因此形如公式(1)這樣的方程,被稱為“橢圓曲線”。可見,橢圓曲線密碼的基礎知識相對RSA而言要抽象得多。因此,GB/T 32918.1—2016《信息安全技術 SM2橢圓曲線公鑰密碼算法 第1部分:總則》先給出了SM2橢圓曲線公鑰密碼算法涉及的必要數學基礎知識與相關密碼技術,在后續(xù)的部分中討論具體的密碼機制。
我們不去討論抽象的阿貝爾群等抽象的概念,直接看圖2,橢圓曲線關于X軸是對稱的。在橢圓曲線上定義二元運算,即橢圓曲線上的加法。
圖2中,曲線上的兩個點A和B,連接兩點的直線與曲線有且僅有一個交點,該交點關于X軸的對稱點,即為A+B。如果A點和B點重合,那么就尋找其切線與曲線的交點,對稱點為2A。因此,曲線上的任意點G,我們可以找到,2G,3G,…,nG。G為基點,nG為多倍點。
顯然,已知G,求解nG非常簡單,但是已知nG,求解n則很困難。這就具備了單向函數的基本特征。已知多倍點與基點,求解倍數的問題稱為橢圓曲線離散對數問題,一般橢圓曲線的離散對數問題,求解計算的復雜度是指數級。
橢圓曲線密碼學的理論基礎就是基于橢圓曲線離散對數的數學難題。GB/T 32918系列標準的引言中指出:與大數分解問題及有限域上離散對數問題相比,橢圓曲線離散對數問題的求解難度要大得多。因此,同等強度的橢圓曲線密碼學在安全性和效率上比RSA都有大幅度提升。
3 SM2密碼算法標準
國家密碼管理局于2010年12月17日5)發(fā)布了國產商用密碼算法SM2。在算法大類上,SM2屬于公鑰密碼算法(非對稱密碼算法),就具體實現(xiàn)而言,SM2屬于橢圓曲線密碼算法。2012年,SM2被采納為GM/T 0003系列標準,2016年轉化為GB/T 32918系列標準。
SM2的發(fā)布,主要是為了滿足電子認證服務系統(tǒng)等應用需求。表1中給出了SM2密碼算法標準的5個部分。
GB/T 32918.1—2016主要介紹了橢圓曲線密碼學所用到的必要的數學基礎,包括有限域和橢圓曲線等,在第6章中討論了密鑰對的生成,以及公鑰的驗證,附錄C中有橢圓曲線的示例。
GB/T 32918.2—2016描述了用橢圓曲線所實現(xiàn)的數字簽名算法和SM2簽名算法,關于數字簽名的更多資料,請參考文獻[2]和[3]。GB/T 32918.2—2016中,第5章介紹了數字簽名算法,第6章介紹了數字簽名生成算法及其流程,第7章介紹了數字簽名驗證算法及其流程。
GB/T 32918.3—2016規(guī)定了SM2橢圓曲線公鑰密碼算法的密鑰交換協(xié)議,并給出了密鑰交換與驗證示例及其相應的流程。在密鑰交換協(xié)議中,要用到輔助函數,包括密碼雜湊函數、密鑰派生函數和隨機數發(fā)生器。其中密碼雜湊函數用到了SM3。
GB/T 32918.4—2016描述了用橢圓曲線所實現(xiàn)的公鑰加密算法,SM2加密算法。在簽名算法中,簽名者用自己私鑰加密,驗證者用簽名者的公鑰解密,這就保證了消息發(fā)送者是唯一持有密鑰的人。在SM2加密算法中,用接收者的公鑰加密,接收者用自己的私鑰解密,這解決了最基本的密鑰傳輸難題。
GB/T 32918.2—2016和GB/T 32918.4—2016實際給出了SM2最典型的兩種用法。
GB/T 32918.5—2016給出了SM2橢圓曲線公鑰密碼算法的曲線參數。
4 SM2相關標準
密碼行業(yè)標準化技術委員會還發(fā)布了關于SM2的一系列相關標準,具體如表2所示。
GB/T 35276—2017與GM/T 0009—2012,
GB/ T 35275—2017與GM/ T 0010—2012保持了一致。但是,GB/T 20518—2018與GB/T 25056—2018則是根據GM/T 0015—2012或GM/T 0034—2014進行了修訂。
GB/T 35276—2017定義了SM2密碼算法的使用方法,以及密鑰、加密和簽名等的數據格式。GB/T 35275—2017則是規(guī)定了SM2密碼算法的加密簽名的消息語法。
GB/T 20518之前有2006年版本,2018年為修訂版本,GB/T 25056—2018明確地指出應該優(yōu)先使用國產密碼算法,例如,SM2和SM3等。標準中要求,在證書或CertificateList中的SignatureAlgorithm字段,來標識使用的算法。GB/T 25056—2018之前有2010年版本,該標準則是針對數字認證系統(tǒng)。
5 小結
SM2密碼算法,尤其是基于SM2的數字簽名技術,在國內金融等行業(yè)已經得到廣泛的應用,逐步替代了基于RSA算法的數字簽名。與大整數質因數分解為數學基礎的RSA算法相比,以橢圓曲線離散對數為數學基礎的SM2,所需要的密鑰長度比較短,也就是說,同樣的密鑰長度,橢圓曲線密碼可以提供更高等級的安全。
(注:本文僅做學術探討,與作者所在單位觀點無關)
參考文獻
[1] 謝宗曉,董坤祥,甄杰.公鑰基礎設施(PKI)的發(fā)展過程及其架構[J].中國質量與標準導報, 2020(5):17-20.
[2] 謝宗曉,甄杰.公鑰基礎設施(PKI)國家標準解析[J].中國質量與標準導報, 2018(12):18-21.
[3] 謝宗曉,劉琦.公鑰基礎設施(PKI)國際標準進展[J].金融電子化,2018(10):56-58.
[4] 霍煒,郭啟全,馬原.商用密碼應用與安全性評估[M]. 北京:中國工信出版社/電子工業(yè)出版社,2020.
[5] 鄭昉昱,林璟鏘,魏榮,等.密碼應用安全技術研究及軟件密碼模塊檢測的討論[J].密碼學報, 2020,7(3):290-310.