鄧建球,方 軼,叢林虎,李海君
(1.海軍航空大學(xué), 山東 煙臺(tái) 264001; 2.中國人民解放軍91115部隊(duì), 浙江 舟山 316000)
區(qū)塊鏈技術(shù)是一種集網(wǎng)絡(luò)通信、加密算法、共識(shí)機(jī)制、智能合約等技術(shù)于一體的新興信息技術(shù),具有去中心化、防篡改、可追溯等特點(diǎn)[1]。在區(qū)塊鏈技術(shù)隨著比特幣出現(xiàn)之后,尤其是近幾年來區(qū)塊鏈研究熱度持續(xù)增高,各種區(qū)塊鏈產(chǎn)業(yè)項(xiàng)目層出不窮,許多專家學(xué)者已經(jīng)對(duì)區(qū)塊鏈在醫(yī)療[2]、能源[3]、個(gè)人檔案信息[4]、身份認(rèn)證[5]、物聯(lián)網(wǎng)[6]、大數(shù)據(jù)[7]、云計(jì)算[8]等方面的創(chuàng)新與應(yīng)用進(jìn)行了較為成功的研究。在區(qū)塊鏈技術(shù)中采用的Hash函數(shù)[9]、Merkle根結(jié)構(gòu)、數(shù)字簽名技術(shù)[10]、非對(duì)稱加密等,是保證區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)安全的主要方法手段。
本文首先對(duì)區(qū)塊鏈以及其中使用的Hash函數(shù)與數(shù)字簽名技術(shù)進(jìn)行了概述。然后在對(duì)兩種國密算法SM2與SM3算法進(jìn)行原理描述的基礎(chǔ)上,對(duì)其進(jìn)行改進(jìn)和對(duì)比分析。最后,使用區(qū)塊鏈Hyperledger Fabric開發(fā)平臺(tái)針對(duì)部隊(duì)導(dǎo)彈數(shù)據(jù)存儲(chǔ)記錄場(chǎng)景進(jìn)行了應(yīng)用開發(fā),證明了本文提出的改進(jìn)國密算法在區(qū)塊鏈應(yīng)用的可行性與有效性。
2008年,中本聰發(fā)表了一篇名為《Bitcoin:A Peer-to-Peer Electronic Cash System》的論文[11],提出了一種基于密碼學(xué)的電子貨幣,并命名為比特幣(Bitcoin)。而支撐比特幣的這一技術(shù)被稱為區(qū)塊鏈。區(qū)塊鏈具有去中心化、數(shù)據(jù)防篡改、可追溯等特點(diǎn)[12],使其非常適用于需要保證數(shù)據(jù)高可信度以及透明度的場(chǎng)景。區(qū)塊鏈技術(shù)中使用的Hash函數(shù)、非對(duì)稱加密、數(shù)字簽名技術(shù)、共識(shí)算法等密碼學(xué)算法以及加密技術(shù)是保證其數(shù)據(jù)安全性與可靠性的主要依據(jù)。典型的區(qū)塊鏈結(jié)構(gòu)如圖1所示。
圖1 區(qū)塊鏈結(jié)構(gòu)示意圖
SM2算法是我國自主開發(fā)的基于橢圓曲線的數(shù)字簽名算法。SM2算法主要包括系統(tǒng)參數(shù)生成(包括橢圓曲線參數(shù)生成和用戶公私鑰生成)、數(shù)字簽名生成和數(shù)字簽名認(rèn)證三部分[13]。
系統(tǒng)參數(shù)主要包括有限域Fq的規(guī)模及表示,定義橢圓曲線E(Fq)方程的兩個(gè)元素a,b∈Fq;E(Fq)上的基點(diǎn)G=(xG,yG)(G≠0);G的階n等。
假設(shè)簽名用戶為A,則還需要生成簽名用戶A的私鑰dA和公鑰PA=[dA]G=(xA,yA);長度為entlenA比特的可辨別標(biāo)識(shí)IDA,由entlenA轉(zhuǎn)換成的兩字節(jié)ENTLA;將其他參數(shù)轉(zhuǎn)換成比特串形式。
最后對(duì)以上參數(shù)使用SM3算法進(jìn)行Hash運(yùn)算,得到256位的與以上系統(tǒng)參數(shù)向關(guān)聯(lián)的比特串ZA=HashSM3(ENTLA‖IDA‖a‖b‖xG‖yG‖xA‖yA)。
假設(shè)待簽名的消息為M,簽名用戶A通過以下步驟獲得對(duì)消息M的簽名(r,s):
A3:用隨機(jī)數(shù)發(fā)生器產(chǎn)生隨機(jī)數(shù)k∈[1,n-1];
A4:計(jì)算橢圓曲線點(diǎn)(x1,y1)=kG,將x1化為整數(shù);
A5:計(jì)算r=(e+x1)modn,若r=0或者r+k=n,則返回A3;
A6:計(jì)算s=(1+dA)-1·(k-r·dA)modn,若s=0,則返回A3;
A7:將r、s轉(zhuǎn)化為字節(jié)串,得到M的簽名(r,s)。
假設(shè)用戶B收到了待驗(yàn)證的消息M′及其數(shù)字簽名(r′,s′),通過以下步驟對(duì)簽名進(jìn)行認(rèn)證:
B1:驗(yàn)證r′∈[1,n-1]是否成立,若不成立則驗(yàn)證失??;
B2:驗(yàn)證s′∈[1,n-1]是否成立,若不成立則驗(yàn)證失?。?/p>
B5:將r′、s′化為整數(shù),計(jì)算t=(r′+s′)modn。若t=0則驗(yàn)證失??;
改進(jìn)策略主要通過對(duì)SM2簽名算法中的求逆運(yùn)算進(jìn)行改進(jìn),在保證簽名及認(rèn)證結(jié)果正確性的基礎(chǔ)上,通過變量的代換使整個(gè)過程不含有求逆運(yùn)算,從而提高SM2數(shù)字簽名算法的執(zhí)行效率。本文提出的改進(jìn)SM2數(shù)字簽名算法執(zhí)行過程如下(與原算法相同的步驟不再重復(fù)):
在數(shù)字簽名生成中,A1至A5步驟同原SM2算法的步驟A1至A5,對(duì)簽名公式A6進(jìn)行改進(jìn):A6:計(jì)算s=k-r+dAmodn,若s=0,則返回A3;A7同原SM2算法的步驟A7。
根據(jù)本文的改進(jìn)方案,若用戶A對(duì)消息M進(jìn)行了有效簽名,簽名s′=k-r′+dAmodn,變形整理可得k≡s′+r′+dAmodn,從而kG≡(s′+r′+dA)G成立,則kG≡s′G+r′G+dAG≡(s′+r′)G+PA≡tG+PA成立。因此驗(yàn)證結(jié)果正確與否取決于R=r′是否成立。證明該方案與原方案具有相同的簽名及認(rèn)證效果。
使用Go語言對(duì)SM2算法進(jìn)行實(shí)現(xiàn),并使用Go語言內(nèi)置的pprof性能分析工具,對(duì)壓力測(cè)試進(jìn)行性能分析,得到SM2算法中各種運(yùn)算及函數(shù)的運(yùn)算耗時(shí)占比,如表1所示。
表1 SM2算法運(yùn)行耗時(shí)占比
在SM2算法中,主要進(jìn)行了Hash函數(shù)運(yùn)算、模逆運(yùn)算、點(diǎn)乘運(yùn)算和橢圓點(diǎn)計(jì)算,將本文提出的改進(jìn)SM2算法與原始SM2算法中的各種運(yùn)算進(jìn)行對(duì)比,具體情況如表2所示。
表2 運(yùn)算復(fù)雜度對(duì)比
從表2中可以看出,改進(jìn)后的SM2算法不含有模逆運(yùn)算,并且減少了2次點(diǎn)乘運(yùn)算。從表1中也可以得知,模逆運(yùn)算是耗時(shí)占比最多,復(fù)雜度最高的運(yùn)算,因此,降低模逆運(yùn)算的次數(shù),使改進(jìn)SM2算法運(yùn)算復(fù)雜度低于原SM2算法。
SM3算法是我國提出的一種迭代Hash算法,其輸入和輸出都是比特串。SM3算法的輸出長度為256比特,消息分組為512比特,采用MD結(jié)構(gòu)。對(duì)于長度小于264比特的消息X,SM3算法經(jīng)過填充和迭代壓縮,生成雜湊值,雜湊值長度為256比特。具體算法描述如下[14]。
SM3算法中定義了布爾函數(shù)FFj(X,Y,Z)、GGj(X,Y,Z)和置換函數(shù)P0(X,Y,Z)、P1(X,Y,Z),具體定義如下。
P0(X)=X⊕(X<<<9)⊕(X<<<17)
P1(X)=X⊕(X<<<15)⊕(X<<<23)
上述式子中的X、Y、Z均為長度為32的比特串。
對(duì)于一個(gè)長度為l比特的消息,首先將比特“1”添加到消息的末尾,再添加k個(gè)“0”,其中k是滿足l+1+k≡448 mod 512的最小非負(fù)整數(shù),然后添加一個(gè)64位的長度l二進(jìn)制比特串。經(jīng)過這樣填充后的消息的長度就是512的倍數(shù)。
將填充后的消息按每512比特的長度為一組進(jìn)行分組,并對(duì)分組后的消息進(jìn)行編號(hào),得到B(0)B(1)…B(n-1),其中n=(l+k+65)÷512。對(duì)分組后的已填充消息進(jìn)行如下方式的迭代:
FORi=0 TOn-1
V(i+1)=CF(V(i),B(i))
END FOR
其中,CF是壓縮函數(shù),V(0)是初始值IV,長度為256比特。最后一次迭代后的結(jié)果為V(n)。
FORj=16 TO 67
Wj←P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))⊕
(Wj-13<<<7)⊕Wj-6
END FOR
FORj=0TO63
END FOR
壓縮函數(shù)的計(jì)算過程如下:
ABCDEFGH←V(i)
FORj=0 TO 63
SS1←((A<<<12)+E+(Tj<< SS2←SS1⊕(A<<<12) TT2←GGj(E,F,G)+H+SS1+Wj D←C C←B<<<9 B←A A←TT1 H←G G←F<<<19 F←E E←P0(TT2) END FOR V(i+1)←ABCDEFGH⊕V(i) 其中,A,B,C,D,E,F,G,H是中間變量,SS1,SS2,TT1,TT2是字寄存器。且字的存儲(chǔ)方式為大端存儲(chǔ)。最后輸出的256比特雜湊值為y=ABCDEFGH。 SM3算法中,壓縮函數(shù)主要過程是中間變量的賦值、移位運(yùn)算以及寄存器中數(shù)據(jù)的讀寫,且使用了多個(gè)中間變量與多個(gè)寄存器,讀寫寄存器中的數(shù)據(jù)占用了大量的運(yùn)算時(shí)間。因此可以通過優(yōu)化中間變量、減少對(duì)寄存器中的數(shù)據(jù)讀寫次數(shù)的方式來達(dá)到降低壓縮函數(shù)運(yùn)算時(shí)間的目的,使用此方法進(jìn)行改進(jìn)的同時(shí)也不會(huì)破壞原有壓縮函數(shù)結(jié)構(gòu),保證了結(jié)果仍然可靠,同時(shí)在對(duì)消息進(jìn)行擴(kuò)展時(shí)也可以進(jìn)行一些優(yōu)化改進(jìn)。具體改進(jìn)策略如下: 首先將消息分組B(i)劃分為16個(gè)字:W0,W1,…,W15。并將前4個(gè)字存儲(chǔ)在中間變量W0,W1,W2,W3中,用于壓縮函數(shù)的第一次計(jì)算。壓縮函數(shù)中的SS1,SS2,TT1,TT2都是中間變量,因此需要減少這些中間變量的使用。優(yōu)化方案主要集中在壓縮函數(shù)循環(huán)體的前四步操作中,剩余相同部分不再給出。同時(shí)結(jié)合消息擴(kuò)展部分的優(yōu)化方案,在前文SM3算法描述的基礎(chǔ)上,壓縮函數(shù)進(jìn)行優(yōu)化改進(jìn)后的描述如下: ABCDEFGH←V(i) FORj=0 TO 63 TT1←FFj(A,B,C)+D+((((A<<<12)+E+ (Tj<< ifj>16 TT2←GGj(E,F,G)+H+(((A<<<12)+E+ (Tj<< (Wj-3<<<15))⊕(Wj-13<<<7)⊕Wj-6 else TT2←GGj(E,F,G)+H+(((A<<<12)+E+ (Tj<< D←C C←B<<<9 …… 使用Go語言內(nèi)置的pprof性能分析工具,對(duì)壓力測(cè)試進(jìn)行性能分析。測(cè)試結(jié)束后使用top命令可以得到前十個(gè)運(yùn)算耗時(shí)以及占用資源最多的函數(shù),將結(jié)果整理成表格,如表3所示。 表3 改進(jìn)SM3算法效果對(duì)比 與原始SM3算法運(yùn)行情況對(duì)比,總用時(shí)減少了約25%,其中壓縮函數(shù)效率明顯提高,提高了約30%,證明優(yōu)化改進(jìn)方案能夠有效提高SM3算法的運(yùn)行效率。 本文在改進(jìn)SM2算法的基礎(chǔ)上使用Hyperledger Fabirc平臺(tái),針對(duì)導(dǎo)彈業(yè)務(wù)數(shù)據(jù)存儲(chǔ)場(chǎng)景進(jìn)行區(qū)塊鏈應(yīng)用開發(fā)。使用Fabric平臺(tái)進(jìn)行開發(fā)時(shí),在其加密組件BCCSP中對(duì)使用的改進(jìn)算法進(jìn)行實(shí)現(xiàn),本文采用Go語言對(duì)改進(jìn)SM2和SM3算法進(jìn)行實(shí)現(xiàn)。 在邏輯層開發(fā)上,F(xiàn)abric中使用到了智能合約機(jī)制。智能合約是一段運(yùn)行于沙盒環(huán)境下的代碼,可以保證系統(tǒng)的運(yùn)行邏輯不被篡改。開發(fā)Fabric區(qū)塊鏈應(yīng)用時(shí),最重要的就是進(jìn)行智能合約的編寫。編寫的系統(tǒng)智能合約中的函數(shù)如表4所示。 表4 系統(tǒng)智能合約中的部分函數(shù) 圖2是該系統(tǒng)完成數(shù)據(jù)錄入后進(jìn)行數(shù)字簽名界面。 圖2 系統(tǒng)界面 針對(duì)重要數(shù)據(jù)的記錄與存儲(chǔ)以及區(qū)塊鏈應(yīng)用中加密算法國產(chǎn)化問題,對(duì)SM2數(shù)字簽名算法與SM3密碼雜湊算法進(jìn)行了改進(jìn),降低了SM2算法的運(yùn)算復(fù)雜度,將SM3算法運(yùn)行效率提高約25%;采用本文的改進(jìn)方案使用Hyperledger Fabric開發(fā)平臺(tái)針對(duì)部隊(duì)導(dǎo)彈數(shù)據(jù)存儲(chǔ)、記錄場(chǎng)景,開發(fā)了基于區(qū)塊鏈的導(dǎo)彈數(shù)據(jù)管理系統(tǒng),證明了方案的可行性,為區(qū)塊鏈技術(shù)在部隊(duì)中的應(yīng)用提供了理論與實(shí)踐基礎(chǔ)。3.2 改進(jìn)的SM3算法
4 改進(jìn)國密算法在區(qū)塊鏈中的應(yīng)用
5 結(jié)論