于欣海,黃欣哲,梁 海*,丁 勇
(1.安徽省高速公路聯網運營有限公司,安徽 合肥 230031;2.桂林電子科技大學,廣西 桂林 541004)
2020年1月1日,全國29個聯網省份的487個省界收費站全部取消,同年5月,實現了“一次行程、一張賬單、一次扣費、一次告知”的總體目標,高速公路出入口的收費站擁堵緩行的狀況得到全面緩解[1],有效改善了人民群眾的出行體驗,助力節能減排、降本增效,取得了明顯的社會效益和經濟效益。
而車輛跨省出行傳統收費清算共有三個階段:首先,省部兩級聯網中心相互通信啟動行車計費服務。其次,由部聯網中心根據各省聯網中心上傳的信息擬合數據并計算通行費用。最終,由省聯網中心將通行費用返回至結算收費站。
在這一過程中,各省級聯網中心不僅要跨省請求數據,而且還依賴中心化服務器的計算結果,不僅導致收費結算流程繁瑣,降低收費站的通行效率,同時跨省結算請求數據時可能會造成隱私泄露和數據篡改等問題,帶來極大的信息安全隱患。
針對這一問題,國內外研究人員開展了大量研究并提出了不同的解決方案。閆衛喜等人[2]對區塊鏈技術在交通運輸業的應用指出數據資源共享程度不足、數據價值挖掘深度不足和隱私保護不夠的問題,為后續研究指明了方向。為了解決高速公路車輛通行數據零散(資源共享)問題,王若華等人[3]提出一種基于超級賬本的高速公路通行數據區塊鏈,使用鏈碼對通行數據上鏈,同時快速完成數據共識的判斷。為了深度分析數據價值,張利華等人[4]提出雙鏈數據存儲模型來對歷史數據進行分析,解決惡意偽造、篡改數據等問題。
為解決高速收費中的隱私保護問題,王秀利等人[5]提出一種應用區塊鏈的數據訪問控制與共享模型,利用屬性基加密對企業數據進行訪問控制與共享,達到細粒度訪問控制和安全共享的目的。王士成等人[6]利用屬性加密技術和智能合約技術,實現了自動化安全數據共享。張正昊等人[7]提出了一種支持監管的敏感數據可控共享方案,通過使用動態累加器技術實現敏感數據的訪問控制,實現數據擁有方對數據的可控性。
然而,現有場景中很少有對高速路收費進行隱私保護,大多數的數據傳輸方案不能滿足高速收費場景,并且當數據量足夠大時可能造成數據阻塞,降低數據的共享效率。因此,有必要針對高速聯網收費場景設計一種基于分布式支持隱私保護的數據傳輸共享方案。
為了解決高速聯網收費場景所面臨的挑戰,提出一種基于區塊鏈的高速聯網收費數據共享方案。其中通過區塊鏈將省部兩級聯網中心全部鏈接在一起以維護一個共同的賬本,并通過智能合約實現高速跨省結算的自動化,以此實現數據的實時共享;對于隱私保護,結合非對稱加密和對稱加密實現鏈上數據的密文存儲;對于數據高效的檢索,設置了鏈上鏈下數據庫同步機制,采用表加密的形式存儲數據,任何未獲得權限的用戶都會被拒絕訪問。
在具體功能上,相比于傳統的高速收費系統,基于區塊鏈實現了車輛通行數據的分布式存儲和訪問,保證了數據的實時共享。同時為保護用戶隱私,對鏈上敏感數據進行加密處理,使其具有更高的安全性;對于檢索模塊,相比于純鏈上數據存儲的方式,采取鏈上鏈下數據庫同步機制,降低對鏈上的訪問開銷,同時優化數據存儲結構,進一步提高檢索效率,并同步降低存儲開銷。
在性能上,對2 000 000筆存證交易(存證數據大小200 Bytes),分別對持續時長為10分鐘左右和5分鐘左右,并發數為180增加到300進行測試。實驗結果表明:區塊鏈存儲TPS均值、查詢TPS均值完全滿足安徽省高速公路聯網收費需求,在通行數據不斷增長的情況下,可以采用增加節點的方式提升業務處理能力。
區塊鏈是一種去中心化的分布式賬本技術[8],是分布式數據庫、密碼算法[9]、共識機制[10-11]和智能合約[12-14]等技術的有機結合。
區塊鏈數據由去中心化網絡上的多個對等節點共同維護的相同副本組成。數據副本又將所有數據以區塊的形式進行存儲,區塊之間則利用哈希指針串聯成鏈。每個區塊由區塊頭和區塊體組成,區塊體由具體數據組成,區塊頭由前塊哈希、時間戳、版本號等系統性信息和當前塊哈希組成。通過默克爾樹的方式將區塊內全部交易的哈希值計算出區塊哈希。由于哈希所具有的極難碰撞的性質,因此任何人可以通過某一交易哈希值及其兄弟路徑的哈希值求出一個區塊哈希,通過該區塊哈希判斷交易是否被修改,若求出的區塊哈希與區塊本身的哈希不同,則說明交易被修改或是不存在。
由于每個區塊的區塊頭中都包含了前塊哈希,這就使得區塊之間關系緊密,并且單個區塊的更改會因為無法匹配頭部哈希值和后續塊中的前塊哈希值而驗證失敗。在去中心網絡和這種區塊鏈存儲的模式下,少部分節點的更改和外部惡意篡改都能因為與大部分節點數據不一致而被識別出來,因此鏈上數據具有不可篡改、可追溯、可信的特點。
除此之外,區塊鏈系統中的共識機制確保了上鏈數據的正確性和一致性,智能合約則使得開發者能夠在區塊鏈上進行應用的開發。
區塊鏈上記錄的數據在上鏈過程中,需要經過各區塊鏈節點達成共識,所有數據必須公開給區塊鏈網絡中的所有節點,這將會導致區塊鏈出現隱私泄露風險[15]。為了解決這個問題,需要對必要的數據進行加密,再上鏈,最終以密文的形式存儲在鏈上,從而保證數據的隱私性和安全性。
目前已經有多種區塊鏈數據隱私保護方案,如交易數據加密[16]、零知識證明[17]、同態加密[18]等,均是依托于密碼學算法。但是不同的方案在安全性和實用性上各有優劣。針對高速公路聯網收費涉及多方參與的業務特點,以及對于安全性和實用性的權衡,在數據存儲與共享過程中除了實現交易上鏈,重點還在交易產生的記錄數據的上鏈存儲、上鏈運算,由于高速公路聯網收費數據包含通行用戶的隱私信息,因此如何在鏈上安全存儲,且實現數據訪問權限的控制尤為重要。
該文將采用鏈上數據庫表加密技術,利用非對稱密碼算法及對稱密碼算法的方式,任何未被授權的賬戶無法解密表交易操作。
全國聯網收費系統框架由收費公路聯網結算管理中心(以下簡稱“部聯網中心”)、省(區、市)聯網結算管理中心(以下簡稱“省聯網中心”)、省內區域/路段中心、ETC門架、收費站、ETC車道、ETC/MTC 混合車道等組成,如圖1所示。

