張曉蝶,黃鄭正,趙金輝,鄒 惠
(河北地質大學 a.信息工程學院;b.網絡信息安全實驗室,石家莊 050031)
近年來,食品質量安全問題頻繁出現,從瘦肉精、禽流感、鎘大米事件到今年攜帶新冠病毒的海鮮等食品安全事件,已經嚴重影響了消費者對食品質量安全的信賴度。因此,人們對農產品供應鏈的溯源需求與日俱增,但由于傳統的農產品供應鏈中各環節數據信息零散,安全性低,信息交互有限,容易造成信息孤島且存在隨時被篡改的風險,當出現產品質量安全問題時,很難快速找出問題的源頭。因此,研究并建立農產品的溯源體系,實現從生產到消費全過程的有效監管,已經成為各國普遍關注的熱點問題[1-2]。
傳統的農產品溯源系統大多利用物聯網、大數據等技術增加數據采集量以達到溯源目的,但在溯源數據的安全性、存儲管理及供應鏈上的交易等方面卻很少實現。而區塊鏈技術的去中心化、不可篡改、可追溯等特性[3]可以很好地解決傳統溯源系統中多環節間的信任問題,建立可靠的互信機制[4]。高陽陽等[5]采用多方驗證參與的方式,基于區塊鏈技術解決了農產品溯源數據信任感低的問題;柳祺祺等[6]結合區塊鏈與農產品溯源各自特點,對系統核心節點及系統協作溯源流程等方面進行設計,構建了基于Fabric的農產品溯源系統。區塊鏈技術為農產品溯源提供了許多技術支持[7-8],但于立娜等[9]研究發現區塊鏈技術在數據存儲方面存在存儲壓力大、存儲空間不足的問題[10-12];Tian等[13-16]也發現了農產品溯源查詢效率不高,會對農產品供應鏈上溯源數據的查詢有所限制的問題;祝烈煌等[17]發現在現有食品溯源體系中存在數據信息不安全、中心化嚴重、存儲不安全、數據易受攻擊等問題。
針對上述問題,本文采用基于復雜網絡的存儲結構,采用“區塊鏈+數據庫”的雙模存儲方式,提出了基于區塊鏈的農產品溯源數據的多鏈式存儲保護模型,在讓供應鏈中各環節的多家廠商或企業間更好進行數據交互的同時,不僅節省了區塊鏈的存儲空間,還保證溯源數據安全存儲。其次,根據需求設計了智能合約,保證農產品供應鏈中各環節的正常交易。最后,基于以太坊平臺開發了溯源系統,并與現有基于區塊鏈技術實現的農產品溯源系統作了對比分析。
區塊鏈是一種通過使用密碼學技術把區塊進行有序串聯存儲的分布式數據庫,具有去中心化、集體維護、不可篡改、可追溯、公開透明的特征[18],是當前信息安全領域內非常前沿的技術。鏈中的每個區塊都由區塊頭和區塊體組成,區塊頭包含前一區塊的hash值、版本號、時間戳、隨機數、Merkle樹根和難度目標[19]。區塊體中存儲的是各個交易信息的交易記錄,然后通過Merkle樹的根節點校驗區塊中的數據判斷是否被篡改或者攻擊。區塊鏈的數據結構如圖1所示。

圖1 區塊鏈數據結構框圖
哈希函數是一種散列函數,該算法可以把任意長度的數據信息變成一個固定長度的字符串輸出,這一特征使得它可以較好地滿足區塊鏈技術可驗證和不能篡改的安全性需求[20]。哈希函數是單向加密算法,因此很難對其進行逆向計算,如h=f(x)中已知數據信息x可以通過哈希函數得到相應的哈希值h,但若已知哈希值h那么很難反過來獲取數據信息x,并且哈希計算非常敏感,即使輸入的數據信息發生微小的改變,那產生的相應的哈希值也會有很大的區別。除此之外,哈希算法還具有強抗碰撞性,很難有不同的數據信息經過哈希計算之后得到同樣的哈希值,這能在很大程度上保證數據的安全和不可篡改性。因此,可采用哈希算法對溯源數據進行哈希計算,得到安全可靠的數據摘要信息。
把區塊鏈按照不同應用場景下的信任程度及去中心化的程度劃分,可分為許可鏈和非許可鏈[21]。許可鏈包含聯盟鏈和私有鏈,非許可鏈又被稱為公有鏈,這3類區塊鏈之間的特征如表1所示。在農產品供應鏈溯源系統中,從生產到銷售的各環節之間既相互獨立又相互關聯,適合采用聯盟鏈的方式。

