王莉, 任健榮, 王濤, 牛群峰, 惠延波, 桂冉冉
(1.河南工業(yè)大學(xué)電氣工程學(xué)院,鄭州 450001;2.北京中電智網(wǎng)科技有限公司,北京 102200;3.河南工業(yè)大學(xué)機(jī)電工程學(xué)院,鄭州 450001)
目前,糧食安全問題影響著國民的身體健康[1],傳統(tǒng)的二維碼防偽溯源技術(shù)將數(shù)據(jù)存儲在企業(yè)或機(jī)構(gòu)的中心數(shù)據(jù)庫進(jìn)行管理,中心化嚴(yán)重且數(shù)據(jù)的真實性難以保證。在溯源體系中使用未加密的二維碼時獲取溯源信息存在數(shù)據(jù)被篡改的可能。將信息通過加密技術(shù)與二維碼的制碼技術(shù)相結(jié)合,并結(jié)合密碼學(xué)將認(rèn)為重要的數(shù)字信息作為明文數(shù)據(jù)進(jìn)行加密計算達(dá)到加密傳遞信息的目的。區(qū)塊鏈最初來源于比特幣,是一種基于P2P網(wǎng)絡(luò)、加密技術(shù)和時間戳記錄的交易架構(gòu)。區(qū)塊鏈網(wǎng)絡(luò)建立后,每一區(qū)塊通過密碼學(xué)連接在一起,每一塊都包含前一區(qū)塊的加密散列值、時間戳和交易數(shù)據(jù)[2]。處于同一鏈上的各參與部門相互關(guān)聯(lián),并且分布式的網(wǎng)絡(luò)抵抗攻擊性能較強(qiáng),其中數(shù)據(jù)經(jīng)加密算法進(jìn)行存儲,區(qū)塊鏈的每筆交易都經(jīng)過數(shù)字簽名以確保數(shù)據(jù)的真實性且不會被篡改。通過區(qū)塊哈希值達(dá)到成鏈的目的,用于解決傳統(tǒng)數(shù)據(jù)庫中心化統(tǒng)一管理的信任問題。
針對二維碼防偽溯源的研究,劉海峰等[3]提出了將AES(advanced encryption standard)和RSA算法結(jié)合的二維碼加密算法。喬婉妮[4]提出了一種將圖像幾何處理與二維碼(QR碼)信息加密相結(jié)合的新思路。方文和等[5]面向Android使用RSA算法設(shè)計了二維碼防偽系統(tǒng),將RSA應(yīng)用在APP以實現(xiàn)防偽功能。黃曦[6]將NFC和國密算法結(jié)合提出了一種防偽系統(tǒng)。Kumar等[7]引入第三個素數(shù)證明了三素數(shù)在RSA算法中的可行性。針對區(qū)塊鏈溯源系統(tǒng)的研究,應(yīng)毅等[8]結(jié)合農(nóng)產(chǎn)品供應(yīng)鏈構(gòu)建了聯(lián)盟鏈的農(nóng)產(chǎn)品溯源系統(tǒng)。張志雷[9]通過將追溯碼直接生成二維碼的方式進(jìn)行區(qū)塊鏈溯源并添加了協(xié)同驗證模塊。于合龍等[10]采用CBC(Ciper block chaining)對數(shù)據(jù)加密,只有授權(quán)節(jié)點才能查看隱私數(shù)據(jù)。洪坤明等[11]構(gòu)建了基于聯(lián)盟鏈的水產(chǎn)品質(zhì)量追溯系統(tǒng)。王楠等[12]提出了一種基于以太坊的智能電網(wǎng)數(shù)據(jù)共享系統(tǒng)。唐豪等[13]使用了布隆過濾器提高區(qū)塊鏈上數(shù)據(jù)檢測的效率。
為此,針對糧食溯源系統(tǒng)安全問題,構(gòu)建一種基于區(qū)塊鏈的糧食供應(yīng)鏈溯源模型,針對糧食產(chǎn)業(yè)供應(yīng)鏈的流程,在Hyperledger Fabric平臺基礎(chǔ)上設(shè)計系統(tǒng)方案,包括系統(tǒng)整體架構(gòu)、雙存儲架構(gòu)、溯源碼防偽架構(gòu)以及智能合約等。通過Web端將數(shù)據(jù)進(jìn)行上鏈存儲并在本地MySQL數(shù)據(jù)庫備份,為小程序預(yù)留API接口。應(yīng)用改進(jìn)RSA算法生成密鑰對并將私鑰存儲在區(qū)塊鏈上,使用公鑰對溯源ID進(jìn)行加密成密文并生成二維碼,消費(fèi)者使用小程序?qū)γ芪倪M(jìn)行解密時從區(qū)塊鏈獲取私鑰在后臺解密獲取溯源ID實現(xiàn)溯源查詢。用區(qū)塊鏈與本地存儲的數(shù)據(jù)庫進(jìn)行哈希校驗以確保糧食數(shù)據(jù)的正確性。基于區(qū)塊鏈的糧食防偽溯源系統(tǒng),能夠提高糧食追溯信息的透明度和安全性,同時能夠保障糧食質(zhì)量安全。
產(chǎn)品流通會經(jīng)過不同廠商,參與方對產(chǎn)品的狀態(tài)流通都會生成任務(wù)編號,將農(nóng)戶作物種植過程中添加的作物編碼作為全局ID,各組織節(jié)點構(gòu)成分布式服務(wù),在整個系統(tǒng)供應(yīng)鏈流程的各個環(huán)節(jié)中。將各過程環(huán)節(jié)的ID作為流通編碼。ID由雪花算法按時間進(jìn)行遞增的,所以分布式系統(tǒng)中不會有重復(fù)的ID,當(dāng)零售商對產(chǎn)品簽收后才會生成唯一的溯源ID。使用改進(jìn)的RSA算法生成密鑰對,將生成的公鑰存儲在本地數(shù)據(jù)庫,用于對溯源ID加密,將加密生成的密文置入二維碼中,私鑰存儲在區(qū)塊鏈中,消費(fèi)者掃碼時由區(qū)塊鏈返回私鑰并在本地進(jìn)行解密獲取溯源ID。
RSA算法的安全性在于使用不同的密鑰。公鑰(e,n)(e為大整數(shù)加密值,n素數(shù)乘積)和私鑰(d,n)(d為大整數(shù)解密值),其安全性是基于大數(shù)分解進(jìn)行破解從已知公鑰的e、n值得到d的值從而實現(xiàn)得到私鑰來實現(xiàn)對密文的破解[14]。
使用傳統(tǒng)RSA算法在加解密的過程中,一般將公鑰放在用戶端,私鑰放在服務(wù)端,消息接收方通過從服務(wù)端獲取私鑰的方式進(jìn)行對密文解密的過程,攻擊者可能會通過攻擊代碼的方式獲取到用戶端代碼將公鑰的base64字符串解碼為字節(jié),再將字節(jié)轉(zhuǎn)換為16進(jìn)制字符,將字符分解獲取公鑰的模數(shù)及公鑰指數(shù),若得到了公鑰的模數(shù)可以通過因子分解得到(p,q)兩個大素數(shù)從而得到包含d的私鑰。使用傳統(tǒng)的RSA算法的模數(shù)n還是極有可能被破解的。
傳統(tǒng)的RSA二素數(shù)算法,選取的大素數(shù)導(dǎo)致計算量增加,為降低計算量選取多素數(shù)小因子,會降低安全性。為兼顧密鑰生成速率以及安全性,選擇大小大致相同的三素數(shù)生成密鑰。增加素數(shù)因子降低大數(shù)運(yùn)算量并用新的模值N代替n生成密鑰,攻擊者分解新的模值N,無法獲得原始的素數(shù)因子,通過隱藏模值的方法提高密鑰的安全性。密鑰生成算法如圖1所示。
圖1 三素數(shù)參數(shù)替換的密鑰生成
改進(jìn)RSA算法模值替換步驟如下。
步驟1選取3個大小大致相同的較小的素數(shù)因子p、q、r,使用Rabin-Miller素數(shù)檢測。計算素數(shù)乘積n=pqr,并求φ(n)。其中φ(n)=(p-1)(q-1)(r-1)。
步驟2由p、q、r通過最大公約數(shù)計算新的N值代替n,GCD(N,n)=1,n-max 步驟3選擇整數(shù)e,求得GCD[e,φ(n)]=1,且1 步驟4通過取模運(yùn)算由demodφ(n)=1求d,可得公鑰(e,N)和私鑰(d,N)。其中,mod為取模運(yùn)算符,d可以通過費(fèi)馬小定理減少運(yùn)算得到。 步驟5明文M加密,表達(dá)式為C=MemodN。 步驟6密文C解密,表達(dá)式為M=CdmodN。 RSA算法的應(yīng)用是基于大整數(shù)的模冪運(yùn)算,大數(shù)冪取模運(yùn)算是提高算法加解密運(yùn)算效率的關(guān)鍵。在計算ab(modc)=M(即已知a、b、c求得M,如1.2節(jié)中步驟5和步驟6,是用來求明文密文所用,在求明文和密文不同使代表不同,若求密文,則A代表明文c,B代表步驟4取模運(yùn)算得到的D,C代表新的N值。)時,使用蒙哥馬利冪模法通過移位快速冪取模[15],將b表示為二進(jìn)制br-1,br-2,…,b1b0,即b=b0+2b1+…+2r-1br-1。 區(qū)塊鏈體系結(jié)構(gòu)是利用以太坊的開源基礎(chǔ)開發(fā)。區(qū)塊鏈的每筆交易都經(jīng)過數(shù)字簽名以確保數(shù)據(jù)的真實性且不會被篡改。區(qū)塊鏈技術(shù)的優(yōu)勢在于去中心化、分布式數(shù)據(jù)存儲、安全、數(shù)據(jù)公開透明[16-18]。數(shù)據(jù)的上傳不會刪除原始數(shù)據(jù),而是對數(shù)據(jù)進(jìn)行更新,區(qū)塊鏈的每個區(qū)塊都會有一個永久的時間戳來表識身份以及驗證。 考慮到大米供應(yīng)鏈流程需要多方共同合作完成,因此區(qū)塊鏈采用聯(lián)盟鏈結(jié)構(gòu),使用Hyperledger Fabric框架,各參與方分別為農(nóng)戶、原料廠商、生產(chǎn)廠商、零售商、物流公司以及管理端等。管理端為各部分添加可以登錄的角色賬號,參與方使用管理端分發(fā)的賬號登錄不同界面添加己方所需上傳的信息進(jìn)行上鏈并在本地進(jìn)行存儲備份。各節(jié)點的信息主要包括種植信息(所施肥料、育苗周期、灌溉周期、施肥周期、除草周期、種植地址),作物生長信息(溫度、生長狀況、水分含量、光照情況、是否有蟲害);原料廠商質(zhì)檢(檢測結(jié)果是否合格、合格證明圖片);生產(chǎn)加工信息(管理員派發(fā)任務(wù)、員工工作量、工作內(nèi)容、操作任務(wù)、操作ID、操作時間);物流運(yùn)輸(任務(wù)派發(fā)、運(yùn)輸員接受任務(wù)、中途定位、物流追蹤)以及零售商等,將這些信息存儲在鏈上,消費(fèi)者可以更清楚的了解水稻從種植到大米銷售的整個流程,可以對產(chǎn)品更加的放心。 環(huán)境部署:虛擬機(jī)VMware,Linux系統(tǒng)Ubuntu18.04(64位),內(nèi)存6 GB,硬盤空間50 G。網(wǎng)絡(luò)部署環(huán)境如表1所示。 表1 軟件環(huán)境 區(qū)塊鏈網(wǎng)絡(luò)主要包括基礎(chǔ)層、核心層和應(yīng)用層?;A(chǔ)層為Fabric網(wǎng)絡(luò)架構(gòu)的基本組成部分,實現(xiàn)P2P網(wǎng)絡(luò)并保證分布式存儲的一致性。核心層包括成員服務(wù)、賬本交易和存儲、節(jié)點排序、鏈碼運(yùn)行以及信息上傳各方達(dá)成的共識。應(yīng)用層為應(yīng)用程序提供接口對區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行調(diào)用,實現(xiàn)數(shù)據(jù)的錄入查詢以及狀態(tài)監(jiān)控。 配置組織(org)和節(jié)點(peer),fabric ca作為證書授權(quán)中心在用戶進(jìn)行數(shù)據(jù)操作時校驗證書,orderer負(fù)責(zé)排序服務(wù),CouchDB作為狀態(tài)數(shù)據(jù)存儲,支持對鏈碼數(shù)據(jù)進(jìn)行富查詢,鏈碼和組織節(jié)點配置如表2所示。Docker模擬多個服務(wù)器,將系統(tǒng)測試和模擬在其中運(yùn)行。Golang編寫智能合約鏈碼在docker容器中運(yùn)行,通過gRPC與peer進(jìn)行交互初始化以及實例化,共識機(jī)制使用solo用于測試。 表2 節(jié)點和鏈碼配置 參與方在區(qū)塊鏈網(wǎng)絡(luò)中各為一個組織節(jié)點,且只有己方錄入信息的權(quán)限,通過管理端上傳信息經(jīng)鏈碼判斷后上鏈,參與方的注冊信息經(jīng)區(qū)塊鏈網(wǎng)絡(luò)的ca證書賦予密鑰。產(chǎn)品出庫后經(jīng)物流運(yùn)輸?shù)竭_(dá)下一參與方直到完成供應(yīng)流程。大米供應(yīng)鏈溯源模型如圖2所示。 圖2 大米供應(yīng)鏈溯源模型 智能合約是是運(yùn)行在系統(tǒng)中的一段代碼,又稱鏈碼(chaincode),分為系統(tǒng)鏈碼和用戶鏈碼[19]。將鏈碼編譯成應(yīng)用程序運(yùn)行在docker中,其中系統(tǒng)鏈碼用于實現(xiàn)底層系統(tǒng)功能,用戶鏈碼則會根據(jù)用戶的不同需求實現(xiàn)相應(yīng)功能,通過gprc與peer節(jié)點進(jìn)行交互。將區(qū)塊鏈系統(tǒng)底層部分與業(yè)務(wù)需求部分進(jìn)行互通,以實現(xiàn)數(shù)據(jù)上鏈的要求以及溯源查詢功能。將智能合約部署在每一個組織節(jié)點上,使每個節(jié)點都保存一個完整的備份數(shù)據(jù)。智能合約通過go語言編寫,其中Init()方法用于將系統(tǒng)初始化,Invoke()方法用于對數(shù)組內(nèi)的元素調(diào)用以及數(shù)據(jù)訪問。通過溯源ID查詢作物的智能合約如表3所示,根據(jù)傳入?yún)?shù)類型不同執(zhí)行不同的方法,調(diào)用fabric底層接口實現(xiàn)查詢功能。 表3 部分智能合約 雪花算法是Twitter開源的一種ID生成的分布式算法。核心在于使用一個64位的長整型數(shù)字作為全局唯一ID,并在ID中引入了時間戳的格式,因此在分布式系統(tǒng)中廣泛應(yīng)用。將農(nóng)戶作物種植過程中添加的ID作為全局ID,在整個系統(tǒng)供應(yīng)鏈流程的各個環(huán)節(jié)中,將各組織節(jié)點構(gòu)成分布式服務(wù)生成過程環(huán)節(jié)的ID,直到供應(yīng)鏈流程末端生成溯源ID。 采用優(yōu)化后的雪花算法作為ID生成工具。由時間差、workerID以及序列數(shù)三部分組成。其中時間差是生成ID的系統(tǒng)時間與基礎(chǔ)時間的總時間差。workerID是區(qū)分不同的機(jī)器以及應(yīng)用的唯一ID。序列數(shù)是在每毫秒下的序列數(shù),由參數(shù)SeqBitLength設(shè)定。①優(yōu)化后的雪花算法能夠隨著時間單調(diào)遞增(但不必定連續(xù));②速度更快,是傳統(tǒng)雪花算法的3~5倍;③支持時間回?fù)芴幚恚苓m應(yīng)生成臨界時間的唯一ID;④不依賴外部緩存和數(shù)據(jù)庫。 Web端與區(qū)塊鏈網(wǎng)絡(luò)通過Node.js作為中間件連接,參與方可通過錄入信息上傳,數(shù)據(jù)信息經(jīng)智能合約鏈碼確認(rèn)執(zhí)行后實現(xiàn)流程交互。Web端使用若依前后端分離版框架作為(B/S)結(jié)構(gòu),主要技術(shù)包括springboot、mybatis、vue、Element UI。底層架構(gòu)和工具還使用了JavaScript、Java、Mybatis、Maven、FastDFS等。前后端交互使用redis作為數(shù)據(jù)緩存器,MySQL8作為各級組織權(quán)限以及備份數(shù)據(jù)存儲工具。 管理端為各參與方組織添加用戶信息并為其賦予密鑰,參與方使用頒發(fā)證書后的賬戶進(jìn)入相應(yīng)的信息錄入界面,調(diào)用后端API接口按照智能合約鏈碼實現(xiàn)數(shù)據(jù)上鏈的功能。用戶端使用小程序獲取溯源ID后通過路由功能實現(xiàn)區(qū)塊鏈數(shù)據(jù)的獲取。大米供應(yīng)鏈各參與方的信息錄入以及信息存儲以及查詢。大米溯源體系運(yùn)作流程如圖3所示。 圖3 溯源體系運(yùn)作流程 消費(fèi)者在小程序端經(jīng)區(qū)塊鏈網(wǎng)絡(luò)獲取私鑰解密獲得明文十進(jìn)制溯源ID。溯源ID逆向查詢鏈上與本地數(shù)據(jù)庫存儲的信息時同時向查驗節(jié)點服務(wù)器查詢是否預(yù)存有該溯源ID,如果有,則讀出溯源ID所對應(yīng)的數(shù)據(jù)信息,然后查驗節(jié)點服務(wù)器基于該溯源碼通過不可逆加密算法計算出的哈希值,將該哈希值發(fā)送至區(qū)塊鏈節(jié)點服務(wù)器詢問,被詢問的區(qū)塊鏈節(jié)點服務(wù)器判斷該哈希值與本地存儲的哈希值是否相同進(jìn)行數(shù)據(jù)校驗,若相同,數(shù)據(jù)未被篡改。將數(shù)據(jù)返回前端以驗證數(shù)據(jù)內(nèi)容的正確性。 糧食防偽溯源系統(tǒng)整體架構(gòu)如圖4所示??梢钥闯?,系統(tǒng)主要包括:數(shù)據(jù)存儲模塊、數(shù)據(jù)處理模塊和區(qū)塊鏈結(jié)構(gòu)。 圖4 系統(tǒng)結(jié)構(gòu)圖 (1)數(shù)據(jù)存儲模塊。主要包括數(shù)據(jù)存儲和數(shù)據(jù)校驗交換機(jī)制。聯(lián)盟鏈的各組織節(jié)點將添加信息上傳至區(qū)塊鏈和本地數(shù)據(jù)庫中,同時存儲數(shù)據(jù)哈希摘要和RSA私鑰。 (2)數(shù)據(jù)處理模塊。使用改進(jìn)RSA算法生成的公鑰將生成的溯源ID加密為密文后生成二維碼。消費(fèi)者掃描二維碼將密文解密后獲得溯源ID進(jìn)行查詢,當(dāng)溯源ID與一個完整供應(yīng)鏈區(qū)塊的溯源ID相對應(yīng)并進(jìn)行哈希校驗成功后,將鏈上數(shù)據(jù)返回在前端,完成正確性驗證。 (3)區(qū)塊鏈結(jié)構(gòu)。區(qū)塊鏈結(jié)構(gòu)是系統(tǒng)的底層基礎(chǔ),用于各參與方的區(qū)塊鏈瀏覽器中顯示區(qū)塊高度,所參與組織節(jié)點,數(shù)據(jù)哈希以及交易ID、時間戳等,確保區(qū)塊鏈數(shù)據(jù)的準(zhǔn)確性。 3.1.1 信息上鏈 參與方上傳信息經(jīng)鏈碼校驗后將數(shù)據(jù)在鏈上公開,各組織和節(jié)點對數(shù)據(jù)形成共識后存入數(shù)據(jù)區(qū)塊。以農(nóng)戶為例,前端添加農(nóng)作物信息通過node中間件將信息上鏈如圖5所示,其中包括作物生長情況,生長環(huán)境等信息。 圖5 信息上鏈詳情 3.1.2 區(qū)塊鏈瀏覽器 顯示當(dāng)前區(qū)塊主體如圖6所示,區(qū)塊號為26的數(shù)據(jù)哈希為880943c5cc531935f3c97cb1fbac432baf 672be6b1d627652026e81f1e16416c,前一區(qū)塊哈希為7c46b3334826d445d46b45912b3444e80e888ce3a3cbe aaa6c0e08539ffb9af9,其中交易ID為3df8ae998dd63 140d485e3485dfc6e2a4e5c4bfde01ead9ec9df11a3ec05 5ac5,區(qū)塊所在通道為tracechannel,溯源ID在小程序端獲得進(jìn)行溯源查詢。 圖6 區(qū)塊主體 將該區(qū)塊JSON格式的數(shù)據(jù)展開會得到該區(qū)塊體業(yè)務(wù)數(shù)據(jù)信息,具體樣例如圖7所示。記錄了數(shù)據(jù)哈希、簽名、交易ID、時間戳等。只有具有權(quán)限的節(jié)點組織能查看相關(guān)的數(shù)據(jù)信息。 圖7 區(qū)塊體數(shù)據(jù)信息 消費(fèi)者掃描二維碼從系統(tǒng)獲取該產(chǎn)品密文,對其解密獲取溯源ID,加密后的二維碼如圖8所示。 圖8 加密后的二維碼 使用微信、QQ等掃碼工具會獲得bb4c251562621ccb00e0ffdb336c5e3b的隨機(jī)碼,使用具有解密功能的小程序?qū)ζ溥M(jìn)行掃碼,對二維碼解碼得到密文內(nèi)容及初次掃碼時間等,如圖9所示。 圖9 密文及基本信息 將密文解密獲取溯源碼,使用改進(jìn)RSA對溯源ID進(jìn)行加解密,在Python3.8下生成大素數(shù)并使用Miller-Rabin算法判定,使生成的模數(shù)在不同長度的密鑰下基本一致,通過密鑰生成算法,通過模數(shù)以及指數(shù)生成指定長度的密鑰對。將其應(yīng)用在小程序端的防偽模塊,使用密鑰對對溯源碼進(jìn)行加解密以獲取溯源ID,使用蒙哥馬利模冪法優(yōu)化實現(xiàn)快速取模對加解密速率優(yōu)化。統(tǒng)計傳統(tǒng)RSA算法和改進(jìn)RSA算法在生成密鑰時間上的區(qū)別,實驗結(jié)果如表4所示。 表4 密鑰生成平均時間 由表4可以看出,兩種算法生成密鑰的時間差別,512bit密鑰傳統(tǒng)RSA算法是改進(jìn)三素數(shù)RSA算法的1.5倍;生成1 024bit為1.66倍;生成2 048bit為1.27倍。改進(jìn)算法使用多素數(shù)減少大數(shù)運(yùn)算,能夠提高密鑰生成效率,但是隨著位數(shù)的增長時間也會增加。將生成的密鑰應(yīng)用在二維碼加密中,對兩種算法分別進(jìn)行測試,分別使用512bit、1 024bit和2 048bit密鑰對設(shè)計的溯源ID“692308834743484 8256”進(jìn)行測試,使用3種位數(shù)的密鑰對該溯源ID進(jìn)行100次加解密實驗并統(tǒng)計,統(tǒng)計時間如表5所示。 表5 算法加解密平均時間 由表5可以看出,兩種算法加解密所用時間,512bit密鑰使用改進(jìn)RSA的加解密速度是傳統(tǒng)RSA的1.58倍,1 024bit時達(dá)到1.91倍,2 048bit時達(dá)到2.83倍,改進(jìn)后的RSA算法對小字節(jié)的溯源碼在加解密過程中效率有著很大的提升。 消費(fèi)者掃描二維碼后將獲取的密文進(jìn)行解密獲取溯源ID如圖10所示。 圖10 溯源ID獲取 輸入6923088347434848256溯源ID經(jīng)虛擬機(jī)路由IP從區(qū)塊鏈網(wǎng)絡(luò)獲取數(shù)據(jù),查詢鏈上信息與本地存儲的數(shù)據(jù)庫進(jìn)行哈希比對,數(shù)據(jù)比對成功則調(diào)用每個組織的鏈碼查詢數(shù)據(jù)并返回溯源信息并展示在前端。部分溯源信息展示如下,農(nóng)戶種植信息如圖11所示,返回種植作物名稱、種植地址、育苗周期、施肥周期等信息。 圖11 農(nóng)戶溯源信息 原料廠商信息如圖12所示,返回產(chǎn)品經(jīng)過的廠商、何時進(jìn)行質(zhì)檢,檢驗結(jié)果是否合格等信息。 圖12 廠商溯源信息 物流流通信息如圖13所示,返回物流ID,經(jīng)過地址以及時間等信息。物流信息的中途定位因是電腦IP模擬定位,所以所經(jīng)地址沒有發(fā)生改變,但每次流通的任務(wù)編號均不同。 圖13 物流溯源信息 Hyperledger Fabric中有設(shè)置區(qū)塊參數(shù)的字段,設(shè)置可容納的交易條數(shù)為100筆,區(qū)塊大小為16 Mb,出塊時間間隔為2.5 s。使用區(qū)塊鏈性能測試工具Caliper對區(qū)塊鏈性能進(jìn)行實時跟蹤,Caliper支持的測試指標(biāo)有事務(wù)成功率,事務(wù)處理吞吐量(單位:TPS,表示每秒事務(wù)處理數(shù)),事務(wù)延遲及CPU,內(nèi)存和網(wǎng)絡(luò)IO的資源消耗等。此處選擇事務(wù)處理吞吐量、事務(wù)延遲作為系統(tǒng)的性能測試指標(biāo)。 設(shè)計8次性能測試實驗,使用Caliper自定義腳本向系統(tǒng)發(fā)起交易,每輪交易并發(fā)1 000次,共計8 000次,將實驗進(jìn)行的交易筆數(shù)和延遲時間等進(jìn)行記錄并計算交易成功率。平均交易時延如圖14所示。事務(wù)處理吞吐量結(jié)果如圖15所示。當(dāng)將測試腳本設(shè)定為100~300 TPS時,事務(wù)處理吞吐量會伴隨交易量的增加而增加,而后會在258筆/s時保持穩(wěn)定,隨后系統(tǒng)因為交易筆數(shù)過大,交易時間也會隨之增長且該數(shù)量內(nèi)的交易的平均時延在約0.5 s。在8次實驗中,部分實驗因網(wǎng)絡(luò)原因?qū)е虏糠纸灰谉o法完成,經(jīng)計算系統(tǒng)的事物處理成功率平均約為99.97%。多次試驗中,區(qū)塊鏈網(wǎng)絡(luò)部署下的鏈碼未出現(xiàn)崩潰現(xiàn)象,性能能夠滿足溯源系統(tǒng)應(yīng)用。 圖14 平均交易時延 圖15 交易吞吐量 (1)區(qū)塊鏈的數(shù)據(jù)公開透明,防篡改以及去中心化等特征在防偽溯源中有著良好的應(yīng)用前景。本文將大米作為供應(yīng)鏈對象,構(gòu)建了一種基于區(qū)塊鏈的糧食供應(yīng)鏈溯源模型,搭建了基于Fabric的大米供應(yīng)鏈溯源系統(tǒng),將其從水稻種植到銷售整個流程進(jìn)行模擬應(yīng)用并進(jìn)行了系統(tǒng)測試。 (2)基于雪花算法設(shè)計大米流通環(huán)節(jié)的任務(wù)編碼以及溯源ID。為實現(xiàn)防偽功能,應(yīng)用改進(jìn)RSA加密算法對溯源ID加密生成二維碼,并設(shè)計了小程序驗證了該算法的有效性,對系統(tǒng)進(jìn)行多次信息錄入及查詢并進(jìn)行性能測試,系統(tǒng)表現(xiàn)良好,未出現(xiàn)鏈碼崩潰現(xiàn)象,可以滿足消費(fèi)者溯源查詢的基本要求,使用具有數(shù)據(jù)防篡改功能的區(qū)塊鏈網(wǎng)絡(luò)與小程序結(jié)合進(jìn)行溯源查詢,使大米的供應(yīng)鏈達(dá)到數(shù)據(jù)可查詢,信息真實可靠的目的。 (3)區(qū)塊鏈技術(shù)有著天然的數(shù)據(jù)防篡改優(yōu)勢,但是將區(qū)塊鏈應(yīng)用在溯源系統(tǒng)中,各組織節(jié)點共識算法的效率卻需要提高,這也是區(qū)塊鏈溯源系統(tǒng)后續(xù)所需進(jìn)一步研究的問題。因密鑰的生成以及加密二維碼生成過程均為小程序?qū)崿F(xiàn),所以密鑰的分發(fā)、存儲管理也是需要后續(xù)改進(jìn)的部分。1.3 蒙哥馬利冪模法優(yōu)化運(yùn)算效率
2 系統(tǒng)架構(gòu)
2.1 區(qū)塊鏈網(wǎng)絡(luò)系統(tǒng)設(shè)計
2.2 智能合約設(shè)計
2.3 溯源ID設(shè)計
2.4 系統(tǒng)實現(xiàn)流程
3 系統(tǒng)應(yīng)用及測試
3.1 區(qū)塊鏈網(wǎng)絡(luò)
3.2 溯源流程及測試結(jié)果
3.3 性能測試
4 結(jié)論