鄧高宇,龍毅宏
(武漢理工大學信息工程學院,湖北 武漢 430070)
SM2橢圓曲線公鑰密碼算法于 2010年首次公開發(fā)布,2012年成為中國商用密碼標準,2016年成為中國國家密碼標準。迄今為止與SM2算法相關研究表明,SM2算法的可證安全性達到了公鑰密碼算法的最高安全級別[1],其實現(xiàn)效率相當于或略優(yōu)于一些國際標準的同類橢圓曲線密碼算法[2-5]。2013年,孫榮燕,蔡昌曙,周洲[6]等人對SM2數(shù)字簽名算法與 ECDSA算法進行了對比與分析研究,對ECDSA-SM2算法的數(shù)字模型進行了正確性證明。2016年,陳澤凱[7]實現(xiàn)了一個基于身份的SM2橢圓曲線數(shù)字簽名方案SM2-IBS,具有效率高、簽名長度短、不依賴PKI等特點。
隨著4G、WLAN、傳感器等無線網絡的普及,使用移動終端逐漸成為用戶訪問網絡處理業(yè)務(包括網絡通信、電子支付、網上銀行等)的重要手段[8]。而在移動終端上使用公鑰密碼私鑰如SM2私鑰時,最重要的一點就是保障用戶私鑰存儲、使用的安全。目前在移動終端對用戶私鑰進行有效保護的手段主要有兩種:一種是采用USB密碼鑰匙(USB key)作為客戶端裝置來存儲私鑰[9],此種方式給用戶帶來了使用成本,而且使用也不方便;另一種方式是使用移動終端內置密碼芯片來存儲私鑰并進行密碼運算,然而內置密碼芯片的移動終端應用不廣,市面上絕大部分手機都不自帶密碼芯片,且目前不存在支持SM2密碼運算的手機密碼芯片。由于使用密碼硬件存在諸多問題,目前最常用的方法是使用純軟件的密碼模塊,將用戶私鑰保存在移動終端本地,并通過PIN(Personal Identification Number)碼對私鑰進行保護。這種采用純軟件密碼模塊、將用戶私鑰保存在移動終端本地的方式存在用戶私鑰泄露風險[10],如:攻擊者通過木馬竊取保存在移動終端中的用戶私鑰,破解用戶保護私鑰的PIN碼,從而獲得用戶私鑰;采用純軟件密碼模塊方式,用戶私鑰最終需以明文形式導入到內存中使用,攻擊者有可能竊取存放在內存中的用戶私鑰。
為了在移動終端中安全的使用 SM2私鑰進行數(shù)字簽名,本文提出并實現(xiàn)了一種基于iOS移動終端的SM2移動密碼系統(tǒng)方案,采用秘密共享的方式來保障用戶SM2私鑰使用的安全性。
為滿足在iOS移動終端中安全使用SM2私鑰進行數(shù)字簽名的需求,本文提出的解決方案是將用戶私鑰通過一定的方式分割成多份,每份稱為秘密份額[11],然后將其中的一份秘密份額保存在iOS移動終端,其余的保存在密碼服務器中;當移動終端中的應用程序需要調用密碼模塊使用用戶 SM2私鑰進行數(shù)字簽名時,多個計算裝置分別使用自己的秘密份額進行密碼運算,最后將各裝置計算的結果合并形成最后的、使用用戶私鑰進行密碼運算的結果,而數(shù)字簽名驗證仍然采用通常的、標準的方式。
基于iOS終端的SM2移動密碼系統(tǒng)結構如圖1所示,主要包括:
圖1 基于iOS端的SM2移動密碼系統(tǒng)結構圖Fig.1 Structure of SM2 mobile cryptosystem based on iOS terminal
(1)iOS移動終端:用戶進行操作的客戶端,其中有專門的SM2密碼模塊,用來進行SM2密碼運算,存儲分割后的部分秘密份額,與密碼服務器交互產生數(shù)字簽名,并提供驗證數(shù)字簽名的功能。
(2)密碼服務器:共有 m-1個密碼服務器(m≥2),與移動終端構成m個進行秘密共享的裝置;每個密碼服務器存儲有屬于自己的SM2私鑰秘密份額,當需要使用用戶的SM2私鑰進行數(shù)字簽名時,與 iOS移動終端交互,使用自己的私鑰秘密份額進行運算,并將密碼運算結果發(fā)送給 iOS移動終端。
密碼共享是信息安全和數(shù)據(jù)保密中的一項重要技術,本文在對SM2私鑰進行普通秘密共享的基礎上,提出在 SM2私鑰產生后亦可采用門限秘密共享方法,可以把秘密份額分散在多個裝置中,使得合法子集可以聯(lián)合執(zhí)行所需密碼服務[12],而非法子集不能完成這個密碼服務。被攻擊時,只要達到門限數(shù)目的部件正常,就可以采取措施恢復系統(tǒng)為最初的安全狀態(tài)[13]。在本論文實現(xiàn)的 SM2移動密碼系統(tǒng)中,門限秘密共享可用來增強系統(tǒng)的安全性和容錯性。
1.2.1 基于普通秘密共享的SM2數(shù)字簽名
基于普通秘密共享的SM2數(shù)字簽名,核心在于將用戶 SM2私鑰根據(jù)普通秘密共享算法分割成 m份私鑰秘密份額,一份保存在iOS移動終端,其余m-1份分發(fā)到 m-1個密碼服務器。當應用程序需要使用 SM2私鑰進行數(shù)字簽名時,移動終端中的密碼模塊和密碼服務器分別使用各自保存的 SM2私鑰秘密份額進行密碼運算,產生 m份密碼運算結果,最后將這m份密碼運算的結果組合實現(xiàn)SM2數(shù)字簽名。少了這 m份私鑰秘密份額密碼運算結果中的任意一份,密碼模塊都不能得到最終的數(shù)字簽名。
在生成數(shù)字簽名前,針對參與SM2數(shù)字簽名生成的iOS移動終端和m-1個密碼服務器進行如下初始化操作:
(1)iOS移動終端的密碼模塊產生m份秘密份額di,i=1,2,…,m,其中d1由移動終端保存,d2,…,dm由 m-1個密碼服務器保存使用。這 m份秘密份額與用戶的 SM2私鑰 dA滿足關系(1+dA)-1dAmod n=(d1+d2+…+dm) mod n,其中n是SM2密碼運算所使用的橢圓曲線點群的階(也即SM2密碼運算所使用的橢圓曲線點群的基點G的階),(1+dA)-1是(1+dA)的模n乘法逆(即(1+dA)-1與(1+dA)模n乘積為1);
(2)密碼模塊在區(qū)間[1,n-1]內隨機選擇一個整數(shù)b,計算c=(1+dA)-1b mod n(此處b不是橢圓曲線方程的參數(shù)b);
(3)計算Gb=[b]G,其中G是SM2橢圓曲線點群的基點;
(4)移動終端將 c、Gb保存一份,并分發(fā)給m-1個密碼服務器;
當需要使用用戶的SM2私鑰dA針對消息M進行數(shù)字簽名時,iOS移動終端、密碼服務器按如下方式進行數(shù)字簽名的生成:
(1)iOS移動終端和m-1個密碼服務器在區(qū)間[1,n-1]中隨機選擇一個整數(shù)ki,i=1,2,…,m。
(2)iOS移動終端通過與m-1個密碼服務器交互,計算得到 Q=[k1+k2+…+ km]Gb,r=(e+x1) mod n,且得到的Q、r滿足:r≠0且[r]G+Q不是SM2橢圓曲線點群的零元(無窮遠點),x1取自(x1,y1)=Q,e是從用戶標識和消息M導出的雜湊值(即散列值)(按SM2算法,e是從用戶標識IDA等參數(shù)導出的雜湊值ZA同消息M合并后的數(shù)據(jù)的雜湊值,參見SM2規(guī)范);
(3)移動終端的密碼模塊和 m-1個密碼服務器分別計算si=(cki-dir) mod n,其中i=1,2,…,m,si對應si裝置i所進行的計算;
(4)iOS移動終端的密碼模塊計算得到s=(s1+s2+…+sm) mod n;則(r,s)即為使用用戶的SM2私鑰dA對消息M的數(shù)字簽名。
在上述數(shù)字簽名生成過程中,r、e、si,i=1,2,…,m,根據(jù)計算的需要在m個裝置之間傳送。
1.2.2 基于門限秘密共享的SM2數(shù)字簽名
本文提出的基于門限秘密共享的SM2數(shù)字簽名方案,采用Shamir門限秘密共享方案。此方案中進行數(shù)字簽名操作處理的移動終端和 t-1個密碼服務器,僅是全部 m個裝置(移動終端和 m-1個密碼服務器)中的t個(m≥t),即采用(t,m)的門限方案。
方案核心在于將用戶SM2私鑰秘密(不是私鑰本身)根據(jù)門限秘密共享算法分割成m份私鑰秘密份額,一份保存在iOS移動終端,其余m-1份分發(fā)到 m-1個密碼服務器。當應用程序需要使用 SM2私鑰進行數(shù)字簽名時,移動終端中的密碼模塊和m-1個密碼服務器中的任意t-1個密碼服務器分別使用各自保存的SM2私鑰秘密份額進行密碼運算,產生t份密碼運算結果,最后將這t份密碼運算的結果組合實現(xiàn) SM2數(shù)字簽名?;陂T限秘密共享的SM2數(shù)字簽名方案概述如下。
(1)在有限域GF(n)上,將私鑰秘密(1+dA)-1dAmod n按(t, m)門限秘密共享分割成m份,并將分割得到的秘密分發(fā)給iOS移動終端和m-1個密碼服務器,這里n是SM2橢圓曲線點群的階;
(2)當iOS移動終端中的應用程序需要使用用戶的SM2私鑰對消息進行數(shù)字簽名時,iOS移動終端以及 t-1個密碼服務器根據(jù)自己的秘密份額以及當前組合分別計算得到d1, d2,…, dt,計算得到的d1,d2,…, dt滿足關系:(1+dA)-1dAmod n=(d1+d2+…+dt)mod n;
(3)之后,iOS移動終端以及t-1個密碼服務器依據(jù)d1, d2,…, dt按普通秘密共享一樣的方式通過協(xié)同計算得到針對消息的數(shù)字簽名。
依據(jù)以上門限秘密共享方案,其中任意不少于t份私鑰秘密份額均能完成密碼運算,而少于t份私鑰秘密份額則不能,且少于 t個秘密共享成員也無法重構私鑰秘密[14]。
在iOS移動終端的SM2密碼功能的實施主要涉及SM2密碼模塊、以及秘密份額的存儲以及與密碼服務器的交互。SM2密碼模塊的主要功能是基于秘密共享方案(包括普通秘密共享和門限秘密共享)進行SM2數(shù)字簽名的生成以及SM2數(shù)字簽名驗證,相應的功能通過OpenSSL的ECC密碼庫實現(xiàn)。
秘密份額存儲在用戶計算裝置本地的永久存儲介質中(移動終端內的電子盤),并通過 PIN碼(Personal Identification Number)對秘密份額加以保護。在SM2數(shù)字簽名的協(xié)同計算過程中iOS移動終端與密碼服務器的交互采用自定義的協(xié)議,包括對移動終端用戶進行身份鑒別,并通過SSL對交互數(shù)據(jù)進行安全保護。
本系統(tǒng)中的密碼服務器運行在Windows平臺,用C/C++語言開發(fā),其主要功能是使用用戶SM2的私鑰秘密份額、基于秘密共享方案(包括普通秘密共享和門限秘密共享)進行SM2數(shù)字簽名的生成,相應功能同樣是基于OpenSSL庫的ECC密碼功能實現(xiàn);密碼服務器與iOS移動終端之間的交互通過自行定義的協(xié)議進行。
測試結果表明當iOS移動終端中的應用程序需要使用用戶的SM2私鑰進行數(shù)字簽名時,基于前述移動密碼系統(tǒng),iOS移動終端中的密碼模塊及相應的密碼服務器通過使用各自的用戶 SM2私鑰的秘密份額,能有效地生成SM2數(shù)字簽名。
本文針對當前沒有密碼硬件情況下,安全使用用戶SM2私鑰進行數(shù)字簽名的需求,提出了一種基于iOS移動終端的SM2移動密碼系統(tǒng)方案。提出的方案具有以下優(yōu)勢:
(1)適用性廣,不但適合于兩方共享秘密,而且適合于多方共享秘密,不但適合于普通的秘密共享(共享),而且適合于門限秘密共享(共享)。
(2)提高了在沒有密碼硬件的情況下,用戶SM2私鑰使用的安全性。除非攻擊者能同時獲得分布在不同裝置中的足夠數(shù)量的秘密份額,否則,攻擊者無法恢復用戶私鑰。而攻擊者要同時獲得分布在不同裝置中的、足夠數(shù)量的秘密份額的可能性非常低,幾乎不可能。
(3)采用門限秘密共享方案,在產生突發(fā)情況,如服務器崩潰或丟失部分秘密份額時依然可以使用密碼服務。在不增加風險的情況下,增加了系統(tǒng)的可靠性。
(4)采用純軟件方式,可用來取代專門的密碼硬件,如USB Key、SmartCard,攜帶方便且降低了成本。
[1] 汪朝暉, 張振峰. SM2橢圓曲線公鑰密碼算法綜述[J]. 信息安全研究, 2016, 2(11): 972-982.
[2] Idrees Z. Elliptic Curves Cryptography[J]. School of Computer Science Physics & Mathematics, 2012.
[3] 左石城, 向繼, 王平建, 等. 本地提供簽名服務系統(tǒng)的設計與實現(xiàn)[J]. 軟件, 2017, 38(2): 84-90.
[4] Wang Q. The Application of Elliptic Curves Cryptography in Embedded Systems[C]// International Conference on Embedded Software and Systems. IEEE Computer Society, 2005:527-530.
[5] Zhang B, Liu E, Ding J, et al. Novel Certificate for Authentication Based on Elliptic Curve Cryptography and Vector Space Secret Sharing[J]. Journal of Convergence Information Technology, 2012, 7(13): 420-426.
[6] 孫榮燕, 蔡昌曙, 周洲, 等. 國密SM2數(shù)字簽名算法與ECDSA算法對比分析研究[J]. 網絡安全技術與應用,2013(2): 60-62.
[7] 陳澤凱. 一種基于身份的SM2橢圓曲線數(shù)字簽名方案及其在離線文檔認證中的應用[D]. 廈門大學, 2016.
[8] 馬駿, 馬建峰, 郭淵博. 可證明安全的智能移動終端私鑰保護方案[J]. 通信學報, 2012(12): 108-115.
[9] 王蕓, 趙長江. 安全的移動終端數(shù)字簽名方案.中國科技信息, 2015, (22): 52-54.
[10] 陳小梅. 一種基于ECC的安全移動支付協(xié)議[J]. 軟件,2013(12): 202-204.
[11] Spaliaras I, Dokouzyannis S. Design and Evaluation of a New Scheme Based on Secret Sharing Mechanisms that Increases the Security of Conditional Access Systems in Satellite Pay-TV[J]. Wireless Personal Communications, 2015,82(3): 1-21.
[12] 榮輝桂, 莫進俠, 常炳國, 等. 基于Shamir秘密共享的密鑰分發(fā)與恢復算法[J]. 通信學報, 2015(3): 60-69.
[13] 張文娟, 張錦華. 基于ELGamal密碼體制的安全密鑰托管方案[J]. 軟件, 2012, 33(6): 20-22.
[14] Harn L, Hsu C F, Xia Z, et al. How to Share Secret Efficiently over Networks[J]. Security & Communication Networks, 2017, 2017(4): 1-6.