陳 飛,葉春明 CHEN Fei,YE Chunming
(上海理工大學 管理學院,上海 200093)
在全球商品流動日益增加的時代,產品安全和質量保證變得越來越困難。隨著近年來產品質量頻繁出現問題,產品的安全性引起了社會大眾和政府的極大關注,產品的可追溯性對零售商、經銷商和國家監管機構來說是非常具有挑戰性的[1-2]。此外,它還涉及對產品真實性的驗證,例如對原產地、品種或種植信息的正確申報。這些質量參數證明了較高的價格是合理的,因此,它們往往是產品偽造者的關注焦點。而其中一些質量可以用客觀的分析方法加以監測,但并非全部。為了確保產品貿易網絡的可追溯性,區塊鏈具有極大的潛力[3],因為數據可以以不可更改的方式存儲,并支持跨所有流程步驟的快速跟蹤,因此利益相關者以及商品或半成品可以更快地追蹤定位[4-6]。
本文將介紹區塊鏈的相關技術和介紹本系統中所用的存儲模塊以及對區塊鏈模塊進行一個重新設計,利用兩模塊設計一個基于混合區塊鏈的溯源系統。
(1)公有鏈:顧名思義,公開的區塊鏈,所有人都可參與其中作為網絡中的一個節點,公有鏈實現了完全去中心化,各個節點均可自由加入和退出網絡,并參加鏈上數據的讀寫。
(2)聯盟鏈:由多個機構共同參與管理的區塊鏈,其數據只允許系統內不同的機構進行讀寫和發送,各個節點對應各個實體機構組織,只有通過授權后方能加入或退出網絡。
(3)私有鏈:也叫做專有鏈,是一種不公開的“鏈”,一般情況下,需要授權才能夠加入節點,并且私有鏈中的各個節點的寫入權限都被嚴格控制,且相關權限可有選擇性地對外開放。
(1)Merkle樹:也叫默克爾樹,是一類基于哈希值的二叉樹或多叉樹,其葉子節點上的值通常為數據塊的哈希值,而非葉子節點上的值,是將該節點的所有子節點的組合結果的哈希值。
(2)共識算法:袁勇[7]等提出共識算法包括POW(工作量證明)、POS(權益證明)、DPOS(股權權益證明)、PBFT(實用拜占庭容錯算法)等,是在相關機制或特定協議的基礎上建立、切換靈活的算法。
(3)數字簽名:區塊鏈比特幣中利用數字簽名來保證數據在整個系統中不可篡改,并保證交易雙方的身份真實可靠。數字簽名使用了非對稱加密技術和數字摘要技術,保證了數據在傳輸過程中的完整性、發送者身份的真實性。
存儲模塊選擇的是IPFS[8]系統,如圖1所示,它是一種可信文件存儲系統,該存儲系統可與區塊鏈相結合應用,可用于存儲產品的產地信息、加工信息以及物流信息和銷售信息,因為IPFS系統內容是可尋址的,所以可以將溯源的完整信息存儲到系統中,而各階段的生產信息Mi和相關責任人的數字簽名Si將做哈希運算生成標簽值H(Mi,Si),在流程的最后一個階段完成對區塊鏈的存儲操作時銷售部門將對產品在各階段所生成的所有標簽值做哈希運算生成該產品的標簽HR=H(H(M1,S1),H(M2,S2)… )并將其存儲到區塊鏈中。若要判斷本地區塊數據是否被篡改,則可通過查詢本地某區塊所存儲數據的哈希值是否與區塊鏈中所存儲的哈希值一致來確定。

