江云超,何小衛(wèi),崔一舉
浙江師范大學(xué)數(shù)學(xué)與計算機(jī)科學(xué)學(xué)院,浙江金華321004
隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,以比特幣[1]和以太坊[2]為首的數(shù)字加密貨幣逐漸得到越來越多的關(guān)注.截至2019年7月,比特幣網(wǎng)絡(luò)中共有584 638 塊區(qū)塊,區(qū)塊總量約213.56 GB.對于比特幣節(jié)點(diǎn)而言,存儲完整區(qū)塊數(shù)據(jù)是其未來面臨的巨大挑戰(zhàn).為了避免存儲大量區(qū)塊數(shù)據(jù),如今許多區(qū)塊鏈節(jié)點(diǎn)選擇以輕量級方式運(yùn)行.該類節(jié)點(diǎn)只要存儲區(qū)塊頭內(nèi)容而不必存儲完整的區(qū)塊數(shù)據(jù),因而減少了節(jié)點(diǎn)的區(qū)塊存儲.然而,增加輕量級節(jié)點(diǎn)的后果是:只有少數(shù)節(jié)點(diǎn)存儲完整區(qū)塊,這就使區(qū)塊鏈逐漸趨于中心化,與區(qū)塊鏈的去中心化理念相違背,因此有必要進(jìn)一步研究區(qū)塊鏈節(jié)點(diǎn)的存儲優(yōu)化問題.
為了解決區(qū)塊鏈節(jié)點(diǎn)存儲量不斷增大的問題,比特幣節(jié)點(diǎn)優(yōu)化方案提出了簡單支付驗證(simplified payment verification, SPV)方式.該方式只需保存區(qū)塊頭內(nèi)容,減少了節(jié)點(diǎn)的區(qū)塊體存儲.為了減少節(jié)點(diǎn)賬戶的中間交易量,文獻(xiàn)[4]提出了閃電網(wǎng)絡(luò).該網(wǎng)絡(luò)具有如下特點(diǎn):比特幣節(jié)點(diǎn)把節(jié)點(diǎn)賬戶的大量中間交易數(shù)據(jù)轉(zhuǎn)移到鏈下通道,而只將交易的開始與結(jié)束提交給比特幣主鏈,減少了節(jié)點(diǎn)的區(qū)塊交易存儲.針對節(jié)點(diǎn)存儲區(qū)塊優(yōu)化問題,文獻(xiàn)[5]提出了一種Fast 同步算法.該算法只保存最近區(qū)塊的狀態(tài)數(shù)據(jù)而忽略較舊區(qū)塊的狀態(tài)數(shù)據(jù),不僅減少了同步區(qū)塊的狀態(tài)數(shù)據(jù),還提高了新節(jié)點(diǎn)加入?yún)^(qū)塊鏈的效率.文獻(xiàn)[6]提出了關(guān)于區(qū)塊狀態(tài)數(shù)據(jù)的剪枝方案,通過修剪每個區(qū)塊的狀態(tài)數(shù)據(jù)達(dá)到減少節(jié)點(diǎn)對于區(qū)塊存儲的目的.文獻(xiàn)[7]提出的迷你區(qū)塊鏈取消了彼此鏈接的交易,減少了對完整區(qū)塊鏈的需求.文獻(xiàn)[8]提出的以太坊雷電網(wǎng)絡(luò)和文獻(xiàn)[9]提出的類似于比特幣的閃電網(wǎng)絡(luò)都將部分交易轉(zhuǎn)移到鏈下,減少了區(qū)塊鏈節(jié)點(diǎn)的數(shù)據(jù)存儲量.文獻(xiàn)[10]提出了IPFS 方法,在此基礎(chǔ)上文獻(xiàn)[11]提出將以太坊智能合約代碼存儲于IPFS 的方法,以哈希值替換區(qū)塊鏈中原有數(shù)據(jù),減少了節(jié)點(diǎn)的區(qū)塊數(shù)據(jù)存儲.文獻(xiàn)[12]提出了擦除已存在于區(qū)塊中的數(shù)據(jù)交易的方法,減少了節(jié)點(diǎn)區(qū)塊存儲量.
相比于其他區(qū)塊鏈節(jié)點(diǎn)存儲優(yōu)化方案,文獻(xiàn)[13]提出的分片方案在減少區(qū)塊存儲和提高新節(jié)點(diǎn)加入?yún)^(qū)塊鏈效率方面都有明顯的優(yōu)勢.該方案根據(jù)惡意節(jié)點(diǎn)概率計算分片區(qū)塊數(shù)量,利用區(qū)塊鏈中節(jié)點(diǎn)總數(shù)計算得到分片保存的副本數(shù)量.然而,這種方法存在以下2 個問題:1)將每個分片中編號最小區(qū)塊被惡意節(jié)點(diǎn)攻擊的概率設(shè)置為分片概率,使得分片中較新區(qū)塊存在安全問題,因為相比于同一個分片中編號最小的區(qū)塊,分片中編號較大的區(qū)塊只有存儲更多的分片副本才能保證安全;2)將最少副本數(shù)量設(shè)定為某個定值也存在安全問題,因為少數(shù)分片副本可能被惡意節(jié)點(diǎn)存儲.為了解決上述問題,本文提出以下改進(jìn)措施:1)以每個分片中編號最大概率值作為該分片的概率值,提高了分片的安全性;2)當(dāng)誠實節(jié)點(diǎn)保存分片副本數(shù)量大于惡意節(jié)點(diǎn)時,可以保證最少分片副本的安全.
分片是指將部分連續(xù)的區(qū)塊連接在一起形成一個分片,采用分片方案是為了提高分片中區(qū)塊的安全性.如果將區(qū)塊鏈中的單個區(qū)塊分別存儲在不同節(jié)點(diǎn),就會提高惡意節(jié)點(diǎn)創(chuàng)建區(qū)塊的概率.因為惡意節(jié)點(diǎn)創(chuàng)建單個區(qū)塊的概率遠(yuǎn)遠(yuǎn)大于創(chuàng)建整個分片中所有區(qū)塊的概率,所以通過分片方式可以提高區(qū)塊存儲的安全性.
采用分片方案需要預(yù)先計算出分片中區(qū)塊的數(shù)量,而文獻(xiàn)[1]提出的雙重支付攻擊場景恰好提供了分片的設(shè)計思路.在雙重支付攻擊場景中,假設(shè)p為誠實節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率,q為惡意節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率,qz表示惡意節(jié)點(diǎn)在誠實節(jié)點(diǎn)創(chuàng)建z個區(qū)塊之后追上的概率,其計算公式為
當(dāng)p≤q且惡意節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率超過誠實節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率時,惡意節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率為1.00;當(dāng)p>q時,惡意節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率隨著誠實節(jié)點(diǎn)創(chuàng)建區(qū)塊數(shù)量的增加而逐漸下降.其中,惡意節(jié)點(diǎn)創(chuàng)建區(qū)塊的概率值滿足泊松分布,其期望值為
惡意節(jié)點(diǎn)追上誠實節(jié)點(diǎn)概率的計算公式為
將式(3)轉(zhuǎn)換為對無限數(shù)列求和
由式(4)可以看出:隨著誠實節(jié)點(diǎn)創(chuàng)建區(qū)塊數(shù)量z的增加,惡意節(jié)點(diǎn)創(chuàng)建虛假交易區(qū)塊的概率逐漸減小.因此,可以設(shè)定一個最小概率值qmin,當(dāng)惡意節(jié)點(diǎn)創(chuàng)建區(qū)塊的概率值小于qmin時,惡意節(jié)點(diǎn)不能篡改此區(qū)塊.為了計算分片中區(qū)塊的數(shù)量,本文利用C 語言編寫程序,分析惡意節(jié)點(diǎn)在不同概率時計算得到的分片區(qū)塊數(shù)量.當(dāng)惡意節(jié)點(diǎn)追上誠實節(jié)點(diǎn)的概率P <0.000 1%時,惡意節(jié)點(diǎn)不能篡改當(dāng)前區(qū)塊.實驗分析結(jié)果如表1所示.
表1 分片區(qū)塊數(shù)量Table 1 Number of blocks in sharding
由表1可以看出:隨著惡意節(jié)點(diǎn)概率的逐漸增大,區(qū)塊鏈分片的區(qū)塊數(shù)量也在逐漸增加.此時惡意節(jié)點(diǎn)概率值的大小決定了分片中區(qū)塊的數(shù)量,并且當(dāng)q≥0.50 時,惡意節(jié)點(diǎn)創(chuàng)建下一個區(qū)塊的概率為1.00,分片中的區(qū)塊數(shù)量接近于無限.
第1 節(jié)已經(jīng)分析了在不同惡意節(jié)點(diǎn)概率下得到的每個分片中的區(qū)塊數(shù)量,而分片需要存儲的副本數(shù)量可以根據(jù)區(qū)塊鏈中的節(jié)點(diǎn)數(shù)量以及區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率計算得到.首先由式(4)算得區(qū)塊鏈中第i個區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率為
分片需要存儲的副本數(shù)mi的計算公式為[13]
式中,M為區(qū)塊鏈中的節(jié)點(diǎn)總數(shù),i為區(qū)塊的編號,n為區(qū)塊鏈中區(qū)塊總數(shù).文獻(xiàn)[13]將分片中編號最小區(qū)塊的概率作為分片概率,但分片中編號最小區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率很小,此時分片存儲的副本數(shù)量較少;而分片中編號較大區(qū)塊的安全性較低,只有存儲更多的分片副本才能保證其安全性,所以把分片中編號最小區(qū)塊的概率作為分片概率將會降低分片中編號較大區(qū)塊的安全性.為了提高分片中區(qū)塊的安全性,本文以分片中編號最大區(qū)塊概率作為分片概率.因為編號最大區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率較大,所以需要保存更多的分片副本數(shù)量,可見本文方法提高了分片中區(qū)塊的安全性.例如,第j個分片概率值的計算公式為
式中,Pn?j×z表示第j個分片中編號最大區(qū)塊的概率值,qm?j表示第j個分片的概率,m為區(qū)塊鏈中分片的副本數(shù)量,且
為了比較同一個分片中不同編號區(qū)塊被惡意節(jié)點(diǎn)攻擊的概率,設(shè)置惡意節(jié)點(diǎn)概率為0.10,分片中區(qū)塊數(shù)量為10.分片中區(qū)塊被惡意節(jié)點(diǎn)攻擊的概率如表2所示.
表2 分片區(qū)塊被惡意節(jié)點(diǎn)攻擊的概率Table 2 Probability of block being attacked by malicious node
由表2可以看出:在同一個分片中,編號最大的區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率至少是編號小的區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率的2×105倍.如果把分片中編號最小的區(qū)塊被惡意節(jié)點(diǎn)創(chuàng)建的概率作為分片被惡意節(jié)點(diǎn)創(chuàng)建的概率,將會降低分片區(qū)塊的安全性.為了提高分片區(qū)塊的安全性,本文以分片中編號最大的區(qū)塊概率作為分片概率能提高分片的安全性,但是將最少分片副本數(shù)設(shè)定為某個定值也存在安全問題.如果少數(shù)幾個分片副本均被惡意節(jié)點(diǎn)存儲,那么惡意節(jié)點(diǎn)就可能從當(dāng)前分片中的區(qū)塊開始創(chuàng)建虛假區(qū)塊信息.為了提高最少分片副本存儲的安全性,本文提出誠實節(jié)點(diǎn)存儲的分片副本數(shù)量大于惡意節(jié)點(diǎn)時可以保證分片的安全性.在以工作量證明的區(qū)塊鏈中,當(dāng)超過50%的節(jié)點(diǎn)相信區(qū)塊真實性時,該區(qū)塊會被區(qū)塊鏈其他節(jié)點(diǎn)信任.假設(shè)區(qū)塊鏈中每個節(jié)點(diǎn)的算力相同,則最少分片副本數(shù)量mi的計算公式為
式中,qM值為惡意節(jié)點(diǎn)數(shù)量.由式(8)可以看出:當(dāng)誠實節(jié)點(diǎn)存儲分片副本數(shù)量大于惡意節(jié)點(diǎn)存儲的分片副本數(shù)量時,可以保證分片區(qū)塊的安全.為了比較在不同惡意節(jié)點(diǎn)概率和不同節(jié)點(diǎn)數(shù)量情況下需要存儲的最少副本數(shù)量,假設(shè)惡意節(jié)點(diǎn)區(qū)塊的概率q分別為0.10、0.20、0.30,節(jié)點(diǎn)數(shù)目分別為4、8、16,分片需要保存的最少副本數(shù)量如表3所示:
表3 分片保存的最少副本數(shù)量Table 3 Minimum copy number being saved by sharding
由表3可以看出:當(dāng)保存分片的惡意節(jié)點(diǎn)數(shù)小于1 時,最少分片副本數(shù)只需要保存2 份;當(dāng)分片保存的惡意節(jié)點(diǎn)數(shù)目大于1 時,只有誠實節(jié)點(diǎn)保存的分片副本數(shù)量大于惡意節(jié)點(diǎn)保存的分片副本數(shù)量才可以保證分片區(qū)塊的安全.例如:當(dāng)惡意節(jié)點(diǎn)概率為0.20、節(jié)點(diǎn)數(shù)目為8時,保存分片的惡意節(jié)點(diǎn)和誠實節(jié)點(diǎn)數(shù)量分別為2 和3,即最少5 個分片副本數(shù)目可以保證分片區(qū)塊安全.
實驗機(jī)器配置為Inter Core i7-2600 3.4 GHz CPU 和8G 內(nèi)存,利用Oracle VirtualBox搭建Ubuntu 系統(tǒng),使用文獻(xiàn)[14]的簡易比特幣開源代碼,搭建比特幣節(jié)點(diǎn)存儲優(yōu)化后的區(qū)塊鏈網(wǎng)絡(luò),并且在區(qū)塊鏈網(wǎng)絡(luò)中設(shè)置16 個節(jié)點(diǎn)供節(jié)點(diǎn)存儲優(yōu)化實驗使用.
實驗環(huán)境中分別有4、8、16 個比特幣節(jié)點(diǎn),設(shè)定每個區(qū)塊大小為10 筆交易,區(qū)塊大小為5 kB,實驗結(jié)果如圖1和表4所示.當(dāng)惡意節(jié)點(diǎn)概率為0.10,區(qū)塊總數(shù)分別為100、500、1 000、5 000 時,比較比特幣節(jié)點(diǎn)優(yōu)化前后的存儲情況.
圖1 比特幣節(jié)點(diǎn)存儲總量Figure 1 Bitcoin node total storage
表4 比特幣節(jié)點(diǎn)存儲總量Table 4 Bitcoin node total storage
由表4可以看出:當(dāng)惡意節(jié)點(diǎn)概率相同時,隨著區(qū)塊鏈中節(jié)點(diǎn)數(shù)目的增加,優(yōu)化后的節(jié)點(diǎn)相比于未優(yōu)化的節(jié)點(diǎn)將減少更多的區(qū)塊存儲量.例如當(dāng)節(jié)點(diǎn)數(shù)目分別為4、8、16 時,節(jié)點(diǎn)存儲總量約減少50%、75%、81%.由圖1可以看出,當(dāng)惡意節(jié)點(diǎn)概率相同時,隨著區(qū)塊數(shù)量的增加,優(yōu)化后的節(jié)點(diǎn)相比于未優(yōu)化的節(jié)點(diǎn)也將減少更多的區(qū)塊存儲.例如當(dāng)節(jié)點(diǎn)數(shù)目為16、區(qū)塊數(shù)量為5 000 時,優(yōu)化后的存儲總量減少約82%.
上面分析了惡意節(jié)點(diǎn)概率相同時,優(yōu)化后的節(jié)點(diǎn)存儲與區(qū)塊數(shù)和節(jié)點(diǎn)數(shù)之間的關(guān)系.為了比較惡意節(jié)點(diǎn)概率不同時優(yōu)化后的存儲情況,實驗設(shè)置區(qū)塊鏈中節(jié)點(diǎn)數(shù)目為16 個,惡意節(jié)點(diǎn)概率分別為0.10、0.20、0.30,得到如圖2和表5所示的結(jié)果.
圖2 不同惡意節(jié)點(diǎn)概率的比特幣節(jié)點(diǎn)存儲總量Figure 2 Total bitcoin node storage for various malicious node probabilities
表5 在不同惡意節(jié)點(diǎn)概率情況下的比特幣節(jié)點(diǎn)存儲總量Table 5 Total bitcoin node storage for various malicious node probabilities
由表5可以看出:當(dāng)比特幣區(qū)塊數(shù)量和節(jié)點(diǎn)數(shù)目相同時,隨著惡意節(jié)點(diǎn)概率的減小,優(yōu)化后的節(jié)點(diǎn)存儲的區(qū)塊數(shù)量更少.由圖2可以看出:隨著區(qū)塊數(shù)的增加,優(yōu)化后的節(jié)點(diǎn)將減少更多的存儲量.例如區(qū)塊數(shù)量為5 000、惡意節(jié)點(diǎn)概率為0.10 時,優(yōu)化后節(jié)點(diǎn)減少約75%的區(qū)塊存儲量.
當(dāng)新節(jié)點(diǎn)加入?yún)^(qū)塊鏈時,需要與其他節(jié)點(diǎn)通信以獲取完整區(qū)塊,但是優(yōu)化后的新節(jié)點(diǎn)剛加入?yún)^(qū)塊鏈,其自身安全性還沒有得到區(qū)塊鏈中其他節(jié)點(diǎn)的認(rèn)可,因此新節(jié)點(diǎn)只需要同步最近分片區(qū)塊而不必存儲編號較小的區(qū)塊,從而提高新節(jié)點(diǎn)加入?yún)^(qū)塊鏈的效率.
為了比較優(yōu)化后新節(jié)點(diǎn)同步時間與惡意節(jié)點(diǎn)概率之間的關(guān)系,實驗設(shè)置節(jié)點(diǎn)數(shù)目為16,惡意節(jié)點(diǎn)概率分別為0.10、0.20、0.30 以及區(qū)塊數(shù)量分別為100、500、1 000、5 000,比較優(yōu)化后新節(jié)點(diǎn)的區(qū)塊同步時間,并將實驗結(jié)果以表6和圖3所示.
由表6可以看出:當(dāng)比特幣區(qū)塊數(shù)相同時,隨著比特幣惡意節(jié)點(diǎn)概率的減少,優(yōu)化后新節(jié)點(diǎn)將花費(fèi)更少時間來同步區(qū)塊.由圖3可以看出:在惡意節(jié)點(diǎn)概率相同的情況下,隨著區(qū)塊數(shù)量的增加,優(yōu)化后的新節(jié)點(diǎn)將需要更短的時間同步區(qū)塊,因此該優(yōu)化更適用于大數(shù)據(jù).
表6 比特幣節(jié)點(diǎn)優(yōu)化后的區(qū)塊同步時間Table 6 Optimized bitcoin node synchronization time
圖3 比特幣節(jié)點(diǎn)優(yōu)化后區(qū)塊的同步時間Figure 3 Optimized bitcoin node synchronization time
在區(qū)塊鏈網(wǎng)絡(luò)中,所有節(jié)點(diǎn)需要同步全部區(qū)塊才能參與到區(qū)塊鏈中.隨著區(qū)塊數(shù)量的增加,許多節(jié)點(diǎn)因受存儲限制而無法參與區(qū)塊鏈.本文提出了一種區(qū)塊鏈節(jié)點(diǎn)存儲優(yōu)化方案,該方案改進(jìn)了區(qū)塊分片,提高了分片安全性,減少了區(qū)塊鏈節(jié)點(diǎn)的存儲量.實驗表明,該區(qū)塊鏈節(jié)點(diǎn)存儲優(yōu)化方案不僅減少區(qū)塊鏈節(jié)點(diǎn)的區(qū)塊存儲量,而且提高了新節(jié)點(diǎn)加入?yún)^(qū)塊鏈的效率.未來在實驗中可以增加區(qū)塊鏈中節(jié)點(diǎn)數(shù)目和區(qū)塊數(shù)量以達(dá)到模擬真實區(qū)塊鏈中的節(jié)點(diǎn)存儲優(yōu)化目的.