周硙
摘 ?要:電子支付、電子商務(wù)、互聯(lián)網(wǎng)廣告、大數(shù)據(jù)交易等業(yè)務(wù),都是由多個主體參與的持續(xù)性業(yè)務(wù)。對賬系統(tǒng)是此類業(yè)務(wù)開展中的重要一環(huán),它保證了各參與方數(shù)據(jù)一致。區(qū)塊鏈技術(shù)集成了分布式公共賬本及智能合約技術(shù),且本身具有不可偽造、不可篡改的特性,可以滿足對賬系統(tǒng)的需求。本文討論了基于區(qū)塊鏈技術(shù)的對賬系統(tǒng),并給出了依托Bitcoin和Ethereum公鏈的具體實現(xiàn)。利用區(qū)塊鏈特性,對賬系統(tǒng)可以實現(xiàn)去中心化對賬。相對于中心化對賬,該方案不依賴某單一參與者,沒有單點故障;對賬結(jié)果通過區(qū)塊鏈存儲,結(jié)果可追溯、驗真;數(shù)據(jù)根據(jù)授權(quán)分別存儲于公鏈及私鏈,保證了數(shù)據(jù)隱私。
關(guān)鍵詞:區(qū)塊鏈;對賬系統(tǒng);智能合約
中圖分類號:TP311 ? ? 文獻標(biāo)識碼:A
1 ? 引言(Introduction)
1.1 ? 區(qū)塊鏈
區(qū)塊鏈源于比特幣,是分布式數(shù)據(jù)存儲、P2P傳輸、共識機制、加密算法等技術(shù)的組合應(yīng)用系統(tǒng)。區(qū)塊是區(qū)塊鏈的基本結(jié)構(gòu)單元。第一個被構(gòu)建的區(qū)塊稱為創(chuàng)世區(qū)塊。除了創(chuàng)世區(qū)塊,其余每個區(qū)塊包含了前序區(qū)塊的哈希值。因此可以通過哈希值,確認區(qū)塊的前后指向關(guān)系。所有區(qū)塊,依照前后指向關(guān)系為序相連,構(gòu)成區(qū)塊鏈[1]。
1.2 ? 對賬系統(tǒng)
多方交易系統(tǒng)中,因為多種原因可能交易各方的數(shù)據(jù)會產(chǎn)生差異。因此需要定期將多方的數(shù)據(jù)進行比對,各方對缺失的數(shù)據(jù)進行補單,對有差異的數(shù)據(jù)進行排查糾正,典型對賬流程見圖1。近期廣受關(guān)注的區(qū)塊鏈技術(shù)提供了實現(xiàn)對賬系統(tǒng)的新思路[2]。本文以區(qū)塊鏈技術(shù)為基礎(chǔ),提出了一個多方對賬的技術(shù)方案。該系統(tǒng)支持多方對賬,具有匿名特征,可以實現(xiàn)隱私數(shù)據(jù)保護。
2 ? 對賬系統(tǒng)分析(Analysis of reconciliation system)
對賬系統(tǒng)因涉及若干個獨立的業(yè)務(wù)主體,所以需要約定具體的對賬流程,并采用可靠的技術(shù)方案實現(xiàn)對賬流程。對賬流程分成三步:(1)確認基準(zhǔn)數(shù)據(jù),通常是以某一方位基準(zhǔn),各方都從基準(zhǔn)方獲取初始數(shù)據(jù);(2)明細賬比對,各方將基準(zhǔn)數(shù)據(jù)與己方數(shù)據(jù)進行對比,根據(jù)對賬結(jié)果,首先通過自動化腳本處理對賬差異,比如對缺失數(shù)據(jù)進行補單,對于無法自動處理差異要人工處理;(3)各方將處理后的數(shù)據(jù)相互交換,如果各方結(jié)果均一致,則對賬結(jié)束,否則回到第2步[3]。典型的對賬流程如圖1所示。
對賬業(yè)務(wù)場景根據(jù)對賬各方的關(guān)系分為中心化對賬和去中心化對賬。中心化對賬,通常有可靠的中心化機構(gòu)作為對賬中心,其本身數(shù)據(jù)必須高度可靠,其余對賬各方以中心機構(gòu)為基準(zhǔn),找出己方的差錯。中心化對賬有單點失效的缺點,如果中心機構(gòu)自身出現(xiàn)技術(shù)故障或者數(shù)據(jù)錯誤,后續(xù)對賬將很難順利完成。去中心化對賬可以有效解決單點故障的問題。去中心化對賬是若干平等主體,以對等方式進行對賬。去中心化對賬因為沒有中心機構(gòu)負責(zé),所以自然避免了單點故障,但是因為沒有負責(zé)的中心機構(gòu),所以對賬方案必須可以驗證數(shù)據(jù)的來源是否真實,對賬方案也必須保證各方已經(jīng)確認的歷史數(shù)據(jù)不能被篡改[4]。
3 ? 方案設(shè)計(Scheme design)
3.1 ? 對賬系統(tǒng)需要解決的問題
根據(jù)以上分析,對賬系統(tǒng)需要解決以下問題:(1)發(fā)起對賬時,各方需要同步初始的對賬數(shù)據(jù),并確認開始對賬;(2)對賬過程中,對賬系統(tǒng)可以交換明細賬差異,記錄各方的數(shù)據(jù)確認行為;(3)對賬結(jié)束后,對賬系統(tǒng)可以封存各方一致的數(shù)據(jù);(4)對賬數(shù)據(jù)本身可能涉及業(yè)務(wù)細節(jié),對于私有數(shù)據(jù),應(yīng)該僅限對賬各方掌握;(5)對賬的非私密數(shù)據(jù)應(yīng)該實現(xiàn)安全、可靠的電子存證。
3.2 ? 整體設(shè)計
整體方案由主鏈及私鏈構(gòu)成。主鏈向所有人公開,任何人都可以讀取主鏈區(qū)塊。主鏈區(qū)塊只儲存對賬各參與方、對賬狀態(tài)及對賬私鏈的創(chuàng)世區(qū)塊哈希值。主鏈的每個區(qū)塊可以分成區(qū)塊頭和數(shù)據(jù)區(qū)兩部分。其中,數(shù)據(jù)區(qū)用于存儲實際數(shù)據(jù),區(qū)塊頭存儲了前序區(qū)塊及數(shù)據(jù)區(qū)的哈希值。對賬的私密數(shù)據(jù)僅存放在私鏈上。每次對賬產(chǎn)生一個私鏈,私鏈的數(shù)據(jù)僅限對賬參與方訪問,整體方案如圖2所示。
私鏈區(qū)塊格式同樣分成區(qū)塊頭和數(shù)據(jù)區(qū)。所有區(qū)塊頭格式相同,數(shù)據(jù)區(qū)有四種:(1)創(chuàng)世區(qū)塊,包含數(shù)據(jù)文件的清單及md5和sha1;(2)差異區(qū)塊,對前序數(shù)據(jù)文件的增補和修正;(3)確認區(qū)塊,一種特殊區(qū)塊,沒有數(shù)據(jù)區(qū),僅用來表示對前序區(qū)塊的確認;(4)終止區(qū)塊,一種特殊區(qū)塊,沒有數(shù)據(jù)區(qū),用來表示所有參與方都對當(dāng)前數(shù)據(jù)達成一致,對賬結(jié)束[5]。
3.3 ? 對賬發(fā)起
對賬通過以下步驟發(fā)起:(1)發(fā)起方準(zhǔn)備對賬的初始數(shù)據(jù),并提供下載地址;(2)發(fā)起方啟動私鏈,構(gòu)造私鏈創(chuàng)世區(qū)塊;(3)各方確認私鏈創(chuàng)世區(qū)塊,下載對賬初始數(shù)據(jù),驗證文件完整性及主鏈相關(guān)信息,驗證無誤后在主鏈依次簽名,確認啟動對賬。
3.4 ? 私鏈上的明細賬對賬程序
對賬發(fā)起后,其余參與方,輪流獲得在私鏈創(chuàng)建新區(qū)塊的權(quán)利,即記賬權(quán)。每次獲得記賬權(quán)的一方,可從所有區(qū)塊中選擇與己方數(shù)據(jù)相同部分最多的區(qū)塊,以此作為前序區(qū)塊。如果有多條差異數(shù)據(jù)同樣多的區(qū)塊,則選擇最長的。如果結(jié)果仍不唯一,選擇創(chuàng)建最早的。確認前序區(qū)塊后,對缺失數(shù)據(jù)進行補單,對錯誤數(shù)據(jù)進行修正,相應(yīng)的差異信息寫入新區(qū)塊;如果沒有差異,需要向前序方向檢查所有區(qū)塊,如果所有對賬各方都確認了沒有差異,則創(chuàng)建對賬終止區(qū)塊并進入對賬結(jié)束流程,否則創(chuàng)建確認區(qū)塊。
3.5 ? 對賬結(jié)束流程
對賬發(fā)起人,用終止區(qū)塊的哈希構(gòu)造主鏈交易單,由各對賬方依次簽名,并回存到主鏈中。主鏈確認后,對賬結(jié)束。同時私鏈生命周期結(jié)束,各方可以將私鏈數(shù)據(jù)長期存檔備查。
3.6 ? 區(qū)塊鏈方案的優(yōu)勢
因為每個區(qū)塊都包含了前序區(qū)塊的哈希值,所以可以用來校驗前序區(qū)塊是否被修改。因為每個區(qū)塊都存儲了前序區(qū)塊哈希值,可以從當(dāng)前區(qū)塊逐塊回溯歷史區(qū)塊,此過程中任何對歷史區(qū)塊的篡改都可以被發(fā)現(xiàn),因此區(qū)塊鏈具有不可篡改的特性。
區(qū)塊數(shù)據(jù)都需要數(shù)據(jù)產(chǎn)生者,通過非對稱算法進行數(shù)字簽名。并且隨機選出的記賬節(jié)點將會核實簽名的真實性。記賬數(shù)據(jù)向全網(wǎng)其他節(jié)點廣播時,每個節(jié)點都會再次校驗數(shù)字簽名的真?zhèn)?,偽造的?shù)據(jù)不會被網(wǎng)絡(luò)其他節(jié)點接受,所以區(qū)塊上的數(shù)據(jù)信息具有不可偽造的特性。
4 ? 方案實現(xiàn)(Scheme implementation)
4.1 ? Bitcoin主鏈方案
Bitcoin主鏈?zhǔn)侵С直忍貛诺牡讓訁^(qū)塊鏈。比特幣主鏈從創(chuàng)世區(qū)塊開始,記賬網(wǎng)絡(luò)按照工作量證明機制,每隔一段時間選出一個節(jié)點作為記賬節(jié)點。記賬節(jié)點負責(zé)對期間發(fā)生的數(shù)據(jù)進行整理,生成新區(qū)快,步驟如下:(1)打包數(shù)據(jù)到數(shù)據(jù)區(qū);(2)根據(jù)數(shù)據(jù)區(qū)計算哈希;(3)確認前序區(qū)塊,計算前序區(qū)塊哈希和數(shù)據(jù)哈希;(4)構(gòu)建區(qū)塊頭;(5)將數(shù)據(jù)區(qū)和區(qū)塊頭打包成新區(qū)塊;(6)通過P2P網(wǎng)絡(luò),廣播給所有節(jié)點[6]。比特幣主鏈的區(qū)塊包含了交易信息,該交易信息的OP_RETURN字段可以用來記錄對賬私鏈創(chuàng)世區(qū)塊的哈希值;同時,比特幣支持多重簽名賬戶,多重簽名賬戶首先需要確定哪些私鑰可以參與該賬戶的管理操作,并約定交易生效的最小簽名數(shù)量。這種方式也稱為MofN模式,其中N指管理密鑰的個數(shù),M為操作該賬戶的最小簽名數(shù)。使用Bitcoin多簽名賬戶時,首先由各方,創(chuàng)建各自的密鑰對,然后交換公鑰,共同使用各方公鑰生成多簽名賬戶。賬戶管理密鑰和最小簽名數(shù)均等于參與方數(shù)量。即必須所有參與方都簽名后才能操作賬戶。
發(fā)起對賬過程,由發(fā)起方準(zhǔn)備初始對賬數(shù)據(jù),并提供下載方式、文件清單及MD5和SHA1需寫入私鏈創(chuàng)世區(qū)塊。私鏈創(chuàng)世區(qū)塊創(chuàng)建成功后,發(fā)起方以創(chuàng)世區(qū)塊哈希創(chuàng)建主鏈的交易單,并發(fā)送給對賬各方。各方下載到初始數(shù)據(jù)后,校驗私鏈創(chuàng)世區(qū)塊,如果無誤依次用己方私鑰對交易單進行簽名。所有簽名齊備后,向Bitcoin主鏈寫入交易單,實現(xiàn)對賬啟動程序。
關(guān)閉對賬過程與發(fā)起相似。對賬各方在私鏈上達成共識,產(chǎn)生終止區(qū)塊。取其哈希值,對賬各方共同簽名,寫回Bitcoin主鏈,從而關(guān)閉對賬。
4.2 ? Ethereum主鏈方案
Ethereum支持智能合約。智能合約(Smart Contract)是以信息化方式傳播、驗證或執(zhí)行合同的計算機協(xié)議[7]。智能合約可以在沒有第三方的情況下進行可信交易,這些交易可追蹤且不可逆轉(zhuǎn)。
Ethereum智能合約由Solidity語言開發(fā),可以實現(xiàn)多簽名賬戶等基本功能。且支持合約狀態(tài)和合約函數(shù)。因此相對于Bitcoin主鏈方案實現(xiàn)更簡單。
每個智能合約的數(shù)據(jù)中,預(yù)設(shè)了發(fā)起方及對賬各方的賬戶地址,通過mapping結(jié)構(gòu)存儲對賬信息,核心數(shù)據(jù)結(jié)構(gòu)如下:
對賬各方通過調(diào)用合約函數(shù)發(fā)起對賬,并在對賬私鏈完成明細賬對賬程序,最后通過智能合約函數(shù)將私鏈信息回傳到主鏈,完成對賬[8]。
5 ? 結(jié)論(Conclusion)
對賬系統(tǒng)在支付、廣告等行業(yè)廣泛使用,是一種保障業(yè)務(wù)開展的重要系統(tǒng)。本文將區(qū)塊鏈技術(shù)與傳統(tǒng)對賬系統(tǒng)結(jié)合,設(shè)計了一套去中心化的對賬系統(tǒng)。該方案,可以依托于現(xiàn)有區(qū)塊鏈技術(shù),不但可以滿足傳統(tǒng)對賬業(yè)務(wù)的需求,還可以實現(xiàn)多方對賬、無中心的分布式對賬等需求。通過公鏈私鏈的組合使用,明細賬內(nèi)容,僅由對賬各方掌握,同時保證了數(shù)據(jù)安全及數(shù)據(jù)隱私。
參考文獻(References)
[1] Dinh T T A,Liu R,Zhang M,et al.Untangling Blockchain:A Data Processing View of Blockchain Systems[J].IEEE Transactions on Knowledge & Data Engineering,2017,30(7):1366-1385.
[2] Jiang T,F(xiàn)ang H,Wang H.Blockchain-based Internet of Vehicles: Distributed Network Architecture and Performance Analysis[J].IEEE Internet of Things Journal,2019,6(3):4640-4649.
[3] De Montjoye Y A,Radaelli L,Singh V K,et al.Unique in the shopping mall:On the reidentifiability of credit card metadata[J].Science,2015,347(6221):536-539.
[4] Yang M,Margheri A,Hu R,et al.Differentially Private Data Sharing in a Cloud Federation with Blockchain[J].IEEE Cloud Computing,2018,5(6):69-79.
[5] Günther Eibl,Engel D.Differential privacy for real smart metering data[J].Computer Science-Research and Development,2016,32(1-2):173-182.
[6] Nakamoto S.Bitcoin:A peer-to-peer electronic cash system[EB/OL].http://bitcoin.org/bitcoin.pdf,2008-10-31/2019-10-1.
[7] Christidis K,Devetsikiotis M.Blockchains and Smart Contracts for the Internet of Things[J].IEEE Access,2016(4):2292-2303.
[8] 黃小菊,徐文起,章濤,等.基于區(qū)塊鏈技術(shù)的個人信息管理[J].軟件工程,2018,21(10):34-37.
作者簡介:
周 ?硙(1983-),男,博士,博士后在站.研究領(lǐng)域:大數(shù)據(jù)及區(qū)塊鏈.