孫傳恒 于華竟 羅 娜 徐大明 邢 斌 楊信廷
(1.上海海洋大學信息學院, 上海 201306; 2.國家農業信息化工程技術研究中心, 北京 100097;3.農產品質量安全追溯技術及應用國家工程實驗室, 北京 100097)
傳統果蔬產品追溯通過企業中心化數據庫存儲溯源信息,在海量數據基礎上數據易被篡改、企業間流通困難、監管即時性差、遍歷查詢效率低[1]。區塊鏈集成點對點分布式網絡、默克爾樹數據結構、加密鏈式區塊、智能合約自動化觸發機制[2-3],保證追溯數據一經共識驗證上鏈完成就無法篡改,適用于保障果蔬產品溯源過程追溯數據的安全可靠[4]。
我國果蔬農產品全產業鏈追溯鏈條長、周期長、數據海量異構[5-6],區塊鏈基于鏈式區塊存儲追溯數據,通過全網節點共識備份數據賬本,造成區塊鏈網絡數據存儲壓力大[7]。在緩解鏈上存儲壓力方面,部分學者提出通過鏈上鏈下數據協同驗證減緩區塊鏈存儲壓力,文獻[8]設計基于區塊鏈的稻米供應鏈溯源監管模型,溯源數據通過鏈下MySQL中心數據庫存儲,鏈上存儲溯源數據密文,稻米追溯數據鏈上鏈下協同擴容并保證數據的真實性。文獻[9]綜合分析區塊鏈技術在稻米溯源中的應用場景,提出將溯源數據分類存證,公開溯源數據直接上鏈存儲,隱私數據存儲在企業鏈下數據庫,由哈希算法計算信息摘要上鏈,鏈上鏈下協同保證數據安全、未經篡改。文獻[10]深入考慮區塊鏈技術與農產品的綜合應用,提出一種數據鏈下存證、鏈上驗證的存儲模型,減輕區塊鏈溯源網絡的存儲壓力,保證數據的安全可靠。但是,鏈上鏈下協同架構通過存儲信息摘要的方式驗證數據真實性,無法保證鏈下數據的安全,在鏈下數據被篡改時僅能發現篡改,無法恢復原始溯源數據。部分學者通過多鏈架構擴充區塊鏈溯源總體容量,文獻[11]在水產品方面應用區塊鏈多鏈溯源系統,使用從鏈存儲企業追溯數據,將部分可公開數據上傳至主鏈用于溯源,通過主從多鏈的架構緩解溯源數據存儲壓力。文獻[12]設計并實現的基于區塊鏈多鏈架構的農產品溯源系統,通過鏈下中心化數據庫與鏈上多鏈協同緩解存儲壓力。以上研究深入分析多鏈架構在農產品溯源方面價值,并未進一步考慮鏈上數據的高效共享。我國果蔬產品全供應鏈追溯每個環節涉及多企業,溯源數據海量異構,因此,研究在多鏈架構擴充總體容量的基礎上減少單條數據存儲壓力,研究鏈上數據的分類存儲和隱私數據的無孤島共享具備重要的意義。
通過分析果蔬產品溯源流程,本文設計基于區塊鏈智能合約的溯源數據存儲機制,為每個追溯環節設計一條溯源鏈,每個環節中一或多個溯源企業作為節點,通過區塊鏈多鏈架構溯源,擴展區塊鏈溯源總體容量,解決果蔬農產品跨地域、跨時空的溯源數據存儲的真實可信,緩解區塊鏈網絡海量數據的存儲壓力。通過編寫智能合約,由全網節點背書安裝實例化完成后共同維護合約邏輯,實現數據上鏈時的自動分類以及隱私溯源數據的混合加密上鏈,通過密鑰授權憑證實現鏈間數據共享與監管部門的穿透式全溯源數據監管。
本文設計并實現的果蔬產品全供應鏈溯源系統,分析每個環節采集的溯源數據,并劃分為公開與隱私數據;通過智能合約實現對稱加密與橢圓曲線混合加密隱私數據密文上鏈,并通過密鑰授權實現鏈上密文解密共享;果蔬區塊鏈多鏈溯源系統存儲公開溯源明文數據與隱私數據密文數據,緩解單條溯源數據的存儲壓力;并通過果蔬應用案例進行分析驗證。
區塊鏈是在對等網絡環境下,通過透明和可信規則,構造不可篡改、不可偽造、數據正向記錄、逆向溯源的鏈式存儲結構,以密碼學的技術保證以及實現鏈上數據的真實可信,通過分布式網絡保證數據的安全備份[13-14]。根據網絡的準入機制,區塊鏈可劃分為:公有鏈、私有鏈、聯盟鏈[15]。公有鏈所有人均可參與,交易數據全部節點公開;私有鏈為個人或組織參與,交易數據私密存儲;聯盟鏈由全網節點審計準入參與,鏈上通過智能合約自動化執行聯盟成員制定的合約邏輯,通過節點授權實現網絡賬本的讀寫[16]。本文實現的果蔬產品溯源系統基于聯盟鏈Hyperledger Fabric,由通道技術建立多鏈追溯架構,保證溯源數據隔離存儲;由鏈上證書管理機構審計節點身份、節點交易授權;通過Kafka共識機制[17]實現多鏈間數據共識備份;通過鏈外狀態數據庫CouchDB存儲鏈上溯源記錄。
智能合約是一段運行在區塊鏈上的代碼,在觸發條件滿足時可自動執行的合約邏輯,以信息化的方式傳播、驗證節點行為。智能合約大幅減少人工參與程度,保證了區塊鏈的去中心化、數據的防篡改[18-19]。本文設計對稱加密算法(Advanced encryption standard,AES)與橢圓曲線加密算法 (Elliptic curve cryptography,ECC)混合加密智能合約,實現隱私溯源數據加密上鏈、基于密鑰授權解密查詢共享。
AES采用單密鑰的方式加密、解密,計算量小且加密效率高[20],在果蔬全供應鏈溯源中用于加密企業隱私溯源數據,實現密文上鏈。ECC通過離散對數問題保證逆向計算的難度[21],并通過離散點的運算實現加密,使用ECC公鑰加密AES密鑰,生成密文上鏈。通過下發ECC私鑰授權憑證的方式實現鏈上解密查詢。橢圓曲線Fp(a,b)為
y2=x3+ax+b(modp) (4a3+27b2≠0)
式中a、b——橢圓曲線參數p——質數
mod——取模運算函數
橢圓曲線加密、解密的算法如下:
(1)用戶M選定一條橢圓曲線Fp(a,b),并選取橢圓曲線上一點,作為基點G,其中n為橢圓曲線的階,即nG=∞。
(2)用戶M選擇一個隨機數作為私有密鑰k,并根據離散點計算原則生成公鑰K=kG。
(3)用戶M將橢圓Fp(a,b)和點G、K傳給用戶N。
(4)用戶N接到信息后,將待傳輸的明文編碼到Fp(a,b)上的一點A,并產生一個隨機整數r(r (5)用戶N通過橢圓曲線公鑰K加密(密文C是一個點對):C1=A+rK,C2=rG。 (6)用戶M接收到密文C后,通過私鑰k解密C1-kC2,計算A+rK-k(rG)=A,對點A解碼就可以得到明文。 本文基于聯盟鏈通道技術構建區塊鏈多鏈架構,實現數據隔離。面向果蔬生產、收購、倉儲、加工、分銷5個供應鏈環節,為每個環節建立一條溯源鏈,如圖1所示。每個環節內的一或多個追溯企業作為節點發起溯源數據上鏈請求,不同的企業處于不同的溯源通道中,以通道的天然隔離性實現溯源數據的隔離存儲。 圖1 果蔬產品區塊鏈溯源多鏈架構Fig.1 Blockchain multi-chain architecture for traceability of fruits and vegetables 從數據鏈內傳遞、鏈間傳遞、多鏈優勢方面分析果蔬區塊鏈溯源多鏈架構。溯源鏈內的同類多家企業節點共同備份溯源鏈數據賬本,包括可公開溯源數據與隱私溯源數據密文,通過智能合約與操作更新鏈上數據。鏈內公開溯源數據通過智能合約直接調用傳遞,隱私溯源數據密文在獲取數據所屬企業密鑰授權后,通過鏈上智能合約解密共享。溯源鏈間通過通道的天然隔離性保證數據獨立存儲,因此無法通過合約直接調用傳遞,本文為每條鏈封裝賬本操作接口,通過接口授權的方式限時提供鏈間數據傳遞。多鏈優勢集中體現在應用業務和時間維度上,從應用業務上看,生產、收購、倉儲、加工至分銷等每個環節涉及多企業,供應鏈上下游數據流轉在多類多個企業間無順序關系,因此設計面向溯源環節建立區塊鏈維護追溯數據;從時間長維度看,面向企業多年追溯數據存儲,通過企業多鏈架構由同一類型企業維護一至多年追溯數據。綜上所述,面向每個環節存在多企業、每個企業存在長時間維度追溯,本文建立果蔬產品多鏈追溯架構,每個環節獨立維護溯源鏈,以多鏈的形式擴增追溯系統數據容量、獨立存儲溯源數據,提供追溯鏈間數據授權共享機制,降低商業隱私數據泄露風險。 果蔬產品溯源涉及多環節,每個追溯環節通過溫濕度傳感器、光敏傳感器、北斗定位設備、氧氣濃度傳感器、攝像頭、照相機等物聯網設備實時采集產品生產、加工等數據。其中,并非所有數據可用于公開溯源,涉及商品成定價、存量等與質量無關的商業隱私數據,需在保證安全可靠的前提下通過區塊鏈實現數據的防篡改,并進一步實現隱私數據的上下游授權訪問以及監管部門的可管控。本文深入分析果蔬產品全供應鏈每環節的溯源數據,劃分為可公開溯源數據與隱私商業數據,如表1所示。 表1 果蔬產品溯源關鍵數據Tab.1 Traceability key information of fruits and vegetables 企業節點以Key-value鍵值對的形式提交溯源數據,通過創建數據庫鍵值索引代替遍歷查詢,減少數據查詢時間開銷。數據上鏈交易請求由企業節點構造交易背書提案,經過Kafka集群共識排序,生成新的區塊,返回當前上鏈請求的交易哈希值與區塊高度,詳細信息如表2所示。 表2 上鏈數據Tab.2 Key-value traceability data of blockchain 本文分析供應鏈各環節關鍵數據,設計基于區塊鏈的果蔬溯源數據存儲模型,如圖2所示。按照數據采集順序,溯源系統正向記錄從生產、收購、倉儲、加工到分銷等環節的數據。相應供應鏈節點提交數據上鏈請求時,通過智能合約將數據劃分為公開溯源數據與商用隱私數據。其中,公開溯源數據直接上鏈存證;隱私溯源數據通過節點提交的對稱加密算法AES密鑰加密后,密文上鏈,保證隱私數據的安全不可見。智能合約自動化為當前節點生成橢圓曲線ECC密鑰對,通過節點ECC公鑰加密AES密鑰,將密文上鏈。鏈上狀態數據庫CouchDB存儲公開溯源數據、隱私溯源數據密文、對稱加密AES密鑰密文3類數據,上鏈請求經過Kafka共識達成上鏈交易后,返回當前節點的ECC私鑰。在果蔬溯源過程產生的視頻、圖像以及音頻等溯源數據,通過分布式數據庫星際文件系統(Interplanetary file system,IPFS)存儲,將返回的哈希值跟隨公開溯源數據上傳區塊鏈網絡。 圖2 果蔬產品溯源存儲模型Fig.2 Traceability data storage model of fruits and vegetables 面向消費者逆向溯源,通過智能合約直接查詢鏈上數據賬本獲取公開溯源數據。鏈上隱私溯源數據的安全性通過對稱加密AES密鑰和橢圓曲線ECC密鑰保證,溯源上下游企業或監管部門獲取隱私數據,需要向數據提交節點發起授權申請,獲取節點下發的ECC私鑰授權憑證后,通過智能合約獲取鏈上隱私溯源數據密文、AES密鑰密文,通過溯源憑證ECC私鑰解密AES密鑰,基于AES密鑰解密溯源隱私數據密文獲取隱私數據明文,實現鏈上密文基于授權解密共享以及監管部門的全方面管控。 針對果蔬隱私數據加密上鏈,設計數據加密上鏈智能合約、數據鏈上解密查詢智能合約,通過追溯節點發起數據上鏈交易時自動觸發智能合約業務邏輯,實現數據加密的自動執行,保證全產業鏈追溯環節每個追溯企業追溯數據的安全可靠、可溯、可信。企業節點提交溯源數據上鏈請求,通過節點AES密鑰和智能合約自動化生成的ECC密鑰對混合加密溯源隱私數據,如圖3所示。 圖3 隱私溯源數據加密上鏈Fig.3 Private traceability data ciphertext written to blockchain 針對公開溯源數據消費者溯源需求、隱私溯源數據監管管控需求和上下游企業共享需求,本文設計數據加密智能合約、獲取公開數據合約、通過授權憑證解密查詢隱私溯源數據合約,具體的合約業務邏輯如表3所示。 表3 合約業務邏輯設計Tab.3 Design of smart contract function 本文通過智能合約實現溯源數據的加密上鏈、鏈間基于授權訪問隱私數據、鏈上共享公開溯源數據,數據加密上鏈算法如下。 算法1:隱私溯源數據加密上鏈智能合約算法 輸入:企業發起交易節點peer,合約名稱cc,通道名稱channel,公開溯源數據pubData,隱私溯源數據priData,AES密鑰key 輸出:隱私溯源數據密文、AES密鑰密文、ECC私鑰編碼 1. ∥處于channel內的節點peer發起合約cc的invoke上鏈請求 2. if(!isnull(key)) ∥判斷交易請求的AES密鑰是否為空 3. if(!getState(info.id))∥區塊賬本是否已經存在當前鍵值數據 4. ∥使用AES密鑰加密農產品溯源隱私數據 5. EncryTraceData := encryptAES(priData, key) 6. ∥智能合約自動化生成上鏈節點ECC密鑰對 7. prk, err := getKey() ∥溯源節點ECC私鑰 8. publicKey := &prk.PublicKey ∥溯源節點ECC公鑰 9. ∥通過溯源節點ECC公鑰加密AES密鑰 10. EccEncryAes :=ECCEncrypt(key, publicKey) 11. ∥封裝上鏈數據結構體 12. traceObj := &traceObj{id, pubData, EncryTraceData, EccEncryAes, eneccpubCode} 13. ∥執行上鏈操作 14. err = stub.PutState(id, marbleJSONasBytes) 15. if (err != nil) 16. return Error 17. return dataExistsError; 18. return keyError; 通過溯源數據加密上鏈智能合約,區塊賬本經過共識備份公開溯源數據與隱私數據密文,執行成功后,鏈上返回當前請求數據上鏈交易哈希值、區塊高度、數據哈希值等。 面向消費者、監管機構等提供公開數據透明訪問、隱私數據授權查詢,數據查詢算法如下。 算法2:公開與隱私溯源數據查詢算法 輸入:企業節點peer,合約名稱cc,通道名稱channel,溯源數據溯源碼code,授權憑證key 輸出:公開溯源返回公開溯源數據、授權查詢返回隱私溯源數據 1. ∥處于channel內的節點peer發起合約cc的query請求 2. ∥判斷query方法∥getPridata方法 3. if(function == getPubdata) 4. if(!getState(code)) ∥判斷溯源碼有效性 5. ∥查詢全部數據 6. traceinfo, err := stub.GetState(code) 7. ∥返回當前鍵值的公開溯源數據 8. pubTracedata := string(traceinfo.pubData) 9. return pubData 10. return codeError 11. else ∥ getPridata方法 12. if(!getState(id) && isnull(key)) ∥判斷溯源碼是否有效以及授權文件是否為空 13. ∥獲取隱私溯源數據密文 14. priTraceEncrydata := string(traceinfo.EncryTraceData) 15. ∥獲取AES密文 16. aesEncry := string(traceinfo.EccEncryAes) 17. ∥通過授權憑證解密AES密文 18. Aeskey, err := ECCDecrypt(aesEncry, key) 19. ∥通過AES密鑰解密隱私溯源數據密文 20. priTracedata := decryptAES(priTraceEncrydata, Aeskey) 21. return priData 22. return dataError; 其中,第1~10行表示通過溯源碼查詢鏈上公開溯源數據,第11~22行表示通過授權憑證解密查詢鏈上隱私溯源數據。 通過Ubuntu 14.04.4 Linux系統,基于Hyperledger Fabric v1.4.4 建立果蔬多鏈溯源網絡,存儲容量50 GB,運行內存16 GB,試驗數據來自于山東省淄博市魯中水果批發市場溯源平臺。區塊鏈采用Kafka共識,所有節點均部署外部狀態數據庫CouchDB,通過鍵值查詢代替遍歷查詢,提升數據查詢效率,具體配置如表4所示。 表4 區塊鏈配置Tab.4 Configuration of blockchain 本文設計的果蔬全供應鏈溯源數據存儲模型,采用對稱加密AES與橢圓曲線加密算法ECC混合加密,保證隱私溯源數據安全、AES密鑰安全,通過離散對數求解保證授權憑證的安全,在隱私數據上鏈環節產生的密文如表5所示。 表5 隱私溯源數據上鏈密文Tab.5 Private traceability data ciphertext 經擴散性測試,隱私溯源數據保持不變,改變AES密鑰任意一位,引起的隱私溯源數據密文變化如圖4a所示,密鑰改變引起的隱私溯源數據密文平均變化率達到95%以上,經過ECC公鑰加密AES密鑰的密文變化如圖4b所示,AES密鑰密文的平均變化率達到94%以上,具備較高的密文安全性與混淆性。 圖4 AES與ECC加密安全性測試結果Fig.4 Security test of AES and ECC encryption 本文為合約封裝上鏈外部接口,通過接口實現腳本文件高并發調用。在數據上鏈腳本文件中,指定發起數據上鏈交易的節點為peer0.org1.example.com,封裝組織1的上鏈授權證書,實現節點的身份認證,通過接口每輪次測試60次,數據上鏈平均時延如圖5a所示。在數據查詢接口中,通過接口每輪次測試60次,公開溯源數據、隱私溯源數據解密查詢所需的平均時延如圖5b所示,溯源數據加密上鏈的平均時延為2.16 s,公開溯源數據平均查詢時延為56.9 ms,隱私溯源數據平均查詢時延為62.87 ms,能夠滿足農產品溯源系統數據上鏈與查詢需求。 圖5 數據上鏈與查詢性能測試Fig.5 Latency test of uploading and querying data from blockchain 本文的核心在于利用區塊鏈多鏈架構提升果蔬區塊鏈溯源網絡存儲能力,通過將追溯網絡劃分為生產鏈、收購鏈、倉儲鏈、加工鏈、分銷鏈以及提供共識服務的共識鏈,每條鏈獨立存儲該類企業追溯節點的溯源數據,多鏈結構下每條鏈的存儲容量、溯源節點以及單條溯源鏈的存儲配置如表6所示。 表6 溯源多鏈與單鏈存儲配置Tab.6 Storage configuration of single and multi-chain 多鏈結構的企業鏈性能配置取決于溯源企業,通過多環節不同企業鏈分布式獨立存儲溯源數據,緩解數據單鏈存儲壓力。鏈下追溯數據通過物聯網設備采集,在一定的間隔時間內上傳至區塊鏈網絡,其中,單條溯源數據為0.34 kB,由企業節點授權背書,經過智能合約上鏈生成新的區塊約6 kB。單鏈式溯源網絡在滿足聯盟鏈架構基礎上難以負載千萬吉字節數據存儲需求,多鏈存儲網絡通過通道隔離數據,能夠在滿足多企業多產品海量溯源數據長時間內存儲需求的基礎上,實現數據的隱私保護、授權共享。 基于聯盟鏈通道創建的果蔬多鏈溯源系統,通過多鏈架構擴展總體溯源網絡容量,通過鏈上智能合約自動分類溯源數據,實現公開數據明文與隱私數據加密上鏈、授權解密共享,解決上下游溯源企業數據無孤島共享,監管部門全數據的穿透式管控,具體的系統架構如圖6所示,共分為4層:存儲層、服務層、接口層、應用層。 圖6 果蔬溯源系統架構Fig.6 Traceability system architecture of fruits and vegetables 存儲層中溯源數據存儲在鏈外狀態數據庫CouchDB,構建Key-value鍵值索引,通過索引查詢代替傳統遍歷查詢,減少數據查詢時間。產品生產過程由監控攝像設備、音頻設備、照相機等采集的視頻、音頻數據通過分布式數據庫IPFS存儲,將返回的哈希值和公開溯源數據上傳到區塊鏈。 服務層中提供Kafka共識集群,以智能合約為核心,保證數據加密上鏈請求與解密查詢請求的自動處理。 接口層面向消費者封裝公開溯源數據查詢接口,通過產品溯源碼掃碼查詢產品溯源數據;面向企業提供數據分類加密上鏈接口,提供授權解密共享接口,在保證鏈上全部數據的安全可靠的基礎上,滿足上下游數據共享需求與監管部門全溯源數據管控需求。 應用層通過物聯網設備采集果蔬全供應鏈環節的溯源數據,為消費者與溯源企業提供不同應用服務。 果蔬溯源區塊鏈平臺應用于山東省淄博市魯中水果批發市場溯源平臺,為市場果蔬提供產品全供應鏈環節溯源數據。目前,溯源區塊鏈網絡共處理數據上鏈請求10 005筆,生成區塊10 094塊,如圖7a所示。企業節點通過溯源平臺填寫當前溯源數據鍵值、公開溯源數據、隱私溯源數據、AES密鑰,提交數據上鏈請求,經過全網節點共識記賬,返回交易哈希值,如圖7b所示,關于具體區塊的配置信息,包括交易哈希值、上鏈組織、合約名稱、上鏈日期、上鏈的交易請求等如圖7c所示。 圖7 溯源數據上鏈請求Fig.7 Request of traceability data upload to blockchain 面向消費者逆向溯源,本文設計的溯源系統為市場果蔬提供溯源二維碼,消費者通過掃碼查詢可獲取產品溯源數據,如圖8a所示。并提供計算機端公開溯源數據查詢溯源界面,通過溯源碼查詢當前溯源數據的溯源結果,如圖8b所示;為監管部門管控追溯數據提供計算機端界面,通過授權憑證解密查詢數據,如圖8c所示。 圖8 溯源數據查詢請求Fig.8 Request of traceability data query from blockchain (1)在果蔬區塊鏈溯源系統中,對每個追溯環節構建溯源鏈,保證不同追溯環節內溯源企業數據的隔離存儲,擴展溯源網絡的總體容量。通過智能合約實現對稱加密與橢圓曲線混合加密運算,能夠有效保證鏈上隱私數據密文的安全性與密鑰憑證的不可破解性,降低溯源數據的存儲壓力;鏈間基于密鑰授權解密查詢隱私數據,解決了溯源上下游多企業間數據共享孤島難題,以及監管部門對全溯源數據的監管需求。 (2)本文所提出的基于智能合約的混合加密算法,能夠實現隱私數據的安全存儲。擴散性測試結果表明,隱私數據以及對稱密鑰的密文變化率分別為95%、94%以上,具備較高的安全性;系統性能測試結果表明,鏈上數據加密存儲、隱私數據共享解密、公開數據透明訪問的平均時延分別為2.16 s、62.87 ms、56.9 ms,系統具備較高的性能,滿足果蔬溯源過程中數據上鏈與查詢的需求,為果蔬區塊鏈溯源系統溯源數據分類存儲提供一定的借鑒與參考。2 基于智能合約的果蔬區塊鏈溯源數據存儲
2.1 果蔬產品多鏈溯源模型

2.2 溯源數據存儲模型



2.3 智能合約設計


3 試驗
3.1 測試環境

3.2 安全性測試


3.3 上鏈與查詢性能分析

3.4 存儲性能分析

4 果蔬溯源系統實現
4.1 系統架構

4.2 應用案例分析


5 結論