表1 區塊鏈的分類及各類型特征
多鏈是超級賬本1.0提出的新功能,不同于單鏈中所有節點都屬于同一條鏈,所有節點都同步所有數據,而是將系統中各節點分成多條鏈,每條鏈由不同節點組成,相同鏈上節點維護相同數據,不同鏈上的節點維護不同的數據,且系統中的節點能根據需求加入不同鏈并同步相關鏈上的數據,這樣不僅能對不同鏈上的數據進行有效的隔離,還能降低數據處理的壓力,節省區塊鏈的存儲空間。在多鏈存儲結構中,若某節點屬于2個不同的鏈,且同步兩條鏈上的所有數據叫跨鏈節點;若不屬于同一條鏈上的節點間發生通信叫跨鏈通信。
為了有效地整理農產品供應鏈中從生產到銷售中各個環節數據信息,實現農產品供應鏈中數據信息溯源,本文采用了“區塊鏈+數據庫”的雙模存儲方式,構建了如圖2所示的基于區塊鏈技術的農產品供應鏈存儲溯源系統架構。

圖2 農產品供應鏈系統架構框圖
該系統架構主要分為存儲層、服務層、接口層、應用層和用戶層這5層,其中存儲層包括鏈上存儲和鏈下存儲,把供應鏈數據進行哈希計算得到數據摘要信息存入區塊鏈中,把其他業務數據存儲備份至數據庫中。服務層主要是利用智能合約自動化執行和查詢用戶層產生的數據,對供應鏈中的農產品數據信息進行分類,用非對稱加密算法中的數字簽名技術驗證農產品數據信息的不可篡改,調用應用程序接口把相應的數據分別傳入數據庫和區塊鏈中。接口層是為了保證農產品供應鏈中各生產運輸環節和區塊鏈網絡進行良好的數據交互。應用層是采用B/S結構的Web前端界面,便于用戶查詢溯源信息。用戶層是根據農產品供應鏈上各環節不同職權分為生產商、加工管理方、倉儲管理方、物流管理方、銷售商、監管方和消費者。
農產品供應鏈溯源過程涉及面廣、種類多源異構、供應鏈長,從生產到銷售各環節都包含大量的數據信息,若把所有的數據信息都上傳到區塊鏈中,這不僅會對區塊鏈存儲空間造成很大的壓力,還會降低數據存儲查詢的效率,付出很高的成本代價。因此,本文采用“區塊鏈+數據庫”的雙模存儲方式存儲溯源數據。把農產品供應鏈中的溯源數據經過哈希計算得到的哈希值,通過數字簽名技術進行安全性驗證后存入區塊鏈以減少農產品供應鏈溯源數據的存儲空間,數據上鏈后把區塊鏈中的區塊信息,如各環節區塊的哈希地址及各環節間農產品的交易信息等,存至本地數據庫中形成映射關系,溯源查詢時可通過查詢本地數據庫中的區塊地址快速定位到區塊鏈中各區塊的區塊信息,在保證數據安全可靠的同時,提高農產品供應鏈溯源查詢的效率。
供應鏈中從生產到銷售的各個環節都可能存在多個廠商或企業,這也意味著在很大程度上可能會出現一家廠商與多家企業合作的現象。本文基于復雜網絡的存儲結構,研究并提出了一種基于區塊鏈的農產品供應鏈溯源數據多鏈式存儲保護模型,在保證各環節數據安全高效存儲的前提下,節省區塊鏈的存儲空間,讓各環節不同的廠商或企業間能夠更好地進行數據交互,以便使消費者能夠獲取更準確完整的溯源信息。該農產品供應鏈溯源存儲模型如圖3所示。

