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