圖1 全國聯網收費系統框架
其中部聯網中心主要實現跨省ETC清分結算和跨省其他交易拆分結算、全網費率管理等功能;省聯網中心主要實現本省(區、市)ETC清分結算和其他交易拆分結算、本省(區、市)路段費率管理功能。
2.2.1 車輛收費流程
高速公路通行車輛收費方式主要有電子不停車自動收費(ETC)和人工半自動車道收費(MTC)兩種。
(1)ETC車輛通過ETC門架系統實現分段計費,通過車載單元(OBU)和后臺記賬形式自動完成扣費。
(2)MTC車輛采用5.8 GHz復合通行卡[15](CPC卡)為通行介質,輔以車牌圖像識別,在入口將計費車型信息寫入CPC卡,通過ETC門架系統實現分段計費,在出口進行人工收費。
2.2.2 清分結算流程
清分結算業務采用部、省兩級模式,部聯網中心主要完成跨省ETC通行費清分結算以及跨省MTC通行費拆分結算,省聯網中心主要完成省(市、區)內ETC清分結算和MTC通行費的拆分結算。
(1)ETC車輛交易清分結算流程。
ETC車輛交易流水通過省聯網中心實時上傳至部聯網中心,發行服務機構下載交易數據進行記賬。記賬確認后,部聯網中心生成清分結算通知書,各收費方省聯網中心和發行服務機構對清分結算通知書進行確認,部聯網中心按照清分結算結果進行資金歸集和劃撥。省聯網中心完成省(市、區)內ETC清分結算。
(2)MTC車輛交易拆分結算流程。
部聯網中心接收各省聯網中心上傳的MTC車輛通行交易數據,每日根據實際通行省(區、市)對交易數據進行拆分結算,并下發結算通知書由各省聯網中心確認,部聯網中心根據軋差金額進行資金歸集和劃撥。省聯網中心完成省(市、區)內MTC通行費的拆分結算。
2.2.3 存在的問題
(1)數據同步過程繁瑣。
數據同步過程繁瑣主要體現在以下兩個方面。一是兩級清分模式涉及部聯網中心、省聯網中心、ETC卡發行服務機構、銀行等多方參與,需要多個省聯網中心分別與部聯網中心進行數據對賬和結算通知書確認,受數據合規性、及時性、準確性影響,容易出現數據補充同步和結算通知書反復確認情況,使得清分結算周期變長效率降低。二是由于需數據同步更新的省聯網中心和收費站眾多,一旦出現交易數據、計費參數更新不及時、不完整等情況,將導致不同路段、省份之間出現清算爭議。
(2)數據隱私的泄漏。
由于數據原本是保存在獨自的省聯網中心,當需要跨省結算時,需要共享數據,在共享過程中數據的完整性和安全性難以得到保證,因此可能存在用戶數據泄露的問題。
為了解決現有的高速跨省收費與清分系統的數據同步過程繁瑣和數據隱私安全的問題,提出一種基于區塊鏈的高速聯網收費數據共享方案。在不改變高速公路原有聯網收費業務系統的前提下,引入區塊鏈進行數據存儲來實現各省聯網中心間數據的同步,當車輛進出高速路口以及高速上途徑 ETC門架時,車輛信息會被自動采集并上鏈,區塊鏈各節點之間會同步這些信息。
設計一套基本的通用的數據庫表來解決傳統方式下,不同省聯網中心數據格式不同,交易數據與計費參數不完整可能導致的問題。將分別設計跨省的和省內的交易清分結算方案,并以智能合約形式寫到鏈上,當車輛通過高速出入口以及ETC門架時,會自動調用智能合約將對應信息自動采集,并自動完成跨省和省內的交易清分結算。同時設計一套加密解密以及訪問控制機制,在保護用戶隱私數據安全的基礎上,實現車輛通行數據以及清分結算數據的多方共享。另外,為了保證系統的效率,會在外置一個傳統數據庫,通過訪問控制的接口將鏈上數據保存下來,方便查詢。整體架構如圖2所示。