圖3 農產品供應鏈多鏈式溯源存儲模型框圖
農產品供應鏈中包含生產、加工、倉儲、物流運輸及銷售這5個環節的數據信息。由于數據種類多且復雜,不同廠商或企業之間數據格式存在差異,本模型采用智能合約對各個環節的數據進行處理。智能合約在執行的過程中,如果我們輸入的數據信息能夠滿足要求,就可以按照既定的規則執行。為了保證各環節數據信息的安全性,將各環節數據在上鏈之前進行哈希計算,得到數據摘要信息,并采用數字簽名技術對其進行驗證:先用私鑰把數據摘要信息進行加密,把加密后的簽名數據摘要信息上傳至本地數據庫;數據庫再通過接收到的公鑰對其進行解密;最后把解密后的數據摘要信息與進行哈希計算后得到的數據摘要信息進行對比。如果相同,則證明數據沒有受到攻擊或破壞;如果不同,則證明數據信息被篡改或者遭到攻擊破壞。完成摘要數據信息的安全性驗證之后,通過共識算法讓信息上鏈,生成和更新區塊數據[22-26],保證系統的安全穩定及順利運行。最后,把農產品供應鏈上所在的區塊信息上傳至數據庫進行存儲和備份。
在區塊鏈網絡中,一條鏈可生成多個區塊,一個區塊可以包含多個賬戶,如上述農產品供應鏈溯源存儲模型中,生產商區塊中包含3家生產商:A1、A2、A3;加工商區塊中包含2家加工廠:B1、B2;倉儲商區塊中包含2家倉庫存放地:C1、C2;物流運輸商區塊中包含3家物流公司:D1、D2、D3;銷售商區塊中包含3家銷售企業:E1、E2、E3。由于農產品供應鏈中產品種類多且繁雜,不同的農產品所使用的加工方式不同,也可能存在一家加工商與多家生產商合作的現象,且不同的農產品選擇的倉儲方式、物流運輸公司及銷售點也會有所差異。因此,本文基于復雜網絡的方法,構建了基于區塊鏈的農產品供應鏈多鏈式溯源存儲模型,根據各環節用戶信息交互的情況決定鏈的多少,每個節點可屬于不同鏈并且同步相關鏈上的所有數據,能更加詳細地展示各環節的不同廠商或企業間合作的過程,多種組合方式用AiBjCkDmEn表示,其中0≤i≤3,0≤j≤2,0≤k≤2,0≤m≤3,0≤n≤3。這不僅讓供應鏈中各環節的多家廠商或企業間能更好地進行數據交互,以便消費者獲取更完整的溯源信息,還保證了溯源數據信息的安全存儲,節省了區塊鏈存儲空間。
智能合約的概念于1994年由Nick Szabo 提出[27-28],是一種以數字信息化形式傳播、驗證及自動執行合約的一種計算機協議[29]。由于它具有不可篡改和不可逆的特點,所以當約定了一個智能合約之后,并不能對它進行隨意修改。智能合約的自動執行是區塊鏈技術去中心化的體現,它不僅具有較高的安全性,還能提高執行的效率,在很大程度上提高了交易準確性、降低了交易成本。
農產品供應鏈中各環節數據信息的自動執行及驗證有賴于智能合約,供應鏈中各環節的賬戶間的交互會形成相應的區塊交易,例如在農產品供應鏈中生產商和供應商之間的交易就是智能合約功能的重要體現,若生產商和供應商間的交易觸發了智能合約的交易狀態,該節點間的區塊交易達成共識后會更新到區塊鏈中。本文設計的智能合約以生產商和供應商之間的交易為例,生產商的結構體包含生產受益人錢包地址、售出農產品總額、供應商數等信息,生產商和供應商的結構體如表2、3所示總個數及農產品種類、產地等信息。供應商結構體包含供應商地址、供應產品總額。

表2 生產商結構體

