郭志達,王 鑫,李金宇
(大連交通大學 經濟管理學院,大連 116028)
隨著中國鐵路客運進入“高速”時代,鐵路出行成為大眾旅客的首選.伴隨著鐵路旅客身份信息數據體量巨大、信息內容敏感、高價值等特點,傳統的身份認證模式已經不能滿足“高鐵時代”鐵路旅客身份認證的安全需求與體驗需求.而區塊鏈應用模式融合了P2P 網絡、加密算法、分布式計算等多種技術,將區塊鏈應用模式應用于鐵路旅客身份認證領域價值很大.區塊鏈應用模式廣泛應用于教育就業、公民身份、電子護照等領域.Swan M 認為區塊鏈在未來可以適用于金融服務、供應鏈管理、身份管理、教育就業等社會場景[1,2].Fu DQ 利用區塊鏈和open badges規范設計了一套發布、顯示、驗證數字學位證書的系統[3].Sullivan C 指出區塊鏈技術的應用將會改變“電子公民”的信息存儲校驗方式[4].Muzammal M 系統分析了基于區塊鏈技術和傳統分布式數據庫特性的ChainSQL 系統[5].Zyskind G 利用區塊鏈技術設計了一套去中心化的個人數據管理系統[6].Paul D 對比了基于區塊鏈技術身份認證項目的具體應用情況[7].Faísca JG 基于Web ID與JWT 實現去中心化身份管理[8].呂婧淑將面部識別和區塊鏈結合,提出一套雙因子身份認證模型,詳細介紹了模型中所涉及的組件和參與方,并闡述了模型的操作流程[9].國內學者對區塊鏈應用模式也進行了大量研究,王成提出實現精簡保險業務流程的承保對賬方案和實現自動化理賠的流程設計方案[10].周亮瑾為保障旅客的隱私安全提出利用區塊鏈技術的數據、網絡、系統和組織管理安全的管理策略與技術架構[11].陳宇翔分析了基于區塊鏈的身份管理方案的優勢[12].董貴山重點對較為成熟的ShoCard 公司的區塊鏈應用場景進行了分析[13].彭永勇在區塊鏈上存儲公鑰加密的個人信息摘要,私鑰存儲在客戶端,鏈上應用通過調用接口進行身份校驗[14].史天運總結出適合區塊鏈技術應用具有參與方多、交易復雜、涉及敏感信息傳輸等特點,并提出鐵路統一身份認證、信用管理、加密數字客票等應用的概念驗證模型[15].
綜上,國內外學者基于多視角并結合多個應用領域對區塊鏈技術進行了廣泛的理論探討與應用研究,理論意義與現實價值很大,但將區塊鏈技術與零知識證明,生物識別技術結合起來創新區塊鏈應用模式并應用在鐵路旅客身份認證領域還未涉及.因此,本文基于區塊鏈應用模式,面向智能手機客戶端設計與開發一套鐵路旅客身份認證系統(簡稱“鐵旅ID 系統”),以期提高鐵路旅客身份認證效率,提升鐵路客運服務運作管理系統的品質.
隨著鐵路客運運量的激增,現有鐵路旅客身份認證模式面臨許多問題,諸如中心化體系維護成本高,易受攻擊,數據防篡改能力薄弱,身份所有權模糊等.利用區塊鏈去中心化、分布式存儲的特點可以弱化中心服務器的壓力,提高抗攻擊能力;其不可篡改的特點可以有效提升身份認證系統數據防篡改能力;結合生物認證技術,可以確保旅客對其身份擁有控制權;借助零知識證明技術,在旅客身份驗證時,僅需出示相關二維碼即可,校驗方通過尋址對比,就能驗證信息真實性.故本文提出“區塊鏈技術+不對稱加密技術+數字身份認證服務+生物識別技術”的技術解決方案.基于上述分析,基于區塊鏈應用模式的鐵路旅客身份認證系統需依托具有指紋識別、人臉識別功能的智能手機,構建一個基于區塊鏈應用模式的鐵路旅客身份認證手機APP,在鐵路旅客進行購票、取票、進站、檢票等需要驗證個人身份的場景下,利用鐵旅ID 系統進行身份授權與認證,避免了用身份證號購票、出示身份證驗證身份時可能造成的信息盜用與隱私泄露等問題,具體用例如圖1所示.
當用戶在12306 手機客戶端進行火車票購票時,添加相應的乘車人,此時就需要此乘車人使用鐵旅ID 系統對“用其身份進行購票”這一操作進行授權;授權時,鐵旅ID 系統會先對操作人進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統會詢問是否對“購買某車次車票”進行身份授權,確認授權后,12306 客戶端就可以使用該乘車人身份進行購票了.
當用戶在自動取票機進行取票操作時,取票機需先驗證取票人身份信息,此時,用戶需通過手機APP打開鐵旅ID 系統,點擊“出示身份二維碼”選項;系統會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統會顯示該用戶的身份二維碼;取票機掃描用戶二維碼,獲取用戶身份信息,打印出相應的紙質車票.