圖2 方案整體架構
為此,首先需建立區塊鏈網絡,省聯網中心,部聯網中心作為區塊鏈的節點對數據進行存儲,高速公路聯網收費系統與區塊鏈網絡的對接,當有車輛駛入時,調用智能合約將駛入信息存入到鏈上,當車輛通過收費系統駛出時,自動調用智能合約去鏈上檢索對應車輛的駛入信息,自動計算扣費。車輛交易流水、通行記錄、清分結算等數據以交易記錄的形式記錄到區塊鏈上,并通過鏈上數據庫表訪問控制機制授權給對應的省部中心,將數據同步到傳統數據庫中,方便對數據的查詢,在必要時能結合鏈上數據進行驗證。
為了解決不同省聯網中心數據格式不同,交易數據、計費參數不完整可能導致的問題,設計一套通用的、基礎的數據庫表用來保存車輛通信信息。
針對高速公路聯網收費的實際業務場景,需要將ETC門架、收費站采集的車輛ETC交易流水、ETC通行記錄、CPC卡通行記錄、收費站、收費車道、抓拍時間、車牌號、車型等收費關鍵信息,以及省部聯網中心經過計算生成的清分結算數據上鏈存儲。
表中數據分為普通數據表和加密數據表兩種存在形式,區別在于表操作具體內容在鏈上是否以密文形式存儲,加密表操作在SDK中進行加密,然后以密文形式存儲在區塊鏈上,并且以密文的形式存儲到實體數據庫中。
高速公路聯網收費數據庫表以及對應的訪問權限控制如圖3所示。

