郭志達,王 鑫,李金宇
(大連交通大學(xué) 經(jīng)濟管理學(xué)院,大連 116028)
隨著中國鐵路客運進入“高速”時代,鐵路出行成為大眾旅客的首選.伴隨著鐵路旅客身份信息數(shù)據(jù)體量巨大、信息內(nèi)容敏感、高價值等特點,傳統(tǒng)的身份認證模式已經(jīng)不能滿足“高鐵時代”鐵路旅客身份認證的安全需求與體驗需求.而區(qū)塊鏈應(yīng)用模式融合了P2P 網(wǎng)絡(luò)、加密算法、分布式計算等多種技術(shù),將區(qū)塊鏈應(yīng)用模式應(yīng)用于鐵路旅客身份認證領(lǐng)域價值很大.區(qū)塊鏈應(yīng)用模式廣泛應(yīng)用于教育就業(yè)、公民身份、電子護照等領(lǐng)域.Swan M 認為區(qū)塊鏈在未來可以適用于金融服務(wù)、供應(yīng)鏈管理、身份管理、教育就業(yè)等社會場景[1,2].Fu DQ 利用區(qū)塊鏈和open badges規(guī)范設(shè)計了一套發(fā)布、顯示、驗證數(shù)字學(xué)位證書的系統(tǒng)[3].Sullivan C 指出區(qū)塊鏈技術(shù)的應(yīng)用將會改變“電子公民”的信息存儲校驗方式[4].Muzammal M 系統(tǒng)分析了基于區(qū)塊鏈技術(shù)和傳統(tǒng)分布式數(shù)據(jù)庫特性的ChainSQL 系統(tǒng)[5].Zyskind G 利用區(qū)塊鏈技術(shù)設(shè)計了一套去中心化的個人數(shù)據(jù)管理系統(tǒng)[6].Paul D 對比了基于區(qū)塊鏈技術(shù)身份認證項目的具體應(yīng)用情況[7].Faísca JG 基于Web ID與JWT 實現(xiàn)去中心化身份管理[8].呂婧淑將面部識別和區(qū)塊鏈結(jié)合,提出一套雙因子身份認證模型,詳細介紹了模型中所涉及的組件和參與方,并闡述了模型的操作流程[9].國內(nèi)學(xué)者對區(qū)塊鏈應(yīng)用模式也進行了大量研究,王成提出實現(xiàn)精簡保險業(yè)務(wù)流程的承保對賬方案和實現(xiàn)自動化理賠的流程設(shè)計方案[10].周亮瑾為保障旅客的隱私安全提出利用區(qū)塊鏈技術(shù)的數(shù)據(jù)、網(wǎng)絡(luò)、系統(tǒng)和組織管理安全的管理策略與技術(shù)架構(gòu)[11].陳宇翔分析了基于區(qū)塊鏈的身份管理方案的優(yōu)勢[12].董貴山重點對較為成熟的ShoCard 公司的區(qū)塊鏈應(yīng)用場景進行了分析[13].彭永勇在區(qū)塊鏈上存儲公鑰加密的個人信息摘要,私鑰存儲在客戶端,鏈上應(yīng)用通過調(diào)用接口進行身份校驗[14].史天運總結(jié)出適合區(qū)塊鏈技術(shù)應(yīng)用具有參與方多、交易復(fù)雜、涉及敏感信息傳輸?shù)忍攸c,并提出鐵路統(tǒng)一身份認證、信用管理、加密數(shù)字客票等應(yīng)用的概念驗證模型[15].
綜上,國內(nèi)外學(xué)者基于多視角并結(jié)合多個應(yīng)用領(lǐng)域?qū)^(qū)塊鏈技術(shù)進行了廣泛的理論探討與應(yīng)用研究,理論意義與現(xiàn)實價值很大,但將區(qū)塊鏈技術(shù)與零知識證明,生物識別技術(shù)結(jié)合起來創(chuàng)新區(qū)塊鏈應(yīng)用模式并應(yīng)用在鐵路旅客身份認證領(lǐng)域還未涉及.因此,本文基于區(qū)塊鏈應(yīng)用模式,面向智能手機客戶端設(shè)計與開發(fā)一套鐵路旅客身份認證系統(tǒng)(簡稱“鐵旅ID 系統(tǒng)”),以期提高鐵路旅客身份認證效率,提升鐵路客運服務(wù)運作管理系統(tǒng)的品質(zhì).
隨著鐵路客運運量的激增,現(xiàn)有鐵路旅客身份認證模式面臨許多問題,諸如中心化體系維護成本高,易受攻擊,數(shù)據(jù)防篡改能力薄弱,身份所有權(quán)模糊等.利用區(qū)塊鏈去中心化、分布式存儲的特點可以弱化中心服務(wù)器的壓力,提高抗攻擊能力;其不可篡改的特點可以有效提升身份認證系統(tǒng)數(shù)據(jù)防篡改能力;結(jié)合生物認證技術(shù),可以確保旅客對其身份擁有控制權(quán);借助零知識證明技術(shù),在旅客身份驗證時,僅需出示相關(guān)二維碼即可,校驗方通過尋址對比,就能驗證信息真實性.故本文提出“區(qū)塊鏈技術(shù)+不對稱加密技術(shù)+數(shù)字身份認證服務(wù)+生物識別技術(shù)”的技術(shù)解決方案.基于上述分析,基于區(qū)塊鏈應(yīng)用模式的鐵路旅客身份認證系統(tǒng)需依托具有指紋識別、人臉識別功能的智能手機,構(gòu)建一個基于區(qū)塊鏈應(yīng)用模式的鐵路旅客身份認證手機APP,在鐵路旅客進行購票、取票、進站、檢票等需要驗證個人身份的場景下,利用鐵旅ID 系統(tǒng)進行身份授權(quán)與認證,避免了用身份證號購票、出示身份證驗證身份時可能造成的信息盜用與隱私泄露等問題,具體用例如圖1所示.
當用戶在12306 手機客戶端進行火車票購票時,添加相應(yīng)的乘車人,此時就需要此乘車人使用鐵旅ID 系統(tǒng)對“用其身份進行購票”這一操作進行授權(quán);授權(quán)時,鐵旅ID 系統(tǒng)會先對操作人進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統(tǒng)會詢問是否對“購買某車次車票”進行身份授權(quán),確認授權(quán)后,12306 客戶端就可以使用該乘車人身份進行購票了.
當用戶在自動取票機進行取票操作時,取票機需先驗證取票人身份信息,此時,用戶需通過手機APP打開鐵旅ID 系統(tǒng),點擊“出示身份二維碼”選項;系統(tǒng)會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統(tǒng)會顯示該用戶的身份二維碼;取票機掃描用戶二維碼,獲取用戶身份信息,打印出相應(yīng)的紙質(zhì)車票.
圖1 用例圖
當用戶進站時,車站工作人員需驗證進站人身份、車次,此時用戶需打開鐵旅ID 系統(tǒng),點擊“出示身份二維碼”選項;系統(tǒng)會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統(tǒng)會顯示該用戶的身份二維碼;車站工作人員掃描用戶身份二維碼,獲取用戶身份信息、車次信息,驗證完畢,用戶即可進站.
當用戶上車檢票時,車站工作人員需驗證進站人身份、車次,此時用戶需打開鐵旅ID 系統(tǒng),點擊“出示身份二維碼”選項;系統(tǒng)會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統(tǒng)會顯示該用戶的身份二維碼;車站工作人員掃描用戶身份二維碼,獲取用戶身份信息、車次信息,驗證完畢,用戶即可上車.若用戶購買的車次支持電子客票,那么用戶的乘車身份會與電子客票進行綁定,用戶無需取票,出示身份二維碼即可進站、檢票和乘車.
(1)開發(fā)平臺的選擇
選取Ethereum[16]作為開發(fā)平臺,由于身份認證系統(tǒng)通常在某些特定用戶間使用,而不是Ethereum 上所有節(jié)點,所以為了提高效率,系統(tǒng)將選用私有鏈.從鐵路旅客身份信息的所有權(quán)出發(fā),將身份信息存儲在本地客戶端,身份信息經(jīng)過系統(tǒng)驗證之后將摘要數(shù)據(jù)在區(qū)塊鏈上封存,最終實現(xiàn)以Ethereum 為原型的,適用于鐵路旅客身份認證應(yīng)用場景的認證系統(tǒng).
(2)手機App 技術(shù)選型
基于HTML5[17]混合移動應(yīng)用開發(fā)技術(shù),使用React Native 作為開發(fā)框架,采用C/S 開發(fā)模型,使用服務(wù)器處理客戶端發(fā)出的請求.
(3)服務(wù)器框架選型
基于Node.js[17],使用Nest.js 作為服務(wù)框架可以構(gòu)建一個完整的,對React Native 友好的服務(wù)器.
(4)數(shù)據(jù)庫選型
采用非敏感數(shù)據(jù)存儲在PostgreSQL 數(shù)據(jù)庫中[18],少量敏感數(shù)據(jù)存儲在區(qū)塊鏈中的解決方案.
本文設(shè)計的鐵旅ID 系統(tǒng)將在Ethereum 平臺上開發(fā)實現(xiàn),結(jié)合Ethereum 架構(gòu)設(shè)計理念采用分層的架構(gòu)設(shè)計模式.整個鐵旅ID 系統(tǒng)被分為兩個層次:上層的身份認證接口層和底層的區(qū)塊鏈服務(wù)層,鐵旅ID 系統(tǒng)的整體架構(gòu)如圖2所示.
區(qū)塊鏈服務(wù)層為整個系統(tǒng)搭建服務(wù)基礎(chǔ),其中包括3 個模塊:區(qū)塊鏈服務(wù)模塊,智能合約服務(wù)模塊,成員管理模塊.鐵旅ID 系統(tǒng)中產(chǎn)生的不同事件將會觸發(fā)不同的模塊.
旅客身份認證接口為外部應(yīng)用提供基本的區(qū)塊鏈讀寫操作,為鐵旅ID 用戶和區(qū)塊鏈之間搭建數(shù)據(jù)交換的橋梁,鐵旅ID 系統(tǒng)有旅客、校驗方、服務(wù)提供方、監(jiān)管方等實體,應(yīng)用交互層能向外部實體提供身份認證服務(wù)、認證記錄查詢服務(wù)、初始身份查驗服務(wù)、監(jiān)管服務(wù).同時身份認證接口層能夠響應(yīng)用戶對區(qū)塊鏈上的數(shù)據(jù)查詢請求,利用認證記錄查詢接口獲取數(shù)據(jù),并用更加友好的方式向用戶展示身份認證記錄信息.
應(yīng)用交互層和區(qū)塊鏈服務(wù)層共同組成信任服務(wù)模型,不但可改善傳統(tǒng)中心化系統(tǒng)的不足,而且還能滿足旅客信息保護需求和監(jiān)管需求.
圖2 鐵旅ID 系統(tǒng)的整體架構(gòu)
鐵旅ID 系統(tǒng)有5 個模塊,如圖3所示,分別是注冊模塊、登錄模塊、生物信息認證模塊、身份認證模塊和認證記錄查詢模塊.
圖3 鐵旅ID 系統(tǒng)功能模塊圖
圖3中,注冊模塊包含旅客用戶注冊功能和旅客身份信息上傳功能,登錄模塊主要功能為旅客用戶登錄,生物信息認證模塊包含旅客指紋認證功能和人臉識別功能,身份認證模塊包含認證請求處理功能和身份二維碼展示功能,認證記錄查詢模塊負責(zé)實現(xiàn)認證記錄查詢功能
1)注冊模塊設(shè)計
注冊模塊流程圖如圖4所示,首先旅客出行用戶需要提供本人的手機號,用戶名,密碼等賬戶信息,生成一個可登錄的賬戶存入普通數(shù)據(jù)庫內(nèi),生成JWT 返回至客戶端,然后客戶端在本地創(chuàng)建非對稱秘鑰對,并使用生物信息加密,用戶將其他身份信息(手機號碼,身份證號碼等)和公鑰回傳至服務(wù)器,系統(tǒng)將信息提交至身份審核接口;用戶身份審核通過后,系統(tǒng)將存儲用戶公鑰并用公鑰將用戶身份信息加密后寫入?yún)^(qū)塊鏈;系統(tǒng)激活用戶賬戶并調(diào)用智能合約將其余身份信息加密后寫入?yún)^(qū)塊鏈,最后旅客用戶注冊成功.
圖4 注冊模塊流程圖
2)登錄證模塊設(shè)計
登錄模塊流程圖如圖5所示,客戶端向服務(wù)器發(fā)起登錄請求;服務(wù)器接受請求,從數(shù)據(jù)庫請求用戶賬戶信息摘要;數(shù)據(jù)庫返回賬戶信息摘要;服務(wù)器驗證賬戶信息并生成token;服務(wù)器向客戶端返回token,用戶登錄成功.
3)生物信息認證模塊設(shè)計
生物信息認證模塊流程圖如圖6所示,客戶端向服務(wù)器發(fā)起請求獲取公鑰加密的身份信息;服務(wù)器接受請求,并向區(qū)塊鏈請求公鑰加密的身份信息;區(qū)塊鏈向服務(wù)器返回公鑰加密的身份信息;服務(wù)器向客戶端返回公鑰加密的身份信息;客戶端調(diào)用手機生物認證,成功后用私鑰解密身份信息.
圖5 登錄模塊流程圖
4)身份認證模塊設(shè)計
身份認證模塊流程圖如圖7所示,身份校驗方向客戶端發(fā)起身份認證請求;客戶端調(diào)用生物信息認證模塊得到身份信息;客戶端向校驗方發(fā)送私鑰加密的用戶信息、用戶名、時間戳;校驗方向服務(wù)器請求公鑰-服務(wù)器驗證校驗方合法性后返回用戶公鑰;校驗方用公鑰解密信息并校驗時間戳;校驗方使用用戶名向區(qū)塊鏈請求該用戶加密的身份信息;區(qū)塊鏈向校驗方返回用戶加密的身份信息;校驗方用公鑰加密用戶身份信息并與區(qū)塊鏈上的加密信息進行驗證;認證成功.
圖6 生物信息認證模塊流程圖
圖7 身份認證模塊流程圖
5)認證記錄查詢模塊設(shè)計
認證記錄查詢模塊流程圖如圖8所示,客戶端調(diào)用手機生物認證核實用戶身份;生物認證成功后,客戶端向服務(wù)器發(fā)起請求獲取身份認證記錄;服務(wù)器接受請求,并向區(qū)塊鏈請求身份認證記錄;區(qū)塊鏈向服務(wù)器返回身份認證記錄;服務(wù)器向客戶端返回身份認證記錄.
圖8 認證記錄模塊流程圖
注冊流程完畢后,用戶可以使用賬號登錄,進入系統(tǒng)主頁,進行下一步操作.系統(tǒng)主頁中的“出示身份二維碼”和“認證請求處理”兩項功能都是對身份信息進行操作,完成身份的認證和授權(quán).
用戶注冊、登錄和主頁功能界面如圖9所示,新用戶點擊立即注冊即可進入注冊頁面,鐵路旅客可以通過該界面注冊自己的鐵旅ID 賬號,用于登錄系統(tǒng).賬號注冊完畢后,用戶還需提交自己的身份信息,如圖10所示,通過正則校驗和腳本的條件篩查可過濾大部分非法輸入,如果用戶名重名、密碼復(fù)雜度低、兩次密碼輸入不一致、輸入格式不匹配等輸入錯誤,系統(tǒng)界面會顯示相應(yīng)提示.若服務(wù)端驗證身份信息真實有效,在通過生物信息識別后,系統(tǒng)將身份信息進行摘要哈希處理生成數(shù)據(jù)摘要并保存在區(qū)塊鏈上.
圖9 用戶注冊登錄
當用戶進行有關(guān)身份認證授權(quán)的操作時,系統(tǒng)需先進行生物信息認證,以確定操作人是身份所有者.用戶進行身份認證授權(quán)分兩種情況,主動出示身份二維碼和其他APP 認證請求處理.
在取票與進站等需要出示身份二維碼的情景下,如圖11,用戶點擊“出示身份二維碼”,系統(tǒng)會進行生物信息識別,識別通過后,系統(tǒng)會顯示包含用戶名、公鑰、時間戳的二維碼.
在購票時,12306 客戶端會向鐵旅ID 請求身份認證授權(quán),此時,鐵旅ID 會進行認證請求處理,系統(tǒng)會顯示請求時間、請求來源和授權(quán)原因,如圖12,用戶點擊“確定授權(quán)”,在生物信息認證成功之后,授權(quán)成功.
身份認證記錄查詢功能記錄了每一次用戶身份的授權(quán),用戶點擊“認證記錄查詢”,系統(tǒng)會先進行生物信息認證,然后顯示身份認證記錄,內(nèi)容包括認證時間、請求來源和授權(quán)原因,如圖13所示.
本系統(tǒng)已在Android、IOS 系統(tǒng)的設(shè)備上進行安裝調(diào)試,針對鐵路旅客購票、取票、進站和檢票等場景,對系統(tǒng)進行大量性能測試.測試顯示,在一臺八核主頻2.8 GHz 8 GB 的安卓設(shè)備上,通過私鑰解密信息的平均時耗為23 毫秒;將生成身份二維碼的平均時耗為52 毫秒;在一臺四核3.3 GHz 8 GB 服務(wù)器上,收到獲取鏈上數(shù)據(jù)平均時耗為130 毫秒,在數(shù)據(jù)量上升至20 萬條后,獲取鏈上數(shù)據(jù)平均時耗為470 毫秒,其中測試結(jié)果主要受用戶移動設(shè)備性能、服務(wù)器性能和網(wǎng)絡(luò)延遲影響,系統(tǒng)功能的可用性、信息驗證的有效性、數(shù)據(jù)交互的正確性、生物認證的準確性都滿足業(yè)務(wù)分析中提到的要求.
圖10 身份信息提交
圖11 身份二維碼
為了推進鐵路旅客身份認證管理由集中式向去中心或多中心化創(chuàng)新發(fā)展,優(yōu)化鐵路旅客身份認證管理的運作流程,本文面向智能手機用戶端,設(shè)計并實現(xiàn)了一套基于區(qū)塊鏈應(yīng)用模式的鐵路旅客身份認證管理系統(tǒng).第一,系統(tǒng)把旅客身份信息保存在客戶端本地,信息摘要封存在鏈上,實現(xiàn)了鐵路旅客身份信息本地存儲、鏈上校驗,驗證時無需出示明文身份信息,僅需出示存有相關(guān)信息的數(shù)據(jù)摘要、公鑰的二維碼即可,校驗方通過尋址對比就能驗證信息真實性,有效避免了鐵路旅客身份信息泄露問題.第二,系統(tǒng)將旅客身份信息數(shù)據(jù)分布式存儲,采用時間戳技術(shù)增強了旅客身份數(shù)據(jù)的抗篡改性和可追溯性,利用非對稱加密技術(shù)在保護旅客隱私、實現(xiàn)實名制的前提下增強了數(shù)據(jù)的透明性、安全性和魯棒性,進行生物信息認證確保了鐵路旅客對身份信息的所有權(quán),部署智能合約提高了鐵路旅客身份認證的準確性和智能化水平,提供API 實現(xiàn)第三方認證集成調(diào)用,提供SDK 實現(xiàn)二次擴展集成開發(fā).
本研究的局限表現(xiàn)在沒有對生物識別技術(shù)進行獨立開發(fā),而是采取調(diào)用智能手機用戶端自帶生物識別接口的方式,實現(xiàn)生物識別的功能.下一步的研究可以考慮面向服務(wù)端來搭建私有鏈并對區(qū)塊數(shù)據(jù)存儲與智能合約的進行深入開發(fā)研究.
圖12 認證請求處理
圖13 認證記錄查詢