圖1 用例圖
當用戶進站時,車站工作人員需驗證進站人身份、車次,此時用戶需打開鐵旅ID 系統,點擊“出示身份二維碼”選項;系統會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統會顯示該用戶的身份二維碼;車站工作人員掃描用戶身份二維碼,獲取用戶身份信息、車次信息,驗證完畢,用戶即可進站.
當用戶上車檢票時,車站工作人員需驗證進站人身份、車次,此時用戶需打開鐵旅ID 系統,點擊“出示身份二維碼”選項;系統會先對用戶進行生物識別,確保操作人是身份所有者;當確認操作人是身份所有者時,系統會顯示該用戶的身份二維碼;車站工作人員掃描用戶身份二維碼,獲取用戶身份信息、車次信息,驗證完畢,用戶即可上車.若用戶購買的車次支持電子客票,那么用戶的乘車身份會與電子客票進行綁定,用戶無需取票,出示身份二維碼即可進站、檢票和乘車.
(1)開發平臺的選擇
選取Ethereum[16]作為開發平臺,由于身份認證系統通常在某些特定用戶間使用,而不是Ethereum 上所有節點,所以為了提高效率,系統將選用私有鏈.從鐵路旅客身份信息的所有權出發,將身份信息存儲在本地客戶端,身份信息經過系統驗證之后將摘要數據在區塊鏈上封存,最終實現以Ethereum 為原型的,適用于鐵路旅客身份認證應用場景的認證系統.
(2)手機App 技術選型
基于HTML5[17]混合移動應用開發技術,使用React Native 作為開發框架,采用C/S 開發模型,使用服務器處理客戶端發出的請求.
(3)服務器框架選型
基于Node.js[17],使用Nest.js 作為服務框架可以構建一個完整的,對React Native 友好的服務器.
(4)數據庫選型
采用非敏感數據存儲在PostgreSQL 數據庫中[18],少量敏感數據存儲在區塊鏈中的解決方案.
本文設計的鐵旅ID 系統將在Ethereum 平臺上開發實現,結合Ethereum 架構設計理念采用分層的架構設計模式.整個鐵旅ID 系統被分為兩個層次:上層的身份認證接口層和底層的區塊鏈服務層,鐵旅ID 系統的整體架構如圖2所示.
區塊鏈服務層為整個系統搭建服務基礎,其中包括3 個模塊:區塊鏈服務模塊,智能合約服務模塊,成員管理模塊.鐵旅ID 系統中產生的不同事件將會觸發不同的模塊.
旅客身份認證接口為外部應用提供基本的區塊鏈讀寫操作,為鐵旅ID 用戶和區塊鏈之間搭建數據交換的橋梁,鐵旅ID 系統有旅客、校驗方、服務提供方、監管方等實體,應用交互層能向外部實體提供身份認證服務、認證記錄查詢服務、初始身份查驗服務、監管服務.同時身份認證接口層能夠響應用戶對區塊鏈上的數據查詢請求,利用認證記錄查詢接口獲取數據,并用更加友好的方式向用戶展示身份認證記錄信息.
應用交互層和區塊鏈服務層共同組成信任服務模型,不但可改善傳統中心化系統的不足,而且還能滿足旅客信息保護需求和監管需求.