圖3 數據庫表授權共享
ETC交易流水表、ETC通行記錄表、CPC卡通行記錄表等為加密數據表,由省聯網中心創建,授權給其他省聯網中心和部聯網中心查詢權限,省聯網中心僅限于查詢與本省相關的跨省通行數據,部聯網中心可以查看所有跨省車輛通行數據。
省費率參數表為普通數據表,由省聯網中心負責創建和維護,授權給所有鏈上用戶查詢權限。
ETC交易清分結算表和CPC交易拆分結算表為加密數據表,由省聯網中心負責創建,授權給其他相關的省聯網中心、部聯網中心、ETC發行服務機構等查詢權限,省聯網中心僅限于查詢與該省相關的跨省清分結算數據,部聯網中心可以查看所有的跨省清分結算數據。這不僅使得資源可以得到合理的配置,而且管理水平也得到一定的提高,對不同路段的協調工作也更加高效。
針對ETC車輛跨省交易,當車輛經過收費站出口車道完成交易時,即觸發跨省清分結算智能合約,基于部級鏈上該車輛在各省的ETC交易流水(或通行憑證)、ETC通行記錄等信息,按照預先設定的交易清分規則,自動執行對本次ETC交易的清分結算,并將ETC交易清分結算結果在部級鏈上存儲,同時為相關的省聯網中心、ETC發行服務機構、銀行設置共享訪問權限。針對MTC車輛跨省交易,將基于部級鏈上該車輛在各省的CPC卡通行記錄、通行流水、交易日志等信息,按照預先設定的交易拆分規則,自動執行對本次交易的拆分結算,并將MTC車輛交易拆分結算結果在部級鏈上存儲,為相關的省聯網中心、ETC發行服務機構、銀行設置共享訪問權限。
部聯網中心每日通過智能合約自動完成當日所有單筆跨省ETC車輛交易清分結算結果匯總,形成當日跨省ETC車輛交易清分結算結果,并按照此清分結算結果進行資金歸集和劃撥;通過智能合約自動完成當日所有跨省MTC交易拆分結算結果匯總,形成當日跨省MTC車輛交易拆分結算結果,并按照此拆分結算結果,根據軋差金額進行資金歸集和劃撥。
針對ETC車輛省內交易,當車輛經過收費站出口車道完成交易時,即觸發省內清分結算智能合約,基于省級鏈上該車輛在省內的ETC交易流水(或通行憑證)、ETC通行記錄等信息,按照預先設定的交易清分規則,自動執行對本次ETC交易的清分結算,并將ETC交易清分結算結果在省級鏈上存儲,同時為相關的收費站、ETC發行服務機構、銀行設置共享訪問權限。針對MTC車輛省內交易,將基于省級鏈上該車輛在各省的CPC卡通行記錄、通行流水、交易日志等信息,按照預先設定的交易拆分規則,自動執行對本次交易的拆分結算,并將MTC車輛交易拆分結算結果在省級鏈上存儲,為相關的收費站、ETC發行服務機構、銀行設置共享訪問權限。
省聯網中心每日通過智能合約自動完成當日所有省內ETC車輛交易清分結算結果匯總,形成當日省內ETC車輛交易清分結算結果,并按照此清分結算結果進行資金歸集和劃撥;通過智能合約自動完成當日所有省內MTC交易拆分結算結果匯總,形成當日省內MTC車輛交易拆分結算結果,并按照此拆分結算結果,根據軋差金額進行資金歸集和劃撥。
由于區塊鏈是在去中心網絡下由多個對等節點共同維護的,區塊鏈中的數據對所有用戶都是公開的,因此存在對特定數據進行加密的需求。在有些場景下即需要區塊鏈以維護數據的可靠與可信,又不希望泄露鏈上的用戶信息。因此,可以對必要的數據進行加密保存,同時在鏈上保存訪問權限控制信息,當有節點或者用戶需要訪問鏈上加密數據時,必須先驗證鏈上的訪問權限控制信息,通過驗證后智能合約會對所訪問數據自動進行解密。其流程如圖4所示。

