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


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