圖2 鐵旅ID 系統的整體架構
鐵旅ID 系統有5 個模塊,如圖3所示,分別是注冊模塊、登錄模塊、生物信息認證模塊、身份認證模塊和認證記錄查詢模塊.

圖3 鐵旅ID 系統功能模塊圖
圖3中,注冊模塊包含旅客用戶注冊功能和旅客身份信息上傳功能,登錄模塊主要功能為旅客用戶登錄,生物信息認證模塊包含旅客指紋認證功能和人臉識別功能,身份認證模塊包含認證請求處理功能和身份二維碼展示功能,認證記錄查詢模塊負責實現認證記錄查詢功能
1)注冊模塊設計
注冊模塊流程圖如圖4所示,首先旅客出行用戶需要提供本人的手機號,用戶名,密碼等賬戶信息,生成一個可登錄的賬戶存入普通數據庫內,生成JWT 返回至客戶端,然后客戶端在本地創建非對稱秘鑰對,并使用生物信息加密,用戶將其他身份信息(手機號碼,身份證號碼等)和公鑰回傳至服務器,系統將信息提交至身份審核接口;用戶身份審核通過后,系統將存儲用戶公鑰并用公鑰將用戶身份信息加密后寫入區塊鏈;系統激活用戶賬戶并調用智能合約將其余身份信息加密后寫入區塊鏈,最后旅客用戶注冊成功.

圖4 注冊模塊流程圖
2)登錄證模塊設計
登錄模塊流程圖如圖5所示,客戶端向服務器發起登錄請求;服務器接受請求,從數據庫請求用戶賬戶信息摘要;數據庫返回賬戶信息摘要;服務器驗證賬戶信息并生成token;服務器向客戶端返回token,用戶登錄成功.
3)生物信息認證模塊設計
生物信息認證模塊流程圖如圖6所示,客戶端向服務器發起請求獲取公鑰加密的身份信息;服務器接受請求,并向區塊鏈請求公鑰加密的身份信息;區塊鏈向服務器返回公鑰加密的身份信息;服務器向客戶端返回公鑰加密的身份信息;客戶端調用手機生物認證,成功后用私鑰解密身份信息.

圖5 登錄模塊流程圖
4)身份認證模塊設計
身份認證模塊流程圖如圖7所示,身份校驗方向客戶端發起身份認證請求;客戶端調用生物信息認證模塊得到身份信息;客戶端向校驗方發送私鑰加密的用戶信息、用戶名、時間戳;校驗方向服務器請求公鑰-服務器驗證校驗方合法性后返回用戶公鑰;校驗方用公鑰解密信息并校驗時間戳;校驗方使用用戶名向區塊鏈請求該用戶加密的身份信息;區塊鏈向校驗方返回用戶加密的身份信息;校驗方用公鑰加密用戶身份信息并與區塊鏈上的加密信息進行驗證;認證成功.

圖6 生物信息認證模塊流程圖

圖7 身份認證模塊流程圖
5)認證記錄查詢模塊設計
認證記錄查詢模塊流程圖如圖8所示,客戶端調用手機生物認證核實用戶身份;生物認證成功后,客戶端向服務器發起請求獲取身份認證記錄;服務器接受請求,并向區塊鏈請求身份認證記錄;區塊鏈向服務器返回身份認證記錄;服務器向客戶端返回身份認證記錄.

