賈大宇,信俊昌+,王之瓊,郭 薇,王國(guó)仁
1.東北大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,沈陽(yáng) 110819
2.東北大學(xué) 中荷生物醫(yī)學(xué)與信息工程學(xué)院,沈陽(yáng) 110819
3.沈陽(yáng)航空航天大學(xué) 計(jì)算機(jī)學(xué)院,沈陽(yáng) 110136
區(qū)塊鏈技術(shù)隨著比特幣等數(shù)字加密貨幣的日益普及而越來(lái)越受關(guān)注。區(qū)塊鏈技術(shù)是一種新型的去中心化協(xié)議,能安全存儲(chǔ)數(shù)字貨幣、股權(quán)債權(quán)等數(shù)字資產(chǎn)。區(qū)塊鏈技術(shù)通過(guò)運(yùn)用數(shù)據(jù)加密[1]、時(shí)間戳、分布式共識(shí)[2]和經(jīng)濟(jì)激勵(lì)等手段,有效地解決了拜占庭將軍問(wèn)題[3]中的共識(shí)問(wèn)題,實(shí)現(xiàn)了在節(jié)點(diǎn)無(wú)需互相信任的分布式系統(tǒng)中去中心化的點(diǎn)對(duì)點(diǎn)交易,從而有效降低了現(xiàn)實(shí)經(jīng)濟(jì)的信任成本,重新定義了互聯(lián)網(wǎng)時(shí)代的產(chǎn)權(quán)制度。
雖然區(qū)塊鏈技術(shù)顯著提高了數(shù)據(jù)的安全性與可靠性,但是目前區(qū)塊鏈技術(shù)的儲(chǔ)存擴(kuò)展性較差。以比特幣為例,截至2017年5月8日,共產(chǎn)生465 402個(gè)區(qū)塊,總?cè)萘繛?07.89 GB,鏈上已認(rèn)證地址9 892 723個(gè)[4]。因?yàn)閰^(qū)塊鏈技術(shù)要求比特幣的網(wǎng)絡(luò)中每個(gè)完全節(jié)點(diǎn)都保存著完整的區(qū)塊鏈信息,所以目前有近1 000萬(wàn)個(gè)節(jié)點(diǎn)貢獻(xiàn)了100 GB以上的磁盤(pán)空間來(lái)儲(chǔ)存區(qū)塊鏈數(shù)據(jù)。也就是說(shuō),目前的比特幣系統(tǒng)用了近1 000 PB的存儲(chǔ)空間僅保存了100 GB左右的數(shù)據(jù),這極大地浪費(fèi)了存儲(chǔ)空間。并且比特幣的容量和參與的節(jié)點(diǎn)數(shù)量會(huì)隨著時(shí)間的推移迅猛增加,區(qū)塊鏈技術(shù)就會(huì)越來(lái)越多地占用海量節(jié)點(diǎn)的大量存儲(chǔ)空間。這也極大地限制了以區(qū)塊鏈技術(shù)為基礎(chǔ)的數(shù)據(jù)庫(kù)系統(tǒng)的發(fā)展與應(yīng)用。
為了增加區(qū)塊鏈技術(shù)的儲(chǔ)存擴(kuò)展性,本文提出了一種區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型,并采用一種數(shù)據(jù)副本分配策略對(duì)模型進(jìn)行了優(yōu)化。
本文的主要貢獻(xiàn)如下:
(1)提出了一種區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型。模型將區(qū)塊鏈中各個(gè)區(qū)塊保存在一定比例的節(jié)點(diǎn)中,而不是所有節(jié)點(diǎn)。同時(shí),增加了節(jié)點(diǎn)可靠性驗(yàn)證,在保證數(shù)據(jù)安全的同時(shí),減少了區(qū)塊鏈的儲(chǔ)存空間。
(2)提出了一種區(qū)塊鏈數(shù)據(jù)副本分配策略,對(duì)容量可擴(kuò)展模型中副本數(shù)的計(jì)算過(guò)程進(jìn)行了優(yōu)化。
(3)通過(guò)實(shí)驗(yàn)證明,區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型具有一定的穩(wěn)定性、容錯(cuò)性和安全性,同時(shí)減少了海量節(jié)點(diǎn)的大量存儲(chǔ)空間,有效地增加了區(qū)塊鏈的儲(chǔ)存擴(kuò)展性。
區(qū)塊鏈系統(tǒng)基于P2P技術(shù)[5]提供了一個(gè)只可以寫(xiě)入的全公開(kāi)日志。參與區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)都遵循POW(proof of work)協(xié)議[6],即工作量證明。協(xié)議通過(guò)運(yùn)算,得出一個(gè)滿(mǎn)足規(guī)則的隨機(jī)數(shù),最先計(jì)算出結(jié)果的節(jié)點(diǎn)即獲得本次記賬權(quán),發(fā)出本輪需要記錄的數(shù)據(jù),全網(wǎng)其他節(jié)點(diǎn)驗(yàn)證后一起存儲(chǔ)。存儲(chǔ)框架如圖1所示,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都保存著完整的數(shù)據(jù)副本。
Fig.1 Storage framework of traditional blockchain圖1 傳統(tǒng)區(qū)塊鏈技術(shù)存儲(chǔ)框架
近年來(lái),學(xué)者對(duì)區(qū)塊鏈進(jìn)行了大量研究。Boyd等人[7]提出了一種基于區(qū)塊鏈的用戶(hù)登錄方法,使每個(gè)用戶(hù)都可以公平地登錄和使用服務(wù)器。Gervais等人[8]提出了一種框架來(lái)量化地分析區(qū)塊鏈在各種共識(shí)和網(wǎng)絡(luò)參數(shù)下的安全性。Herbert等人[9]提出了一種基于區(qū)塊鏈技術(shù)的軟件驗(yàn)證方法,改善了軟件被盜版使用的問(wèn)題。Karame[10]詳細(xì)分析了比特幣和其他基礎(chǔ)區(qū)塊鏈系統(tǒng)的安全性,并找出了其中潛在的安全隱患。Ali等人[11]提出了Blockstake命名存儲(chǔ)系統(tǒng),系統(tǒng)設(shè)計(jì)了四層架構(gòu),充分利用了區(qū)塊鏈的去中心化特點(diǎn),保證了數(shù)據(jù)的高安全性。King[12]和Bentov[13]等人實(shí)現(xiàn)了POS(proof of stake)權(quán)益證明機(jī)制,相對(duì)于POW機(jī)制,一定程度減少了數(shù)學(xué)運(yùn)算帶來(lái)的資源消耗,提升了區(qū)塊鏈系統(tǒng)的性能。
本文利用分布式存儲(chǔ)方法[14-15],提出了區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型。其核心思想是將一條完整的區(qū)塊鏈分成若干部分,分布存儲(chǔ)在系統(tǒng)中,如圖2所示。
Fig.2 Storage framework of scalable model圖2 可擴(kuò)展模型存儲(chǔ)框架
在現(xiàn)有的區(qū)塊鏈技術(shù)中,一個(gè)攻擊者想要篡改數(shù)據(jù),需要控制網(wǎng)絡(luò)中50%以上的節(jié)點(diǎn)。在區(qū)塊鏈分布式存儲(chǔ)后,網(wǎng)絡(luò)中區(qū)塊鏈的副本數(shù)減少,攻擊者就可以在控制少于50%節(jié)點(diǎn)數(shù)的情況下修改區(qū)塊鏈數(shù)據(jù),這在一定程度上降低了區(qū)塊鏈的安全性。但是隨著區(qū)塊鏈技術(shù)的廣泛應(yīng)用,海量節(jié)點(diǎn)正源源不斷地加入到區(qū)塊鏈系統(tǒng)中。攻擊者想要控制區(qū)塊鏈系統(tǒng)中的很少一部分節(jié)點(diǎn)也幾乎是不可能的。盡管如此,針對(duì)區(qū)塊鏈容量可擴(kuò)展模型還提出了節(jié)點(diǎn)可靠性驗(yàn)證的方法,增加了區(qū)塊鏈的安全性。區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型框架如圖3所示。
Fig.3 Scalable model for storage capacity of blockchain圖3 區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型
區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型中的節(jié)點(diǎn)包含3個(gè)角色:用戶(hù)節(jié)點(diǎn)、儲(chǔ)存節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)。用戶(hù)節(jié)點(diǎn)是原始數(shù)據(jù)擁有者,儲(chǔ)存節(jié)點(diǎn)是副本的保存者,而驗(yàn)證節(jié)點(diǎn)是儲(chǔ)存節(jié)點(diǎn)穩(wěn)定性的驗(yàn)證者。一個(gè)節(jié)點(diǎn)可以同時(shí)具備兩種或者三種角色。同時(shí),模型建立了兩條新的區(qū)塊鏈:P(position)鏈和POR(proofs of retrievability)鏈。P鏈保存在用戶(hù)節(jié)點(diǎn)中,記錄數(shù)據(jù)各個(gè)副本被保存在存儲(chǔ)節(jié)點(diǎn)的位置。POR鏈保存在驗(yàn)證節(jié)點(diǎn)中,記錄各個(gè)儲(chǔ)存節(jié)點(diǎn)的可靠性評(píng)價(jià)。將儲(chǔ)存節(jié)點(diǎn)位置信息和儲(chǔ)存節(jié)點(diǎn)的可靠性評(píng)價(jià)寫(xiě)入基于區(qū)塊鏈技術(shù)的P鏈和POR鏈中,也是利用了區(qū)塊鏈不可被篡改的特點(diǎn),保證數(shù)據(jù)的安全性。
在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),模型采用了POR數(shù)據(jù)可檢索性證明[16-17]方法對(duì)用戶(hù)節(jié)點(diǎn)區(qū)塊鏈中的區(qū)塊進(jìn)行加密處理,得到相應(yīng)的密文和密鑰。POR方法是保存在外地服務(wù)器上數(shù)據(jù)的可檢索性的加密證明。其實(shí)現(xiàn)的具體過(guò)程是:用戶(hù)節(jié)點(diǎn)將密文交由儲(chǔ)存節(jié)點(diǎn)保存后,可以隨時(shí)查詢(xún)儲(chǔ)存節(jié)點(diǎn)中數(shù)據(jù)的完整性;儲(chǔ)存節(jié)點(diǎn)會(huì)在被查詢(xún)時(shí),隨機(jī)選擇一部分密文數(shù)據(jù)發(fā)送給用戶(hù)節(jié)點(diǎn);用戶(hù)節(jié)點(diǎn)通過(guò)密鑰與接收密文的計(jì)算結(jié)果進(jìn)行比對(duì),得出儲(chǔ)存節(jié)點(diǎn)中的數(shù)據(jù)是否完整。因此,利用POR方法可以在少量文件傳輸?shù)耐ㄐ懦杀鞠?,?shí)時(shí)驗(yàn)證出系統(tǒng)中數(shù)據(jù)的完整性。
在模型進(jìn)行數(shù)據(jù)存儲(chǔ)過(guò)程中,首先采用POR方法對(duì)用戶(hù)節(jié)點(diǎn)中的每個(gè)區(qū)塊進(jìn)行加密,得到相應(yīng)的密文和密鑰。然后,用戶(hù)節(jié)點(diǎn)計(jì)算出每個(gè)區(qū)塊需要保存的副本數(shù)。接著,模型將POR方法生成的密鑰保存到本地存儲(chǔ)器中,并發(fā)給驗(yàn)證節(jié)點(diǎn)保存;將加密后的區(qū)塊數(shù)據(jù)保存到儲(chǔ)存節(jié)點(diǎn)中。此時(shí),模型將訪(fǎng)問(wèn)驗(yàn)證節(jié)點(diǎn)中保存的儲(chǔ)存節(jié)點(diǎn)可靠性信息,從中找出可靠值較高的儲(chǔ)存節(jié)點(diǎn)來(lái)保存各個(gè)區(qū)塊數(shù)據(jù)。驗(yàn)證節(jié)點(diǎn)為了保證儲(chǔ)存節(jié)點(diǎn)可靠性信息不會(huì)被惡意篡改,將其保存在POR鏈中。之后,將每個(gè)區(qū)塊按照所需要的副本數(shù)保存在相應(yīng)數(shù)量的選出的儲(chǔ)存節(jié)點(diǎn)中。當(dāng)數(shù)據(jù)副本被保存后,為了保證用戶(hù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)讀取,模型將儲(chǔ)存節(jié)點(diǎn)的地址返回給用戶(hù)節(jié)點(diǎn),并將其保存在P鏈中,保證儲(chǔ)存節(jié)點(diǎn)地址數(shù)據(jù)的安全性。
區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型的數(shù)據(jù)存儲(chǔ)過(guò)程如圖4、圖5所示。
Fig.4 Step(1)~(3)of stored procedure圖4 存儲(chǔ)過(guò)程步驟(1)~(3)
過(guò)程1存儲(chǔ)容量可擴(kuò)展模型數(shù)據(jù)存儲(chǔ)過(guò)程。
(1)采用POR方法對(duì)每個(gè)區(qū)塊進(jìn)行加密;
(2)用戶(hù)節(jié)點(diǎn)計(jì)算出每個(gè)區(qū)塊所需保存副本數(shù);
(3)將POR方法生成的密鑰保存到本地存儲(chǔ)器中,并發(fā)給驗(yàn)證節(jié)點(diǎn),保存到POR鏈中;
(4)用戶(hù)節(jié)點(diǎn)向模型發(fā)送存儲(chǔ)數(shù)據(jù)的請(qǐng)求;
(5)模型訪(fǎng)問(wèn)驗(yàn)證節(jié)點(diǎn)POR鏈中各個(gè)儲(chǔ)存節(jié)點(diǎn)的可靠性信息,選出可靠性最高的作為本次操作的儲(chǔ)存節(jié)點(diǎn);
(6)將選出的儲(chǔ)存節(jié)點(diǎn)返回給用戶(hù)節(jié)點(diǎn);
Fig.5 Step(4)~(8)of stored procedure圖5 存儲(chǔ)過(guò)程步驟(4)~(8)
(7)用戶(hù)節(jié)點(diǎn)按照所需要的副本數(shù)保存在相應(yīng)數(shù)量的選出的儲(chǔ)存節(jié)點(diǎn)中;
(8)將保存各個(gè)區(qū)塊的儲(chǔ)存節(jié)點(diǎn)的地址返回給用戶(hù)節(jié)點(diǎn),保存在P鏈里。
在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型進(jìn)行數(shù)據(jù)讀取時(shí),首先用戶(hù)節(jié)點(diǎn)訪(fǎng)問(wèn)本地磁盤(pán)中的P鏈,得到各個(gè)區(qū)塊儲(chǔ)存的位置信息,根據(jù)位置信息找到相應(yīng)的儲(chǔ)存節(jié)點(diǎn)。然后,儲(chǔ)存節(jié)點(diǎn)將保存的數(shù)據(jù)返回給用戶(hù)節(jié)點(diǎn)。用戶(hù)節(jié)點(diǎn)根據(jù)本地保存的POR方法生成的密鑰,對(duì)接收密文數(shù)據(jù)進(jìn)行恢復(fù),得到原始數(shù)據(jù)。
區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型的數(shù)據(jù)讀取過(guò)程如圖6所示。
過(guò)程2存儲(chǔ)容量可擴(kuò)展模型數(shù)據(jù)讀取過(guò)程。
(1)用戶(hù)節(jié)點(diǎn)訪(fǎng)問(wèn)P鏈信息,找到保存每個(gè)區(qū)塊的各個(gè)儲(chǔ)存節(jié)點(diǎn);
(2)儲(chǔ)存節(jié)點(diǎn)將保存的數(shù)據(jù)返回給用戶(hù)節(jié)點(diǎn);
(3)用戶(hù)節(jié)點(diǎn)根據(jù)完整返回的副本數(shù)據(jù),利用本地保存的密鑰對(duì)數(shù)據(jù)進(jìn)行解密,恢復(fù)出原始數(shù)據(jù)。
在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型中,儲(chǔ)存節(jié)點(diǎn)保存著區(qū)塊數(shù)據(jù)。但是由于一些特殊狀況,儲(chǔ)存節(jié)點(diǎn)可能出現(xiàn)將數(shù)據(jù)修改或?qū)?shù)據(jù)丟失等故障。為了減小由于儲(chǔ)存節(jié)點(diǎn)故障導(dǎo)致的區(qū)塊數(shù)據(jù)的不穩(wěn)定性,驗(yàn)證節(jié)點(diǎn)會(huì)根據(jù)POR方法生成的密鑰,隨時(shí)驗(yàn)證存儲(chǔ)節(jié)點(diǎn)隨機(jī)發(fā)回的部分密文數(shù)據(jù),實(shí)時(shí)檢測(cè)儲(chǔ)存節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)情況。然后,驗(yàn)證節(jié)點(diǎn)將實(shí)時(shí)的檢測(cè)情況寫(xiě)入POR鏈中,當(dāng)用戶(hù)節(jié)點(diǎn)再次申請(qǐng)儲(chǔ)存數(shù)據(jù)時(shí),提供最新的儲(chǔ)存節(jié)點(diǎn)可靠性值,使用戶(hù)節(jié)點(diǎn)選出此時(shí)最穩(wěn)定的存儲(chǔ)節(jié)點(diǎn)保存區(qū)塊數(shù)據(jù)。
區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型中儲(chǔ)存節(jié)點(diǎn)可靠性驗(yàn)證過(guò)程如圖7所示。在實(shí)際應(yīng)用中,模型對(duì)于儲(chǔ)存節(jié)點(diǎn)可靠性的評(píng)價(jià)標(biāo)準(zhǔn)可以采取如下方法。首先,模型會(huì)給每個(gè)儲(chǔ)存節(jié)點(diǎn)分配相同的可靠性值。然后,驗(yàn)證節(jié)點(diǎn)每隔相同的一段時(shí)間檢測(cè)儲(chǔ)存節(jié)點(diǎn)數(shù)據(jù)的可靠性,相隔時(shí)間根據(jù)對(duì)數(shù)據(jù)安全需求的具體情況來(lái)制定。當(dāng)儲(chǔ)存節(jié)點(diǎn)中數(shù)據(jù)完整時(shí),其可靠性值不變。當(dāng)儲(chǔ)存節(jié)點(diǎn)數(shù)據(jù)被修改或者丟失時(shí),則減少其可靠性值,并保存到POR鏈中。最后,當(dāng)模型選擇高可靠性的儲(chǔ)存節(jié)點(diǎn)時(shí),以POR鏈中的各個(gè)儲(chǔ)存節(jié)點(diǎn)可靠性值作為衡量標(biāo)準(zhǔn)。
Fig.6 Data reading procedure圖6 數(shù)據(jù)讀取過(guò)程
Fig.7 Reliability verification of storage nodes圖7 儲(chǔ)存節(jié)點(diǎn)可靠性驗(yàn)證過(guò)程
在比特幣的應(yīng)用中,礦工通過(guò)計(jì)算得出下一個(gè)區(qū)塊的哈希值。正是礦工們的大量計(jì)算,保證了比特幣的安全性。因此,比特幣系統(tǒng)會(huì)對(duì)每個(gè)挖礦成功者獎(jiǎng)勵(lì)一定數(shù)量的比特幣。這也激勵(lì)了成百上千的礦工消耗自身CPU的計(jì)算能力和大量電力去挖礦。而在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型中,儲(chǔ)存節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)提供了自己的大量磁盤(pán)空間,保證了用戶(hù)節(jié)點(diǎn)的數(shù)據(jù)安全。本文對(duì)于儲(chǔ)存節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)也提出一種激勵(lì)機(jī)制,可以令他們自身作為用戶(hù)節(jié)點(diǎn),在模型中安全存儲(chǔ)一定空間的數(shù)據(jù)。
在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型的數(shù)據(jù)存儲(chǔ)過(guò)程的第二個(gè)步驟中,用戶(hù)節(jié)點(diǎn)首先計(jì)算每個(gè)區(qū)塊保存的副本數(shù)。但區(qū)塊鏈的每個(gè)新區(qū)塊都是在上一個(gè)區(qū)塊基礎(chǔ)上計(jì)算來(lái)的,不同的區(qū)塊安全性不同。因此,本文根據(jù)每個(gè)區(qū)塊的安全性,提出了一種區(qū)塊鏈的數(shù)據(jù)副本分配策略,優(yōu)化了模型的存儲(chǔ)過(guò)程。
數(shù)據(jù)副本分配策略,首先根據(jù)系統(tǒng)節(jié)點(diǎn)總數(shù)得出保存每個(gè)區(qū)塊的最少副本數(shù)。然后根據(jù)系統(tǒng)安全性需求,確定出一定數(shù)量連續(xù)的區(qū)塊保存相同的副本數(shù)。最后根據(jù)區(qū)塊鏈的難度設(shè)定,計(jì)算出每個(gè)區(qū)塊需要保存的副本數(shù)。
區(qū)塊鏈技術(shù)的創(chuàng)始人Nakamoto[18]在論文中假設(shè)了一個(gè)雙重支付的攻擊場(chǎng)景,攻擊者試圖比誠(chéng)實(shí)節(jié)點(diǎn)更快地產(chǎn)生一條平行鏈條代替區(qū)塊鏈。攻擊者是否能夠成功趕超誠(chéng)實(shí)鏈,可以近似地看成賭徒破產(chǎn)問(wèn)題。此時(shí),假設(shè)p為誠(chéng)實(shí)節(jié)點(diǎn)制造出下一節(jié)點(diǎn)的概率,q為攻擊節(jié)點(diǎn)制造出下一節(jié)點(diǎn)的概率,那么攻擊者在區(qū)塊增加了第z塊時(shí),攻擊者取得的進(jìn)展服從泊松分布,分布期望為:
追趕上誠(chéng)實(shí)鏈條的概率Pz為:
為了避免對(duì)無(wú)限數(shù)列求和,將式(2)轉(zhuǎn)換為:
本文利用Java編寫(xiě)代碼,計(jì)算出在q=0.1時(shí),z取0到30概率Pz的大小。并用Matlab將函數(shù)f(z,Pz)畫(huà)出圖像,如圖8所示。
Fig.8 Image off(z,Pz)圖8 函數(shù) f(z,Pz)圖像
由于隨著z的增加,Pz減小速率很快,當(dāng)z取值較大時(shí),圖8不能明顯表示出Pz的值。因此,當(dāng)z取10到15時(shí),畫(huà)出了f(z,Pz)的圖像,如圖9所示。
Fig.9 Image off(z,Pz)whenzis selected from 10 to 15圖9 當(dāng)z取10到15時(shí)函數(shù) f(z,Pz)圖像
可以看出,隨著區(qū)塊的增加,攻擊者越來(lái)越難趕超誠(chéng)實(shí)鏈。越原始的區(qū)塊中數(shù)據(jù)被篡改的可能性就越低,安全性也就越高。因此,在數(shù)據(jù)副本分配策略中,每個(gè)區(qū)塊的副本數(shù)由區(qū)塊所在位置決定,將區(qū)塊鏈中較原始的區(qū)塊保存少量份數(shù),而較新的區(qū)塊保存足夠多的份數(shù),二者函數(shù)關(guān)系如式(4)所示。設(shè)M為區(qū)塊鏈中節(jié)點(diǎn)總數(shù),i為區(qū)塊鏈中區(qū)塊的編號(hào),n為區(qū)塊鏈目前的總區(qū)塊數(shù),mi為區(qū)塊i需要保存的份數(shù),Pn-i為第i個(gè)區(qū)塊被攻擊者追趕上的概率,也可以看作為第i個(gè)區(qū)塊的安全性系數(shù)。
但是,在區(qū)塊鏈機(jī)制中,如果50%以上節(jié)點(diǎn)保存了相同的數(shù)據(jù),則這個(gè)數(shù)據(jù)被視作真實(shí)數(shù)據(jù)。從而,控制了網(wǎng)絡(luò)中一半數(shù)量以上的節(jié)點(diǎn),就會(huì)控制整個(gè)網(wǎng)絡(luò)的數(shù)據(jù)。因此,也不能令每個(gè)區(qū)塊的副本數(shù)特別小,而是要根據(jù)不同區(qū)塊鏈系統(tǒng)安全性需要,規(guī)定出每個(gè)區(qū)塊保存的最小副本數(shù)k。
同時(shí),Borel定律[19]定義了任何低于1/1050的概率都是不可能的。因此,根據(jù)式(3)可以計(jì)算出,當(dāng)z增加到一定數(shù)值時(shí),Pz的概率會(huì)達(dá)到10-50以下。此時(shí),攻擊節(jié)點(diǎn)想要趕上誠(chéng)實(shí)節(jié)點(diǎn)變?yōu)椴豢赡苁录R虼?,將每z個(gè)區(qū)塊作為一組數(shù)據(jù)分片,保存相同的副本數(shù)量。
最后,得出每個(gè)區(qū)塊的副本數(shù)。每zmin個(gè)區(qū)塊被分割成一個(gè)分片,第i個(gè)分片保存mi份副本,但副本數(shù)最小為k。
因此,數(shù)據(jù)副本分配策略過(guò)程如下所示。
過(guò)程3數(shù)據(jù)副本分配策略過(guò)程。
(1)根據(jù)區(qū)塊鏈網(wǎng)絡(luò)的計(jì)算能力,預(yù)估出攻擊節(jié)點(diǎn)制造出下一節(jié)點(diǎn)的概率q;
(2)將q帶入式(3),計(jì)算當(dāng)Pz≤10-50時(shí),z的最小取值z(mì)min;
(3)根據(jù)區(qū)塊鏈的用戶(hù)總量和區(qū)塊總數(shù),確定出在保證數(shù)據(jù)安全前提下,每個(gè)區(qū)塊保存副本數(shù)的最小值k;
(4)將區(qū)塊鏈中節(jié)點(diǎn)總數(shù)M和區(qū)塊鏈目前的區(qū)塊數(shù)n帶入式(4),計(jì)算出每個(gè)位置的分片保存的副本數(shù)mi;
(5)對(duì)完整的區(qū)塊鏈進(jìn)行分片處理,每zmin個(gè)區(qū)塊被分割成一個(gè)分片,第i個(gè)分片保存mi份副本,當(dāng)mi 此處,本文給出了當(dāng)q=0.1時(shí),數(shù)據(jù)副本分配策略中每個(gè)區(qū)塊的副本數(shù)。 首先,根據(jù)式(3)進(jìn)行計(jì)算,為了簡(jiǎn)化分組過(guò)程,z的取值為10的整數(shù)倍。當(dāng)z≥100時(shí),P的概率已達(dá)到10-50以下。因此,將每100個(gè)區(qū)塊作為一組數(shù)據(jù)分片,保存相同的副本數(shù)量。 然后,利用式(4)計(jì)算每組分片保存的副本數(shù)。此時(shí),為了方便計(jì)算,對(duì)式(3)的計(jì)算結(jié)果利用Matlab對(duì)函數(shù)f(z,Pz)做了weibull擬合,擬合結(jié)果為式(5)。 其中,a=1.905(1.886,1.924),b=0.723(0.715 4,0.730 7),擬合方差(SSE)為1.215E-05,確定系數(shù)(R-square)為0.999 7。 從擬合結(jié)果可以看出,z與Pz呈負(fù)指數(shù)關(guān)系。因此,為了簡(jiǎn)化分片過(guò)程,將式(3)化簡(jiǎn)為式(6)來(lái)計(jì)算分片保存副本數(shù),分片結(jié)果如圖10所示。 當(dāng)n增加時(shí),每新增100個(gè)區(qū)塊組成一個(gè)分片,該分片由此時(shí)全網(wǎng)中所有節(jié)點(diǎn)保存。而對(duì)于之前分片的副本數(shù),由式(6)根據(jù)此時(shí)網(wǎng)絡(luò)中的節(jié)點(diǎn)總數(shù)重新計(jì)算。如果在新增100個(gè)區(qū)塊的時(shí)間里,全網(wǎng)的節(jié)點(diǎn)數(shù)激增,計(jì)算出的所需副本數(shù)比網(wǎng)絡(luò)中已存副本數(shù)多,則將之前分片副本數(shù)增加至式(6)計(jì)算數(shù)量;如果網(wǎng)絡(luò)中已存副本數(shù)比計(jì)算出的所需副本數(shù)量大,則可以令部分存儲(chǔ)節(jié)點(diǎn)釋放其儲(chǔ)存空間,但保證網(wǎng)絡(luò)中已存副本量大于等于所需副本數(shù)量。 區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型利用此副本分配策略會(huì)在保證數(shù)據(jù)可靠性和安全性的前提下,增加區(qū)塊鏈的存儲(chǔ)容量。 假設(shè):當(dāng)可擴(kuò)展模型采用基于式(6)的副本分配策略進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),模型中共有節(jié)點(diǎn)數(shù)M,其中存在不穩(wěn)定節(jié)點(diǎn)數(shù)量為d(d≤M),不穩(wěn)定節(jié)點(diǎn)會(huì)有e(e≤1)的概率出現(xiàn)數(shù)據(jù)丟失情況。則新產(chǎn)生的區(qū)塊分片保存副本數(shù)mn/100=M,每一個(gè)分片的副本數(shù)mj為式(7)所示,j為分片序號(hào)。 此時(shí),當(dāng)所有不穩(wěn)定節(jié)點(diǎn)第一次出現(xiàn)數(shù)據(jù)丟失時(shí),數(shù)據(jù)可以被完全恢復(fù)的概率為: 在式(8)中要求: (1)當(dāng)d (2)當(dāng)d 當(dāng)不穩(wěn)定節(jié)點(diǎn)出現(xiàn)多次數(shù)據(jù)丟失時(shí),由于在區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型的POR鏈中記錄了每次的數(shù)據(jù)丟失情況,并每次將該節(jié)點(diǎn)的可靠性值隨即減少。可靠值被減少后,不穩(wěn)定節(jié)點(diǎn)被選作儲(chǔ)存節(jié)點(diǎn)的概率就會(huì)降低。數(shù)據(jù)會(huì)被保存在較穩(wěn)定的節(jié)點(diǎn)中,可以被恢復(fù)的概率就會(huì)提高。 Fig.10 Allocation scheme of copies圖10 區(qū)塊副本數(shù)分配方案 實(shí)驗(yàn)的開(kāi)發(fā)環(huán)境為Intel Core i5-6500 3.20 GHz CPU和16 GB內(nèi)存的PC機(jī)上。利用VMware Workstation 12.5.2建立了16個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)為內(nèi)存1 GB,硬盤(pán)大小為60 GB的ubuntu16.04系統(tǒng)。借助IBM開(kāi)發(fā)的開(kāi)源Hyperledge Fabric v0.6版本,構(gòu)建起P鏈和POR鏈區(qū)塊鏈項(xiàng)目。 首先,測(cè)試基于區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型系統(tǒng)的穩(wěn)定性。實(shí)驗(yàn)分別建立了4個(gè)、8個(gè)、12個(gè)和16個(gè)節(jié)點(diǎn),所有節(jié)點(diǎn)均為儲(chǔ)存節(jié)點(diǎn),且其中3個(gè)節(jié)點(diǎn)同時(shí)為用戶(hù)節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)。實(shí)驗(yàn)運(yùn)行調(diào)用chaincode_example02.go交易代碼,每完成一次交易,生成5.39 KB的廣播消息。 在所有節(jié)點(diǎn)都正常運(yùn)行且不被攻擊的情況下,在數(shù)據(jù)分片時(shí),以500 KB為一個(gè)組進(jìn)行分片,每個(gè)分片的最小副本數(shù)為2份,副本數(shù)與分片位置的函數(shù)根據(jù)式(4)計(jì)算得出。當(dāng)實(shí)驗(yàn)完成交易186次、930次和1 860次,生成廣播數(shù)據(jù)1 MB、5 MB和10 MB時(shí),區(qū)塊鏈容量可擴(kuò)展模型與基于Hyperledge Fabric v0.6的區(qū)塊鏈系統(tǒng)中所有節(jié)點(diǎn)儲(chǔ)存總?cè)萘咳鐖D11所示。 Fig.11 Storage space occupied by scalable model and Hyperledge Fabric圖11 可擴(kuò)展模型與Hyperledge Fabric占用的存儲(chǔ)空間 通過(guò)分析圖11的實(shí)驗(yàn)結(jié)果,可以得到以下結(jié)論。 (1)在節(jié)點(diǎn)數(shù)較少的情況下,存儲(chǔ)容量可擴(kuò)展模型所有節(jié)點(diǎn)儲(chǔ)存總量與Fabric區(qū)塊鏈相比相差不大。但當(dāng)節(jié)點(diǎn)數(shù)增多時(shí),容量可擴(kuò)展模型所占用的存儲(chǔ)空間與Fabric區(qū)塊鏈系統(tǒng)相比明顯減少。 (2)當(dāng)存儲(chǔ)數(shù)據(jù)量較小時(shí),存儲(chǔ)容量可擴(kuò)展模型所有節(jié)點(diǎn)儲(chǔ)存總量與Fabric區(qū)塊鏈相比相差不大。這是由于儲(chǔ)存容量可擴(kuò)展模型在存儲(chǔ)交易數(shù)據(jù)的同時(shí),在P鏈中保存了儲(chǔ)存節(jié)點(diǎn)位置信息,在POR鏈中保存了儲(chǔ)存節(jié)點(diǎn)的可靠性評(píng)價(jià)信息。并且在P鏈與POR鏈中的每條數(shù)據(jù)大小都為固定值,因此當(dāng)存儲(chǔ)數(shù)據(jù)量不斷增加時(shí),容量可擴(kuò)展模型所占用的存儲(chǔ)空間與Fabric區(qū)塊鏈系統(tǒng)相比明顯減少。 (3)當(dāng)存儲(chǔ)數(shù)據(jù)量不斷增加時(shí),區(qū)塊鏈容量可擴(kuò)展模型所需的儲(chǔ)存空間的增量趨于平緩。 因此,容量可擴(kuò)展模型在多節(jié)點(diǎn)、大數(shù)據(jù)的應(yīng)用上,具有良好的存儲(chǔ)擴(kuò)展性。 同時(shí),區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型與Fabric區(qū)塊鏈系統(tǒng)的處理時(shí)間如圖12和圖13所示。容量可擴(kuò)展模型的處理時(shí)間要略多于Fabric區(qū)塊鏈系統(tǒng),且隨著節(jié)點(diǎn)數(shù)量和存儲(chǔ)數(shù)據(jù)大小增加,可擴(kuò)展模型的處理時(shí)間基本呈線(xiàn)性增加。 Fig.12 Time to process 1 MB data by scalable model and Hyperledge Fabric圖12 可擴(kuò)展模型與Hyperledge Fabric處理1 MB數(shù)據(jù)時(shí)間 Fig.13 Time to process 5 MB data by scalable model and Hyperledge Fabric圖13 可擴(kuò)展模型與Hyperledge Fabric處理5 MB數(shù)據(jù)時(shí)間 然后,測(cè)試系統(tǒng)的容錯(cuò)性。假設(shè)在8個(gè)、12個(gè)和16個(gè)儲(chǔ)存節(jié)點(diǎn)中存在不穩(wěn)定節(jié)點(diǎn),不穩(wěn)定節(jié)點(diǎn)會(huì)丟失本地的部分儲(chǔ)存數(shù)據(jù)。為了符合實(shí)際應(yīng)用情況,實(shí)驗(yàn)設(shè)置了4個(gè)不穩(wěn)定節(jié)點(diǎn),且這4個(gè)不穩(wěn)定節(jié)點(diǎn)均不是驗(yàn)證節(jié)點(diǎn),它們出現(xiàn)不穩(wěn)定概率分別為0.8、0.6、0.4和0.2。當(dāng)實(shí)驗(yàn)完成交易930次,得到數(shù)據(jù)5 MB,分片方法與上個(gè)實(shí)驗(yàn)相同時(shí),區(qū)塊鏈容量可擴(kuò)展模型、僅基于數(shù)據(jù)副本分配策略的區(qū)塊鏈系統(tǒng)與基于Hyperledge Fabric v0.6的區(qū)塊鏈系統(tǒng)各自恢復(fù)的數(shù)據(jù)總量的百分比如圖14所示。 Fig.14 Fault tolerance of scalable model圖14 可擴(kuò)展模型容錯(cuò)性測(cè)試 當(dāng)不穩(wěn)定節(jié)點(diǎn)出現(xiàn)時(shí),F(xiàn)abric基本不受影響,僅基于數(shù)據(jù)副本分配策略的區(qū)塊鏈系統(tǒng)受影響最大,區(qū)塊鏈容量可擴(kuò)展模型所受影響較小。這是由于容量可擴(kuò)展模型和僅基于數(shù)據(jù)副本分配策略的區(qū)塊鏈系統(tǒng)相比,利用POR鏈中對(duì)各個(gè)節(jié)點(diǎn)的可靠性評(píng)價(jià),選出了穩(wěn)定性更好的節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)。并且從實(shí)驗(yàn)中可以看出,當(dāng)節(jié)點(diǎn)數(shù)增加,也就是系統(tǒng)中副本數(shù)增加時(shí),容量可擴(kuò)展模型數(shù)據(jù)恢復(fù)比例有所增加,系統(tǒng)的容錯(cuò)性增強(qiáng)。 最后,測(cè)試區(qū)塊鏈容量可擴(kuò)展模型的安全性。本文借助了Blockbench[20]對(duì)區(qū)塊鏈安全測(cè)試方法:當(dāng)有攻擊者故意修改儲(chǔ)存節(jié)點(diǎn)中的存儲(chǔ)數(shù)據(jù)時(shí),區(qū)塊鏈會(huì)產(chǎn)生分叉,此時(shí)系統(tǒng)的安全性可以根據(jù)分叉鏈產(chǎn)生的區(qū)塊數(shù)量來(lái)判斷,區(qū)塊數(shù)量越少,系統(tǒng)越安全。在實(shí)驗(yàn)中,建立了16個(gè)節(jié)點(diǎn),運(yùn)行Hyperledge Fabric與區(qū)塊鏈容量可擴(kuò)展模型,攻擊出現(xiàn)在系統(tǒng)運(yùn)行第100秒,在第250秒時(shí)結(jié)束。兩個(gè)系統(tǒng)正常運(yùn)行和被攻擊時(shí)的實(shí)驗(yàn)結(jié)果如圖15所示。 Fig.15 Security of scalable model圖15 可擴(kuò)展模型安全性測(cè)試 從實(shí)驗(yàn)中可以看出,Hyperledge Fabric和區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型被攻擊時(shí),并沒(méi)有產(chǎn)生分叉鏈,這是因?yàn)閷?shí)驗(yàn)中容量可擴(kuò)展模型也是基于Hyperledger Fabric技術(shù)構(gòu)建的。Hyperledger的一致性協(xié)議保證了區(qū)塊的安全性,讓被攻擊的鏈不產(chǎn)生分叉。但是在攻擊停止后,Hyperledger和容量可擴(kuò)展模型都用了一段時(shí)間才從攻擊中恢復(fù),并且容量可擴(kuò)展模型比Hyperledger需要的恢復(fù)時(shí)間更長(zhǎng)。 通過(guò)實(shí)驗(yàn)證明,基于Hyperledger Fabric的區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型在被攻擊時(shí),雖然需要更多的處理時(shí)間,但具有良好的安全性。 區(qū)塊鏈的協(xié)議要求全網(wǎng)中每個(gè)節(jié)點(diǎn)都保存著同一條完整的區(qū)塊鏈信息,這導(dǎo)致了區(qū)塊鏈的容量受到網(wǎng)絡(luò)里存儲(chǔ)空間最小的節(jié)點(diǎn)的限制。本文提出了一個(gè)區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型。模型將區(qū)塊鏈中各個(gè)區(qū)塊保存在一定比例的節(jié)點(diǎn)中,而不是所有節(jié)點(diǎn)中。并且模型增加了節(jié)點(diǎn)可靠性驗(yàn)證,保證了數(shù)據(jù)的安全性。模型中用戶(hù)節(jié)點(diǎn)根據(jù)數(shù)據(jù)副本分配策略將每個(gè)區(qū)塊保存相應(yīng)的副本數(shù),并基于POR數(shù)據(jù)可檢索性證明方法對(duì)副本數(shù)據(jù)進(jìn)行加密,并將密鑰發(fā)送個(gè)驗(yàn)證節(jié)點(diǎn)。驗(yàn)證節(jié)點(diǎn)利用POR方法實(shí)時(shí)更新儲(chǔ)存節(jié)點(diǎn)的穩(wěn)定性值,依此選擇高穩(wěn)定性節(jié)點(diǎn)來(lái)儲(chǔ)存用戶(hù)節(jié)點(diǎn)的數(shù)據(jù)副本。最后,經(jīng)實(shí)驗(yàn)證明,區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型在具有一定的穩(wěn)定性、容錯(cuò)性和安全性的同時(shí),有效地增加了區(qū)塊鏈的儲(chǔ)存擴(kuò)展性。 未來(lái)可以進(jìn)一步研究數(shù)據(jù)副本分配策略,提出更準(zhǔn)確的計(jì)算數(shù)據(jù)副本方法,在保證數(shù)據(jù)安全性的前提下,減少更多儲(chǔ)存空間。同時(shí),也可以將區(qū)塊鏈存儲(chǔ)容量可擴(kuò)展模型應(yīng)用于Ethereum和Parity等不同的區(qū)塊鏈系統(tǒng)中,提高不同區(qū)塊鏈系統(tǒng)的存儲(chǔ)擴(kuò)展性。 [1]Bonneau J,Miller A,Clark J,et al.SoK:research perspectives and challenges for Bitcoin and cryptocurrencies[C]//Proceedings of the 2015 IEEE Symposium on Security and Privacy,San Jose,May 17-21,2015.Washington:IEEE Computer Society,2015:104-121. [2]Yuan Yong,Wang Feiyue.Blockchain:the state of the art and future trends[J].Acta Automatica Sinica,2016,42(4):481-494. [3]Eyal I,Gencer A E,Sirer E G,et al.Bitcoin-NG:a scalable blockchain protocol[C]//Proceedings of the 13th USENIX Symposium on Networked Systems Design and Implementation,Santa Clara,Mar 16-18,2016.Berkeley:USENIX Association,2016:45-59. [4]Blockmeta.The blockchain data of Bitcion[EB/OL].[2017-05-07].https://blockmeta.com/btc-stat. [5]Amalarethinam D I G,Balakrishnan C,Charles A.An improved methodology for fragment re-allocation in peer-topeer distributed databases[C]//Proceedings of the 4th International Conference on Advances in Recent Technologies in Communication and Computing,Bangalore,Oct 19-20,2012.Piscataway:IEEE,2012:78-81. [6]Li Jingrui,Wolf T.A one-way proof-of-work protocol to protect controllers in software-defined networks[C]//Proceedings of the 2016 Symposium on Architectures for Networking and Communications Systems,Santa Clara,Mar 17-18,2016.New York:ACM,2016:123-124. [7]Boyd C,Carr C.Fair client puzzles from the Bitcoin blockchain[C]//LNCS 9722:Proceedings of the 21st Australasian Conference on Information Security and Privacy,Melbourne,Jul 4-6,2016.Berlin,Heidelberg:Springer,2016:161-177. [8]Gervais A,Karame G O,Wüst K,et al.On the security and performance of proof of work blockchains[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security,Vienna,Oct 24-28,2016.New York:ACM,2016:3-16. [9]Herbert J,Litchfield A.A novel method for decentralised peer-to-peer software license validation using cryptocurrency blockchain technology[C]//Proceedings of the 38th Australasian Computer Science Conference,Jan 27-30,2015.Sydney:Australian Computer Society,2015:27-35. [10]Karame G.On the security and scalability of Bitcoin's blockchain[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security,Vienna,Oct 24-28,2016.New York:ACM,2016:1861-1862. [11]Ali M,Nelson J C,Shea R,et al.Blockstack:a global naming and storage system secured by blockchains[C]//Proceedings of the 2016 USENIX Annual Technical Conference,Jun 22-24,2016.Berkeley:USENIXAssociation,2016:181-194. [12]King S,Nadal S.PPCoin:peer-to-peer crypto-currency with proof-of-stake[EB/OL].[2017-04-02].http://www.peercoin.net/bin/peercoinpaper.pdf. [13]Bentov I,Lee C,Mizrahi A,et al.Proof of activity:extending Bitcoin's proof of work via proof of stake[J/OL].Cryptology ePrintArchive,2014:452. [14]Tung Y C,Lin K C J,Chou F C.Bandwidth-aware replica placement for peer-to-peer storage systems[C]//Proceedings of the 2011 Global Communications Conference,Houston,Dec 5-9,2011.Piscataway:IEEE,2011:1-5. [15]Ng W S,Ooi B C,Tan K L,et al.PeerDB:a P2P-based system for distributed data sharing[C]//Proceedings of the 19th International Conference on Data Engineering,Bangalore,Mar 5-8,2003.Washington:IEEE Computer Society,2003:633-644. [16]Juels A,Kaliski B S.PORs:proofs of retrievability for large files[C]//Proceedings of the 2007 ACM Conference on Computer and Communications Security,Alexandria,Oct 28-31,2007.New York:ACM,2007:584-597. [17]Armknecht F,Bohli J M,Karame G O,et al.Outsourced proofs of retrievability[C]//Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security,Scottsdale,Nov 3-7,2014.New York:ACM,2014:831-843. [18]Nakamoto S.Bitcoin:a peer-to-peer electronic cash system[EB/OL].[2017-05-07].http://www.bitcoin.org/bitcoin.pdf. [19]Borel E.Probabilities and life[M].New York:Dover Publications Inc,1962. [20]Dinh T T A,Wang Ji,Chen Gang,et al.BLOCKBENCH:a framework for analyzing private blockchains[C]//Proceedings of the 2017ACM International Conference on Management of Data,Chicago,May 14-19,2017.New York:ACM,2017:1085-1100. 附中文參考文獻(xiàn): [2]袁勇,王飛躍.區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J].自動(dòng)化學(xué)報(bào),2016,42(4):481-494.5 實(shí)驗(yàn)結(jié)果
6 結(jié)束語(yǔ)