楊宏志,袁凌云,2+,王 舒
(1.云南師范大學(xué) 民族教育信息化教育部重點實驗室,云南 昆明 650500;2.云南師范大學(xué) 信息學(xué)院,云南 昆明 650500)
區(qū)塊鏈?zhǔn)潜忍貛诺膶嵸|(zhì)技術(shù),首次出現(xiàn)在由中本聰在2008年發(fā)表的《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》中,是當(dāng)前數(shù)據(jù)分布式存儲、共識機制、P2P傳輸、密碼算法等技術(shù)互為一體的計算機應(yīng)用[1]。區(qū)塊鏈?zhǔn)且粋€分布式的數(shù)據(jù)庫,其本質(zhì)是一種去中心化的信任機制、利用共識算法進(jìn)行數(shù)據(jù)產(chǎn)生和更新、利用加密算法保護(hù)數(shù)據(jù)安全、通過智能合約對數(shù)據(jù)進(jìn)行操縱[2],具有去中心化、防止篡改、留痕溯源、高效透明等特點。由于網(wǎng)絡(luò)上存在篡改數(shù)據(jù)問題,其中會涉及到個人隱私,若有不法分子入侵網(wǎng)站,篡改用戶個人數(shù)據(jù)或資產(chǎn)歸屬,將造成重大損失,而區(qū)塊鏈的不可篡改性正好為其提供了新的解決思路。從某種程度上說,區(qū)塊鏈能夠在互聯(lián)網(wǎng)中充當(dāng)信任的基石,因為當(dāng)目前的信息網(wǎng)絡(luò)全部采用基于區(qū)塊鏈技術(shù)時,所有人在網(wǎng)絡(luò)上的任何一個操作都會被記載,而且不會改變,建立起信用體系,就能解決數(shù)據(jù)造假的問題。因此,基于區(qū)塊鏈的技術(shù)解決方案,它實際上是一種新的分布式數(shù)據(jù)庫,其使用密碼學(xué)手段和多種數(shù)學(xué)算法提供分布式總賬系統(tǒng),具有優(yōu)秀的容災(zāi)能力,確保數(shù)據(jù)不會泄露和丟失。區(qū)塊鏈技術(shù)中使用了許多密碼學(xué)算法和加密技術(shù)來確保鏈上信息的安全,同時,由于區(qū)塊鏈技術(shù)中使用的密碼算法存在后門安全隱患,引起社會各界的廣泛關(guān)注,更是成為眾多專家學(xué)者研究的重點。例如,汪曉睿等[3]指出了當(dāng)前區(qū)塊鏈技術(shù)存在的一些安全問題,并為實際應(yīng)用闡明了方法;Jingyu Feng等[4]提出了一種新的共識算法,提高了區(qū)塊鏈系統(tǒng)的運行效率;Om Pal等[5]針對當(dāng)前區(qū)塊鏈的PKI公鑰基礎(chǔ)設(shè)施做出了改進(jìn),提出了用于安全組通信的組密鑰管理方案;Zheng Wenbo等[6]提出了一種基于生成對抗網(wǎng)絡(luò)的密鑰共享技術(shù),以解決區(qū)塊鏈中存在的安全與通信效率問題。因此,如何解決區(qū)塊鏈技術(shù)密碼算法的安全隱患成為當(dāng)前區(qū)塊鏈技術(shù)在實際應(yīng)用快速推廣中面臨的重大挑戰(zhàn)。
國家商用密碼管理辦公室于2010年12月推出了《SM2橢圓曲線公鑰密碼算法》,讓SM2算法迅速成為眾多科研人員的研究重點并加速其在實際生產(chǎn)生活中的應(yīng)用。針對區(qū)塊鏈技術(shù)面臨的密碼算法安全隱患,有學(xué)者提出采用國產(chǎn)密碼算法來替換區(qū)塊鏈中的密碼算法,從而解除其潛在的后門安全隱患問題。然而,由于涉及橢圓曲線的計算繁雜性,當(dāng)前算法的時間復(fù)雜度還很高。當(dāng)SM2國密算法被應(yīng)用在一些具有特殊交易背景之下,交易速率是制約交易效率的最主要因素,所以優(yōu)化SM2算法中交易的流程,縮短其交易時間非常必要。侯紅霞等提出了一種安全的兩方協(xié)作SM2數(shù)字簽名算法,具有交互次數(shù)少、協(xié)作簽名效率高等優(yōu)勢[7];宋靖文等設(shè)計了一種改進(jìn)SM2授權(quán)信息生成方式的代理簽名方案,在驗證效率上提高了約26%[8];張盛仕對于SM2硬件實現(xiàn)上重點研究和優(yōu)化了國密算法SM2密碼加速引擎,最終成功加速SM2中點乘這一核心運算[9]。通過將優(yōu)化后的SM2國密算法集成到區(qū)塊鏈里,可以使得整個區(qū)塊鏈系統(tǒng)在運行時更加穩(wěn)定和安全可控。
因此,本文在現(xiàn)有研究的基礎(chǔ)上,針對SM2算法中較為復(fù)雜的橢圓曲線計算以及較高時間復(fù)雜度的性能瓶頸,在不影響算法本身安全性的前提下,提出基于已知隨機數(shù)值序列優(yōu)化的SM2改進(jìn)算法,并基于優(yōu)化SM2算法進(jìn)行區(qū)塊鏈的設(shè)計與改造,以此提升區(qū)塊鏈的效率。
國家密碼管理局推薦使用素數(shù)域256位橢圓曲線,其曲線方程為y2=x3+ax+b,通過指定a、b系數(shù),確定了唯一的標(biāo)準(zhǔn)曲線。其中橢圓曲線的系統(tǒng)參數(shù)為公開可見的,系統(tǒng)本身的安全特性并不依靠對系統(tǒng)參數(shù)的加密。國家密碼管理局不規(guī)定橢圓曲線系統(tǒng)參數(shù)的生成方法,但規(guī)定了系統(tǒng)參數(shù)的驗證方法。在SM2國密算法的數(shù)字簽名流程中,其定義為:設(shè)需要簽名的信息為M,為了得到信息M的數(shù)字簽名(r,s),用戶需簽名執(zhí)行以下操作步驟:
步驟3 產(chǎn)生一個隨機數(shù)k∈[1,n-1];
步驟4 計算橢圓曲線點 (x1,y1)=[k]G;
步驟5 計算r=(e+x1)modn,如果r=0或r+k=n,返回步驟3;
步驟6 計算s=((1+dA)-1·(k-r·dA))modn;如果s=0,返回步驟3;
步驟7 得到該信息數(shù)字簽名(r,s)。
在得到數(shù)字簽名后,為了檢驗接收到的信息M′和其相應(yīng)的數(shù)字簽名 (r′,s′),用戶需要驗證執(zhí)行以下操作步驟:
步驟1 驗證r′∈[1,n-1] 是否成立,如果不成立則檢驗失?。?/p>
步驟2 驗證s′∈[1,n-1] 是否成立,如果不成立則檢驗失敗;
步驟5 將r′、s′的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù),計算t=(r′+s′)modn,如果t=0,則檢驗失??;
步驟6 計算橢圓曲線點 (x′1,y′1)=[s′]G+[t]PA;
步驟7 將x′1的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù),計算R=(e′+x′1)modn,驗證R=r′ 是否成立,如果成立則驗證通過,否則檢驗失敗。
在前一小節(jié)敘述SM2國密算法加密部分,因為涉及到更加復(fù)雜的橢圓曲線點的計算,原始SM2國密算法在加密流程中具有很高的時間復(fù)雜度,從而使得整個加密流程需要消耗很長時間。另外,當(dāng)SM2國密算法被應(yīng)用在一些具有特殊交易背景之下時,交易速率是制約交易效率的最主要因素,所以優(yōu)化SM2算法中交易的流程,縮短其交易時間非常必要。故而目前需要一種可以有效降低時間復(fù)雜度的國密SM2算法。
針對SM2算法的優(yōu)化部分包含兩部分。其一,采用已知的隨機數(shù)序列替換了原來的隨機數(shù)k值,其中已知的隨機數(shù)序列里全部k值都符合初始條件 (k∈[1,n-1]),并且設(shè)置前后兩次隨機數(shù)k值之差保持恒定不變的相互關(guān)系。其二,第一次加密與第二次加密的隨機數(shù)k值根據(jù)提前設(shè)置的相互關(guān)系,在第一次加密時,將加密流程里計算得出的第一橢圓曲線點坐標(biāo)和第二橢圓曲線點坐標(biāo)進(jìn)行保存;在第二次加密時,使用第一次加密結(jié)束時保存的第一橢圓曲線點坐標(biāo)和第二橢圓曲線點坐標(biāo),和提前設(shè)置好的第一次加密以及第二次加密的隨機數(shù)k值相互關(guān)系,完成本次加密流程的第一橢圓曲線點坐標(biāo)和第二橢圓曲線點坐標(biāo)的計算,最終完成本次加密過程。
本優(yōu)化方法的特點在于:首先,每次進(jìn)行加密處理時,先從隨機數(shù)序列中取出隨機數(shù)k值,該隨機數(shù)序列由多個k值短序列組合而成,并且每個隨機數(shù)短序列的第一個元素隨機生成;同時,每個隨機數(shù)短序列都是同樣的長度;最后,在各個隨機數(shù)短序列里,每兩個相鄰元素相減其差值均相同。具體的加密流程如圖1所示。
圖1 優(yōu)化后的SM2算法加密流程
在圖1流程中,第一橢圓曲線點在數(shù)據(jù)加密與數(shù)據(jù)解密中只有一個信息變換的作用,在無法獲得私鑰時第一橢圓曲線點并不能夠提供任何關(guān)于第二橢圓曲線點以及上圖中C3的相關(guān)數(shù)據(jù)。因而,即便是獲得零散的或多個輸入信息加密后的第一橢圓曲線點,可能推斷出其它輸入信息加密后的第一橢圓曲線點值,也是毫無意義的。第二橢圓曲線點不會干擾到整個算法的安全特性,因為其是由下一步驟進(jìn)行哈希算法運算確定的,盡管輸入信息有部分關(guān)聯(lián),但是最后的結(jié)果是被打亂過的,此前的相互關(guān)系不會展現(xiàn)在最后的結(jié)果里,所以不能從得到的加密結(jié)果推測出有效信息,故算法自身的安全特性并不依賴于此。另外,利用提前設(shè)置的相鄰兩次隨機數(shù)k值之差恒定為整數(shù)b,則相鄰兩次C1的坐標(biāo)差b·G(G為橢圓曲線上的一個基點)可以作為累加數(shù)值提前保存,當(dāng)每次加密時,使用前次留存的C1加上b·G,可得本次加密后的C1;同理,若相鄰兩次C1的坐標(biāo)差為b·PB(PB為公鑰)作為累加數(shù)值提前保存,當(dāng)每次加密時,使用前次留存的C2加上b·PB,可得本次加密后的C2。由此,在計算C1和C2這兩個橢圓曲線點時使用點加運算替換了原來算法中的點乘運算,使得算法的計算復(fù)雜度在整體上顯著降低。
為了測試優(yōu)化后的SM2國密算法的性能,本文實現(xiàn)了GO版本的SM2算法,同時采用Golang自帶的PPROF性能測試研究與數(shù)據(jù)剖析工具,對算法進(jìn)行壓力測試并完成性能分析。本測試在實驗室內(nèi)部服務(wù)器上進(jìn)行,硬件配置與實驗環(huán)境詳見表1。在壓力測試時,設(shè)定運算加密流程的次數(shù)為50次,并同時測試原始的SM2國密算法,其相應(yīng)橢圓曲線的系統(tǒng)參數(shù)均為國家密碼管理局推薦使用的規(guī)范數(shù)值,而且測試所使用的需要加密的信息和相關(guān)密鑰均為不變數(shù)值。對實驗結(jié)果進(jìn)行分析表明,原始SM2國密算法需消耗545 ms,經(jīng)過改進(jìn)處理后的SM2國密算法需消耗160 ms。故本改進(jìn)處理措施能夠在保證算法自身安全特性的前提之下,使用之前加密流程里獲得的中間運算數(shù)據(jù),使得該算法在運算時顯著降低了時間復(fù)雜度,加密消耗的時間進(jìn)一步縮短,提高了整個算法的運算效率,達(dá)到預(yù)期效果。
表1 硬件配置與實驗環(huán)境
在當(dāng)今科技時代中,區(qū)塊鏈技術(shù)的集成應(yīng)用在新的技術(shù)革新和產(chǎn)業(yè)變革中起著重要作用[10]。由于密碼算法在區(qū)塊鏈系統(tǒng)中起著非常重要的作用,并且經(jīng)常有國際通用密碼算法傳出有后門、被破解的消息,是當(dāng)下比較突出的安全隱患。因此,通過前一小節(jié)對國密SM2算法的分析與探討,同時考慮到目前區(qū)塊鏈技術(shù)在實際應(yīng)用中面臨的一些突出安全問題,本文在經(jīng)過改進(jìn)優(yōu)化之后的SM2國密算法基礎(chǔ)上擬采用超級賬本(Hyperledger Fabirc)平臺,來重新完成區(qū)塊鏈的設(shè)計。在使用Fabric平臺進(jìn)行開發(fā)時,在其加密組件BCCSP(blockchain cryptographic service provider)中對使用的優(yōu)化算法進(jìn)行實現(xiàn),它可用于提供相關(guān)加密與解密服務(wù)以及驗證數(shù)字簽名等功能。BCCSP利用Fabric-CA以滿足部分系統(tǒng)核心的運算功能以及在客戶端層面對軟件開發(fā)工具包加密算法的需求。用以滿足需求的相關(guān)重要功能都分布在中心內(nèi),其中包含共識機制以及節(jié)點背書策略等。利用該加密組件,Hyperledger Fabric可以對內(nèi)部所有的密碼算法包,通過插件的形式進(jìn)行實現(xiàn)以及針對各種不同的規(guī)范標(biāo)準(zhǔn)、實現(xiàn)形式進(jìn)行適配。本文使用GO語言實現(xiàn)了優(yōu)化改進(jìn)后的SM2國密算法,同時,通過Hyperledger Caliper性能測試工具,完成對原始區(qū)塊鏈以及優(yōu)化后的區(qū)塊鏈性能測試。
對區(qū)塊鏈進(jìn)行國密化改造的主要工作就是利用SM2國密算法來代替原來的ECDSA橢圓曲線簽名算法。為了完成在區(qū)塊鏈中實現(xiàn)SM2橢圓曲線公鑰密碼算法,需要利用對應(yīng)密碼算法函數(shù)包里的橢圓曲線公鑰簽名算法標(biāo)準(zhǔn),以完成對該算法的具體實現(xiàn)。該密碼算法的完成依賴于由區(qū)塊鏈加密服務(wù)提供者的源碼crypto包來進(jìn)行實現(xiàn),優(yōu)化改進(jìn)時按照相同的函數(shù)書寫規(guī)范對該算法進(jìn)行實現(xiàn),使其對其它函數(shù)的調(diào)用提供一套規(guī)范的API,其中包含規(guī)范的命名方式,相同的API功能和類似的調(diào)用方法。
(1)根據(jù)底層源代碼crypto包里的ecdsa文件的結(jié)構(gòu)規(guī)范,確定SM2橢圓曲線密碼算法源代碼為sm2.go,同時聲明與實現(xiàn)對其它函數(shù)提供調(diào)用的API和相關(guān)的數(shù)據(jù)結(jié)構(gòu)以及僅用于內(nèi)部范圍調(diào)用的相關(guān)函數(shù),其中包含基礎(chǔ)的變換函數(shù)和基礎(chǔ)塊操作。
(2)定義SM2公鑰與私鑰的結(jié)構(gòu)體函數(shù),其中定義的PublicKey為公鑰,定義的PrivateKey為私鑰。另外,公鑰是橢圓曲線上的一個點,私鑰是一個大數(shù)。密鑰對的結(jié)構(gòu)體定義如圖2所示。
圖2 SM2公私鑰對數(shù)據(jù)結(jié)構(gòu)
(3)根據(jù)SM2規(guī)范完成數(shù)字簽名與驗簽函數(shù),數(shù)字簽名與驗簽函數(shù)的操作基本元素由底層源代碼math包里的big文件和crypto包里的elliptic文件完成在基礎(chǔ)素數(shù)域上的大數(shù)計算(加法、減法、模、模逆運算函數(shù))和橢圓曲線上的計算(數(shù)乘、點乘運算函數(shù)),如圖3所示。在完成以上源代碼密碼函數(shù)包的相關(guān)國產(chǎn)密碼替換之后,將區(qū)塊鏈加密服務(wù)提供者里相關(guān)文件中引入的函數(shù)包替換為以上重新設(shè)計后的密碼函數(shù)包,同時對相關(guān)密碼算法的調(diào)用方式進(jìn)行更改,經(jīng)過二次編譯成功后完成區(qū)塊鏈設(shè)計。
圖3 數(shù)字簽名與驗簽函數(shù)重構(gòu)
由于SM2算法中涉及到復(fù)雜的橢圓曲線計算,使得整個加密流程的時間復(fù)雜度較高,因此,優(yōu)化后的SM2國密算法將原來算法中加密過程里的點乘操作替換為了點加操作,大幅降低了算法的計算復(fù)雜度,縮短了加密時間,從而提高了整個算法的運算效率,為接下來的算法與區(qū)塊鏈系統(tǒng)集成以及實驗測試打下扎實的理論基礎(chǔ)。
Hyperledger Caliper是由華為公司開發(fā)并貢獻(xiàn)給Linux基金會的一個十分便捷易用的區(qū)塊鏈性能基準(zhǔn)測試工具,支持用戶使用預(yù)先定義好的用例以測試各種區(qū)塊鏈應(yīng)用程序的性能,并獲得一組詳細(xì)的性能測試結(jié)果,其中包含交易延遲、系統(tǒng)吞吐量以及硬件資源使用情況等屬性[11]。本文采用該工具完成所設(shè)計的區(qū)塊鏈與原始區(qū)塊鏈的測試與對比。
2.2.1 性能測試與對比
使用Hyperledger Caliper測試系統(tǒng)原型性能,測試環(huán)境為Google標(biāo)準(zhǔn)非共享型實例云服務(wù)器,Intel Skylake CPU平臺,2vCPU,4 GB內(nèi)存,Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-1052-gcp x86_64),20 GB標(biāo)準(zhǔn)永久性磁盤。專門針對區(qū)塊鏈系統(tǒng)的核心功能“用戶間轉(zhuǎn)賬”進(jìn)行測試,同時設(shè)計相應(yīng)的基準(zhǔn)測試用例與區(qū)塊鏈設(shè)置文檔,分兩次各進(jìn)行5輪測試。表2是原始區(qū)塊鏈系統(tǒng)的性能測試結(jié)果,表3是優(yōu)化的SM2國密算法區(qū)塊鏈系統(tǒng)性能測試結(jié)果。
從優(yōu)化后的算法集成到區(qū)塊鏈系統(tǒng)中的性能測試結(jié)果可以看出,當(dāng)基準(zhǔn)測試文件將交易發(fā)送量限制為10 000 tps,并指定交易發(fā)送時的速率控制器為1000 tps的勻速控制器時,優(yōu)化的SM2國密算法區(qū)塊鏈系統(tǒng)比原始區(qū)塊鏈系統(tǒng)在發(fā)送速率上提高約2.6%,但是從整體上看,發(fā)送速率相對太慢造成在實際應(yīng)用中還存在一定不足,是目前限制區(qū)塊鏈大規(guī)模應(yīng)用的一個重要問題,也是當(dāng)前區(qū)塊鏈技術(shù)面臨的主要挑戰(zhàn)之一和日后研究的重點。另外,在系統(tǒng)延遲方面,優(yōu)化后的區(qū)塊鏈系統(tǒng)在最大延遲上降低了約22.9%,在最小延遲上降低了約48.1%,平均延遲降低約56.6%,交易吞吐量提高約33.9%,明顯減少整個區(qū)塊鏈系統(tǒng)的響應(yīng)和處理時間,提高了區(qū)塊鏈系統(tǒng)的并發(fā)事務(wù)處理能力。
表2 Hyperledger Fabric區(qū)塊鏈系統(tǒng)性能測試結(jié)果
表3 Hyperledger Fabric國密版區(qū)塊鏈系統(tǒng)性能測試結(jié)果
2.2.2 平均內(nèi)存消耗
圖4展示了兩種區(qū)塊鏈系統(tǒng)在平均內(nèi)存方面的資源消耗情況。在系統(tǒng)內(nèi)存資源消耗方面,從圖4中可以看出優(yōu)化的區(qū)塊鏈系統(tǒng)曲線始終處于原始區(qū)塊鏈系統(tǒng)曲線下方,表示消耗的內(nèi)存更少,優(yōu)化的SM2國密算法區(qū)塊鏈系統(tǒng)比原始區(qū)塊鏈系統(tǒng)在平均內(nèi)存消耗上略低1.4%,由于占用內(nèi)存相差不大且消耗量較小,故而可以輕松運行區(qū)塊鏈系統(tǒng)。
圖4 兩種區(qū)塊鏈系統(tǒng)平均內(nèi)存消耗情況
2.2.3 平均CPU消耗
圖5展示了兩種區(qū)塊鏈系統(tǒng)在平均內(nèi)存方面的資源消耗情況。在系統(tǒng)CPU資源消耗方面,從圖5中可以看出優(yōu)化的區(qū)塊鏈系統(tǒng)曲線處于原始區(qū)塊鏈系統(tǒng)曲線上方,表示消耗的CPU資源更多,在平均CPU消耗上提高了約40.5%,因此在良好的硬件條件下,可以更好支持區(qū)塊鏈系統(tǒng)高效運行。
圖5 兩種區(qū)塊鏈系統(tǒng)平均CPU消耗情況
從總體趨勢上看,優(yōu)化的SM2國密算法區(qū)塊鏈系統(tǒng)的性能要明顯優(yōu)于原始的區(qū)塊鏈系統(tǒng),僅僅只在CPU資源消耗上稍有提升,這跟內(nèi)部采用優(yōu)化算法的加解密步驟有關(guān),并在不影響算法安全性的前提下,使得整個系統(tǒng)的運行效率穩(wěn)步提高,這從實驗數(shù)據(jù)上驗證了優(yōu)化的SM2國密算法區(qū)塊鏈系統(tǒng)的優(yōu)越性。
基于對區(qū)塊鏈技術(shù)的研究以及當(dāng)前國家對密碼安全的戰(zhàn)略考量,本文對國密SM2橢圓曲線公鑰密碼算法進(jìn)行了效率上的改進(jìn),在不影響算法本身安全性的前提下,降低了SM2算法的時間復(fù)雜度,并且加快了算法的運算時間,提升了運行效率。同時,將優(yōu)化后的國密算法集成到了Hyperledger Fabric平臺上,并通過Hyperledger Caliper壓測工具完成了對原始區(qū)塊鏈以及優(yōu)化的國密算法區(qū)塊鏈系統(tǒng)性能測試。最后,測試數(shù)據(jù)說明本文為區(qū)塊鏈所設(shè)計的優(yōu)化改進(jìn)方案切實可行,并為今后區(qū)塊鏈技術(shù)的研究和應(yīng)用提供了理論與實踐基礎(chǔ)。