陳 飛,葉春明 CHEN Fei,YE Chunming
(上海理工大學 管理學院,上海 200093)
在全球商品流動日益增加的時代,產品安全和質量保證變得越來越困難。隨著近年來產品質量頻繁出現(xiàn)問題,產品的安全性引起了社會大眾和政府的極大關注,產品的可追溯性對零售商、經銷商和國家監(jiān)管機構來說是非常具有挑戰(zhàn)性的[1-2]。此外,它還涉及對產品真實性的驗證,例如對原產地、品種或種植信息的正確申報。這些質量參數(shù)證明了較高的價格是合理的,因此,它們往往是產品偽造者的關注焦點。而其中一些質量可以用客觀的分析方法加以監(jiān)測,但并非全部。為了確保產品貿易網(wǎng)絡的可追溯性,區(qū)塊鏈具有極大的潛力[3],因為數(shù)據(jù)可以以不可更改的方式存儲,并支持跨所有流程步驟的快速跟蹤,因此利益相關者以及商品或半成品可以更快地追蹤定位[4-6]。
本文將介紹區(qū)塊鏈的相關技術和介紹本系統(tǒng)中所用的存儲模塊以及對區(qū)塊鏈模塊進行一個重新設計,利用兩模塊設計一個基于混合區(qū)塊鏈的溯源系統(tǒng)。
(1)公有鏈:顧名思義,公開的區(qū)塊鏈,所有人都可參與其中作為網(wǎng)絡中的一個節(jié)點,公有鏈實現(xiàn)了完全去中心化,各個節(jié)點均可自由加入和退出網(wǎng)絡,并參加鏈上數(shù)據(jù)的讀寫。
(2)聯(lián)盟鏈:由多個機構共同參與管理的區(qū)塊鏈,其數(shù)據(jù)只允許系統(tǒng)內不同的機構進行讀寫和發(fā)送,各個節(jié)點對應各個實體機構組織,只有通過授權后方能加入或退出網(wǎng)絡。
(3)私有鏈:也叫做專有鏈,是一種不公開的“鏈”,一般情況下,需要授權才能夠加入節(jié)點,并且私有鏈中的各個節(jié)點的寫入權限都被嚴格控制,且相關權限可有選擇性地對外開放。
(1)Merkle樹:也叫默克爾樹,是一類基于哈希值的二叉樹或多叉樹,其葉子節(jié)點上的值通常為數(shù)據(jù)塊的哈希值,而非葉子節(jié)點上的值,是將該節(jié)點的所有子節(jié)點的組合結果的哈希值。
(2)共識算法:袁勇[7]等提出共識算法包括POW(工作量證明)、POS(權益證明)、DPOS(股權權益證明)、PBFT(實用拜占庭容錯算法)等,是在相關機制或特定協(xié)議的基礎上建立、切換靈活的算法。
(3)數(shù)字簽名:區(qū)塊鏈比特幣中利用數(shù)字簽名來保證數(shù)據(jù)在整個系統(tǒng)中不可篡改,并保證交易雙方的身份真實可靠。數(shù)字簽名使用了非對稱加密技術和數(shù)字摘要技術,保證了數(shù)據(jù)在傳輸過程中的完整性、發(fā)送者身份的真實性。
存儲模塊選擇的是IPFS[8]系統(tǒng),如圖1所示,它是一種可信文件存儲系統(tǒng),該存儲系統(tǒng)可與區(qū)塊鏈相結合應用,可用于存儲產品的產地信息、加工信息以及物流信息和銷售信息,因為IPFS系統(tǒng)內容是可尋址的,所以可以將溯源的完整信息存儲到系統(tǒng)中,而各階段的生產信息Mi和相關責任人的數(shù)字簽名Si將做哈希運算生成標簽值H(Mi,Si),在流程的最后一個階段完成對區(qū)塊鏈的存儲操作時銷售部門將對產品在各階段所生成的所有標簽值做哈希運算生成該產品的標簽HR=H(H(M1,S1),H(M2,S2)… )并將其存儲到區(qū)塊鏈中。若要判斷本地區(qū)塊數(shù)據(jù)是否被篡改,則可通過查詢本地某區(qū)塊所存儲數(shù)據(jù)的哈希值是否與區(qū)塊鏈中所存儲的哈希值一致來確定。
圖1 溯源信息記錄
3.1 區(qū)塊鏈模型。區(qū)塊鏈是一種分布式分類帳,其中多個交易由P2P網(wǎng)絡中的無信任節(jié)點維護。它側重于兩個主要問題。(1)如何記錄區(qū)塊鏈中的交易,即區(qū)塊鏈的結構。(2)如何構建區(qū)塊鏈,即共識機制。在混合區(qū)塊鏈中,信息記錄在交易中,并且多個交易存儲在塊中。
3.2 區(qū)塊鏈的結構。區(qū)塊鏈的主要挑戰(zhàn)是可擴展性問題[9]。區(qū)塊數(shù)隨時間線性增加。參與網(wǎng)絡的所有節(jié)點都需要維護區(qū)塊鏈的完整副本,這需要巨大的存儲空間。巨大的存儲要求也導致無休止的分類帳問題,即加入?yún)^(qū)塊鏈的新節(jié)點需要太多時間來下載和驗證區(qū)塊鏈。
為了克服可擴展性問題,本文采用混合區(qū)塊鏈結構。通常,區(qū)塊由兩部分組成:塊頭和塊體。身體的尺寸比頭部大得多。大多數(shù)區(qū)塊鏈(例如加密貨幣)需要集成塊,因為交易驗證依賴于先前塊中記錄的其他交易。在混合區(qū)塊鏈中,交易驗證獨立于其他交易。驗證交易時,節(jié)點不必頻繁查詢其他塊。因此,區(qū)塊鏈的塊不需要集成在混合區(qū)塊鏈中。區(qū)塊鏈網(wǎng)絡中的每個節(jié)點存儲所有塊頭,并且塊體以分布式方式存儲在網(wǎng)絡中。如圖2所示,僅集成了一些塊,其余塊都是塊頭。哪個節(jié)點存儲塊體將在下一小節(jié)中討論。
圖2
混合區(qū)塊鏈的塊結構根據(jù)比特幣的結構進行了重新設計[10]。如圖3所示,塊頭由三部分組成:Hash PrevBH,Timestamp和Merkle Root。Hash PrevBH是前一個塊頭的哈希值。它指向前一個塊頭,并確保前一個塊頭是防篡改的。時間戳是創(chuàng)建塊的時間。Merkle Root是Merkle樹的根[11],它被視為塊中所有交易的哈希值。Merkle樹使用交易的哈希值作為葉節(jié)點。對于Merkle樹,只有根節(jié)點和交易存儲在塊中。Merkle Root用于驗證交易的方法與比特幣使用的方法類似。所有交易 (Tx1,Tx2… )都存儲在塊體中。TNum是BTNum字節(jié)表示的交易數(shù)。
交易用于記錄經過驗證的信息。圖4顯示了交易的結構。Hash CurBH是當前塊頭的哈希值。根據(jù)哈希值,節(jié)點可以確定交易屬于哪個塊。該項目用于信息鏈。Public Key是信息的第一個信息提供者的公鑰PKpr。信息可以對應于多個信息提供者。由于交易不能存儲這些信息提供者的動態(tài)添加的公鑰,因此在交易中僅記錄第一公鑰。剩余的公鑰可以存儲在存儲模塊中。H(fn)和H(ec)可以唯一地識別證據(jù)。它們還用于防止證據(jù)篡改并跟蹤相應的源文件。交易將記錄證據(jù)的兩個時間戳,ST(提交時間戳)和VT(驗證時間戳)。ST是向混合區(qū)塊鏈提交證據(jù)的時間,VT是證實證據(jù)的時間。驗證結果通過IV(完整性驗證)和VV(有效性驗證)記錄。
圖3
圖4
同一文件的所有交易構成信息鏈。文件可能在不同時間遭受篡改,這可能導致多條信息。為了關聯(lián)這些單獨的信息,具有相同H fn()的交易可以根據(jù)提交順序中的名稱哈希存儲在一組節(jié)點中作為鏈。Hash CurBH可以找到對應于信息鏈中特定信息的塊。
混合區(qū)塊鏈結構可以顯著減少所需的存儲空間量,但網(wǎng)絡中沒有完整的節(jié)點。節(jié)點故障可能會破壞區(qū)塊鏈。為了解決這個問題,混合區(qū)塊鏈可以采用將存儲模塊視為完整節(jié)點,完整的溯源信息可以存儲在該模塊中。
3.3 共識機制。區(qū)塊鏈的共識機制選擇一個節(jié)點來創(chuàng)建和廣播區(qū)塊鏈的下一個區(qū)塊,并保證每個節(jié)點中存儲的區(qū)塊鏈是一致的。公共區(qū)塊鏈中的節(jié)點總是使用昂貴的采礦方法,以及諸如PoW[10]或PoS[12]之類的經濟激勵來達成共識。這些共識機制可以有效地防范惡意節(jié)點和失敗的節(jié)點。
與公有鏈不同,混合區(qū)塊鏈是聯(lián)盟鏈,并不關心經濟激勵。因此,每個節(jié)點都是塊挖掘器,并且不需要競爭創(chuàng)建下一個塊。同時,混合區(qū)塊鏈網(wǎng)絡受到控制,因此混合區(qū)塊鏈只需關注故障節(jié)點。
混合區(qū)塊鏈采用基于PBFT的共識機制[13]。大多數(shù)時候,RAFT[14]更適合私有鏈。由于混合區(qū)塊鏈使用的是聯(lián)盟鏈,所以PBFT適用于聯(lián)盟區(qū)塊鏈。
為了支持NPBFT,構建了基于名稱的拓撲結構。在拓撲結構中,每個節(jié)點都分配一個任意名稱。創(chuàng)建下一個塊的節(jié)點由節(jié)點名稱確定。由于每個節(jié)點存儲塊頭,所以當創(chuàng)建和廣播新塊i時,每個節(jié)點可以獲得塊頭H bi()的哈希值。因此,如果H nv()最接近H bi(),則選擇具有名稱哈希值H nv()的節(jié)點v以生成下一個塊i+1,即:
其中:V是區(qū)塊鏈網(wǎng)絡的節(jié)點集。由于每個新交易將在區(qū)塊鏈網(wǎng)絡中廣播,因此每個節(jié)點都存儲所有未處理的交易。當節(jié)點v發(fā)現(xiàn)它是下一個塊的生成器時,它會計算未處理的交易的數(shù)量。如果該數(shù)量達到閾值,則該節(jié)點生成包含未處理交易列表的新塊。根據(jù)PBFT,NPBFT分為三個步驟,如圖5(a) 所示。首先(預備過程),當節(jié)點v生成新塊時,塊(B)被廣播到其他節(jié)點。其次(準備過程),當每個節(jié)點收到塊時,它通過比較塊中的Merkle Root和根據(jù)它存儲的交易生成的節(jié)點的Merkle Root來驗證塊中的所有交易。如果兩個值相等,則計算塊頭的哈希值并將其廣播到其他節(jié)點。同時,每個節(jié)點可以從其他節(jié)點接收塊頭的哈希值。最后(提交過程),假設節(jié)點號是n并且f=(n-1)/3。對于節(jié)點,如果有2個f+1個接收的哈希值等于節(jié)點計算的哈希值,則節(jié)點廣播提交消息。同時,如果節(jié)點從其他節(jié)點接收到2f+1個提交消息,則該塊存儲在區(qū)塊鏈中。
圖5
為了增強區(qū)塊鏈的穩(wěn)健性,將節(jié)點劃分為多個組,并且組中的所有節(jié)點都存儲相同的塊體。根據(jù)散列節(jié)點名稱,具有相同的前k位的節(jié)點在同一組中。設n表示網(wǎng)絡的大小,k=「log(n)?-h,其中2h是組的大小。前k位可以視為組ID。因此,如果組ID與塊體的HashBH的前k位相同,則塊體存儲在組中。
由于混合區(qū)塊鏈的結構,可以優(yōu)化NPBFT。由于網(wǎng)絡環(huán)境是安全的,并且大多數(shù)節(jié)點可能只需要存儲塊頭,因此不需要所有節(jié)點都參與塊驗證。如圖5(b)所示,選擇一組節(jié)點(可以調整節(jié)點數(shù))來驗證該塊并發(fā)送一個完整的塊。其余節(jié)點被發(fā)送塊頭。在準備過程中,這些選擇的節(jié)點驗證塊并將驗證結果(散列塊頭)廣播到其他節(jié)點。然后將驗證結果與每個節(jié)點接收的塊頭的哈希值進行比較。如果一個節(jié)點從多個所選節(jié)點接收結果并且正確比較結果數(shù)量大于總結果數(shù)量的一半,則節(jié)點廣播提交消息。該過程的其余部分與NPBFT相同。優(yōu)化的NPBFT不僅降低了通信開銷,還通過動態(tài)調整所選節(jié)點的數(shù)量來提供不同級別的安全性。
由于區(qū)塊鏈網(wǎng)絡的大小遠小于命名空間的大小,因此每個節(jié)點生成的塊編號的分布以及每個節(jié)點存儲的塊體的數(shù)量可能是不平衡的。為了解決這個問題,在P2P網(wǎng)絡中總是用于負載均衡的虛擬節(jié)點[15]也可以應用于混合區(qū)塊鏈。在混合區(qū)塊鏈中,為每個節(jié)點分配k個名稱,每個名稱都參與區(qū)塊鏈的創(chuàng)建和存儲過程。因此,k-1名稱可以被視為k-1個虛擬節(jié)點。
由于傳統(tǒng)溯源系統(tǒng)有著效率低下、信息存儲量小以及開銷較高等問題,故本文設計了一個基于混合區(qū)塊鏈的產品溯源系統(tǒng),如圖6所示,采用IPFS系統(tǒng)存儲完整的溯源信息,并在區(qū)塊鏈中存儲各階段所生成的所有標簽值做哈希運算生成該產品的標簽HR。消費者和相關監(jiān)管部門可在區(qū)塊鏈中依據(jù)標簽HR找到相對應的存儲在IPFS系統(tǒng)中的完整的溯源信息。
本文主要對于基于區(qū)塊鏈的產品溯源系統(tǒng)進行研究,提出了一種混合區(qū)塊鏈結構,該結構分為存儲模塊和區(qū)塊鏈模塊,本文將重新設計的可擴展區(qū)塊鏈與現(xiàn)有模塊相結合,相對于傳統(tǒng)的溯源系統(tǒng)有很大改進,解決了容量小、效率低和開銷高等問題,并且在質量出現(xiàn)問題時可快速定位到相關責任人。雖然區(qū)塊鏈技術在產品溯源領域中有著巨大潛力,但目前仍存在許多困難和挑戰(zhàn)有待進一步研究。
圖6 溯源系統(tǒng)