王玙
(西安航空職業(yè)技術(shù)學(xué)院,陜西西安 710089)
隨著我國(guó)互聯(lián)網(wǎng)經(jīng)濟(jì)的發(fā)展壯大以及國(guó)際貿(mào)易的深入合作,我國(guó)的國(guó)民經(jīng)濟(jì)對(duì)航空物流業(yè)的依賴程度不斷增強(qiáng)[1-3]。但我國(guó)現(xiàn)有的航空物流系統(tǒng)仍存在數(shù)據(jù)碎片化嚴(yán)重的問題,且類型多樣、過度中心化、透明度缺乏和物流網(wǎng)絡(luò)效率低下。隨著我國(guó)物聯(lián)網(wǎng)技術(shù)的落地,航空運(yùn)輸過程中有大量的數(shù)據(jù)隨之產(chǎn)生。網(wǎng)絡(luò)的接入使這些信息更容易被泄露和篡改,航空物流系統(tǒng)面臨著潛在的安全風(fēng)險(xiǎn)[4-6]。
航空物流的體量大、參與方眾多,且分布雜散,這與區(qū)塊鏈的去中心化和分布式處理的特點(diǎn)高度吻合。采用區(qū)塊鏈作為航空物流信息處理系統(tǒng)的支撐技術(shù),能夠?qū)崿F(xiàn)物流信息的可追溯和數(shù)據(jù)透明,并且能夠防止被篡改,最終提升物流行業(yè)的運(yùn)營(yíng)效率,降低社會(huì)流通成本。
區(qū)塊鏈技術(shù)是包括密碼學(xué)、哈希算法、時(shí)間戳、智能合約、分布式存儲(chǔ)、P2P 網(wǎng)絡(luò)、Merkle 樹等技術(shù)的一個(gè)技術(shù)合集,經(jīng)歷了以比特幣為標(biāo)志的1.0 代,以以太坊為代表的2.0 代,現(xiàn)在進(jìn)入了可計(jì)算的3.0 時(shí)代?;趨^(qū)塊鏈3.0,可實(shí)現(xiàn)智能化物聯(lián)網(wǎng)的廣泛應(yīng)用。區(qū)塊鏈技術(shù)有4 個(gè)基礎(chǔ)特點(diǎn):去中心化自組織、操作透明、集體維護(hù)和可靠數(shù)據(jù)庫(kù)[7-8]。區(qū)塊鏈基礎(chǔ)架構(gòu)可分為3 層:共識(shí)層、網(wǎng)絡(luò)層和數(shù)據(jù)層,其分布如圖1 所示。
圖1 區(qū)塊鏈技術(shù)基礎(chǔ)架構(gòu)
區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)如圖2 所示。
圖2 區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)
區(qū)塊鏈技術(shù)使用Kad 算法實(shí)現(xiàn)P2P 分布式網(wǎng)絡(luò),采用Socket 進(jìn)行網(wǎng)絡(luò)編程。每個(gè)節(jié)點(diǎn)均具備路由、數(shù)據(jù)庫(kù)功能以及唯一的ID,節(jié)點(diǎn)與節(jié)點(diǎn)之間使用UDP 協(xié)議通信[9]。
每一個(gè)新區(qū)塊建立后,均會(huì)向全網(wǎng)廣播這一信息。每個(gè)節(jié)點(diǎn)在接收其之前,需要驗(yàn)證新區(qū)塊的正確性。確認(rèn)正確后,再向鄰近節(jié)點(diǎn)傳播,包含于塊頭的Merkle 樹由多個(gè)散列交易的不斷重復(fù)哈希運(yùn)算得到。節(jié)點(diǎn)值由已知交易次數(shù)計(jì)算的哈希值加1 后得到,判斷其是否與當(dāng)前塊的Merkle 樹哈希值相等。若不相等,則交易不可信;否則,新區(qū)塊是正確的,節(jié)點(diǎn)將存儲(chǔ)并廣播該區(qū)塊。網(wǎng)絡(luò)中的所有節(jié)點(diǎn)同步完成后,開始新區(qū)塊的計(jì)算,并在塊頭中記錄區(qū)塊的哈希值。
共識(shí)機(jī)制是維持區(qū)塊鏈安全、穩(wěn)定運(yùn)行的核心,其確保各個(gè)節(jié)點(diǎn)均通過競(jìng)爭(zhēng)權(quán)益憑證數(shù)量等競(jìng)爭(zhēng)參數(shù)來取得其他節(jié)點(diǎn)的支持及優(yōu)先寫入數(shù)據(jù)的權(quán)力。目前共識(shí)機(jī)制有:工作量證明機(jī)制POW、權(quán)益證明機(jī)制POS、委托權(quán)益證明DPOS、驗(yàn)證池共識(shí)機(jī)制POOL。不同的應(yīng)用場(chǎng)景使用不同的共識(shí)算法[10-12]。
智能合約用于程序自動(dòng)仲裁和執(zhí)行合同,包含了交易雙方的地址、交易內(nèi)容和觸發(fā)條件。合約代碼的條件一旦滿足,區(qū)塊鏈節(jié)點(diǎn)就會(huì)自動(dòng)執(zhí)行交易雙方約定的義務(wù),這一過程是透明、公開的。智能合約使用Solidity 語(yǔ)言編寫,在以太坊虛擬機(jī)上運(yùn)行[13]。
從去中心化的訂單業(yè)務(wù)邏輯和數(shù)據(jù)存取邏輯兩個(gè)方面來設(shè)計(jì)整個(gè)系統(tǒng),系統(tǒng)的整體運(yùn)行框架如圖3所示。
圖3 系統(tǒng)運(yùn)行框圖
智能合約分為三類:倉(cāng)儲(chǔ)合約、運(yùn)輸合約和出庫(kù)合約,編寫并部署在以太坊網(wǎng)絡(luò)中。
貨主在填寫個(gè)人和貨物資料后,由收件信息產(chǎn)生訂單密鑰。在提交訂單后,由航空物流方確認(rèn)訂單,支付預(yù)付款到智能合約賬戶中。激活倉(cāng)儲(chǔ)合約,等待貨物入庫(kù)并生成一張經(jīng)過簽名的訂單信息進(jìn)入數(shù)據(jù)層,該訂單被發(fā)送給入庫(kù)節(jié)點(diǎn)。貨物進(jìn)入倉(cāng)儲(chǔ)后,由物聯(lián)網(wǎng)系統(tǒng)將該信息傳輸?shù)綌?shù)據(jù)層,激活倉(cāng)儲(chǔ)合約。將訂單信息存放到倉(cāng)儲(chǔ)對(duì)應(yīng)的地址中,并記錄這一信息和時(shí)間。信息經(jīng)過驗(yàn)證后在全網(wǎng)進(jìn)行廣播,數(shù)據(jù)統(tǒng)計(jì)模塊只能獲取該訂單的存在信息。
當(dāng)?shù)竭_(dá)訂單中的航班運(yùn)輸時(shí)間,并由貨物登機(jī)確認(rèn)的狀態(tài)更新后,則觸發(fā)運(yùn)輸合約,執(zhí)行調(diào)用運(yùn)輸保險(xiǎn)等操作。訂單信息從倉(cāng)儲(chǔ)節(jié)點(diǎn)傳輸?shù)竭\(yùn)輸節(jié)點(diǎn),這一信息經(jīng)過驗(yàn)證后在全網(wǎng)進(jìn)行廣播;否則,運(yùn)輸合約未定時(shí)觸發(fā),交易提前終止,返回運(yùn)輸狀態(tài)異常信息。實(shí)際上,任何一個(gè)不可退回的異常均會(huì)導(dǎo)致交易終止,此時(shí)訂單轉(zhuǎn)移失敗。
運(yùn)輸完成后,收貨方持訂單密鑰解鎖貨物,激活出庫(kù)合約,更新訂單狀態(tài)信息為交易完成。以太坊將智能合約賬戶中的預(yù)付款轉(zhuǎn)移到供應(yīng)方區(qū)塊鏈賬戶,訂單信息從運(yùn)輸節(jié)點(diǎn)地址轉(zhuǎn)存到出庫(kù)節(jié)點(diǎn)地址。這一交易信息經(jīng)過驗(yàn)證后廣播到全網(wǎng),所有的節(jié)點(diǎn)均同步賬本數(shù)據(jù)。
航空物流系統(tǒng)的數(shù)據(jù)存儲(chǔ)和讀取分為兩種路徑:用戶信息、供應(yīng)信息、需求信息、航班信息、庫(kù)容信息等基本數(shù)據(jù)存儲(chǔ)于數(shù)據(jù)庫(kù),并提供給服務(wù)層接口,用以顯示與更新;數(shù)據(jù)庫(kù)采用區(qū)塊鏈的分區(qū)實(shí)現(xiàn),交易過程中的訂單數(shù)據(jù)、訂單狀態(tài)、費(fèi)用等信息通過編寫智能合約存入?yún)^(qū)塊鏈,對(duì)區(qū)塊鏈中的數(shù)據(jù)讀寫均需要先經(jīng)過各節(jié)點(diǎn)的認(rèn)證和共識(shí),確保交易數(shù)據(jù)的可追溯和不可篡改性。
兩種存儲(chǔ)路徑包含的數(shù)據(jù)如表1 所示。
表1 數(shù)據(jù)分區(qū)存儲(chǔ)
基于區(qū)塊鏈的航空物流平臺(tái)劃分為3 層子系統(tǒng):信息展示系統(tǒng)、內(nèi)部管理系統(tǒng)、底層去中心化網(wǎng)絡(luò)。系統(tǒng)組織框架如圖4 所示。
圖4 系統(tǒng)組織框架
信息展示系統(tǒng)包括貨主端APP、門戶網(wǎng)站、企業(yè)端APP 三個(gè)部分,分別面向前臺(tái)用戶、游客和航空物流企業(yè)收集運(yùn)輸信息和貨物信息,并發(fā)布航空倉(cāng)儲(chǔ)信息。針對(duì)服務(wù)用戶,需要提供充足的服務(wù)項(xiàng)目和接口。
底層去中心化網(wǎng)絡(luò)的主體為編寫在各個(gè)節(jié)點(diǎn)的多種智能合約,通過觸發(fā)智能合約來執(zhí)行對(duì)應(yīng)的訂單轉(zhuǎn)移。當(dāng)所有合約全部被依次正確執(zhí)行時(shí),點(diǎn)對(duì)點(diǎn)的支付也最終完成。
客戶端在服務(wù)器接口調(diào)用的基礎(chǔ)上進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)。客戶端顯示遵循問題操作的邏輯,每個(gè)問題有唯一的題目標(biāo)識(shí)符。由用戶操作界面的“上一步”和“下一步”按鍵來切換題目,用戶填寫問題的答案后,客戶端將答案返回給服務(wù)器。兩種操作在ControllerInquiry 類中實(shí)現(xiàn),NextProblem 和PreviousProblem 界面切換的邏輯如圖5 所示。
圖5 界面切換邏輯
為保證數(shù)據(jù)庫(kù)的安全性,系統(tǒng)的數(shù)據(jù)存儲(chǔ)以區(qū)塊鏈云存儲(chǔ)實(shí)現(xiàn),對(duì)物流信息單等固定格式數(shù)據(jù)采用分級(jí)本地存儲(chǔ)。區(qū)塊鏈數(shù)據(jù)庫(kù)的訪問控制邏輯如圖6 所示。
圖6 數(shù)據(jù)庫(kù)的訪問控制邏輯
設(shè)計(jì)數(shù)據(jù)庫(kù)管理員擁有最高權(quán)限,維護(hù)數(shù)據(jù)庫(kù)的訪問者列表和相應(yīng)權(quán)限,訪問者包括貨主、收貨方和物流業(yè)主。訪問者的身份注冊(cè)后,系統(tǒng)為其分配身份信息和訪問權(quán)限。在訪問者需要執(zhí)行動(dòng)作時(shí),首先在權(quán)限身份認(rèn)證層中,由共識(shí)認(rèn)證主體對(duì)其身份授權(quán)進(jìn)行認(rèn)證。接著,在實(shí)施行為認(rèn)證層對(duì)訪問者的行為進(jìn)行認(rèn)證和記錄。最終在信息分析層內(nèi)對(duì)訪問者的身份信息、權(quán)限信息和行為信息進(jìn)行檢索與分析,以確保該次訪問動(dòng)作事后可追溯。
智能合約包括入庫(kù)合約、運(yùn)輸合約、出庫(kù)合約、權(quán)限匹配合約、身份認(rèn)證合約、動(dòng)作認(rèn)證合約和支付合約等[14-16]。智能合約使用Solidity 語(yǔ)言編寫,并運(yùn)行在以太坊上。交易雙方使用Struct 進(jìn)行封裝,用Mapping 函數(shù)建立映射并存儲(chǔ)在合約中。在交易結(jié)算時(shí),合約從區(qū)塊鏈地址中尋找Struct 中記錄的交易對(duì)象的交易信息并確認(rèn)支付權(quán)限。最終調(diào)用結(jié)算方法,完成結(jié)算。
使用DataFactory 測(cè)試工具對(duì)物流管理系統(tǒng)作容量測(cè)試、性能測(cè)試和壓力測(cè)試。從100 個(gè)用戶并發(fā)訪問開始,逐漸增加訪問用戶數(shù),從而得到所構(gòu)建的區(qū)塊鏈數(shù)據(jù)庫(kù)的性能曲線,如圖7 和圖8 所示。
圖7 區(qū)塊鏈數(shù)據(jù)庫(kù)并發(fā)寫測(cè)試
圖8 區(qū)塊鏈數(shù)據(jù)庫(kù)并發(fā)讀寫測(cè)試
兩種測(cè)試結(jié)果顯示,系統(tǒng)的數(shù)據(jù)庫(kù)運(yùn)行較為穩(wěn)定,讀寫的數(shù)據(jù)正確率穩(wěn)定在95%左右,讀寫時(shí)間較為合理。
區(qū)塊鏈技術(shù)的安全性得益于分布存儲(chǔ)、加密驗(yàn)證和去中心化交易,所有節(jié)點(diǎn)遵循少數(shù)服從多數(shù)的邏輯。但當(dāng)多數(shù)節(jié)點(diǎn)被劫持后,整個(gè)系統(tǒng)的安全性將受到挑戰(zhàn)。區(qū)塊鏈系統(tǒng)常見的攻擊有雙花問題、51%攻擊、日蝕攻擊等。首先使用VerX 工具檢測(cè)區(qū)塊鏈的重入漏洞和權(quán)限漏洞的安全問題,檢測(cè)結(jié)果如圖9 所示。
圖9 重入漏洞檢測(cè)結(jié)果
系統(tǒng)生成檢測(cè)報(bào)告文檔,根據(jù)報(bào)告修正系統(tǒng)漏洞,然后進(jìn)行系統(tǒng)的Bug 測(cè)試,最終檢測(cè)結(jié)果顯示,系統(tǒng)的Bug發(fā)生率低于0.6%,總體安全性得到充分保證。
圖10 權(quán)限漏洞檢測(cè)
該文構(gòu)建了基于區(qū)塊鏈的航空物流管理系統(tǒng),相比于傳統(tǒng)航空物流平臺(tái),該系統(tǒng)的創(chuàng)新點(diǎn)在于3個(gè)方面:1)使用區(qū)塊鏈技術(shù)處理物流訂單,加密策略和時(shí)間戳保證了訂單信息不可篡改,分布式存儲(chǔ)使得同一份訂單存放在多個(gè)節(jié)點(diǎn)內(nèi),有效保障數(shù)據(jù)的存儲(chǔ)安全性;2)數(shù)據(jù)分為兩種存儲(chǔ)方式,訂單等關(guān)鍵信息存放于區(qū)塊鏈中,個(gè)人登錄信息等存放于數(shù)據(jù)庫(kù)中;3)數(shù)據(jù)庫(kù)采用區(qū)塊鏈架構(gòu)對(duì)訪問者的身份、動(dòng)作、權(quán)限采用類似于區(qū)塊鏈中的共識(shí)驗(yàn)證機(jī)制進(jìn)行識(shí)別與記錄,在提供分級(jí)權(quán)限的同時(shí)確保了數(shù)據(jù)庫(kù)的操作安全性。
該系統(tǒng)主要面向小規(guī)模航空物流,源自于系統(tǒng)的數(shù)據(jù)庫(kù)體量小、物流運(yùn)輸環(huán)節(jié)不夠精細(xì),且對(duì)航空物流過程中的物聯(lián)網(wǎng)系統(tǒng)提出了一定要求。物聯(lián)網(wǎng)系統(tǒng)在檢測(cè)到實(shí)際的貨物狀態(tài)信息后,將作為數(shù)據(jù)寫入方觸發(fā)區(qū)塊鏈中新的交易。因此,系統(tǒng)在大規(guī)模的航空物流企業(yè)中無法獲得良好的使用體驗(yàn)。在接下來的工作中,將完成擴(kuò)大數(shù)據(jù)庫(kù)、完善區(qū)塊鏈的設(shè)計(jì),使之可以面向大規(guī)模企業(yè)開放。