圖4 高速公路車輛通行數據共享示意圖
當車輛駛入高速,信息被記錄上鏈時,先由本地的省聯網中心(圖中的省聯網中心1)對數據信息進行加密上鏈,即數據上鏈存證;省聯網中心在上鏈時會對數據的訪問等權限賦予不同的用戶或節點,即數據訪問授權;當不同的用戶或者節點需要訪問數據時需要先對自己的身份信息進行驗證,以判斷是否有對應數據的訪問權限,即驗證訪問權限;在對訪問發起方的身份進行驗證并確認其具有相應權限之后返回查詢結果。
為了實現以上流程,設計了一套數據加密流程,主要包含六個部分:身份密鑰初始化,創建加密表,加密表授權,插入數據,授權數據給用戶,用戶讀取數據。身份數據初始化是生成對應節點和用戶的公私鑰身份信息;創建加密表則是將車輛信息表格進行加密;加密表授權會對創建者以外的身份授予權限,使其能夠讀取表格信息;插入數據則是對加密表的信息進行修改,添加車輛新的信息;授權數據給用戶則是將加密表權限授予給用戶;用戶讀取數據則是用戶讀取鏈上加密的數據。
數據存儲及共享主要包含五個部分:初始化,創建加密表,加密表授權,授權數據給用戶,用戶讀取數據,其目的和具體細節如下:
(1)身份密鑰初始化。
在身份密鑰初始化階段,按照高速公路收費的組織架構,在區塊鏈上為各個組織注冊合法賬戶,每個用戶生成一對公私鑰(Pki,Ski)由用戶自身保存,其中對公鑰進行哈希運算得到身份id并上鏈,其過程可由算法1表示。
算法1:
1.對任意用戶accounti,使用橢圓曲線算法生成公私鑰(Pki,Ski)
2.生成用戶accounti身份id,accounti_id = sha256 (Pki)
在實際中使用Ed25519算法生成公私鑰匙,使用sha256算法對公鑰進行哈希運算得到身份id。
(2)創建加密表。
創建加密表是將數據以加密的方式進行保存,由各省聯網中心負責創建,各省聯網中心默認對加密表具有管理權限,其流程可由算法2表示。
算法2:
1. accounti發送創建表交易:T= {table_name, table}, Sigi= SignatureECC (T,Ski)
2.使用AES算法隨機生成對稱密鑰K
3.使用K對創建表語句加密,得到密文C= EncryptAES (table,K)
4.使用公鑰Pki對K加密,得到加密令牌Xi= EncryptECC (K,Pki)
5.將Xi和C保存至鏈上,保存的格式為數組 {Pki,table_name,Xi,C,Sigi,R|U|D}
其中,R代表讀取權限;U代表修改權限;D代表刪除權限。
(3)加密表授權。
當數據以加密表的形式存儲之后,省聯網中心負責將加密表授權給其他相關的省聯網中心、部聯網中心、ETC發行服務機構等查詢權限以便進行相關的業務操作,而未被授權的用戶將不能訪問加密表,具體流程可由算法3表示。
算法3:
1.用戶i根據accounti_id和table_name從鏈上獲取Xi和C
2.使用Ski對Xi解密,得到AES算法密鑰:K= DecryptECC(Xi,Ski)
3.使用K對C解密,table = DecryptAES (C,K)
4.使用Ski對T= {table_name, table}簽名,s= SignatureECC(T,Ski)
5.驗證s和鏈上Sigi是否一致,如果不一致,退出;否則進入步驟6
6.使用accountj的公鑰Pkj對K加密,得到加密令牌Xj= EncryptECC(K,Pkj)
7.發出邀請給accountj賬戶對T進行簽名:
Sigj=SignatureECC(T,Skj)
8.{Pkj,table_name,Xj,C,Sigj,R|U|D}記錄保留至鏈上
(4)插入數據。
當跨省通行車輛在高速出口完成收費后,自動觸發存證智能合約進行車輛通行數據上鏈存證,這就需要修改鏈上保存的加密表。在這個過程中存證智能合約首先會判斷用戶是否具有對應權限,如果沒有權限,則會退出,如果有權限,則繼續對新增數據進行加密并插入到加密表中,具體流程可由算法4表示。
算法4:
1.賬戶accounti發起插入表記錄交易:{table_name,(fields,values)}
2.通過accounti_id和table_name獲取記錄{Pki,table_name,Xi,C,Sigi,R|U|D}
3.判斷是否有U權限,如果沒有退出;否則進入步驟4
4.使用Ski對Xi解密,得到AES算法密鑰:K= DecryptECC(Xi,Ski)
5.使用K對C解密,table=DecryptAES(C,K)
6.使用Ski對T={table_name, table}簽名,s=SignatureECC(T,Ski)
7.驗證s和鏈上Sigi是否一致,如果不一致,退出;否則進入步驟8
8.使用AES算法隨機生成對稱密鑰K2
9.使用K2對記錄進行加密,得到記錄密文:R=AES({fields,values},K2)
10.使用Pki對K2加密,得到加密令牌X2i=EncryptECC (K2,Pki)
11.計算 record_id = sha256({table_name, fields, values})
12. 計算記錄的簽名,RSigi= SignatureECC (record_id,Ski)
13.將記錄{record_id,Pki,table_name,X2i,R,RSigi,R|U|D}記錄至區塊中
14.返回record_id
(5)將數據授權給用戶。
用戶完成數據插入后,隨即觸發授權智能合約,自動為車輛通行數據途徑的各省聯網中心、部中心等用戶設置數據訪問權限,具體流程可由算法5所示。
算法5:
1.通過record_id從鏈上獲取記錄,{record_id,Pki,table_name,X2i,R,RSigi,R|U|D}
2.查看是否有R|U|D權限,如果沒有則退出,否則進入步驟3
3.使用Ski解密X2i,K2=DecryptECC(X2i,Ski)
4.生成簽名s=SignatureECC(record_id,Ski)
5.驗證s和鏈上的RSigi是否一致,如果不一致退出,否則進入步驟6
6.使用accountj賬戶的私鑰Skj對 record_id簽名,RSigj= SignatureECC(record_id,Skj)
7.使用Pkj對K2進行加密,得到加密令牌X2j=EncryptECC(K2,Pkj)
8.將記錄{record_id,Pkj,table_name,X2j,R,RSigj,R|U|D}記錄至區塊中
(6)用戶讀取授權數據。
用戶讀取區塊鏈上的共享數據,將會觸發智能合約,智能合約首先對用戶的身份進行驗證,判斷是否具有訪問控制權限,如果沒有權限則退出,如果有權限,則可以進行數據的解密供用戶訪問,具體過程可由算法6所示。
算法6:
1.賬戶accounti發起讀取記錄交易:{record_id,Pki,table_name,X2i,R,RSigi,R|U|D}
2.查詢是否存在標志R;如果沒有則退出,否則進入步驟3
3.計算s=SignatureECC(record_id,Ski)
4.判斷s和RSigi是否相等,不相等則退出;否則進入步驟5
5.使用Ski解密X2i,K=DecryptECC(X2i,Ski)
6.使用K解密R記錄,record=DecryptAES(R,K2)
區塊鏈上的數據由按時間順序各個區塊組成,數據上鏈以后將不能被篡改。由于采用去中心化數據存儲架構,因此對任何一個節點的攻擊都無法使整個網絡癱瘓,也無法控制整個鏈上的數據。基于智能合約數據存儲與共享,保證數據使用過程安全,同時將每筆交易都上鏈存儲,數據有據可查,可以進行溯源審計。以上的區塊鏈技術特點,保證了數據的安全性。
在用戶數據隱私上,采用了基于非對稱和對稱密碼學算法的加密表技術,數據在上鏈之前進行加密,并且加密令牌也是密文上鏈,只有數據上鏈的操作者能夠進行解密。
假設惡意用戶獲取區塊鏈的訪問方式,開始遍歷區塊鏈交易,但是獲取到的鏈上表操作交易內容均是密文,在沒有表擁有者私鑰或者未被授權情況下,是無法解密數據的;而且即使惡意用戶自己運行一個節點,也無法將鏈上創建的加密表同步到自己運行的節點的數據庫中,因為無法解密就無法知道當前數據庫操作內容。
高速公路聯網收費業務涉及多方參與,各參與方所需數據以及訪問權限各不相同,采用鏈上數據庫表的授權機制,基于非對稱密碼學算法,對加密令牌進行轉加密,并在鏈上記錄權限,不可篡改。將加密表及鏈上權限控制相結合,實現鏈上數據的授權訪問控制。
假設惡意用戶真的偽裝為監管方,獲取了數據訪問權限,并且在本地運行一個節點同步了數據,但是因為加密表授權機制的精細控制,對于監管方只授予查詢權限,因此惡意用戶只能獲取到歷史數據,而無法對鏈上數據進行修改,保障區塊鏈以及鏈上數據安全不被篡改。
實驗選擇ChainSQL去搭建區塊鏈,并模擬出高速收費系統,編寫兩類智能合約,一類是存證類合約,用來記錄車輛信息,進行收費和清分,另一類是查詢類合約,用來查詢鏈上數據。調用存證類合約會往鏈上增加數據,查詢類合約不會往鏈上新增數據。搭建的鏈包含4個共識節點,并有4臺壓測機共8臺硬件設備,硬件配置均為戴爾R730服務器,2*CPU英特至強E5-2620 v3,2.4 GHz,15 M緩存,內存8*16 G RDIMM,2133 MT/s,硬盤 10*1.2 TB 10 k RPM SAS 6 Gbps 2.5英寸熱插拔硬盤,萬兆網卡。區塊鏈節點操作系統為Ubuntu 18.04.5 LTS。
進行三類實驗去測試系統性能能否滿足高速公路收費場景,分別是普通場景下存證交易的性能測試,高并發場景下存證交易的性能測試和高并發場景下查詢交易的性能測試。采用交易吞吐量(TPS)和確認交易吞吐量(CTPS)作為性能衡量指標。
對于普通場景下的存證交易性能測試,4臺壓測機共發送2 000 000筆存證交易(存證數據大小200 Bytes),持續10分鐘左右,并發數為180,測試結果如圖5所示。

