萬宇杰 劉政森 曹杰 張大琳 熊書明


摘要:為克服傳統(tǒng)中心化數(shù)據(jù)存儲的局限性,設計了基于區(qū)塊鏈技術的交通客運身份管理系統(tǒng),分布式地存儲和管理個人身份信息。通過采用全節(jié)點和輕量級輕節(jié)點設計,實現(xiàn)用戶信息查詢的同時降低了內(nèi)存空間需求。利用私鑰對所生成區(qū)塊摘要進行加密,工作節(jié)點驗證時通過其公鑰進行解密。該系統(tǒng)解決了中心化存儲易被攻擊的問題,具有更好的安全性,存儲的信息可信且可溯源。
關鍵詞:區(qū)塊鏈;交通客運;數(shù)據(jù)訪問;管理系統(tǒng)
中圖分類號:TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)26-0096-03
開放科學(資源服務)標識碼(OSID):
1 引言
典型客運系統(tǒng)對駕駛員信息存儲大多采用中心化的B/S模式,該模式中系統(tǒng)的數(shù)據(jù)存儲在中心化的服務器中,雖然能夠輕量化客戶端、方便系統(tǒng)維護,但隨著大數(shù)據(jù)的發(fā)展,該模式已經(jīng)不能滿足數(shù)據(jù)存儲安全和空間要求[1]。為解決服務器存儲空間受限問題,文獻[2]提出了一種輕量級基于身份的云存儲管理方案,該方案引入基于身份的密碼體制,用戶私鑰由第三方審計者TPA(Third-Party Auditor)產(chǎn)生,使得客戶端能夠避免大量耗時運算,但是該方案對服務器負荷較大,且易產(chǎn)生數(shù)據(jù)篡改、數(shù)據(jù)泄露等問題。針對多方參與者協(xié)作場景導致的無法完全信任數(shù)據(jù)庫數(shù)據(jù)問題,文獻[3]提出基于區(qū)塊鏈的解決辦法,區(qū)塊鏈可在沒有第三方中介機構的協(xié)調(diào)下,實現(xiàn)可信的數(shù)據(jù)共享和點對點的價值傳輸,避免了煩瑣的人工對賬和爭議。文獻[4]指出區(qū)塊鏈是一種基于分布式存儲的去中心化技術,具有鏈式永久存儲帶來的不可篡改性、基于密碼學的安全性和分布存儲具有的抗攻擊性等特性,目前已有較多方案采用區(qū)塊鏈作為存儲系統(tǒng)底層技術。文獻[5]設計了基于“用戶信息鏈”和“交易鏈”雙鏈架構的醫(yī)藥商業(yè)資源公有區(qū)塊鏈,采用Merkle Tree結構對交易過程的數(shù)據(jù)進行記錄和存儲,利用雙鏈的結構將用戶信息和交易信息分開存儲管理,在保證用戶信息的隱私的同時不會影響交易數(shù)據(jù)的真實性、完整性以及不可篡改性,因此,采用區(qū)塊鏈技術進行數(shù)據(jù)存儲可以實現(xiàn)可信、可溯源的分布式去中心化管理。考慮到交通數(shù)據(jù)存儲數(shù)據(jù)量大、數(shù)據(jù)可信等需求,本文提出一種基于區(qū)塊鏈的交通客運身份存儲系統(tǒng),優(yōu)化客運系統(tǒng)駕駛員身份信息和運營車輛信息的存儲和管理,為執(zhí)法人員和出行客戶提供信息查詢接口。第2節(jié)完成了系統(tǒng)各模塊的設計;第3節(jié)對系統(tǒng)運行過程進行詳細說明;第4節(jié)介紹了系統(tǒng)性能分析;第5節(jié)給出結論。
2 系統(tǒng)模塊設計
該系統(tǒng)利用區(qū)塊鏈的不可篡改性、去中心化等特性保證數(shù)據(jù)的安全性、完整性和高度可信性,采用聯(lián)盟鏈的思想,并且結合輕量級輕節(jié)點的設計,同時針對該系統(tǒng)采用相應的P2P網(wǎng)絡和共識機制,整體架構主要分為區(qū)塊鏈部分和網(wǎng)絡部分,如圖1所示。
2.1 區(qū)塊鏈部分
該區(qū)塊鏈部分設計分為全節(jié)點模塊和輕節(jié)點模塊,該部分主要用于數(shù)據(jù)存儲管理和查詢。
1)全節(jié)點模塊
該系統(tǒng)的全節(jié)點是區(qū)塊鏈實現(xiàn)的主要模塊,區(qū)塊鏈是伴隨比特幣等虛擬貨幣提出的底層技術,該技術是由若干個數(shù)據(jù)塊組成,按照產(chǎn)生的時間先后順序,這些區(qū)塊被有序地鏈接在一起[6],通過后一個區(qū)塊指向前一個區(qū)塊的哈希值形成鏈式數(shù)據(jù)結構,如圖2所示。在運用區(qū)塊鏈技術的應用中,能夠在沒有可信第三方和復雜加密技術的情況下提供給用戶高度可信的查詢結果[7]。
該模塊主要實現(xiàn)信息輸入,產(chǎn)生、驗證并存儲區(qū)塊。在產(chǎn)生區(qū)塊時,除了打包需要存儲的駕駛員信息或營運車輛信息,還需要生成梅克爾樹。梅克爾樹是區(qū)塊鏈的基本組成部分,它依賴于將這些數(shù)據(jù)“塊”分裂成較小單位(bucket)的數(shù)據(jù)塊,每一個bucket塊僅包含幾個數(shù)據(jù)“塊”,然后取每個bucket單位數(shù)據(jù)塊再次進行哈希,重復同樣的過程,直至剩余的哈??倲?shù)變?yōu)?即根哈希(root hash),該算法可以很好地增強區(qū)塊鏈的可拓展性。梅克爾樹最為常見簡單的形式是二進制梅克爾樹(binary Mekle tree),其中一bucket單位的數(shù)據(jù)塊總是包含了兩個相鄰的塊或哈希,該系統(tǒng)將單個駕駛員信息作為一個塊哈?;?,再兩兩合并哈希化,直到生成梅克爾樹根為止,如圖3所示。
除了梅克爾樹和存儲信息之外,還需要將時間戳、前一個區(qū)塊的哈希、區(qū)塊高度以及版本號一并存入?yún)^(qū)塊,區(qū)塊生成完成后將該區(qū)塊中的梅克爾樹根BMR(Block Merkle Root)和區(qū)塊的時間戳BTimestamp(Block Timestamp)生成明文Mi如公式(1)所示,利用自己的私鑰SKi進行加密生成簽名Si,如公式(2)所示。
之后將區(qū)塊和簽名Si一同全網(wǎng)廣播給其他節(jié)點進行驗證,其他節(jié)點先用該節(jié)點的公鑰PKi進行解密得到Mj 如公式(3)所示,驗證梅克爾樹根和時間戳是否一致,即Mj== Mi :
并以此驗證該區(qū)塊是否為工作節(jié)點發(fā)來的區(qū)塊,驗證不通過則將其丟棄并將該節(jié)點標為非法節(jié)點,如果驗證通過每個工作節(jié)點則將其加入?yún)^(qū)塊鏈中,并且將該區(qū)塊的名稱和關鍵字信息,利用SHA-256算法進行哈希加密并錄入本地SQL-Sever數(shù)據(jù)庫中。
2)輕節(jié)點模塊
輕節(jié)點模塊主要實現(xiàn)信息查詢的功能,該模塊設計擯棄了傳統(tǒng)區(qū)塊鏈應用中對于輕節(jié)點存儲區(qū)塊頭的方式,減輕客戶端的負荷。在查詢時客戶端會將用戶輸入的關鍵字信息利用sha256算法進行哈?;侔l(fā)送給全節(jié)點查詢請求并等待全節(jié)點返回查詢結果,這樣便能在減輕全節(jié)點負荷的同時實現(xiàn)安全查詢。
2.2 網(wǎng)絡部分
該部分分為P2P網(wǎng)絡模塊和共識機制模塊,主要實現(xiàn)整個區(qū)塊鏈網(wǎng)絡全節(jié)點的對等連接并按照共識機制保持系統(tǒng)的安全、正常地運行。
1)P2P網(wǎng)絡模塊
該系統(tǒng)采用了集中式P2P網(wǎng)絡進行設計與實現(xiàn),即在網(wǎng)絡中設置一個中心節(jié)點,然后由中心節(jié)點建立一張全網(wǎng)資源信息索引節(jié)點表。這樣,當某個節(jié)點需要進行路由查詢時,只要向中心節(jié)點提交查詢請求,由中心節(jié)點搜索遍歷全網(wǎng)資源信息索引節(jié)點表就可以查詢?nèi)W(wǎng)是否有請求節(jié)點所需資源,結構圖如下圖4所示。
網(wǎng)絡拓撲結構設計實現(xiàn)以后,需要對網(wǎng)絡中不同種類的節(jié)點進行設計。該系統(tǒng)使用的節(jié)點大致分為三類:中心節(jié)點(服務器節(jié)點)提供路由查詢,并動態(tài)維護相關索引表格等服務;全節(jié)點負責產(chǎn)生驗證區(qū)塊,并將驗證通過的區(qū)塊加入?yún)^(qū)塊鏈中,并為輕節(jié)點提供信息查詢服務;輕節(jié)點負責發(fā)送用戶的查詢請求給全節(jié)點,并將全節(jié)點返回的結果信息輸出給用戶。由于網(wǎng)絡中到處都存在著中間設備,如NAT,使得任意兩臺設備不能直接的相互連接,因此,為了能讓網(wǎng)絡中節(jié)點能夠正常通信,本系統(tǒng)采用基于UDP的P2P穿越技術,實現(xiàn)網(wǎng)絡中所有節(jié)點互聯(lián)起來。
2)共識機制模塊
區(qū)塊鏈網(wǎng)絡采用的是去中心化的分布式存儲方式[8] ,因此需要有合理的共識機制來讓參與者們可以達成共識,保證參與者們的決策一致,傳統(tǒng)區(qū)塊鏈應用中一般采用工作量證明POW(Proof of work),該機制簡單來說就是用于證明完成過一定量的工作[9],但此共識機制過于消耗節(jié)點的算力其不產(chǎn)生其他實際效益,因此該系統(tǒng)采用PBFT共識算法(Practical Byzantine Fault Tolerance),保證系統(tǒng)在惡意節(jié)點不超過f(f=(n-1)/3,n為參與節(jié)點個數(shù))個時能夠正常、穩(wěn)定地運行。
3 系統(tǒng)運行過程詳解
該系統(tǒng)結合聯(lián)盟鏈的思想,全節(jié)點由系統(tǒng)管理人員運行,輕節(jié)點則是為旅客或者執(zhí)法人員提供查詢接口,該系統(tǒng)運行過程如圖5所示。
Step1:系統(tǒng)管理員登錄運行全節(jié)點客戶端,全節(jié)點上線首先進行區(qū)塊同步,該節(jié)點向中心節(jié)點查詢當前區(qū)塊鏈高度,如果本地區(qū)塊鏈高度低于當前區(qū)塊鏈網(wǎng)絡高度則向鄰近節(jié)點發(fā)送同步申請下載其余區(qū)塊鏈到本地。
Step2:中心節(jié)點根據(jù)在線的全節(jié)點生成數(shù)組形式的在線節(jié)點列表,以數(shù)組下標代表相應節(jié)點的標號。
Step3:中心節(jié)點隨機選取一定數(shù)量的全節(jié)點進行駕駛員信息或營運車輛信息的生成,其中駕駛員信息由姓名、性別、準駕車型、從業(yè)資格證類別等關鍵信息組成,營運車輛信息由車牌號、車主或者企業(yè)、購置年份等關鍵信息組成, 完成后進行全網(wǎng)廣播,全網(wǎng)節(jié)點在驗證通過后存入本地內(nèi)存池。
Step4:中心節(jié)點按照預定規(guī)則選取一個全節(jié)點進行區(qū)塊的生成并發(fā)送在線節(jié)點列表,該節(jié)點需從本地內(nèi)容池選取一定數(shù)量的信息打包進入新產(chǎn)生的區(qū)塊中,除此之外,該區(qū)塊的內(nèi)容還有時間戳,梅克爾樹,前一個區(qū)塊的哈希值。
Step5:進行區(qū)塊生成的節(jié)點生成簽名并連同新區(qū)塊全網(wǎng)廣播,等待驗證,驗證通過后全網(wǎng)節(jié)點將新區(qū)塊入鏈并將該區(qū)塊的區(qū)塊名和關鍵字信息如駕駛員信息的姓名、身份證、營運車輛的車牌號,哈希化后錄入本地Sql-Server數(shù)據(jù)庫便于查詢;如果驗證不通過則更換新的全節(jié)點進行區(qū)塊生成。驗證結束之后系統(tǒng)將開始進行新的一輪節(jié)點選取。
Step6:輕節(jié)點進行查詢功能,首先由用戶輸入查詢信息的關鍵字,如駕駛員信息的姓名、身份證、營運車輛的車牌號,本地哈希化計算完成后向全節(jié)點發(fā)送查詢請求,全節(jié)點將用戶輸入進行SqlServer數(shù)據(jù)庫查詢,如果匹配則根據(jù)區(qū)塊名導出查詢結果返回給輕節(jié)點,否則返回查詢失敗。
4 系統(tǒng)性能分析
4.1 安全性分析
該系統(tǒng)在底層架構方面,區(qū)塊鏈具有不可篡改性和可溯源,因而可保證駕駛員信息或車輛信息不被篡改,并且可根據(jù)鏈式結構追溯任一區(qū)塊,保證區(qū)塊正確。
在全節(jié)點方面,全節(jié)點將區(qū)塊打包并進行全網(wǎng)廣播,這個過程中利用了非對稱加密技術,打包節(jié)點使用私鑰對區(qū)塊消息摘要加密,其他全節(jié)點收到廣播后使用其公鑰解密??紤]到全節(jié)點中的某些節(jié)點可能出錯、出錯的程度不同,對整個系統(tǒng)的危害程度也不同,因此利用共識機制來在上述情景中使大多數(shù)節(jié)點達成共識,維護系統(tǒng)正常運行。
在輕節(jié)點方面,輕節(jié)點具有查詢信息的功能,發(fā)送的查詢信息進行了哈希加密,而為了保證數(shù)據(jù)庫中數(shù)據(jù)的安全,使用了哈希算法進行加密,哈希是單向加密,數(shù)據(jù)庫僅作為查詢索引,所以即使數(shù)據(jù)庫中的敏感數(shù)據(jù)遭到惡意竊取或泄露,數(shù)據(jù)也不可讀。
4.2 健壯性分析
區(qū)塊中的數(shù)據(jù)是無法被修改的,因此惡意節(jié)點無法使得偽造篡改相關信息,只能通過一些手段使得系統(tǒng)分叉。接下來證明惡意節(jié)點不超過f個時共識機制可以正常運行。假設將共識節(jié)點分為三部分,N表示全部節(jié)點總數(shù),F(xiàn)代表惡意節(jié)點且已合謀,R1表示與F達成共識接受新發(fā)布區(qū)塊的節(jié)點集合,R2表示與F達成共識撤銷R1共識節(jié)點集合,但R1與R2都非惡意節(jié)點。若想達成分叉條件,不難得出公式(4),公式(5):
那么在極端情況下令F=f,那么顯然有公式(6):
又因為|R1|+|R2|=n-f,則可推出公式(7):
又因為f=(n-1)/3,帶入公式(7)可知不等式不成立,這與已知相互矛盾,所以可知當惡意節(jié)點不超過f個時,共識機制可以正常運行,證畢。
4.3 可拓展性分析
該系統(tǒng)具有很好的拓展性。在輕節(jié)點方面,能夠?qū)⑤p節(jié)點移植到移動端,實現(xiàn)更加輕便地日常使用,且可以添加與相關道路運輸機構接口,實現(xiàn)對于用戶乘坐的營運車輛班次查詢。在系統(tǒng)設計方面,該系統(tǒng)是按不同模塊進行設計的,針對不同的需求可以對不同模塊進行調(diào)整,具有良好的拓展性,同時P2P網(wǎng)絡本身也就具有很強的拓展性,容易應對不同的需求變化。
5 結論
隨著車輛使用數(shù)量的上升,駕駛員的個人信息量逐年增大,同時傳統(tǒng)信息管理系統(tǒng)模式存在對服務器要求過高等局限性,而分布式存儲的優(yōu)勢日益顯著,區(qū)塊鏈技術剛好補全了這一缺陷。本文提出一種基于區(qū)塊鏈技術的交通客運身份存儲系統(tǒng),該系統(tǒng)架構分為區(qū)塊鏈部分和網(wǎng)絡部分,區(qū)塊鏈部分結合全節(jié)點和輕節(jié)點設計,由全節(jié)點后臺自動完成打包和驗證區(qū)塊等工作,方便系統(tǒng)管理人員的工作與維護,而輕量化的輕節(jié)點能夠便捷輕節(jié)點用戶的日常使用,網(wǎng)絡部分采用具有良好拓展性的P2P網(wǎng)絡以及低耗能的PBFT共識機制,保證系統(tǒng)能夠穩(wěn)定、安全地運行。在未來,該系統(tǒng)還可以拓展更多的功能,例如存儲客運班次的路線信息、乘客的路線信息,提供相應的查詢接口等,可以滿足用戶的更多需求。
參考文獻:
[1] 袁勇,王飛躍.區(qū)塊鏈技術發(fā)展現(xiàn)狀與展望[J].自動化學報,2016,42(4):481-494.
[2] 張悅,于佳.基于身份的云存儲完整性檢測方案[J].計算機工程,2018,44(3):8-12.
[3] 邵奇峰,金澈清,張召,等.區(qū)塊鏈技術:架構及進展[J].計算機學報,2018,41(5):969-988.
[4] Satoshi Nakamoto.Bitcoin:A Peer-to-Peer Electronic Cash System[EB/OL]. https://bitcoin.org/en/bitcoin-paper.
[5] 畢婭,周貝,冷凱君,等.基于雙鏈架構的醫(yī)藥商業(yè)資源公有區(qū)塊鏈[J].計算機科學,2018,45(2):40-47.
[6] 林凡,鐘萬春,成杰,等.基于區(qū)塊鏈的人員信息管理系統(tǒng)設計[J].通信技術,2019,52(1):222-226.
[7] 劉海,李興華,雒彬,等.基于區(qū)塊鏈的分布式K匿名位置隱私保護方案[J].計算機學報,2019(5).
[8] 郝琨,信俊昌,黃達,等.去中心化的分布式存儲模型[J].計算機工程與應用,2017,53(24):1-7,22.
[9] 吳振銓,梁宇輝,康嘉文,等.基于聯(lián)盟區(qū)塊鏈的智能電網(wǎng)數(shù)據(jù)安全存儲與共享系統(tǒng)[J].計算機應用,2017,37(10):2742-2747.
【通聯(lián)編輯:代影】