郭學(xué)沛 楊宇光
(北京工業(yè)大學(xué)信息學(xué)部 北京 100124) (876816720@qq.com)
區(qū)塊鏈是在區(qū)塊鏈技術(shù)之上形成的公共數(shù)據(jù)庫,是多種計算機技術(shù)的全新的、綜合的應(yīng)用,包含有分布式數(shù)據(jù)存儲、加密算法、點對點傳輸、共識機制等,借此具有去中心化的特性.可信互聯(lián)網(wǎng)的真正構(gòu)建始于區(qū)塊鏈的問世.
區(qū)塊鏈獨特之處在于能夠在陌生節(jié)點之間構(gòu)建點對點的可靠的信任,而無需第三方可信權(quán)威機構(gòu)介入,信息得到公開的同時隱私也得到保護,所有的個人在維護自身利益之余又可一起參與決策,既提高了交易的效率,又大幅降低了成本.區(qū)塊鏈技術(shù)的優(yōu)勢在于去中心化,通過運用加密算法、時間戳、樹形結(jié)構(gòu)、共識機制等,構(gòu)建了真正去中心化的分布式可信網(wǎng)絡(luò),加入其中的節(jié)點無需知道并信任彼此也可進行交易,解決了目前中心化模式存在的低可靠性和低安全性、高成本、低效率等問題[1].
公有鏈:對節(jié)點的加入和數(shù)據(jù)的公開沒有任何限制.所有節(jié)點均可在不受其他影響的情況下進行交易,以及參與其他共識決策活動.
私有鏈:某組織擁有并管理此種區(qū)塊鏈.讀取權(quán)限由該組織完全決定,參與節(jié)點的類型和數(shù)量也由組織控制.相比于傳統(tǒng)的分享數(shù)據(jù)庫,私有鏈由于控制了權(quán)限等內(nèi)容,使得交易更加安全,更利用加密技術(shù).
聯(lián)盟鏈:部分組織共同擁有的區(qū)塊鏈是一種特殊的私有鏈.已有的應(yīng)用有R3區(qū)塊鏈聯(lián)盟、Chinaledger、超級賬本項目聯(lián)盟等[2].
數(shù)據(jù)庫的創(chuàng)建最初是服務(wù)于文件系統(tǒng)的,關(guān)系數(shù)據(jù)庫領(lǐng)域中的關(guān)系模型、事務(wù)處理、查詢優(yōu)化三大成就的出現(xiàn)滿足了以銀行為代表的金融機構(gòu)的業(yè)務(wù)需求,進而產(chǎn)生了一系列的關(guān)系數(shù)據(jù)庫產(chǎn)品.互聯(lián)網(wǎng)行業(yè)的迅速發(fā)展對數(shù)據(jù)庫也產(chǎn)生了更高的要求,由于非結(jié)構(gòu)化數(shù)量的大量增多,NoSQL數(shù)據(jù)庫應(yīng)運而生并產(chǎn)生了一系列的相關(guān)產(chǎn)品.如今區(qū)塊鏈去中心化、分布式存儲的特性很好地解決了信任問題,迎合了發(fā)展迅速的去中介的共享經(jīng)濟,成為其理想的數(shù)據(jù)庫平臺.
比特幣是發(fā)展最完全的區(qū)塊鏈應(yīng)用,但其僅為數(shù)字貨幣提供服務(wù),為此業(yè)界推出了多種支持通用應(yīng)用的區(qū)塊鏈平臺,眾多公有鏈應(yīng)用中以太坊發(fā)展最為完善,Quorum,Monax,Dfinity,HydraChain和BCOS等眾多平臺都是基于以太坊構(gòu)建和擴展的;而聯(lián)盟鏈中應(yīng)用最廣泛的通用平臺則是Hyperledger Fabric.
以比特幣、以太坊、超級賬本三者為例來看,不同的平臺在具體實現(xiàn)上各有不同,但整體布局上大同小異,整體上可劃分為網(wǎng)絡(luò)層、共識層、數(shù)據(jù)層、智能合約層和應(yīng)用層5個層次.
區(qū)塊鏈建立在P2P網(wǎng)絡(luò)之上,主要服務(wù)于涉及數(shù)字資產(chǎn)的金融應(yīng)用,且節(jié)點地位平等,對節(jié)點的出入也沒有嚴格的控制.因此,可容忍單點故障的P2P協(xié)議就很好地滿足了區(qū)塊鏈平臺的分布式要求,成為其網(wǎng)絡(luò)傳輸協(xié)議首選.鏈上節(jié)點以平等的身份,通過扁平的拓撲結(jié)構(gòu)來相互連接,各節(jié)點功能相同,無層次等級之分.
P2P協(xié)議主要用于點對點的交易和數(shù)據(jù)共享,不同的平臺P2P協(xié)議的實現(xiàn)方式有所不同.比特幣和以太坊都基于TCP協(xié)議,Hyperledger Fabric則是利用了HTTP2協(xié)議.每個節(jié)點都在實時地監(jiān)聽整個網(wǎng)絡(luò),當收到相鄰節(jié)點發(fā)來的交易請求,節(jié)點會驗證其數(shù)字簽名,證明機制是否完備,依次來判斷交易是否有效,是否值得進行下一步處理和轉(zhuǎn)發(fā),無效的交易和區(qū)塊會被拋棄,減少了整個鏈上存儲的數(shù)據(jù)量.
一致性問題歷來是分布式數(shù)據(jù)庫的一大難題,Paxos算法和Raft算法為該問題提供了解決方案,單一機構(gòu)管理下的這些數(shù)據(jù)庫無需考慮節(jié)點是否可信的問題,崩潰容錯是算法唯一要解決的問題.區(qū)塊鏈由于去中心化的特性需要多方共同管理,此時節(jié)點是否可信也需要納入考慮的范圍,需要支持拜占庭容錯,復(fù)雜度明顯上升.PBFT(practical Byzantine fault tolerance)將拜占庭協(xié)議的復(fù)雜度降至多項式級別,從而允許分布式系統(tǒng)使用拜占庭協(xié)議,PBFT由Castro和Liskov[3]提出.
Kotla等人[4]提出了Zyzzyva,充分任可節(jié)點的可信度,認為只需在發(fā)生錯誤后在節(jié)點間達成共識即可,正常情況下無需實時共識一致.Kwon等人[5]提出了Tendermint,類似PoS機制,采用投票機制的同時根據(jù)節(jié)點的重要程度來分配不同權(quán)重的選票,最后權(quán)重超過23即可達成共識.這樣無需所有節(jié)點都參與投票,提高了共識的效率.Liu等人[6]提出了CFT(Cross Fault Tolerance),肯定了網(wǎng)絡(luò)和拜占庭節(jié)點的可靠性,認為二者不會完全被惡意攻擊者控制,簡化了BFT過程.
由于節(jié)點可自由進出,惡意節(jié)點可能仿造大量無效交易進行女巫攻擊,為了防止這一點,比特幣平臺采用了工作量證明機制,要求節(jié)點利用自己擁有的算力來完成任務(wù),從而爭奪新區(qū)快的記賬權(quán).但這樣會高度依賴節(jié)點的算力,未得到記賬權(quán)的節(jié)點花費的資源就全部浪費了,因此又提出了根據(jù)節(jié)點所擁有的股權(quán)多少來決定區(qū)塊生成難度的權(quán)益證明機制——PoS機制.比特股又創(chuàng)新地建立了股份授權(quán)證明機制——DPoS機制,投票選出幾位代表來輪流獲得區(qū)塊的記賬權(quán).
3.2.1PoW機制
PoW機制通過設(shè)計與引入分布式網(wǎng)絡(luò)節(jié)點的算力競爭,保證數(shù)據(jù)一致性和共識.所有參與“挖礦”的網(wǎng)絡(luò)節(jié)點的目標都是通過遍歷來尋找一個隨機數(shù),以使得當前區(qū)塊的區(qū)塊頭經(jīng)過2次SHA256運算后結(jié)果小于等于某個給定值.優(yōu)先實現(xiàn)目標的節(jié)點獲得此區(qū)塊的擁有權(quán),同時獲得一定比特幣的回報作為挖礦的獎勵.此外,比特幣會動態(tài)地調(diào)整預(yù)定難度值,使得尋找隨機數(shù)所需時間穩(wěn)定在10 min左右.PoW共識機制關(guān)聯(lián)起了比特幣的發(fā)行、交易和記錄,又以隨機的方式提供了記賬權(quán),保證了比特幣系統(tǒng)的安全和去中心化.
PoW 在區(qū)塊鏈網(wǎng)絡(luò)中的共識流程如下:
1) 通過廣播,所有加入?yún)^(qū)塊鏈網(wǎng)絡(luò)的節(jié)點均收到新交易產(chǎn)生的信息.
2) 每個節(jié)點都會收集自前一區(qū)塊生成以來接收到的所有交易,并根據(jù)這些交易計算出區(qū)塊頭部的Merkle根.節(jié)點需要將區(qū)塊頭中的隨機數(shù)Nonce部分從0遞增至1,遞增的過程中不斷計算區(qū)塊頭經(jīng)過2次SHA256運算后的Hash值,直至結(jié)果小于等于當前網(wǎng)絡(luò)給定的目標值.
3) 全網(wǎng)節(jié)點同時參與計算,若某節(jié)點率先達成條件找到合適的隨機數(shù),則該節(jié)點將獲得新區(qū)塊的記賬權(quán)及一定數(shù)量的比特幣作為挖礦的獎勵,并將挖到的新區(qū)塊向全網(wǎng)廣播.
4) 其他節(jié)點接收到新區(qū)塊后,會驗證區(qū)塊中包含的交易和其計算出的隨機數(shù)是否符合條件,如果滿足則承認該區(qū)塊,將其加入?yún)^(qū)塊鏈中,并開始爭奪下一區(qū)塊的記賬權(quán).
通過該機制,節(jié)點間無需交換額外的信息即可達成共識,破壞系統(tǒng)的代價極高,因此易于實現(xiàn)且難以破壞.但會造成能源(電力)和資源(算力)的浪費,同時區(qū)塊的確認時間較長[8].
3.2.2PoS機制
PoS采用的是權(quán)益證明,記賬權(quán)由擁有最高權(quán)益的節(jié)點獲得,而非PoW機制中擁有最高算力的節(jié)點.節(jié)點對特定數(shù)量貨幣的所有權(quán)成為權(quán)益、幣齡或幣天數(shù).幣齡等于貨幣數(shù)量乘以最后一次交易時間長度.長期持幣者有更長的幣齡,幣齡可以視為其在系統(tǒng)中的權(quán)益.PoS共識過程的難度與節(jié)點擁有的幣齡成反比,累計消耗幣齡最高的區(qū)塊將被鏈接到主鏈.PoS機制無需消耗鏈外資源和能量,因此相較PoW機制很大程度上減少了能源和算力的浪費.
PoS機制直接根據(jù)礦工擁有的股權(quán)(數(shù)字貨幣量)來決定挖礦難度,省去了礦工購買礦機等硬件設(shè)備的花銷,也節(jié)約了電力等能源的消耗:
H(n‖h)≤s(M).t,
M表示某礦工;函數(shù)s用于計算礦工擁有的股權(quán),擁有的股權(quán)越多挖礦的整體難度就會越低,越容易找到合適的n.
PoS的優(yōu)點是所需算力很少.但由于權(quán)益擁有者并非都是記賬的有效參與者,因此很多時候還需通過挖礦來決定記賬權(quán)[8].
3.2.3DPoS機制
DPoS在繼承PoS優(yōu)點的基礎(chǔ)上,通過將記賬人專業(yè)化改進了其不足.通過投票的方式選出一定數(shù)量的記賬人來輪流記賬,節(jié)點擁有的權(quán)益多少就是選票的多少.被選中的記賬人節(jié)點代替全網(wǎng)的普通節(jié)點進行驗證和記賬,同一時刻需要90%以上的記賬人節(jié)點在線才能保證安全與可靠.該共識機制中每個節(jié)點都能夠自主投票來選擇適合的記賬人節(jié)點,且由這些節(jié)點輪流記賬生成新的區(qū)塊.
該機制無需所有節(jié)點參與記賬,節(jié)約了時間,可以達到秒級的共識驗證.缺點是該共識機制依賴于代幣,但很多商業(yè)應(yīng)用是不需要代幣存在的[8].
3.2.4PBFT
1) 全網(wǎng)中選出1個節(jié)點負責(zé)生成新區(qū)快,該節(jié)點稱為主節(jié)點;
2) 網(wǎng)絡(luò)中所有節(jié)點會向全網(wǎng)廣播新產(chǎn)生的交易,主節(jié)點負責(zé)從中篩選出部分交易放入新區(qū)快內(nèi),并將其排序后產(chǎn)生的列表告知全網(wǎng);
3) 收到主節(jié)點廣播的列表后,每個節(jié)點都需要通過排序模擬來執(zhí)行交易,并計算新區(qū)快的Hash摘要,之后告知全網(wǎng);
4) 如果1個節(jié)點收到2f(f為可容忍的惡意節(jié)點數(shù))條和自己計算結(jié)果相同的Hash摘要,就向全網(wǎng)廣播1條commit消息;
5) 1個節(jié)點在收到2f+1條commit消息后,即可正式提交新區(qū)塊及其交易到本地的區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫.
3.2.5瑞波共識算法
該算法需要參與的全網(wǎng)節(jié)點通過一些特殊節(jié)點列表來形成共識.初始特殊節(jié)點列表數(shù)量有限,新特殊節(jié)點的加入需要得到現(xiàn)有特殊節(jié)點中51%的節(jié)點同意.共識遵循著核心成員的51%權(quán)力,非特殊節(jié)點則權(quán)利很有限.該算法實際上是由特殊節(jié)點控制的中心化的算法,特殊節(jié)點群發(fā)生問題時整個機制將崩潰,外部節(jié)點無法進行任何挽救.
在數(shù)據(jù)結(jié)構(gòu)的組織上,時間戳是區(qū)塊鏈在前人研究基礎(chǔ)上的一大創(chuàng)新.文檔時間戳用于對新生成的文檔、當前時間節(jié)點以及指向舊文檔的Hash指針三者簽名,之后的新文檔又將當前的文檔當作舊文檔來簽名,這樣便由時間戳為引子產(chǎn)生了一條證書鏈.鏈中時間一旦被簽名就無法篡改,可以用來很好地追溯文件的生成時間和前后順序等.現(xiàn)有區(qū)塊鏈平臺正是采用了基于文檔時間戳的數(shù)字公證服務(wù)來對文檔等信息進行簽名處理.
每個區(qū)塊由區(qū)塊頭和區(qū)塊體2部分組成,交易數(shù)據(jù)主體、時間戳、前一區(qū)塊的區(qū)塊Hash值存放于區(qū)塊體內(nèi).本塊內(nèi)的交易數(shù)據(jù)經(jīng)過哈希運算生成的Merkle根用于保證數(shù)據(jù)的穩(wěn)定安全,同時用于簡單支付驗證.前塊哈希則是將不同的區(qū)塊聯(lián)系在一起的紐帶.不可篡改的時間戳用于說明區(qū)塊的生成時間,方便以后追溯查找.比特幣的區(qū)塊頭還含有當前挖礦的難度系數(shù)、挖礦時找到的合適的隨機數(shù)Nonce等.
在數(shù)據(jù)模型方面,比特幣使用的是基于交易的數(shù)據(jù)模型,交易的輸入和輸出分別表示交易的來源和去向,二者共同構(gòu)成了一筆交易,且將不同的交易聯(lián)系在一起.以太坊和Hyperledger Fabric則采用了基于賬戶的模型,方便快速查找到當前賬戶的余額和狀態(tài),以便支持更多的通用應(yīng)用.
在數(shù)據(jù)存儲的設(shè)計上,區(qū)塊鏈數(shù)據(jù)常以日志文件格式來存儲,這點類似于傳統(tǒng)數(shù)據(jù)庫的預(yù)寫式日志.而索引數(shù)據(jù)和狀態(tài)數(shù)據(jù)則存入鍵值對數(shù)據(jù)庫方便系統(tǒng)進行基于Hash值的鍵值對查找.
智能合約本質(zhì)上是一種部署在區(qū)塊鏈的數(shù)字協(xié)議,由算法和程序來編寫,達到觸發(fā)條件后可自動執(zhí)行,無需人為的干預(yù).起初,智能合約是一組數(shù)字形式的承諾,包括合約雙方同意履行承諾而擬定的協(xié)議,期望將合約與實物結(jié)合來創(chuàng)造靈活的智能資產(chǎn).由于區(qū)塊鏈可去中心分布式存儲的特點,智能合約借此完成了去中心化的計算.
智能合約中含有提前定義好的狀態(tài)信息、轉(zhuǎn)換規(guī)則、合約執(zhí)行條件以及合約約定的操作等,合約參與方簽署后,作為一段代碼加入?yún)^(qū)塊鏈數(shù)據(jù)中,通過區(qū)塊鏈網(wǎng)絡(luò)的傳播,經(jīng)各節(jié)點驗證后被記入分布式賬本中.區(qū)塊鏈可以實時監(jiān)控整個智能合約的狀態(tài),在確認滿足特定的合約執(zhí)行條件后啟動并執(zhí)行合約中規(guī)定的操作.
比特幣的腳本可視為智能合約的雛形,其是一組類型單一、功能有限的指令.以太坊使用了圖靈完備的編程語言Solidity,Serpent,與可模擬程序執(zhí)行的沙盒環(huán)境——以太坊虛擬機EVM(Ethereum virtual machine),以供用戶編寫和運行智能合約.Hyperledger Fabric的智能合約被稱為Chaincode,Docker容器是其沙盒環(huán)境,編程語言則選用Go和Java.
基于比特幣的交易是比特幣平臺上應(yīng)用的主體.以太坊則功能更加豐富,除了基于其特有的以太幣的數(shù)字貨幣交易外,還支持去各種中心化應(yīng)用.Dapp是其上的一種Web前端應(yīng)用,由JavaScript語言編寫,利用JSON-RPC與運行在以太坊節(jié)點上的智能合約進行交互.超級賬本上的應(yīng)用則主要面向企業(yè)級,未提供數(shù)字貨幣,其應(yīng)用可基于Go,Java,Python,Node.js等編程語言構(gòu)建,并通過gPRC或REST與運行在Hyperledger Fabric節(jié)點上的智能合約進行通信.
智能合約本質(zhì)上是寫好的一段代碼,在預(yù)定條件滿足時無需用戶干預(yù)可自動執(zhí)行代碼內(nèi)容,實現(xiàn)“代碼即法律”的目標.借助區(qū)塊鏈擁有的去中心化特點,智能合約無需管理者參與,一旦部署并觸發(fā)就無人可將其強制停止,且可同時運行在全鏈的所有節(jié)點上.智能合約的運作機制如圖1所示,其中Txn表示每個區(qū)塊所含的n筆交易:
圖1 智能合約運行機制
智能合約通常與商業(yè)活動掛鉤,依照其邏輯編寫完成后就可布置到全網(wǎng)的所有節(jié)點上.在以太坊中,合約存放在區(qū)塊鏈上,滿足條件觸發(fā)合約時由以太坊虛擬機(EVM)加載運行;在 Hyperledger Fabric中,合約被打包成Docker鏡像,網(wǎng)絡(luò)中所有節(jié)點會基于此各自構(gòu)建一個Docker容器,同時對合約進行初始化,然后等待被調(diào)用.外部應(yīng)用通過調(diào)用智能合約來實現(xiàn)各種交易,欲修改智能合約需要在全網(wǎng)達成共識,同時所有的修改還會被記錄在區(qū)塊鏈上,狀態(tài)數(shù)據(jù)庫同時會保存修改后的結(jié)果,方便有據(jù)可查(例如,轉(zhuǎn)賬交易的轉(zhuǎn)賬金額會被記錄到區(qū)塊鏈,賬戶余額的增減會被應(yīng)用到狀態(tài)數(shù)據(jù)庫).僅查詢不涉及修改時則無需共識和記錄.
數(shù)據(jù)庫的性能可通過橫向擴展增加節(jié)點數(shù)來提高,且提高過程呈線性.比特幣、以太坊和Hyperledger Fabric目前采用單鏈方案,即整個網(wǎng)絡(luò)只有一條鏈作為區(qū)塊鏈的主鏈,網(wǎng)絡(luò)上的每個節(jié)點地位、功能都相同,都需要完成同樣多的工作,因此單個節(jié)點的能力強弱就成為制約整個系統(tǒng)處理能力的關(guān)鍵.同時,無論何種共識算法,其都會有資源、能源、時間的消耗,因此節(jié)點過多可能會導(dǎo)致系統(tǒng)的整體能力不升反降.為了實現(xiàn)動態(tài)的可擴展性,以太坊和Hyperledger Fabric分別創(chuàng)新了分片和多通道2種解決方案,使得全網(wǎng)中同時含有多條區(qū)塊鏈,克服了全網(wǎng)處理能力受限于單個節(jié)點的短板,又可并行處理多筆交易,從而提升系統(tǒng)整體性能[7].
以太坊分片的依據(jù)是賬戶地址,分片之間并非完全獨立,每個分片內(nèi)都有一條獨立子鏈,加入哪個分片由用戶自行選擇,每個節(jié)點選擇加入哪個分片或哪幾個分片由節(jié)點基于自身能力來決定,加入后則要負責(zé)處理和存儲這些分片上的交易.最終所有的分片都會至少有一個節(jié)點加入,某一節(jié)點不再需要存儲和處理全部的數(shù)據(jù),訪問自身沒有的數(shù)據(jù)時可從其他分片內(nèi)的節(jié)點讀取.應(yīng)用分片技術(shù)后,每個片相當于成為一條獨立的鏈,由于每個片都只包含了全網(wǎng)的部分節(jié)點,所以片內(nèi)的算力和明顯小于之前的全網(wǎng)所有節(jié)點算力總和.單個分片內(nèi)攻擊者容易突破51%的算力,因此不再適用工作量證明機制,改進后的以太坊2.0使用的是基于權(quán)益證明機制的Casper共識算法.
不同于以太坊是出于均衡資源的考慮來將全網(wǎng)按地址劃分成片,Hyperledger Fabric的通道技術(shù)則是基于交易規(guī)則將整個區(qū)塊鏈網(wǎng)絡(luò)劃分為多個邏輯上的通道,每個節(jié)點根據(jù)自身需要負責(zé)參與的交易不同自主地選擇加入不同的通道,如圖2所示,每個節(jié)點可以加入多個不同的通道,并可以同時接收并處理多條鏈上的區(qū)塊,多個鏈上的交易可以獨立、并發(fā)地執(zhí)行.相對于原來的單鏈結(jié)構(gòu),全網(wǎng)吞吐量將顯著提升.
圖2 多通道示意圖
基于PoW共識機制的比特幣和以太坊對節(jié)點的出入并沒有進行任何限制,節(jié)點數(shù)量并不固定.而Hyperledger Fabric采用的PBFT算法要求節(jié)點數(shù)目已知且固定不變,因此限制了節(jié)點的加入和退出.Hyperledger Fabric1.0將網(wǎng)絡(luò)節(jié)點分為共識節(jié)點和記賬節(jié)點,將共識服務(wù)和記賬服務(wù)分離開來,從而使得記賬節(jié)點可以按照需求動態(tài)加入或退出,進一步提高了系統(tǒng)的可擴展性.
出于安全性的考慮,傳統(tǒng)數(shù)據(jù)庫一般都設(shè)計了一整套完備的用戶管理機制和存取控制系統(tǒng),但二者通常都需要一個權(quán)威可信的中心節(jié)點來運行控制,并不適合區(qū)塊鏈所倡導(dǎo)的去中心化;同時,若對數(shù)據(jù)的存取進行限制,公有鏈所說的數(shù)據(jù)完全公開透明便無法實現(xiàn).因此這2種傳統(tǒng)的方法都不適合于區(qū)塊鏈網(wǎng)絡(luò).區(qū)塊鏈采用的是數(shù)字簽名來證明貨幣對的歸屬權(quán),同時可通過簽名驗證來保證交易不可篡改、不可否認;為保障交易雙方及交易具體信息的隱私性,每次交易時都會使用不同的數(shù)字證書和賬戶地址.
由于公有鏈強調(diào)數(shù)據(jù)的公開透明,因此比特幣和以太坊都未設(shè)置用戶管理,公鑰是用戶唯一的身份證明.交易的安全可靠則由數(shù)字簽名算法來保證,簽名算法使用了橢圓曲線數(shù)字簽名算法(ECDSA)[9].
交易過程中(以轉(zhuǎn)賬交易為例),接受者需要向發(fā)起者提供其比特幣地址pubKeyHash,該地址是接受者公鑰經(jīng)SHA256和RIPEMD160 2次Hash運算的結(jié)果.該比特幣地址會被存放在交易的輸出腳本ScriptPubKey中.為保證交易的可靠性,發(fā)送者需要對該筆交易數(shù)據(jù)進行簽名,簽名用于說明發(fā)起者承認該筆交易由自己發(fā)出,自己親自花出了前一筆交易中獲得的比特幣.之后把簽名sig和發(fā)送者自身的公鑰pubKey放在輸入腳本ScriptSig中.接受者一方面可用公鑰來驗證簽名sig的有效性,另一方面可以驗證其Hash值是否和前一筆交易輸出腳本中的比特幣地址pubKeyHash一致,以驗證發(fā)送者確實擁有交易中約定數(shù)量的比特幣.以上所有簽名與驗證過程都是基于輸入腳本和輸出腳本自動完成的.
以太坊的簽名過程如圖3所示.基于橢圓曲線算法強大的功能,交易數(shù)據(jù)無需再包含發(fā)送者的公鑰和地址,結(jié)合發(fā)送者提供的ECDSA簽名、交易數(shù)據(jù)、橢圓曲線參數(shù)便可還原出發(fā)送者公鑰,再經(jīng)SHA3運算可得出發(fā)送者的地址.這樣雖然提高了一些驗證過程中的運算量但減少了交易所含的字節(jié)數(shù),節(jié)約了存儲開銷.
Hyperledger Fabric主要服務(wù)于聯(lián)盟鏈,因此所有節(jié)點和用戶的出入必須經(jīng)過聯(lián)盟的授權(quán)與同意.為此Hyperledger Fabric提供了相應(yīng)的成員管理服務(wù)——Membership,并基于CA中心分別提供了ECert(enrollment cert),TCert(transaction cert)和TLSCert(transport layer security cert)3種類型的數(shù)字證書用于不同環(huán)節(jié)的驗證.ECert證書用于在登錄系統(tǒng)時確認節(jié)點和用戶的身份.TCert證書用于交易過程中的簽名與驗證,Hyperledger Fabric的每筆交易都需要發(fā)送者提供簽名和交易證書,為保護用戶的隱私性,防止惡意攻擊者通過交易證書發(fā)現(xiàn)交易發(fā)起者,每次交易可使用不同的TCert證書.TLSCert證書則用于系統(tǒng)組件間的SSLTLS通信.
圖3 以太坊簽名過程
SHA-256算法計算過程中涉及6個邏輯函數(shù)和1組常數(shù)Kt,采用了512 b大小的消息塊,每一個消息塊xi又分成16個32 b的字M0,M1,…,M15,計算過程如下[10]:
1) 初始化:
2) 構(gòu)建消息列表Wt:
4) 對于0≤t≤63,執(zhí)行:
5) 計算每個分組的中間Hash值:
最后輸出256 b長度的Hash值:
整個過程中涉及到的函數(shù)計算如下:
Ch(x,y,z)=(x∧y)⊕(x∧z),
Mai(x,y,z)=(x∧y)⊕(x∧z)⊕(y∧z),
橢圓曲線密碼系統(tǒng)(ECC)具有密鑰短、運算快等優(yōu)點,因此可以在ECC理論基礎(chǔ)上建立相應(yīng)的方案體系來增強交易的安全性.橢圓曲線定義在有限域G(p)上,其上的有理數(shù)點構(gòu)成了一個阿貝爾群,因此橢圓曲線密碼的密鑰只可單向推導(dǎo),即從公鑰得到私鑰很容易實現(xiàn),反之則很難,單向性很好地保護了數(shù)據(jù)的安全.
6.3.1橢圓曲線系統(tǒng)ECC
y2+a1xy+a3=x3+a2x2+a4x+a6.
圖4 橢圓曲線上的加法定義
橢圓曲線上的加法定義如圖4所示:橢圓曲線(EC)上任取2點p1,p2,求和后可得到點p4:過p1,p2作直線L,它與EC相交于點p3,過p3作x軸垂線交EC于點p(x,y),令p4=p=p1+p2.曲線上的點對所定義的加法運算構(gòu)成一個阿貝爾群.
當p1=p2時,多個p連續(xù)相加則轉(zhuǎn)化為數(shù)乘運算:kp=p+p+…+p,共需完成k-1次加法.數(shù)乘運算也具有單向性,當k和p已知時很容易求出kp,反之知道結(jié)果要求k則十分困難.利用其單向性的優(yōu)點,可令x=k為私鑰,公鑰為y=xp.由公鑰很難推導(dǎo)出私鑰[11].
6.3.2簽名與驗證方程
簽名方程對實現(xiàn)ElGamal,DSA等系統(tǒng)方案至關(guān)重要.在ElGamal系統(tǒng)中簽名過程如下:
取素數(shù)p,另取q使q=p-1或q是p-1的大素數(shù)因子.然后取g介于1和p之間并滿足gq=1(modp).令私鑰x 簽名方程(SE):sk=m+rx(modq), (1) 驗證方程(VE):rs=gmyr(modp). (2) 簽名者通過式(1)生成簽名(s,r),驗證者將其帶入式(2),若等式成立則說明簽名有效.式(1)、式(2)中涉及到了乘法和冪運算,計算過程中有一定困難,橢圓曲線簽名方程對二者進行了一定的改進,得到新的方程如下: 簽名方程(SE):sk=m+rx, (3) 驗證方程(VE):rs=mg+ry, (4) 其中,m為待簽名文件,可為明文,已加密文件或經(jīng)過Hash函數(shù)的結(jié)果.r=kg,g為橢圓曲線加法群生成元,x為私鑰,y為公鑰,即有y=xg.從式(3)中求出s,若代入式(4)中,有式(4)成立,則通過簽名驗證. 比特幣和以太坊的賬戶地址都是公鑰的Hash值,不直接反映用戶的真實身份信息,二者借此實現(xiàn)了一定程度的匿名性,保護了用戶的信息.另外,每次交易都使用互相毫無關(guān)聯(lián)的新地址,切斷了交易之間的關(guān)聯(lián)性,使得不可通過一個交易來牽扯出其他交易.但是,這些方案無法保障絕對的隱私性. 區(qū)塊鏈需要在驗證交易正確的同時保證交易具體內(nèi)容的隱秘與安全.目前常用的隱私保護方案包括混幣、環(huán)簽名、零知識證明、同態(tài)加密等. Hyperledger Fabric 0.6采用了單鏈的方案,鏈上用戶都存有并可訪問到全網(wǎng)的所有數(shù)據(jù).聯(lián)盟鏈主要面向商業(yè)應(yīng)用,用戶多為大型企業(yè),因此保護其數(shù)據(jù)顯得更為重要.Hyperledger Fabric 1.0采用了多通道的方案,交易的雙方通過建立專屬于自己的通道來保證交易的安全與隱秘. 當前,區(qū)塊鏈主流應(yīng)用重點分布在以下幾個領(lǐng)域: 1) 金融領(lǐng)域 金融一直以來都是各國經(jīng)濟發(fā)展的最大動力,然而當前金融行業(yè)普遍需要權(quán)威中介機構(gòu)的存在,很大程度上提高了成本且降低了效率.區(qū)塊鏈技術(shù)獨有的分布式、去中心化特點則可將金融行業(yè)從現(xiàn)有的約束中解放出來,當前在證券、支付、理賠等方面都有典型的成功應(yīng)用[12],如B2B跨境支付項目、Linq交易平臺等,極大地簡化了流程,提高了效率,降低了成本. 2) 物聯(lián)網(wǎng)領(lǐng)域 當前物聯(lián)網(wǎng)需要大型的云端服務(wù)器來連接不同的設(shè)備,中心化的網(wǎng)絡(luò)架構(gòu)一定程度上限制了其規(guī)模的擴大,否則需要支付巨額的搭建和維護費用.而借助區(qū)塊鏈,物聯(lián)網(wǎng)上的所有設(shè)備都可當作一個獨立的主體來運行,彼此之間互相合作而不互相約束[13].典型的有三星和IBM打造的ADEPT系統(tǒng). 3) 公共服務(wù)領(lǐng)域 區(qū)塊鏈中交易一旦被打包入塊并加入鏈上,便具有了很高的安全性,很難被攻破并篡改.利用區(qū)塊鏈的這一特點,可以在公共服務(wù)領(lǐng)域建立全新的認證機制,提高管理效率,改善管理水平,縮短價值的創(chuàng)造和投入利用的周期[14].例如:Ujo Music平臺可通過區(qū)塊鏈管理音樂版權(quán);BitProof利用區(qū)塊鏈來快速認證用戶的學(xué)歷信息等. 4) 公益慈善領(lǐng)域 同樣借助區(qū)塊鏈上信息可靠性高、不易被篡改的特點,公益領(lǐng)域中的相關(guān)信息均可存放在區(qū)塊鏈上,并可選擇性地公開相關(guān)信息,方便公眾實時監(jiān)督的同時尊重參與者的意志,保護其私有信息,例如BitGive建立了一個致力于將比特幣用于慈善事業(yè)的捐贈平臺,極大地促進了慈善事業(yè)的發(fā)展. 5) 供應(yīng)鏈 由于加入?yún)^(qū)塊鏈的所有節(jié)點都共享有全鏈的所有數(shù)據(jù),所以借助區(qū)塊鏈后供應(yīng)鏈的信息共享和確認變得異常容易,其中存在的問題也可被快速發(fā)現(xiàn)并針對性地提出解決方案,其數(shù)據(jù)不可篡改且可追蹤時間戳的特性,可以輕松地實現(xiàn)問題的舉證與追責(zé).如英國的Provenance就為加入其中的企業(yè)提供了完整的供應(yīng)溯源服務(wù). 6) 發(fā)展路線 針對區(qū)塊鏈的特點及當前的發(fā)展現(xiàn)狀,大致形成了2條不同的發(fā)展路線: 自上而下的路線將重心放在大型金融機構(gòu)如銀行,投資機構(gòu)等,促進其組建區(qū)塊鏈聯(lián)盟,進而帶動其他行業(yè)中的區(qū)塊鏈發(fā)展;自下而上的路線則將目光聚焦于低層社區(qū),推動諸如比特幣和以太坊這樣的商業(yè)模式的形成和運作. 中國企業(yè)級的區(qū)塊鏈發(fā)展始于2015年年底,經(jīng)過1年的發(fā)展,已有近百家相關(guān)公司落地生根,并涌現(xiàn)出了一大批優(yōu)秀的代表性企業(yè). 我國的區(qū)塊鏈行業(yè)始于聯(lián)盟的成立,國內(nèi)主要形成三大聯(lián)盟:2016年1月5日,中國首個區(qū)塊鏈聯(lián)盟“中國區(qū)塊鏈研究聯(lián)盟”落戶北京;2016 年4月19日,中國分布式總賬基礎(chǔ)協(xié)議聯(lián)盟(China Ledger)宣告成立;5月31日,由微眾銀行、深金信會等25家單位發(fā)起的金融區(qū)塊鏈合作聯(lián)盟正式成立,其中絕大多數(shù)是金融機構(gòu),剩余則是金融科技企業(yè)和互聯(lián)網(wǎng)企業(yè). 2016年國內(nèi)區(qū)塊鏈研究聯(lián)盟相繼成立,國內(nèi)金融機構(gòu)開始由簡單地使用區(qū)塊鏈向?qū)^(qū)塊鏈進行進一步的探索.2017年區(qū)塊鏈應(yīng)用落地將進一步加速.同時,海外區(qū)塊鏈成為國內(nèi)企業(yè)的投資熱點,國內(nèi)企業(yè)積極利用全球資源,進而發(fā)展自身并帶動全行業(yè)發(fā)展. 無論從哪個方面來看,中國的區(qū)塊鏈產(chǎn)業(yè)都處于一個十分活躍且前景良好的階段. 1) 去中心化.不同于傳統(tǒng)數(shù)據(jù)庫受制于單一機構(gòu),由該機構(gòu)提供管理和維護,部署也局限于有限的集群內(nèi),去中心化是區(qū)塊鏈的最大特點,區(qū)塊鏈網(wǎng)絡(luò)中所有節(jié)點都處于平等地位,沒有中心節(jié)點的存在,所有節(jié)點都享有對全部數(shù)據(jù)的存儲和訪問權(quán),從而實現(xiàn)了陌生節(jié)點間可彼此信任,從而進行交易和信息共享. 2) 不可篡改.不同區(qū)塊間依靠區(qū)塊頭內(nèi)的Hash指針和區(qū)塊體內(nèi)的Merkle樹來連接,這種方式保證了已錄入塊內(nèi)的數(shù)據(jù)是安全、不可篡改的.去中心化的分布式存儲和共識機制的運用更增加了信息的安全性,單一節(jié)點被攻破不會影響其他節(jié)點. 3) 可追溯.區(qū)塊內(nèi)的時間戳部分記錄了區(qū)塊的生成時間,整個鏈上存儲著初始以來的所有交易數(shù)據(jù),基于數(shù)據(jù)的不可篡改和時間戳的存在,各節(jié)點和監(jiān)管機構(gòu)都可隨時方便地追溯、監(jiān)管任一交易. 4) 高可信.由于去中心化的特性,加入?yún)^(qū)塊鏈的節(jié)點彼此之間無需互相信任也可安全地進行點對點交易和信息傳輸.且鏈上的每筆交易都包含發(fā)送者的簽名,都需經(jīng)過全網(wǎng)共識,多重機制保證了數(shù)據(jù)的不可篡改、不可否認. 5) 高可用.傳統(tǒng)分布式數(shù)據(jù)庫多應(yīng)用主備模式來保證系統(tǒng)的正常運行:主數(shù)據(jù)庫要求較高,一般運行在高配服務(wù)器上;備份數(shù)據(jù)庫則實時地同步主數(shù)據(jù)庫的信息.當主數(shù)據(jù)庫崩潰時,需要將備份數(shù)據(jù)庫切換為主數(shù)據(jù)庫.該模式需要復(fù)雜的配置和昂貴的造價與維護.而在區(qū)塊鏈系統(tǒng)中,所有節(jié)點地位平等,沒有主從之分,少數(shù)節(jié)點即使出現(xiàn)故障或遭到攻擊也不會影響其他節(jié)點,且問題節(jié)點恢復(fù)正常后還可重新存儲全網(wǎng)的所有數(shù)據(jù). 1) 吞吐量.相較于傳統(tǒng)數(shù)據(jù)庫的吞吐量,比特幣的7 TBs和以太坊的25 TBs顯然要低很多,即使Hyperledger Fabric有所改進,其吞吐量也未超過2 000 TBs.區(qū)塊鏈是將一定時間內(nèi)發(fā)生的全部交易集體打包后再統(tǒng)一處理,無法實現(xiàn)實時的認證和交易.共識機制的引入,無論是PoW還是PBFT,都在提高安全性的同時降低了系統(tǒng)的性能,其復(fù)雜的簽名與認證過程都涉及一定的系統(tǒng)開銷. 2) 事務(wù)處理.目前區(qū)塊鏈所依賴的底層數(shù)據(jù)庫多為鍵值對(Key-Value)數(shù)據(jù)庫,這種數(shù)據(jù)庫缺乏事務(wù)處理能力.三大主流平臺:比特幣、以太坊、Hyperledger Fabric都采用了LevelDB數(shù)據(jù)庫來存儲鏈上的索引和狀態(tài)數(shù)據(jù).但該數(shù)據(jù)庫也不支持嚴格的事務(wù)處理,當單節(jié)點合約執(zhí)行有誤時需要從其他節(jié)點重新同步數(shù)據(jù)來恢復(fù)正常. 3) 并發(fā)處理.傳統(tǒng)數(shù)據(jù)庫可同時并發(fā)處理大量客戶端的請求,但區(qū)塊鏈上的節(jié)點大多是身份對等地參與區(qū)塊鏈的P2P網(wǎng)絡(luò),無法支持大量客戶端的高并發(fā)訪問. 4) 查詢統(tǒng)計.由于數(shù)據(jù)庫的架構(gòu)和特性不同,傳統(tǒng)數(shù)據(jù)庫中用戶可方便地通過函數(shù)語句來查詢想要的信息并作出統(tǒng)計.但區(qū)塊鏈底層的Key-Value數(shù)據(jù)庫或文件系統(tǒng)使得簡單的歷史數(shù)據(jù)查詢都變得復(fù)雜,統(tǒng)計和復(fù)合查詢則更難實現(xiàn).針對這一問題,區(qū)塊鏈可通過插件化來支持多種不同的數(shù)據(jù)庫,改進數(shù)據(jù)訪問機制. 5) 訪問控制.去中心化帶來的一大問題就是訪問控制機制的弱化.大多數(shù)區(qū)塊鏈平臺尤其是公有鏈,數(shù)據(jù)都是存儲在全網(wǎng)所有節(jié)點并可公開透明訪問的,唯一的安全機制只有交易過程中的簽名與認證,以保證交易的不可偽造和否認.而傳統(tǒng)數(shù)據(jù)庫的訪問控制機制已經(jīng)十分成熟[15]. 6) 可擴展性.如前所述,共識機制的存在使得區(qū)塊鏈平臺在節(jié)點數(shù)增加的過程中性能不升反降,除分片和多通道外,其他擴展性方案還有待驗證.而傳統(tǒng)數(shù)據(jù)庫的橫向擴展則可通過增加節(jié)點來線性地提高系統(tǒng)的性能. 7) 若2個算力相近的節(jié)點A和B在較短的時間差內(nèi)分別創(chuàng)建了各自的區(qū)塊,鏈上節(jié)點可能優(yōu)先收到二者任一發(fā)出的確認信息,這樣2個新區(qū)快都會接入鏈中且包含了相同的數(shù)據(jù)信息并都是有效的,便形成了分叉.之后全網(wǎng)節(jié)點可以選擇任何2個新區(qū)快中的任一區(qū)塊作為父區(qū)塊并創(chuàng)建下一區(qū)塊,當某一支鏈率先創(chuàng)建了新區(qū)塊該支鏈便稱為較長的支鏈,另一條短的支鏈就會被拋棄,這樣分叉便結(jié)束了. 軟分叉:區(qū)塊鏈有時會出現(xiàn)協(xié)議替換的現(xiàn)象,新舊協(xié)議下創(chuàng)建的區(qū)塊都可互相接受,新舊區(qū)塊便可共存于一條鏈上,這稱為向上兼容模式,并不會產(chǎn)生分叉.實際過程中因為新協(xié)議逐漸得到認同,舊協(xié)議創(chuàng)建的區(qū)塊會逐漸消失. 硬分叉:當新協(xié)議下創(chuàng)建的區(qū)塊無法被鏈上舊區(qū)塊接受時,新區(qū)快便會從舊鏈中分叉出來,之后經(jīng)過共識算法各節(jié)點會將算力投入到新區(qū)快分叉出來的支鏈中,這被稱為向下兼容模式,最后會發(fā)生硬分叉. 8) 效率問題.區(qū)塊鏈記錄了整個網(wǎng)絡(luò)從誕生到現(xiàn)在鏈上發(fā)生的全部交易,數(shù)據(jù)量十分巨大,如比特幣網(wǎng)絡(luò)在短短7年內(nèi)數(shù)據(jù)量已達60 GB.完整記錄交易在保證數(shù)據(jù)不可篡改的同時帶來了嚴重的存儲問題. 9) 中心化問題.算力證明機制中算力高的節(jié)點率先找到滿足條件的隨機數(shù)的概率就大,便更有可能獲得區(qū)塊的記賬權(quán).這樣,原本平等的節(jié)點間記賬權(quán)爭奪就變成了硬件設(shè)備的比拼,越來越多的節(jié)點和設(shè)備聚在一起組成礦池,單一的節(jié)點完全無法與礦池相較高低,導(dǎo)致了節(jié)點間的不對等.目前,使用CPU挖礦幾乎已經(jīng)不再可能,這就違背了區(qū)塊鏈去中心化的初衷,礦池實質(zhì)上逐漸成為了一種新的中心節(jié)點. 回顧整個IT行業(yè)的發(fā)展,每次重大的變革,無一例外都是由于新架構(gòu)的出現(xiàn)帶來了新的生產(chǎn)力,出現(xiàn)了新的應(yīng)用,推動了變革的發(fā)生.作為數(shù)字加密貨幣的底層核心技術(shù),區(qū)塊鏈之所以如此重要,是因為其架構(gòu)有著獨特的優(yōu)點:去中心化、準匿名性、安全透明、可防篡改防偽造、交易可追溯、智能合約、低成本高效率等.現(xiàn)有的互聯(lián)網(wǎng)+時代在信任建立、維護以及安全問題上存在致命的缺陷,因此未來互聯(lián)網(wǎng)+必須與區(qū)塊鏈+相結(jié)合,從而使得各種業(yè)務(wù)更加安全,交易成本更低,交易效率更高. 雖然區(qū)塊鏈仍舊存在較為明顯的問題,在發(fā)展過程中也受到過幾次較為大型的攻擊,如The DAO項目就由于智能合約出現(xiàn)漏洞而被黑客攻擊,導(dǎo)致巨額的比特幣丟失.但隨著各方的不斷努力,區(qū)塊鏈的不足之處都會得到改進和完善,成為一個更加完備的系統(tǒng)平臺,未來區(qū)塊鏈一定會發(fā)揮更大的作用,徹底顛覆諸多行業(yè)的現(xiàn)狀,很大程度上改變我們的生活.中國在這場新的競賽中應(yīng)當后起發(fā)力,努力趕上世界前沿水平,抓住這場機遇,好好應(yīng)對挑戰(zhàn),在這場新的科技浪潮中發(fā)展自身. [1]袁勇, 王飛躍. 區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J]. 自動化學(xué)報, 2016, 42(4): 481-494 [2]沈鑫, 裴慶祺, 劉雪峰. 區(qū)塊鏈技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報, 2016, 2(11): 11-20 [3]Castro M, Liskov B. Practical byzantine fault tolerance and proactive recovery[J]. ACM Trans on Computer Systems, 2002, 20(4): 398-461 [4]Kotla R, Alvisi L, Dahlin M, et al. Zyzzyva: Speculative byzantine fault tolerance[J]. ACM Trans on Computer Systems, 2007, 51(6): 45-58 [5]Kwon J. Tendermint: Consensus without mining[OL]. [2018-03-15]. https:tendermint.comstaticdocstendermint.pdf [6]Liu S, Viotti P, Cachin C, et al. XFT: Practical fault tolerance beyond crashes[JOL]. [2018-03-15]. http:www.eurecom.frenpublication4575/downloadsec-publi-4575_1.pdf [7]邵奇峰, 金澈清, 張召等. 區(qū)塊鏈技術(shù):架構(gòu)及進展[J]. 計算機學(xué)報, 2018, 41(5): 969-988 [8]王曉光. 區(qū)塊鏈技術(shù)共識算法綜述[J]. 信息與電腦: 理論版, 2017, 9(9): 72-74 [9]曠華. 安全哈希算法SHA[J]. 華南金融電腦, 2003, 10(6): 24-26 [10]何潤民, 馬俊. SHA-256算法的安全性分析[J]. 電子設(shè)計工程, 2014, 22(3): 31-33 [11]羅皓, 喬秦寶, 劉金龍, 等. 橢圓曲線簽名方案[J]. 武漢大學(xué)學(xué)報: 理學(xué)版, 2003, 32(1): 95-98 [12]孫國茂. 區(qū)塊鏈技術(shù)的本質(zhì)特征及其金融領(lǐng)域應(yīng)用研究[J]. 理論學(xué)刊, 2017, 33(2): 58-67 [13]姚忠將, 葛敬國. 關(guān)于區(qū)塊鏈原理及應(yīng)用的綜述[J]. 科研信息化技術(shù)與應(yīng)用, 2017, 8(2): 3-17 [14]朱建明, 付永貴. 區(qū)塊鏈應(yīng)用研究進展[J]. 科技導(dǎo)報, 2017, 35(13): 70-76 [15]張濱. 區(qū)塊鏈安全風(fēng)險研究[J]. 電信工程技術(shù)與標準化, 2017, 30(11): 1-56.4 隱私性
7 區(qū)塊鏈應(yīng)用
8 國內(nèi)區(qū)塊鏈發(fā)展
9 區(qū)塊鏈的優(yōu)勢與缺點
9.1 優(yōu) 勢
9.2 缺點與問題
10 結(jié)束語