田道坤,彭亞雄
(貴州大學 大數(shù)據(jù)與信息工程學院,貴州 貴陽550025)
區(qū)塊鏈產(chǎn)生于比特幣,但不同于比特幣。比特幣之后區(qū)塊鏈技術創(chuàng)新發(fā)展,并且不斷探索新的應用領域。區(qū)塊鏈的誕生為互聯(lián)網(wǎng)帶來了新的曙光,其技術的應用打破了互聯(lián)網(wǎng)無序、混沌、不安全的狀態(tài),且試圖構造一個更加有序、安全、穩(wěn)定的新世界。《塊數(shù)據(jù)3.0》[1]指出,區(qū)塊鏈就是一個塊數(shù)據(jù)組織,或者說是一個在公正算法控制下的數(shù)據(jù)化組織。
區(qū)塊鏈技術具有去中心化、去信任、集體維護、可靠、開源、匿名等特征,對解決傳統(tǒng)中心化系統(tǒng)的成本高、效率低、儲存數(shù)據(jù)不安全等問題提出了更好的解決方法。區(qū)塊鏈技術利用了密碼學中的數(shù)字時間戳、哈希函數(shù)、非對稱加密、數(shù)字簽名等手段來解決交易中存在的虛假交易和雙重支付等問題。區(qū)塊鏈中的數(shù)字簽名技術使用非對稱加密原理,在使用過程中需要同時擁有公鑰和私鑰,公鑰和私鑰一一對應。比如:A、B雙方進行交易,A生成一對密鑰,把其中的一份密鑰作為公鑰發(fā)送給B,同時用自己的私鑰信息進行加密后發(fā)送給B,B使用接收到的公鑰對加密數(shù)據(jù)進行解密,如果成功解密即證實信息確實由A所發(fā)送,這樣就形成了簽名。數(shù)字簽名技術最開始應用于用戶的登錄驗證,即驗證用戶名和密碼是否相匹配。其中EIGamal簽名[2]是一種經(jīng)常使用的數(shù)字簽名。在1991年,文獻[3]提出了多重數(shù)字簽名[3]概念,文獻[4~5]提出了不同類型的多重數(shù)字簽名[4-5]。本文基于區(qū)塊鏈技術下,運用AES(Advanced Data Encryption Standard)和ECC(Elliptic Curve Cryptography)算法混合,然后雙方利用DH算法對密鑰進行計算分配,實現(xiàn)數(shù)字簽名的方案。該方案運用3種混合加密算法,使系統(tǒng)具有很強的抗攻擊能力,能更好的完成身份認證,并提高了數(shù)字簽名的安全性和真實性。
高級加密標準(AES),在密碼學中又稱Rijndael加密法。2001年由美國國家標準技術研究所發(fā)布,旨在取代數(shù)據(jù)加密算法(DES)成為廣泛使用的標準。AES是一種對稱分組加密算法。其加密的數(shù)據(jù)塊分組長度必須為128 Byte,密鑰長度可以是128 Byte,192 Byte和256 Byte,形式分別為AES-128,AES-192和AES-256。如果以上二者長度不夠時,該算法會自動補齊[6]。AES加解密流程圖如圖1所示。
圖1 AES加解密流程圖
從圖1可知AES加密過程共分4個步驟[7]:字節(jié)代替、行移位、列混淆以及輪密相加。解密過程是加密過程對應的逆過程,所以按照加密過程相反的順序進行解密即可得到明文。
字節(jié)代替主要是通過S盒完成一個字節(jié)到另一個字節(jié)的映射,S盒是AES定義的矩陣,把State(數(shù)據(jù)塊要經(jīng)過多次數(shù)據(jù)轉換操作,每次轉換操作產(chǎn)生一個中間結果,中間結果即State)中每個字節(jié)的高4位作為行值,低4位作為列值,然后取S盒對應行列元素作為輸出。這種方法提高了AES加密的非線性變換能力。
行移位分為兩種:正向行移位和逆向行移位。行移位的功能是實現(xiàn)一個4×4矩陣字節(jié)之間轉換,即State第1行字節(jié)維持不變,第2行向左循環(huán)移1 Byte,第3行向左循環(huán)移2 Byte,第4行向左循環(huán)移3 Byte,如式(1)所示。
(1)
其中,Si,j代表每個字節(jié),i、j分別代表行、列,0≤i≤3, 0≤j≤3。
以上是正向行移的轉移方程,其逆向行移位是正向行移位的逆操作。
列混淆[8]分為正向列混淆和逆向列混淆。原理是每列的4 Byte通過線下變換后相互結合,對每列進行獨立操作。其中在每列中被當做系數(shù)的4個元素,合并以后即為有限域中的一個多項式,然后將該多項式和固定的矩陣多項式相乘,相似于有限域下的矩陣乘法。
(2)
式(2)即正向列混淆。依照矩陣的乘法法則可知,列混淆中的每個對應的值僅和列的4個值有關系。
(3)
又因為
(4)
從式(4)可以看出,等號左邊的兩個矩陣互逆。由式(2)~式(4)可以看出,經(jīng)過一次逆向列混淆即可恢復出明文。
在每輪的循環(huán)加密中,都會由主密鑰擴展產(chǎn)生一組輪密鑰,輪密鑰的大小和原來的矩陣大小一樣。在加密過程中,每輪的輸入與輪密鑰異或一次;解密時再次異或該輪的密鑰就可以得出該輪的輸入。密鑰擴展的復雜性,確保了該算法的安全性[9]。
AES綜合運用了置換、代替、矩陣的乘法等多種方法,加密速度快,適合加密較長明文。但是,由于AES采用的是單一的密碼系統(tǒng),在密鑰管理方面,算法需要在密鑰秘密分配之前繼續(xù)保密通信。所以密鑰替換比較困難。
橢圓曲線加密算法(ECC)作為一種公鑰加密算法,不僅在功能上和RSA加密算法相同,而且具有加密強度高、密鑰短等諸多技術優(yōu)點,因此應用非常廣泛。橢圓曲線提供了“元素”和“組合規(guī)則”來組成群的構造方式,用這些群來構造密碼算法具有完全相似的特性。但它們并沒有減少密碼的分析量。換句話說,橢圓曲線密碼體制是基于有限域上橢圓曲線的有限群,而不是離散對數(shù)中的有限循環(huán)群得到的一種新型密碼體制[10],其目的是在橢圓曲線系統(tǒng)上實現(xiàn)各種密碼編碼方案。
橢圓曲線是由橢圓周長計算以及橢圓積分得到
(5)
式(5)中E(x)為x的3次或4次多項式,由于這樣的積分形式不能用初等函數(shù)來表達,所以引入橢圓曲線函數(shù)的概念。橢圓曲線是由一個三次方程
y2+axy+by=x3+cx2+dx+e
(6)
所確立的平面曲線。
設F是一個域,如果F中(x,y)滿足方程式(6),然后加上一個無窮遠點O,就組成了橢圓曲線。
橢圓曲線的數(shù)字簽名的定義實際上是一種基于橢圓曲線上乘法群離散對數(shù)的數(shù)字簽名的模擬。算法過程有:參數(shù)選取、密碼生成、簽名和認證。參數(shù)組D=(q,FR,S,A,B,P,n,h),其中[12],q表示有限域的階;FR表示有限域;S為橢圓曲線生成時的種子,即計算橢圓曲線方程中參數(shù)所需的種子;a、b為橢圓曲線方程中的倆個系數(shù),且a,b∈Fq;P為橢圓曲線上的基點(生成元);n表示基點的階;h表示余因子。
數(shù)字簽名過程[13]:
(1) 在區(qū)間[1,n-1]內選取一個隨機數(shù)k,并計算(x1,y1)=kP;
(2) 計算r=h(m)+x1modn;
(3) 若r+d=0(modn),則返回步驟(1),否則計算 (r+d)-1modn;
(4) 計算s=(r+d)-1(k-dr)modn,若s=0,則返回步驟(1);
(5) 將帶有附加消息(r,s)的m發(fā)送給接受者。
接收方驗證簽名:
(1) 驗證r和s是否是區(qū)間[1,n-1]中的整數(shù);其中任何一個檢驗失敗,則拒絕簽名。否則進行以下操作;
(2) 計算散列函數(shù)h(m)的值;
(3) 計算w=s-1modn,φ1=ewmodnφ2=rwmodn;
(4) 計算X=φ1P+φ2Q;
(7) 若v=r時,則接受簽名。否則,拒絕簽名。
Diffie-Hellman(DH)算法是第一個公開密鑰算法,DH算法能夠用于密鑰分配,即發(fā)、收雙方可以用DH算法產(chǎn)生秘密密鑰,發(fā)、收雙方共同擁有這個密鑰。首先,發(fā)送方A和接收方B協(xié)商一個大的素數(shù)n和g,g是模n的本原元。n和g可以選擇是公開的,所以A和B不必要秘密的協(xié)商它們。具體協(xié)議如下[14]:
(1)A取一個隨機整數(shù)x,并發(fā)送到B:
X=gxmodn;
(2)B取一個隨機整數(shù)y,并發(fā)送到A:
Y=gymodn;
(3)A計算k=Yxmodn;
(4)B計算k′=Xymodn;
k和k′都等于gxymodn。即使在發(fā)送過程中被竊聽了,竊聽者也無法計算出這個值。因此k就是A和B獨立計算的共享私密密鑰。
由于區(qū)塊鏈技術的“去中心化”的提出,為了防止在交易過程中數(shù)據(jù)被非法篡改和非法使用。本文通過分析AES算法和ECC算法的性能,綜合AES算法和ECC算法的優(yōu)點,提出二者混合的方案[15],且在密鑰管理方面,提出用DH算法對密鑰進行計算分配。3種算法的相互結合,提高了數(shù)字簽名的安全性。
(1) 發(fā)送方A和接收方B在通信之前構建自己的密鑰對,即(dA,QA)(dB,QB)dA、dB為私鑰,QA、QB為公鑰;
(2) 發(fā)、收雙方互相交換公鑰,A有B的公鑰QB,B有A的公鑰QA,然后A用自己的私鑰dA和接收到的公鑰QB用DH算法計算出一個密鑰da,同理B也可以得到一個密鑰db,由DH算法的分析可知,da=db=d,即生成的密鑰是雙方私有且共享的,如圖2所示;
圖2 雙方由DH算法產(chǎn)生密鑰
(3) 發(fā)送方A將發(fā)送的明文m用哈希函數(shù)生成消息摘要M;
(4) 將明文m用AES算法進行加密,得到密文Cm;
(5)A使用自己私鑰對生成的消息摘M要進行加密,得到摘要的簽名CM;
(6)A將AES的密鑰和雙方產(chǎn)生的私有共享密鑰d用接收到公鑰QB進行加密形成密文Ce;
(7) 最后把Cm、CM、Ce一起發(fā)送給接收者。如圖3所示。
圖3 生成數(shù)字簽名
(1)B接收到A發(fā)送的所有密文,首先B用自己的私鑰dB把接收到的密文中的Ce部分進行解密,得到AES的密鑰和共享密鑰d′;
(2)B驗證自己共享密鑰d和解密后得到的d′是否相等,若d=d′則進行下一步,否則,拒絕簽名;
(3) 將獲得的AES密鑰對密文中的Cm進行解密,得到解密明文m′;
(4) 用接收到的QA對摘要密文CM進行解密得到M。
(5) 將解密后的密文m′進行Hash()運算得到M′;
(6) 若M=M′則簽名成功;否則,拒絕簽名。如圖4所示。
圖4 驗證數(shù)字簽名
本文提出的對稱加密算法AES和公鑰加密算法ECC相結合,交易雙方由DH算法產(chǎn)生共享密鑰的混合加密方案,既能對數(shù)據(jù)進行快速加密,也可以較好的解決密鑰分配的問題,使雙方在交易過程中可以進行雙向私有的認證和識別[16],防止攻擊者的篡改,有效的保證了數(shù)據(jù)的完整性,也保障了數(shù)字簽名的時效性。如果可以進行深入的研究,在雙方簽名的過程中加上時間戳記,然后再由時間戳服務商予以簽章記錄,作為時間的證明。這樣的數(shù)字簽名更加具有時效性、安全性,為雙方交易提供更可靠的保障。