圖5 高并發壓力測試
結果顯示TPS均值10 034,CTPS均值11 393,TPS峰值11 410,CTPS峰值14 542,交易成功率100%。
對于高并場景下的存證交易性能測試,4臺壓測機共發送2 000 000筆存證交易(存證數據大小200 Bytes),持續5分鐘左右,并發數為300,測試結果如圖6所示。

圖6 存證尖峰沖擊測試
測試結果:TPS均值23 624,CTPS均值10 791,TPS峰值34 975,CTPS峰值20 000,交易成功率 100%。
對于高并發場景下的查詢交易性能測試,4臺壓測機共進行2 000 000交易查詢,持續5分鐘左右,并發數300,測試結果如圖7所示。

圖7 單節點查詢壓力測試
測試結果:TPS均值21 389,TPS峰值31 127,時間15時38分~15時40 。
實驗結果表明,測試環境區塊鏈存儲TPS均值、查詢TPS均值完全滿足安徽省高速公路聯網收費需求,在通行數據不斷增長的情況下,可以采用增加節點的方式提升業務處理能力。
提出了基于區塊鏈的高速公路聯網收費數據共享方案,利用區塊鏈技術實現車輛通行數據的分布式存儲,通過鏈上數據庫表加密技術結合智能合約技術,實現車輛通行數據上鏈加密存儲和自動化授權共享,同時將數據共享過程上鏈存證,利用區塊鏈不可篡改的技術特點,實現對數據共享過程的可追溯。該方案有利于實現車輛通行數據的跨地區、跨部門共享,對于簡化高速公路聯網收費以及清分結算業務流程,提高業務協同效率具有重要意義。實驗結果表明,該方案在數據鏈上存儲與多方共享方面能夠滿足隱私保護要求,并且具有較高的性能,能夠滿足高速公路聯網收費數據共享需求。在后續的研究中,將在數據高效共識上鏈以及跨鏈傳輸等方面做更加深入的研究與探索。