陳春玲,沈 陽(yáng),余 瀚
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
現(xiàn)代經(jīng)濟(jì)體系的發(fā)展,離不開(kāi)信用的支撐。征信作為信用體系中的關(guān)鍵環(huán)節(jié),奠定了金融信用風(fēng)險(xiǎn)管理的基礎(chǔ)。征信有諸多益處,如:防范信用風(fēng)險(xiǎn),促進(jìn)信貸市場(chǎng)發(fā)展,服務(wù)其他授信市場(chǎng),提高履約水平,加強(qiáng)金融監(jiān)管和宏觀調(diào)控,維護(hù)金融穩(wěn)定,等等[1]。國(guó)內(nèi)個(gè)人和企業(yè)征信信息尤為龐大,數(shù)據(jù)類型也從單一的文本數(shù)據(jù)到半結(jié)構(gòu)化數(shù)據(jù)等多種多樣。較為明顯的是,絕大多數(shù)征信平臺(tái)都使用了分布式數(shù)據(jù)存儲(chǔ)來(lái)代替常規(guī)的單機(jī)或者其他網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)[2],這僅僅改變了面臨大數(shù)據(jù)量時(shí)的存儲(chǔ)效率。但在新經(jīng)濟(jì)發(fā)展形勢(shì)下,傳統(tǒng)征信業(yè)中存在的信用信息不對(duì)稱、數(shù)據(jù)采集渠道受限、數(shù)據(jù)隱私保護(hù)不力等問(wèn)題依舊給現(xiàn)有的征信存儲(chǔ)結(jié)構(gòu)提出了重大的挑戰(zhàn)。
傳統(tǒng)分布式征信系統(tǒng)中,采用較多的就是一主多從(Master/Slaves)的模式(見(jiàn)圖1)。在此模式下,數(shù)據(jù)分配和均衡由一個(gè)主服務(wù)器(Master)調(diào)度,多個(gè)從服務(wù)器(Slaves)負(fù)責(zé)元數(shù)據(jù)的存儲(chǔ)。如現(xiàn)今應(yīng)用廣泛的是Hadoop上的Zookeeper分布式文件系統(tǒng)[3]和Google的文件系統(tǒng)[4]。當(dāng)主服務(wù)器發(fā)生故障或宕機(jī)等問(wèn)題不能繼續(xù)工作時(shí),多個(gè)從服務(wù)器會(huì)依照自己的共有算法推選出新的Master,所以分布式系統(tǒng)的可適應(yīng)性較強(qiáng)。
圖1 Master/Slaves分布式存儲(chǔ)
在分布式數(shù)據(jù)存儲(chǔ)過(guò)程中,元數(shù)據(jù)通常包括了存儲(chǔ)數(shù)據(jù)的物理節(jié)點(diǎn)信息等,被保存在從節(jié)點(diǎn)中。在存儲(chǔ)和讀取數(shù)據(jù)時(shí),都需要訪問(wèn)主節(jié)點(diǎn)來(lái)獲取元數(shù)據(jù)信息。這種存儲(chǔ)元數(shù)據(jù)的方式存在以下問(wèn)題:
(1)容易造成單點(diǎn)故障,即如果主節(jié)點(diǎn)發(fā)生故障或宕機(jī),那么元數(shù)據(jù)可能在一定時(shí)間內(nèi)無(wú)法被讀取。雖然通過(guò)節(jié)點(diǎn)選舉可以一定程度上避免該問(wèn)題,但節(jié)點(diǎn)之間切換效率較低;
(2)存儲(chǔ)元數(shù)據(jù)的節(jié)點(diǎn)可信性很難保證,即中心節(jié)點(diǎn)的較高權(quán)限可以直接篡改元數(shù)據(jù);
(3)數(shù)據(jù)在主節(jié)點(diǎn)校驗(yàn)和中轉(zhuǎn)的過(guò)程中,信息的完整性和安全性得不到保障[5]。
針對(duì)傳統(tǒng)分布式征信系統(tǒng)中存在的問(wèn)題,結(jié)合區(qū)塊鏈的數(shù)據(jù)可追溯性、不可修改性、共識(shí)機(jī)制等技術(shù)特點(diǎn),提出了一種去中心化的征信系統(tǒng)模型(decentralized credit information system,DCIS)。
區(qū)塊鏈(Blockchain)是比特幣的底層技術(shù),它是一串使用密碼學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個(gè)數(shù)據(jù)塊中包含了一次比特幣網(wǎng)絡(luò)交易的信息,用于驗(yàn)證其信息的有效性和生成下一個(gè)區(qū)塊,其本質(zhì)上是一個(gè)去中心化的數(shù)據(jù)庫(kù)。區(qū)塊鏈技術(shù)與傳統(tǒng)數(shù)據(jù)庫(kù)最主要的區(qū)別在于,傳統(tǒng)數(shù)據(jù)庫(kù)是集中且相互封閉隔離的,而區(qū)塊鏈數(shù)據(jù)庫(kù)由于去中心化,分布于整個(gè)網(wǎng)絡(luò)所有計(jì)算機(jī),使用分布式賬本技術(shù)進(jìn)行核算,沒(méi)有行使管理權(quán)限的第三方。區(qū)塊鏈技術(shù)的主要特點(diǎn)包括:
(1)“去中心化”。區(qū)塊鏈技術(shù)依托于分布式記賬、分布式傳播及分布式存儲(chǔ)三大技術(shù),所有信息的記錄、傳播都在網(wǎng)絡(luò)所有節(jié)點(diǎn)上進(jìn)行,沒(méi)有中心服務(wù)器進(jìn)行操控。
(2)開(kāi)放及匿名性。由于公鑰、私鑰等現(xiàn)代密碼技術(shù)的應(yīng)用,數(shù)據(jù)庫(kù)中除了私人信息被加密,其他信息均是公開(kāi)透明的,網(wǎng)絡(luò)任何節(jié)點(diǎn)均可進(jìn)行查詢。
(3)不可篡改性。區(qū)塊鏈中,任何一個(gè)節(jié)點(diǎn)想要更改數(shù)據(jù),必須得到整個(gè)網(wǎng)絡(luò)中51%節(jié)點(diǎn)認(rèn)可方可實(shí)現(xiàn),單個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)庫(kù)的修改無(wú)效[6]。
(4)可追溯性。區(qū)塊鏈中每個(gè)區(qū)塊都會(huì)被蓋上一個(gè)時(shí)間戳,以說(shuō)明信息何時(shí)被寫(xiě)入,并據(jù)此建立一個(gè)可根據(jù)時(shí)序追根溯源的大賬本,從而可以驗(yàn)證可疑數(shù)據(jù)的真實(shí)可靠性[7]。另外,區(qū)塊鏈這種可溯性特點(diǎn)還可以行使類似現(xiàn)實(shí)生活中審計(jì)的角色,不僅保證了監(jiān)管部門(mén)對(duì)數(shù)據(jù)進(jìn)行有效檢索和監(jiān)察,還可以有效杜絕虛假數(shù)據(jù)的干擾。
(5)支持可編程智能合約[8]。區(qū)塊鏈智能合約相當(dāng)于現(xiàn)實(shí)生活中的交易合同,可編程則是指可以根據(jù)交易內(nèi)容的不同對(duì)交易合同進(jìn)行修改。正是由于可編程智能合約的存在,使區(qū)塊鏈技術(shù)可應(yīng)用場(chǎng)景被無(wú)限放大,通過(guò)對(duì)智能合約的設(shè)定和編程,可以滿足人們對(duì)于不同交易類型的需求。
在區(qū)塊鏈中,沒(méi)有中心節(jié)點(diǎn)的互通,每一個(gè)節(jié)點(diǎn)地位平等,整個(gè)區(qū)塊鏈?zhǔn)且粋€(gè)對(duì)等的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),所有參與計(jì)算的節(jié)點(diǎn)都保存了區(qū)塊鏈的副本,每個(gè)節(jié)點(diǎn)在特定時(shí)段會(huì)更新本地區(qū)塊鏈[9-10],上一個(gè)區(qū)塊的哈希信息存儲(chǔ)在下一個(gè)區(qū)塊的區(qū)塊體之中,如圖2所示。
圖2 區(qū)塊體組成
每一個(gè)區(qū)塊由區(qū)塊頭(header)和區(qū)塊體(body)組成,數(shù)據(jù)的操作記錄作為原始數(shù)據(jù)記錄在區(qū)塊體中,并且加密保存。一個(gè)區(qū)塊體中包含多條數(shù)據(jù),組成hash樹(shù)根(Merkle Root)。在區(qū)塊頭中保存著時(shí)間戳、前一個(gè)區(qū)塊的hash值、Merkle Root[11]。其中hash是一種算法:一段明文經(jīng)過(guò)哈希算法處理后,將轉(zhuǎn)化成為一段長(zhǎng)度較短、位數(shù)固定的散列數(shù)據(jù)。這個(gè)加密過(guò)程是不可逆的,無(wú)法通過(guò)輸出的散列數(shù)據(jù)倒推原本的明文。同時(shí),輸出的散列數(shù)據(jù)和輸入的明文是一一對(duì)應(yīng)的,任何一個(gè)輸入信息的變化都將使得輸出的散列數(shù)據(jù)發(fā)生變化。時(shí)間戳給區(qū)塊鏈里的每一個(gè)信息都標(biāo)記了其發(fā)生時(shí)間,證明交易記錄的真實(shí)性。任何人都無(wú)法篡改時(shí)間戳,區(qū)塊鏈通過(guò)時(shí)間戳保證了每個(gè)區(qū)塊依次順序相連。
如果想惡意篡改區(qū)塊中的內(nèi)容,那就必須重新計(jì)算當(dāng)前以及所有前驅(qū)區(qū)塊的哈希值,具有很高的計(jì)算復(fù)雜性。通過(guò)這一特點(diǎn)可以保證區(qū)塊鏈信息內(nèi)容的完整性,同時(shí)也能解決傳統(tǒng)分布式存儲(chǔ)中主節(jié)點(diǎn)失效切換的問(wèn)題。當(dāng)任一節(jié)點(diǎn)的本地區(qū)塊鏈和全網(wǎng)大多數(shù)節(jié)點(diǎn)的區(qū)塊鏈不一致時(shí),直接同步最新的區(qū)塊鏈至本地,防止信息篡改[12]。
DCIS單節(jié)點(diǎn)的模型結(jié)構(gòu)如圖3所示。
圖3 DCIS單節(jié)點(diǎn)的模型結(jié)構(gòu)
圖中上半部分為與外網(wǎng)全節(jié)點(diǎn)交互,下半部分為單個(gè)節(jié)點(diǎn)構(gòu)造。其中單節(jié)點(diǎn)由三部分構(gòu)成:本地區(qū)塊鏈副本、本地驗(yàn)證節(jié)點(diǎn)群、本地存儲(chǔ)節(jié)點(diǎn)群。在真實(shí)的部署環(huán)境中可以將本地驗(yàn)證節(jié)點(diǎn)和本地存儲(chǔ)節(jié)點(diǎn)部署在外網(wǎng),加強(qiáng)單機(jī)存儲(chǔ)性能。
(1)本地區(qū)塊鏈副本。該副本始終與全網(wǎng)絕大多數(shù)節(jié)點(diǎn)同步數(shù)據(jù),當(dāng)本節(jié)點(diǎn)數(shù)據(jù)丟失或者被篡改時(shí),可以通過(guò)校驗(yàn)與全網(wǎng)的hash比較,即可恢復(fù)數(shù)據(jù)。并且鏈中的每個(gè)區(qū)塊數(shù)據(jù)寫(xiě)入后不可更改(只讀Read-Only),如果用戶修改數(shù)據(jù)且合法,則修改內(nèi)容將記錄在新生成的區(qū)塊中,再全網(wǎng)廣播同步。
(2)本地驗(yàn)證節(jié)點(diǎn)群。由若干個(gè)校驗(yàn)節(jié)點(diǎn)代替?zhèn)鹘y(tǒng)分布式數(shù)據(jù)庫(kù)中的單一主節(jié)點(diǎn),在用戶存儲(chǔ)數(shù)據(jù)時(shí),先同步全網(wǎng)區(qū)塊鏈至本地,多個(gè)驗(yàn)證節(jié)點(diǎn)同時(shí)校驗(yàn)用戶戳和數(shù)據(jù),優(yōu)先完成數(shù)據(jù)校驗(yàn)的節(jié)點(diǎn)負(fù)責(zé)調(diào)度本地存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)存儲(chǔ),其他節(jié)點(diǎn)回到初始狀態(tài),新的信息更改記錄由驗(yàn)證節(jié)點(diǎn)寫(xiě)入本地區(qū)塊鏈副本,全網(wǎng)廣播;在數(shù)據(jù)校驗(yàn)時(shí),先同步全網(wǎng)區(qū)塊鏈至本地,驗(yàn)證節(jié)點(diǎn)接受外部請(qǐng)求并校驗(yàn)權(quán)限,檢索存儲(chǔ)節(jié)點(diǎn)中數(shù)據(jù)并返回。
(3)本地存儲(chǔ)節(jié)點(diǎn)群。由若干存儲(chǔ)節(jié)點(diǎn)構(gòu)成,負(fù)責(zé)對(duì)接驗(yàn)證元數(shù)據(jù)寫(xiě)入和數(shù)據(jù)查詢功能,也可將其部署在遠(yuǎn)程。
當(dāng)一條新的征信信息將要寫(xiě)入(新建或修改)時(shí),本地和全網(wǎng)的驗(yàn)證節(jié)點(diǎn)需要先校驗(yàn)其合法性。當(dāng)簽名的hash值驗(yàn)證通過(guò)后,再構(gòu)造區(qū)塊體,并入鏈尾。分為以下五步:
(1)用戶對(duì)待存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)字簽名操作組合成<簽名,數(shù)據(jù)>對(duì)。
(2)將一定時(shí)間內(nèi)不同用戶生成的數(shù)據(jù)整合成數(shù)據(jù)對(duì)集D={
(3)將D發(fā)送給全網(wǎng)驗(yàn)證節(jié)點(diǎn)集Club_Check,節(jié)點(diǎn)并行校驗(yàn)數(shù)據(jù)集。最先完成校驗(yàn)的節(jié)點(diǎn)i具有優(yōu)先記錄權(quán),其他節(jié)點(diǎn)回到初始狀態(tài)。
(4)驗(yàn)證節(jié)點(diǎn)i將當(dāng)前周期內(nèi)需要記錄的所有信息
(5)全網(wǎng)廣播,將本地區(qū)塊鏈更新至全網(wǎng)。
值得說(shuō)明的一點(diǎn):不同于比特幣等常規(guī)虛擬貨幣的POW(工作量證明)等機(jī)制的計(jì)算(驗(yàn)證)節(jié)點(diǎn)之間的競(jìng)爭(zhēng)關(guān)系,優(yōu)先完成簽名校驗(yàn)的節(jié)點(diǎn)具有記錄權(quán),其他節(jié)點(diǎn)回到初態(tài),此機(jī)制可提高節(jié)點(diǎn)驗(yàn)證效率[13]。
當(dāng)數(shù)據(jù)一旦寫(xiě)入?yún)^(qū)塊并全網(wǎng)同步后,數(shù)據(jù)就永久保存在鏈中無(wú)法修改歷史記錄,只能對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步操作。當(dāng)數(shù)據(jù)需要共享和校驗(yàn)時(shí)分為以下四步:
(1)當(dāng)全網(wǎng)請(qǐng)求最終到達(dá)數(shù)據(jù)擁有者時(shí),由數(shù)據(jù)的擁有者發(fā)起請(qǐng)求。將帶有簽名信息sign的請(qǐng)求發(fā)送給全網(wǎng)驗(yàn)證節(jié)點(diǎn)集Club_Check。
(2)驗(yàn)證節(jié)點(diǎn)檢測(cè)本地與全網(wǎng)區(qū)塊鏈的一致性,如果不一致,則更新到最新?tīng)顟B(tài)。
(3)當(dāng)全網(wǎng)驗(yàn)證節(jié)點(diǎn)通過(guò)簽名校驗(yàn)后檢索sign對(duì)應(yīng)的data,此時(shí)所有驗(yàn)證節(jié)點(diǎn)將進(jìn)行檢索。
(4)全網(wǎng)絕大多數(shù)節(jié)點(diǎn)獲得相同的data值之后,第一個(gè)得到數(shù)據(jù)
區(qū)塊鏈表示存儲(chǔ)數(shù)據(jù)的區(qū)塊,且隨著時(shí)間有序排列。其中存儲(chǔ)的是每一個(gè)用戶及其征信信息的修改(或新建)。所以當(dāng)提供用戶的有效簽名sign和對(duì)應(yīng)的時(shí)間過(guò)濾后可得到唯一的數(shù)據(jù)信息。所以保證了數(shù)據(jù)的可追溯性。
當(dāng)需要讀取或者校驗(yàn)數(shù)據(jù)時(shí),為避免本地篡改或者讀臟數(shù)據(jù)[14]等行為,驗(yàn)證節(jié)點(diǎn)會(huì)定期更新同步本地區(qū)塊鏈。同步過(guò)程中,驗(yàn)證節(jié)點(diǎn)會(huì)對(duì)比全網(wǎng)區(qū)塊鏈和本地區(qū)塊鏈的待同步區(qū)塊頭信息,因?yàn)槿魏蔚男畔畏矫嫘薷亩紩?huì)導(dǎo)致塊頭信息不一致,此時(shí)需要替換本地區(qū)塊。所以保證了數(shù)據(jù)的完整性。
任何非用戶本人的數(shù)據(jù)直接請(qǐng)求,最終都會(huì)轉(zhuǎn)發(fā)至用戶,由用戶決定是否授權(quán)進(jìn)一步獲取原始數(shù)據(jù)。惡意獲取隱私行為都會(huì)在最終授權(quán)這關(guān)被及時(shí)發(fā)現(xiàn)。所以保證了數(shù)據(jù)的安全性。
實(shí)驗(yàn)硬件環(huán)境:處理器Intel(R)Core(TM)i5-6500 CPU @ 3.20 GHz,內(nèi)存8 G,系統(tǒng)為Win10×64。該系統(tǒng)之上建立三臺(tái)虛擬機(jī)生成Zookeeper分布式環(huán)境,一臺(tái)master節(jié)點(diǎn)服務(wù)器,兩臺(tái)slaves存儲(chǔ)服務(wù)器。虛擬機(jī)與本機(jī)采用橋接網(wǎng)卡形式模擬真實(shí)環(huán)境。開(kāi)發(fā)語(yǔ)言Java(jdk1.8),驗(yàn)證節(jié)點(diǎn)采用多線程模擬。其中征信數(shù)據(jù)為常規(guī)文檔數(shù)據(jù)。
實(shí)驗(yàn)中采用控制變量法,即某幾個(gè)變量變化時(shí),其他變量保持不變,從而觀察性能和穩(wěn)定性。
實(shí)驗(yàn)表明存儲(chǔ)不同大小數(shù)據(jù)時(shí)在DCIS和Zookeeper分布式系統(tǒng)中,存儲(chǔ)時(shí)間隨著數(shù)據(jù)量的增加而增加,且DCIS額外會(huì)多損耗一點(diǎn)時(shí)間,主要原因是DCIS模型在存儲(chǔ)征信數(shù)據(jù)時(shí)需要校驗(yàn)用戶簽名和生成區(qū)塊操作,會(huì)耗費(fèi)少量額外時(shí)間。說(shuō)明該模型可以最大程度保證數(shù)據(jù)的存儲(chǔ)效率。且當(dāng)數(shù)據(jù)量為0時(shí),系統(tǒng)依舊會(huì)損耗部分時(shí)間,因?yàn)轵?yàn)證節(jié)點(diǎn)的校驗(yàn)簽名操作,在無(wú)數(shù)據(jù)存儲(chǔ)但有數(shù)據(jù)存儲(chǔ)請(qǐng)求的情況下,依舊會(huì)執(zhí)行。
圖4是“用戶數(shù)和驗(yàn)證節(jié)點(diǎn)數(shù)量對(duì)存儲(chǔ)時(shí)間的影響”的實(shí)驗(yàn)結(jié)果。表明隨著用戶數(shù)和驗(yàn)證節(jié)點(diǎn)數(shù)量的增加,數(shù)據(jù)存儲(chǔ)時(shí)間也會(huì)增加且后期趨于線性。主要因?yàn)閿?shù)據(jù)量和驗(yàn)證節(jié)點(diǎn)數(shù)一定時(shí),用戶數(shù)變多會(huì)導(dǎo)致簽名數(shù)量的增加,延長(zhǎng)了校驗(yàn)的時(shí)間長(zhǎng)度。另一方面,驗(yàn)證節(jié)點(diǎn)同步各自本地區(qū)塊鏈時(shí)由于環(huán)境原因是同步操作,節(jié)點(diǎn)越多,則平均節(jié)點(diǎn)校驗(yàn)時(shí)間相應(yīng)增加?!坝脩魯?shù)和數(shù)據(jù)量變化對(duì)存儲(chǔ)時(shí)間的影響”的實(shí)驗(yàn)結(jié)果與圖4相似。
圖4 驗(yàn)證節(jié)點(diǎn)數(shù)和用戶數(shù)變化時(shí)DCIS效率
圖5是“數(shù)據(jù)量和驗(yàn)證節(jié)點(diǎn)數(shù)量變化對(duì)存儲(chǔ)時(shí)間的影響”的實(shí)驗(yàn)結(jié)果。表明隨著數(shù)據(jù)量和驗(yàn)證節(jié)點(diǎn)數(shù)量的增加,數(shù)據(jù)存儲(chǔ)時(shí)間也會(huì)增加。
圖5 驗(yàn)證節(jié)點(diǎn)數(shù)和數(shù)據(jù)變化時(shí)不同存儲(chǔ)方式的效率
圖6是“主節(jié)點(diǎn)失效時(shí)系統(tǒng)恢復(fù)能力”的實(shí)驗(yàn)結(jié)果。表明DCIS模型和Zookeeper模型在部分節(jié)點(diǎn)無(wú)法工作的情況下恢復(fù)能力差別較小。原因在于DCIS在節(jié)點(diǎn)失效時(shí)新節(jié)點(diǎn)的替換需要同步全網(wǎng)區(qū)塊鏈副本至本地,這取決于通信狀況。
圖6 驗(yàn)證節(jié)點(diǎn)個(gè)數(shù)變化時(shí)的系統(tǒng)恢復(fù)效率
綜上所述,使用去中心化征信系統(tǒng)模型在存儲(chǔ)數(shù)據(jù)時(shí),在犧牲少量時(shí)間的基礎(chǔ)上,能保證較高的系統(tǒng)數(shù)據(jù)安全性,彌補(bǔ)現(xiàn)代征信系統(tǒng)的部分短板。
結(jié)合區(qū)塊鏈的去中心化、共識(shí)機(jī)制、不可修改記錄等特點(diǎn),提出了一種基于去中心化的系統(tǒng)模型DCIS。實(shí)驗(yàn)結(jié)果表明,DCIS具有能夠追溯數(shù)據(jù)的完整流水記錄,能防止惡意篡改,極符合征信行業(yè)的業(yè)務(wù)需求[15],且任何查看用戶征信信息的行為都需要得到數(shù)據(jù)擁有者的校驗(yàn)授權(quán),極大地保護(hù)了用戶的隱私數(shù)據(jù)。實(shí)驗(yàn)?zāi)P椭惺褂脜f(xié)同機(jī)制,可以在多線程環(huán)境中多節(jié)點(diǎn)同時(shí)驗(yàn)證。且以Zookeeper分布式模型進(jìn)行實(shí)驗(yàn)參考,表明DCIS也具有較好的存儲(chǔ)性能,能夠在犧牲少量性能的基礎(chǔ)上極大地加強(qiáng)了數(shù)據(jù)的安全性。但是,區(qū)塊鏈也存在私鑰丟失或泄漏、對(duì)用戶數(shù)據(jù)“被遺忘”、現(xiàn)有信息系統(tǒng)管理建設(shè)條例和征信監(jiān)管體系等不適應(yīng)的問(wèn)題,這也是今后要做的主要工作。