圖1 溯源信息記錄
3.1 區塊鏈模型。區塊鏈是一種分布式分類帳,其中多個交易由P2P網絡中的無信任節點維護。它側重于兩個主要問題。(1)如何記錄區塊鏈中的交易,即區塊鏈的結構。(2)如何構建區塊鏈,即共識機制。在混合區塊鏈中,信息記錄在交易中,并且多個交易存儲在塊中。
3.2 區塊鏈的結構。區塊鏈的主要挑戰是可擴展性問題[9]。區塊數隨時間線性增加。參與網絡的所有節點都需要維護區塊鏈的完整副本,這需要巨大的存儲空間。巨大的存儲要求也導致無休止的分類帳問題,即加入區塊鏈的新節點需要太多時間來下載和驗證區塊鏈。
為了克服可擴展性問題,本文采用混合區塊鏈結構。通常,區塊由兩部分組成:塊頭和塊體。身體的尺寸比頭部大得多。大多數區塊鏈(例如加密貨幣)需要集成塊,因為交易驗證依賴于先前塊中記錄的其他交易。在混合區塊鏈中,交易驗證獨立于其他交易。驗證交易時,節點不必頻繁查詢其他塊。因此,區塊鏈的塊不需要集成在混合區塊鏈中。區塊鏈網絡中的每個節點存儲所有塊頭,并且塊體以分布式方式存儲在網絡中。如圖2所示,僅集成了一些塊,其余塊都是塊頭。哪個節點存儲塊體將在下一小節中討論。

圖2
混合區塊鏈的塊結構根據比特幣的結構進行了重新設計[10]。如圖3所示,塊頭由三部分組成:Hash PrevBH,Timestamp和Merkle Root。Hash PrevBH是前一個塊頭的哈希值。它指向前一個塊頭,并確保前一個塊頭是防篡改的。時間戳是創建塊的時間。Merkle Root是Merkle樹的根[11],它被視為塊中所有交易的哈希值。Merkle樹使用交易的哈希值作為葉節點。對于Merkle樹,只有根節點和交易存儲在塊中。Merkle Root用于驗證交易的方法與比特幣使用的方法類似。所有交易 (Tx1,Tx2… )都存儲在塊體中。TNum是BTNum字節表示的交易數。
交易用于記錄經過驗證的信息。圖4顯示了交易的結構。Hash CurBH是當前塊頭的哈希值。根據哈希值,節點可以確定交易屬于哪個塊。該項目用于信息鏈。Public Key是信息的第一個信息提供者的公鑰PKpr。信息可以對應于多個信息提供者。由于交易不能存儲這些信息提供者的動態添加的公鑰,因此在交易中僅記錄第一公鑰。剩余的公鑰可以存儲在存儲模塊中。H(fn)和H(ec)可以唯一地識別證據。它們還用于防止證據篡改并跟蹤相應的源文件。交易將記錄證據的兩個時間戳,ST(提交時間戳)和VT(驗證時間戳)。ST是向混合區塊鏈提交證據的時間,VT是證實證據的時間。驗證結果通過IV(完整性驗證)和VV(有效性驗證)記錄。

圖3

圖4
同一文件的所有交易構成信息鏈。文件可能在不同時間遭受篡改,這可能導致多條信息。為了關聯這些單獨的信息,具有相同H fn()的交易可以根據提交順序中的名稱哈希存儲在一組節點中作為鏈。Hash CurBH可以找到對應于信息鏈中特定信息的塊。
混合區塊鏈結構可以顯著減少所需的存儲空間量,但網絡中沒有完整的節點。節點故障可能會破壞區塊鏈。為了解決這個問題,混合區塊鏈可以采用將存儲模塊視為完整節點,完整的溯源信息可以存儲在該模塊中。
3.3 共識機制。區塊鏈的共識機制選擇一個節點來創建和廣播區塊鏈的下一個區塊,并保證每個節點中存儲的區塊鏈是一致的。公共區塊鏈中的節點總是使用昂貴的采礦方法,以及諸如PoW[10]或PoS[12]之類的經濟激勵來達成共識。這些共識機制可以有效地防范惡意節點和失敗的節點。
與公有鏈不同,混合區塊鏈是聯盟鏈,并不關心經濟激勵。因此,每個節點都是塊挖掘器,并且不需要競爭創建下一個塊。同時,混合區塊鏈網絡受到控制,因此混合區塊鏈只需關注故障節點。
混合區塊鏈采用基于PBFT的共識機制[13]。大多數時候,RAFT[14]更適合私有鏈。由于混合區塊鏈使用的是聯盟鏈,所以PBFT適用于聯盟區塊鏈。
為了支持NPBFT,構建了基于名稱的拓撲結構。在拓撲結構中,每個節點都分配一個任意名稱。創建下一個塊的節點由節點名稱確定。由于每個節點存儲塊頭,所以當創建和廣播新塊i時,每個節點可以獲得塊頭H bi()的哈希值。因此,如果H nv()最接近H bi(),則選擇具有名稱哈希值H nv()的節點v以生成下一個塊i+1,即:

