周硙
摘 ?要:電子支付、電子商務(wù)、互聯(lián)網(wǎng)廣告、大數(shù)據(jù)交易等業(yè)務(wù),都是由多個(gè)主體參與的持續(xù)性業(yè)務(wù)。對(duì)賬系統(tǒng)是此類(lèi)業(yè)務(wù)開(kāi)展中的重要一環(huán),它保證了各參與方數(shù)據(jù)一致。區(qū)塊鏈技術(shù)集成了分布式公共賬本及智能合約技術(shù),且本身具有不可偽造、不可篡改的特性,可以滿足對(duì)賬系統(tǒng)的需求。本文討論了基于區(qū)塊鏈技術(shù)的對(duì)賬系統(tǒng),并給出了依托Bitcoin和Ethereum公鏈的具體實(shí)現(xiàn)。利用區(qū)塊鏈特性,對(duì)賬系統(tǒng)可以實(shí)現(xiàn)去中心化對(duì)賬。相對(duì)于中心化對(duì)賬,該方案不依賴某單一參與者,沒(méi)有單點(diǎn)故障;對(duì)賬結(jié)果通過(guò)區(qū)塊鏈存儲(chǔ),結(jié)果可追溯、驗(yàn)真;數(shù)據(jù)根據(jù)授權(quán)分別存儲(chǔ)于公鏈及私鏈,保證了數(shù)據(jù)隱私。
關(guān)鍵詞:區(qū)塊鏈;對(duì)賬系統(tǒng);智能合約
中圖分類(lèi)號(hào):TP311 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
1 ? 引言(Introduction)
1.1 ? 區(qū)塊鏈
區(qū)塊鏈源于比特幣,是分布式數(shù)據(jù)存儲(chǔ)、P2P傳輸、共識(shí)機(jī)制、加密算法等技術(shù)的組合應(yīng)用系統(tǒng)。區(qū)塊是區(qū)塊鏈的基本結(jié)構(gòu)單元。第一個(gè)被構(gòu)建的區(qū)塊稱為創(chuàng)世區(qū)塊。除了創(chuàng)世區(qū)塊,其余每個(gè)區(qū)塊包含了前序區(qū)塊的哈希值。因此可以通過(guò)哈希值,確認(rèn)區(qū)塊的前后指向關(guān)系。所有區(qū)塊,依照前后指向關(guān)系為序相連,構(gòu)成區(qū)塊鏈[1]。
1.2 ? 對(duì)賬系統(tǒng)
多方交易系統(tǒng)中,因?yàn)槎喾N原因可能交易各方的數(shù)據(jù)會(huì)產(chǎn)生差異。因此需要定期將多方的數(shù)據(jù)進(jìn)行比對(duì),各方對(duì)缺失的數(shù)據(jù)進(jìn)行補(bǔ)單,對(duì)有差異的數(shù)據(jù)進(jìn)行排查糾正,典型對(duì)賬流程見(jiàn)圖1。近期廣受關(guān)注的區(qū)塊鏈技術(shù)提供了實(shí)現(xiàn)對(duì)賬系統(tǒng)的新思路[2]。本文以區(qū)塊鏈技術(shù)為基礎(chǔ),提出了一個(gè)多方對(duì)賬的技術(shù)方案。該系統(tǒng)支持多方對(duì)賬,具有匿名特征,可以實(shí)現(xiàn)隱私數(shù)據(jù)保護(hù)。
2 ? 對(duì)賬系統(tǒng)分析(Analysis of reconciliation system)
對(duì)賬系統(tǒng)因涉及若干個(gè)獨(dú)立的業(yè)務(wù)主體,所以需要約定具體的對(duì)賬流程,并采用可靠的技術(shù)方案實(shí)現(xiàn)對(duì)賬流程。對(duì)賬流程分成三步:(1)確認(rèn)基準(zhǔn)數(shù)據(jù),通常是以某一方位基準(zhǔn),各方都從基準(zhǔn)方獲取初始數(shù)據(jù);(2)明細(xì)賬比對(duì),各方將基準(zhǔn)數(shù)據(jù)與己方數(shù)據(jù)進(jìn)行對(duì)比,根據(jù)對(duì)賬結(jié)果,首先通過(guò)自動(dòng)化腳本處理對(duì)賬差異,比如對(duì)缺失數(shù)據(jù)進(jìn)行補(bǔ)單,對(duì)于無(wú)法自動(dòng)處理差異要人工處理;(3)各方將處理后的數(shù)據(jù)相互交換,如果各方結(jié)果均一致,則對(duì)賬結(jié)束,否則回到第2步[3]。典型的對(duì)賬流程如圖1所示。
對(duì)賬業(yè)務(wù)場(chǎng)景根據(jù)對(duì)賬各方的關(guān)系分為中心化對(duì)賬和去中心化對(duì)賬。中心化對(duì)賬,通常有可靠的中心化機(jī)構(gòu)作為對(duì)賬中心,其本身數(shù)據(jù)必須高度可靠,其余對(duì)賬各方以中心機(jī)構(gòu)為基準(zhǔn),找出己方的差錯(cuò)。中心化對(duì)賬有單點(diǎn)失效的缺點(diǎn),如果中心機(jī)構(gòu)自身出現(xiàn)技術(shù)故障或者數(shù)據(jù)錯(cuò)誤,后續(xù)對(duì)賬將很難順利完成。去中心化對(duì)賬可以有效解決單點(diǎn)故障的問(wèn)題。去中心化對(duì)賬是若干平等主體,以對(duì)等方式進(jìn)行對(duì)賬。去中心化對(duì)賬因?yàn)闆](méi)有中心機(jī)構(gòu)負(fù)責(zé),所以自然避免了單點(diǎn)故障,但是因?yàn)闆](méi)有負(fù)責(zé)的中心機(jī)構(gòu),所以對(duì)賬方案必須可以驗(yàn)證數(shù)據(jù)的來(lái)源是否真實(shí),對(duì)賬方案也必須保證各方已經(jīng)確認(rèn)的歷史數(shù)據(jù)不能被篡改[4]。
3 ? 方案設(shè)計(jì)(Scheme design)
3.1 ? 對(duì)賬系統(tǒng)需要解決的問(wèn)題
根據(jù)以上分析,對(duì)賬系統(tǒng)需要解決以下問(wèn)題:(1)發(fā)起對(duì)賬時(shí),各方需要同步初始的對(duì)賬數(shù)據(jù),并確認(rèn)開(kāi)始對(duì)賬;(2)對(duì)賬過(guò)程中,對(duì)賬系統(tǒng)可以交換明細(xì)賬差異,記錄各方的數(shù)據(jù)確認(rèn)行為;(3)對(duì)賬結(jié)束后,對(duì)賬系統(tǒng)可以封存各方一致的數(shù)據(jù);(4)對(duì)賬數(shù)據(jù)本身可能涉及業(yè)務(wù)細(xì)節(jié),對(duì)于私有數(shù)據(jù),應(yīng)該僅限對(duì)賬各方掌握;(5)對(duì)賬的非私密數(shù)據(jù)應(yīng)該實(shí)現(xiàn)安全、可靠的電子存證。
3.2 ? 整體設(shè)計(jì)
整體方案由主鏈及私鏈構(gòu)成。主鏈向所有人公開(kāi),任何人都可以讀取主鏈區(qū)塊。主鏈區(qū)塊只儲(chǔ)存對(duì)賬各參與方、對(duì)賬狀態(tài)及對(duì)賬私鏈的創(chuàng)世區(qū)塊哈希值。主鏈的每個(gè)區(qū)塊可以分成區(qū)塊頭和數(shù)據(jù)區(qū)兩部分。其中,數(shù)據(jù)區(qū)用于存儲(chǔ)實(shí)際數(shù)據(jù),區(qū)塊頭存儲(chǔ)了前序區(qū)塊及數(shù)據(jù)區(qū)的哈希值。對(duì)賬的私密數(shù)據(jù)僅存放在私鏈上。每次對(duì)賬產(chǎn)生一個(gè)私鏈,私鏈的數(shù)據(jù)僅限對(duì)賬參與方訪問(wèn),整體方案如圖2所示。
私鏈區(qū)塊格式同樣分成區(qū)塊頭和數(shù)據(jù)區(qū)。所有區(qū)塊頭格式相同,數(shù)據(jù)區(qū)有四種:(1)創(chuàng)世區(qū)塊,包含數(shù)據(jù)文件的清單及md5和sha1;(2)差異區(qū)塊,對(duì)前序數(shù)據(jù)文件的增補(bǔ)和修正;(3)確認(rèn)區(qū)塊,一種特殊區(qū)塊,沒(méi)有數(shù)據(jù)區(qū),僅用來(lái)表示對(duì)前序區(qū)塊的確認(rèn);(4)終止區(qū)塊,一種特殊區(qū)塊,沒(méi)有數(shù)據(jù)區(qū),用來(lái)表示所有參與方都對(duì)當(dāng)前數(shù)據(jù)達(dá)成一致,對(duì)賬結(jié)束[5]。
3.3 ? 對(duì)賬發(fā)起
對(duì)賬通過(guò)以下步驟發(fā)起:(1)發(fā)起方準(zhǔn)備對(duì)賬的初始數(shù)據(jù),并提供下載地址;(2)發(fā)起方啟動(dòng)私鏈,構(gòu)造私鏈創(chuàng)世區(qū)塊;(3)各方確認(rèn)私鏈創(chuàng)世區(qū)塊,下載對(duì)賬初始數(shù)據(jù),驗(yàn)證文件完整性及主鏈相關(guān)信息,驗(yàn)證無(wú)誤后在主鏈依次簽名,確認(rèn)啟動(dòng)對(duì)賬。
3.4 ? 私鏈上的明細(xì)賬對(duì)賬程序
對(duì)賬發(fā)起后,其余參與方,輪流獲得在私鏈創(chuàng)建新區(qū)塊的權(quán)利,即記賬權(quán)。每次獲得記賬權(quán)的一方,可從所有區(qū)塊中選擇與己方數(shù)據(jù)相同部分最多的區(qū)塊,以此作為前序區(qū)塊。如果有多條差異數(shù)據(jù)同樣多的區(qū)塊,則選擇最長(zhǎng)的。如果結(jié)果仍不唯一,選擇創(chuàng)建最早的。確認(rèn)前序區(qū)塊后,對(duì)缺失數(shù)據(jù)進(jìn)行補(bǔ)單,對(duì)錯(cuò)誤數(shù)據(jù)進(jìn)行修正,相應(yīng)的差異信息寫(xiě)入新區(qū)塊;如果沒(méi)有差異,需要向前序方向檢查所有區(qū)塊,如果所有對(duì)賬各方都確認(rèn)了沒(méi)有差異,則創(chuàng)建對(duì)賬終止區(qū)塊并進(jìn)入對(duì)賬結(jié)束流程,否則創(chuàng)建確認(rèn)區(qū)塊。
3.5 ? 對(duì)賬結(jié)束流程
對(duì)賬發(fā)起人,用終止區(qū)塊的哈希構(gòu)造主鏈交易單,由各對(duì)賬方依次簽名,并回存到主鏈中。主鏈確認(rèn)后,對(duì)賬結(jié)束。同時(shí)私鏈生命周期結(jié)束,各方可以將私鏈數(shù)據(jù)長(zhǎng)期存檔備查。
3.6 ? 區(qū)塊鏈方案的優(yōu)勢(shì)
因?yàn)槊總€(gè)區(qū)塊都包含了前序區(qū)塊的哈希值,所以可以用來(lái)校驗(yàn)前序區(qū)塊是否被修改。因?yàn)槊總€(gè)區(qū)塊都存儲(chǔ)了前序區(qū)塊哈希值,可以從當(dāng)前區(qū)塊逐塊回溯歷史區(qū)塊,此過(guò)程中任何對(duì)歷史區(qū)塊的篡改都可以被發(fā)現(xiàn),因此區(qū)塊鏈具有不可篡改的特性。
區(qū)塊數(shù)據(jù)都需要數(shù)據(jù)產(chǎn)生者,通過(guò)非對(duì)稱算法進(jìn)行數(shù)字簽名。并且隨機(jī)選出的記賬節(jié)點(diǎn)將會(huì)核實(shí)簽名的真實(shí)性。記賬數(shù)據(jù)向全網(wǎng)其他節(jié)點(diǎn)廣播時(shí),每個(gè)節(jié)點(diǎn)都會(huì)再次校驗(yàn)數(shù)字簽名的真?zhèn)?,偽造的?shù)據(jù)不會(huì)被網(wǎng)絡(luò)其他節(jié)點(diǎn)接受,所以區(qū)塊上的數(shù)據(jù)信息具有不可偽造的特性。
4 ? 方案實(shí)現(xiàn)(Scheme implementation)
4.1 ? Bitcoin主鏈方案
Bitcoin主鏈?zhǔn)侵С直忍貛诺牡讓訁^(qū)塊鏈。比特幣主鏈從創(chuàng)世區(qū)塊開(kāi)始,記賬網(wǎng)絡(luò)按照工作量證明機(jī)制,每隔一段時(shí)間選出一個(gè)節(jié)點(diǎn)作為記賬節(jié)點(diǎn)。記賬節(jié)點(diǎn)負(fù)責(zé)對(duì)期間發(fā)生的數(shù)據(jù)進(jìn)行整理,生成新區(qū)快,步驟如下:(1)打包數(shù)據(jù)到數(shù)據(jù)區(qū);(2)根據(jù)數(shù)據(jù)區(qū)計(jì)算哈希;(3)確認(rèn)前序區(qū)塊,計(jì)算前序區(qū)塊哈希和數(shù)據(jù)哈希;(4)構(gòu)建區(qū)塊頭;(5)將數(shù)據(jù)區(qū)和區(qū)塊頭打包成新區(qū)塊;(6)通過(guò)P2P網(wǎng)絡(luò),廣播給所有節(jié)點(diǎn)[6]。比特幣主鏈的區(qū)塊包含了交易信息,該交易信息的OP_RETURN字段可以用來(lái)記錄對(duì)賬私鏈創(chuàng)世區(qū)塊的哈希值;同時(shí),比特幣支持多重簽名賬戶,多重簽名賬戶首先需要確定哪些私鑰可以參與該賬戶的管理操作,并約定交易生效的最小簽名數(shù)量。這種方式也稱為MofN模式,其中N指管理密鑰的個(gè)數(shù),M為操作該賬戶的最小簽名數(shù)。使用Bitcoin多簽名賬戶時(shí),首先由各方,創(chuàng)建各自的密鑰對(duì),然后交換公鑰,共同使用各方公鑰生成多簽名賬戶。賬戶管理密鑰和最小簽名數(shù)均等于參與方數(shù)量。即必須所有參與方都簽名后才能操作賬戶。
發(fā)起對(duì)賬過(guò)程,由發(fā)起方準(zhǔn)備初始對(duì)賬數(shù)據(jù),并提供下載方式、文件清單及MD5和SHA1需寫(xiě)入私鏈創(chuàng)世區(qū)塊。私鏈創(chuàng)世區(qū)塊創(chuàng)建成功后,發(fā)起方以創(chuàng)世區(qū)塊哈希創(chuàng)建主鏈的交易單,并發(fā)送給對(duì)賬各方。各方下載到初始數(shù)據(jù)后,校驗(yàn)私鏈創(chuàng)世區(qū)塊,如果無(wú)誤依次用己方私鑰對(duì)交易單進(jìn)行簽名。所有簽名齊備后,向Bitcoin主鏈寫(xiě)入交易單,實(shí)現(xiàn)對(duì)賬啟動(dòng)程序。
關(guān)閉對(duì)賬過(guò)程與發(fā)起相似。對(duì)賬各方在私鏈上達(dá)成共識(shí),產(chǎn)生終止區(qū)塊。取其哈希值,對(duì)賬各方共同簽名,寫(xiě)回Bitcoin主鏈,從而關(guān)閉對(duì)賬。
4.2 ? Ethereum主鏈方案
Ethereum支持智能合約。智能合約(Smart Contract)是以信息化方式傳播、驗(yàn)證或執(zhí)行合同的計(jì)算機(jī)協(xié)議[7]。智能合約可以在沒(méi)有第三方的情況下進(jìn)行可信交易,這些交易可追蹤且不可逆轉(zhuǎn)。
Ethereum智能合約由Solidity語(yǔ)言開(kāi)發(fā),可以實(shí)現(xiàn)多簽名賬戶等基本功能。且支持合約狀態(tài)和合約函數(shù)。因此相對(duì)于Bitcoin主鏈方案實(shí)現(xiàn)更簡(jiǎn)單。
每個(gè)智能合約的數(shù)據(jù)中,預(yù)設(shè)了發(fā)起方及對(duì)賬各方的賬戶地址,通過(guò)mapping結(jié)構(gòu)存儲(chǔ)對(duì)賬信息,核心數(shù)據(jù)結(jié)構(gòu)如下:
對(duì)賬各方通過(guò)調(diào)用合約函數(shù)發(fā)起對(duì)賬,并在對(duì)賬私鏈完成明細(xì)賬對(duì)賬程序,最后通過(guò)智能合約函數(shù)將私鏈信息回傳到主鏈,完成對(duì)賬[8]。
5 ? 結(jié)論(Conclusion)
對(duì)賬系統(tǒng)在支付、廣告等行業(yè)廣泛使用,是一種保障業(yè)務(wù)開(kāi)展的重要系統(tǒng)。本文將區(qū)塊鏈技術(shù)與傳統(tǒng)對(duì)賬系統(tǒng)結(jié)合,設(shè)計(jì)了一套去中心化的對(duì)賬系統(tǒng)。該方案,可以依托于現(xiàn)有區(qū)塊鏈技術(shù),不但可以滿足傳統(tǒng)對(duì)賬業(yè)務(wù)的需求,還可以實(shí)現(xiàn)多方對(duì)賬、無(wú)中心的分布式對(duì)賬等需求。通過(guò)公鏈私鏈的組合使用,明細(xì)賬內(nèi)容,僅由對(duì)賬各方掌握,同時(shí)保證了數(shù)據(jù)安全及數(shù)據(jù)隱私。
參考文獻(xiàn)(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ù)的個(gè)人信息管理[J].軟件工程,2018,21(10):34-37.
作者簡(jiǎn)介:
周 ?硙(1983-),男,博士,博士后在站.研究領(lǐng)域:大數(shù)據(jù)及區(qū)塊鏈.