圖8 認證記錄模塊流程圖
注冊流程完畢后,用戶可以使用賬號登錄,進入系統主頁,進行下一步操作.系統主頁中的“出示身份二維碼”和“認證請求處理”兩項功能都是對身份信息進行操作,完成身份的認證和授權.
用戶注冊、登錄和主頁功能界面如圖9所示,新用戶點擊立即注冊即可進入注冊頁面,鐵路旅客可以通過該界面注冊自己的鐵旅ID 賬號,用于登錄系統.賬號注冊完畢后,用戶還需提交自己的身份信息,如圖10所示,通過正則校驗和腳本的條件篩查可過濾大部分非法輸入,如果用戶名重名、密碼復雜度低、兩次密碼輸入不一致、輸入格式不匹配等輸入錯誤,系統界面會顯示相應提示.若服務端驗證身份信息真實有效,在通過生物信息識別后,系統將身份信息進行摘要哈希處理生成數據摘要并保存在區塊鏈上.

圖9 用戶注冊登錄
當用戶進行有關身份認證授權的操作時,系統需先進行生物信息認證,以確定操作人是身份所有者.用戶進行身份認證授權分兩種情況,主動出示身份二維碼和其他APP 認證請求處理.
在取票與進站等需要出示身份二維碼的情景下,如圖11,用戶點擊“出示身份二維碼”,系統會進行生物信息識別,識別通過后,系統會顯示包含用戶名、公鑰、時間戳的二維碼.
在購票時,12306 客戶端會向鐵旅ID 請求身份認證授權,此時,鐵旅ID 會進行認證請求處理,系統會顯示請求時間、請求來源和授權原因,如圖12,用戶點擊“確定授權”,在生物信息認證成功之后,授權成功.
身份認證記錄查詢功能記錄了每一次用戶身份的授權,用戶點擊“認證記錄查詢”,系統會先進行生物信息認證,然后顯示身份認證記錄,內容包括認證時間、請求來源和授權原因,如圖13所示.
本系統已在Android、IOS 系統的設備上進行安裝調試,針對鐵路旅客購票、取票、進站和檢票等場景,對系統進行大量性能測試.測試顯示,在一臺八核主頻2.8 GHz 8 GB 的安卓設備上,通過私鑰解密信息的平均時耗為23 毫秒;將生成身份二維碼的平均時耗為52 毫秒;在一臺四核3.3 GHz 8 GB 服務器上,收到獲取鏈上數據平均時耗為130 毫秒,在數據量上升至20 萬條后,獲取鏈上數據平均時耗為470 毫秒,其中測試結果主要受用戶移動設備性能、服務器性能和網絡延遲影響,系統功能的可用性、信息驗證的有效性、數據交互的正確性、生物認證的準確性都滿足業務分析中提到的要求.

圖10 身份信息提交

圖11 身份二維碼
為了推進鐵路旅客身份認證管理由集中式向去中心或多中心化創新發展,優化鐵路旅客身份認證管理的運作流程,本文面向智能手機用戶端,設計并實現了一套基于區塊鏈應用模式的鐵路旅客身份認證管理系統.第一,系統把旅客身份信息保存在客戶端本地,信息摘要封存在鏈上,實現了鐵路旅客身份信息本地存儲、鏈上校驗,驗證時無需出示明文身份信息,僅需出示存有相關信息的數據摘要、公鑰的二維碼即可,校驗方通過尋址對比就能驗證信息真實性,有效避免了鐵路旅客身份信息泄露問題.第二,系統將旅客身份信息數據分布式存儲,采用時間戳技術增強了旅客身份數據的抗篡改性和可追溯性,利用非對稱加密技術在保護旅客隱私、實現實名制的前提下增強了數據的透明性、安全性和魯棒性,進行生物信息認證確保了鐵路旅客對身份信息的所有權,部署智能合約提高了鐵路旅客身份認證的準確性和智能化水平,提供API 實現第三方認證集成調用,提供SDK 實現二次擴展集成開發.
本研究的局限表現在沒有對生物識別技術進行獨立開發,而是采取調用智能手機用戶端自帶生物識別接口的方式,實現生物識別的功能.下一步的研究可以考慮面向服務端來搭建私有鏈并對區塊數據存儲與智能合約的進行深入開發研究.

圖12 認證請求處理

圖13 認證記錄查詢