其中:V是區塊鏈網絡的節點集。由于每個新交易將在區塊鏈網絡中廣播,因此每個節點都存儲所有未處理的交易。當節點v發現它是下一個塊的生成器時,它會計算未處理的交易的數量。如果該數量達到閾值,則該節點生成包含未處理交易列表的新塊。根據PBFT,NPBFT分為三個步驟,如圖5(a) 所示。首先(預備過程),當節點v生成新塊時,塊(B)被廣播到其他節點。其次(準備過程),當每個節點收到塊時,它通過比較塊中的Merkle Root和根據它存儲的交易生成的節點的Merkle Root來驗證塊中的所有交易。如果兩個值相等,則計算塊頭的哈希值并將其廣播到其他節點。同時,每個節點可以從其他節點接收塊頭的哈希值。最后(提交過程),假設節點號是n并且f=(n-1)/3。對于節點,如果有2個f+1個接收的哈希值等于節點計算的哈希值,則節點廣播提交消息。同時,如果節點從其他節點接收到2f+1個提交消息,則該塊存儲在區塊鏈中。

圖5
為了增強區塊鏈的穩健性,將節點劃分為多個組,并且組中的所有節點都存儲相同的塊體。根據散列節點名稱,具有相同的前k位的節點在同一組中。設n表示網絡的大小,k=「log(n)?-h,其中2h是組的大小。前k位可以視為組ID。因此,如果組ID與塊體的HashBH的前k位相同,則塊體存儲在組中。
由于混合區塊鏈的結構,可以優化NPBFT。由于網絡環境是安全的,并且大多數節點可能只需要存儲塊頭,因此不需要所有節點都參與塊驗證。如圖5(b)所示,選擇一組節點(可以調整節點數)來驗證該塊并發送一個完整的塊。其余節點被發送塊頭。在準備過程中,這些選擇的節點驗證塊并將驗證結果(散列塊頭)廣播到其他節點。然后將驗證結果與每個節點接收的塊頭的哈希值進行比較。如果一個節點從多個所選節點接收結果并且正確比較結果數量大于總結果數量的一半,則節點廣播提交消息。該過程的其余部分與NPBFT相同。優化的NPBFT不僅降低了通信開銷,還通過動態調整所選節點的數量來提供不同級別的安全性。
由于區塊鏈網絡的大小遠小于命名空間的大小,因此每個節點生成的塊編號的分布以及每個節點存儲的塊體的數量可能是不平衡的。為了解決這個問題,在P2P網絡中總是用于負載均衡的虛擬節點[15]也可以應用于混合區塊鏈。在混合區塊鏈中,為每個節點分配k個名稱,每個名稱都參與區塊鏈的創建和存儲過程。因此,k-1名稱可以被視為k-1個虛擬節點。
由于傳統溯源系統有著效率低下、信息存儲量小以及開銷較高等問題,故本文設計了一個基于混合區塊鏈的產品溯源系統,如圖6所示,采用IPFS系統存儲完整的溯源信息,并在區塊鏈中存儲各階段所生成的所有標簽值做哈希運算生成該產品的標簽HR。消費者和相關監管部門可在區塊鏈中依據標簽HR找到相對應的存儲在IPFS系統中的完整的溯源信息。
本文主要對于基于區塊鏈的產品溯源系統進行研究,提出了一種混合區塊鏈結構,該結構分為存儲模塊和區塊鏈模塊,本文將重新設計的可擴展區塊鏈與現有模塊相結合,相對于傳統的溯源系統有很大改進,解決了容量小、效率低和開銷高等問題,并且在質量出現問題時可快速定位到相關責任人。雖然區塊鏈技術在產品溯源領域中有著巨大潛力,但目前仍存在許多困難和挑戰有待進一步研究。

圖6 溯源系統