表3 供應商結構體
生產商和供應商在交易過程中,供應商需要提供自己的賬戶地址,生產商會提供受益人的錢包地址,當供應商發出請求后需要收到生產商的響應才能產生交易。雙方交易完成后,需要通過判斷生產商受益人的金額收益與原應售出的總額是否一致來驗證收益是否達標,確定交易是否成功。在農產品供應鏈中也可以通過編寫其他的合約標準,通過觸發預制的條件,保證其他各環節之間的正常交易。通過此交易過程可以有效地保證農產品供應鏈中各方交易的安全性和可靠性。
農產品供應鏈中種植生產、加工、倉儲、物流運輸及銷售各個環節簽署的合約在合約內容及預制執行條件達到一致時,方可在區塊鏈上部署該智能合約。本文采用基于以太坊的智能合約開發語言Solidity進行合約編寫,使用geth1.8.3-stable版本的區塊鏈客戶端軟件進行區塊地址的連接,采用Ethereum-Wallet-win32-0-8-1版本以太坊錢包對智能合約進行部署。智能合約的部分代碼如下:
contract CrowdSupplier {
//供應商和生產商結構體部分智能合約代碼:
struct Supplier {
address addr;
uint amount;
…
uint storeAmout;
mapping (uint=> storeImformation) storeImformations;
mapping (uint => logisticsCompany) logisticsCompany;
…}
struct Famer {
address beneficiary;
uint SellingAgriculturalProductsGoal;
uint numSupplier;
…
uint date;
mapping (uint => Supplier) suppliers;
mapping (uint => Category) categorys;
…}
//生產商和供應商交易過程的部分智能合約代碼:
uint numFamers;
mapping (uint => Famer) famers;
function newFamer(address beneficiary,uint goal) public returns (uint famerID) {
famerID=numFamers++;
famers[famerID]= Famer(beneficiary,goal,0,0);
}
function contribute(uint campaignID) public payable {
Famer storage c=famers[famerID];
c.suppliers[c.numSuppliers++]= Supplier({addr:msg.sender,amount:msg.value});
…
c.beneficiary.transfer(msg.value);
}
function checkGoalReached(uint famerID) public returns (bool reached) {
Famer storage c=famers[famerID];
if (c.amount < c.supplierGoal)
return false;
return true; }
}
首先對生產商和供應商的結構體進行定義,然后驗證兩者間的交易過程是否達標,最后通過以太坊錢包對智能合約進行部署,部署成功的智能合約狀態如圖4所示,該智能合約的地址為:0xB23D95a

圖4 智能合約成功部署狀態圖
b904eca3bAA0D1907865ADB974604c943。
該系統是結合MySQL數據庫、區塊鏈等,用HTML、JavaScript、CSS等語言構建,基于B/S結構瀏覽使用。傳統的農產品供應鏈溯源系統需要很多的勞動力維護,溯源難度大且沒有安全保障,基于區塊鏈的農產品供應鏈在部署和使用智能合約后就可實現產品的追溯。通過輸入購買的農產品溯源碼進行溯源查詢,可查詢出該農產品的生產、倉儲、加工、物流及銷售各方面的信息,如圖5所示。

圖5 農產品供應鏈信息溯源界面
傳統的農產品溯源系統具有數據信息中心化、易被篡改、安全性低的特點,在很大程度上限制了消費者的信息查詢和監管方的管理;基于區塊鏈的農產品供應鏈溯源系統具有數據信息安全可靠,由多環節參與人員共同維護,追溯查詢方便高效的特點。本文設計的基于區塊鏈技術的農產品溯源查詢系統與現有的基于區塊鏈技術實現的農產品溯源系統[5,30-31]的效果如表4所示,唯有本系統在數據完整性、可追溯性、安全性、存儲保護、監管能力、交易可靠性和供應鏈各環節的交互性都達到要求,其他現有的基于區塊鏈技術實現的農產品溯源系統都或多或少存在缺陷,本系統尤其在存儲保護、監管能力、交易可靠性及供應鏈各環節交互性的方面凸顯出優勢。通過對比可知,本系統相對于其他基于區塊鏈的溯源系統監管力度更強,交易更可靠,供應鏈各環節的節點間數據交互性更好。

表4 農產品溯源系統性能
1) 基于區塊鏈技術構建了農產品供應鏈溯源數據的多鏈式存儲保護模型,不僅可以保證數據的安全性,還有利于各商家或廠商之間進行數據交互。
2) 采用區塊鏈、數據庫相結合的雙模存儲方式,在讓供應鏈中各環節的多家廠商或企業間能夠更好地進行數據交互,消費者在獲取更完整溯源信息的同時,還保證了溯源數據信息的安全存儲,節省了區塊鏈存儲空間,增加了消費者信任度。
3) 在該農產品供應鏈溯源系統設計上,按需求編寫并部署了智能合約,保證了各交易方數據信息的安全可信,并根據溯源碼對農產品進行溯源查詢,驗證了該設計的可行性。
4) 本系統在存儲保護、監管力度、交易可靠性及供應鏈各環節間的交互性等方面有很大的優勢。區塊鏈在用于農產品供應鏈的升級和發展過程中,將面對更多的問題和挑戰,在其他應用領域也存在更大的發展前景。