游雪松,苗 凡,戴琳琳,蔡 云
(1. 中國(guó)國(guó)家鐵路集團(tuán)有限公司 客運(yùn)部,北京 100844;2. 中國(guó)鐵道科學(xué)研究院集團(tuán)有限公司 電子計(jì)算技術(shù)研究所,北京 100081)
中國(guó)鐵路客票發(fā)售和預(yù)定系統(tǒng)(簡(jiǎn)稱:客票系統(tǒng))于2000年開始在紙質(zhì)火車票右下角使用二維碼(QR Code)[1],其中存儲(chǔ)了加密后的票面信息,通過專用識(shí)讀設(shè)備可以還原出票號(hào)、身份證號(hào)、乘車日期、車次等信息。二維碼技術(shù)改變了以往售票員需要手工錄入票號(hào)和身份證號(hào)碼的工作方式,不僅有效避免了人工輸入可能導(dǎo)致的失誤,顯著提高了業(yè)務(wù)辦理效率,還在一定程度上保護(hù)了旅客的個(gè)人隱私信息。
隨著移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,在移動(dòng)終端,二維碼技術(shù)已得到廣泛運(yùn)用。既有的二維碼技術(shù)在安全性與擴(kuò)展性上已不能滿足客票日益增多的應(yīng)用場(chǎng)景,為進(jìn)一步提高旅客出行體驗(yàn),本文對(duì)二維碼客運(yùn)電子票(簡(jiǎn)稱:電子票)關(guān)鍵技術(shù)進(jìn)行了研究,設(shè)計(jì)了應(yīng)用于客票系統(tǒng)的二維碼電子票平臺(tái)(簡(jiǎn)稱:二維碼平臺(tái))。
2011年6月, 12306互聯(lián)網(wǎng)售票系統(tǒng)(簡(jiǎn)稱:12306)推出支持購(gòu)買部分高鐵車次的旅客持二代身份證進(jìn)/出站的功能;2012年7月,中國(guó)銀行與中國(guó)國(guó)家鐵路集團(tuán)有限公司(簡(jiǎn)稱:國(guó)鐵集團(tuán))推出了中鐵銀通卡產(chǎn)品,旅客可使用中鐵銀通卡刷卡檢票乘車。以上兩種是電子票的最初實(shí)踐。電子票的實(shí)質(zhì)是普通紙質(zhì)火車票的一種電子映象,具有紙質(zhì)車票的全部功能,為實(shí)現(xiàn)快速查詢旅客購(gòu)買車票的電子票信息,需要為電子票選擇合適的載體。
目前,常用的電子票載體有居民身份證、IC卡與二維碼等[2]。以上3種載體的相關(guān)特性對(duì)比,如 表1所示。
表1 電子票載體特性
從表1可以看出,身份證并不具備攜帶票務(wù)數(shù)據(jù)的能力,客票系統(tǒng)實(shí)名制的獨(dú)特性,可將與身份證相關(guān)聯(lián)的電子票查詢出來(lái)。IC卡既可存儲(chǔ)一定的數(shù)據(jù)且具有較高的安全性,但因使用不便、維護(hù)成本較高,存在一定的推廣難度。二維碼相比身份證與IC卡具有更好的靈活性與更低的使用成本,全國(guó)鐵路車站終端均配置有識(shí)讀二維碼的設(shè)備,已具備推廣以二維碼為載體的電子票的條件,但二維碼中包含有乘客的姓名、身份證號(hào)等個(gè)人信息,乘車日期、出站、到站等個(gè)人行程信息,以上數(shù)據(jù)均屬于個(gè)人敏感信息,需要進(jìn)行密碼保護(hù)。
2019年10月《中華人民共和國(guó)密碼法》公布,客票系統(tǒng)作為國(guó)家的關(guān)鍵信息基礎(chǔ)設(shè)施,應(yīng)按法律要求使用國(guó)產(chǎn)商用密碼(簡(jiǎn)稱:國(guó)密)算法對(duì)二維碼數(shù)據(jù)進(jìn)行保護(hù)。目前應(yīng)用最廣的國(guó)密算法為SM2非對(duì)稱加密算法、SM3雜湊算法與SM4對(duì)稱加密算法。國(guó)密算法相比國(guó)際主流的RSA、AES和SHA系列算法具有如下優(yōu)勢(shì)。
(1)運(yùn)算速度快。同等安全強(qiáng)度下,SM2算法在用私鑰簽名時(shí),速度遠(yuǎn)超RSA算法;SM4算法相比3DES、AES更易實(shí)現(xiàn)、加解密速度更快。
(2)有效密鑰短。SM2算法的使用私鑰長(zhǎng)度為256 bit,而RSA算法通常至少需要2 048 bit。
(3)私鑰產(chǎn)生簡(jiǎn)單。RSA私鑰產(chǎn)生時(shí)需要用到兩個(gè)隨機(jī)產(chǎn)生的大素?cái)?shù),除了需要保證隨機(jī)性外,還需要用到素?cái)?shù)判定算法,產(chǎn)生過程復(fù)雜且速度較慢;而SM2私鑰的產(chǎn)生只需要生成一個(gè)一定范圍內(nèi)的256 bit的隨機(jī)數(shù)即可,過程簡(jiǎn)單、安全風(fēng)險(xiǎn)較小。
(4)安全性更高。256 bit的SM2算法密碼強(qiáng)度已超過RSA-2048與RSA-3072;SM3算法相比于SHA-256,增加了多種新技術(shù),在安全性和效率上更有優(yōu)勢(shì)。
線上購(gòu)買的車票均為電子票,電子票的生命周期包括了出行前的訂票,出行過程中的驗(yàn)票、檢票,以及出行后的打印報(bào)銷憑證,所有環(huán)節(jié)均可能涉及到二維碼。購(gòu)票成功后,系統(tǒng)會(huì)向旅客發(fā)送郵件,郵件中電子購(gòu)票信息單上的二維碼含有乘客的出行信息;出行過程中,可通過手機(jī)中的二維碼進(jìn)行驗(yàn)、檢票;出行后,可掃描報(bào)銷憑證右下角二維碼驗(yàn)證車票真?zhèn)蔚?。這些不同場(chǎng)景的二維碼需要在不同的業(yè)務(wù)終端進(jìn)行交叉識(shí)讀與解析,電子票的二維碼在設(shè)計(jì)上需要統(tǒng)一數(shù)據(jù)規(guī)范、統(tǒng)一應(yīng)用標(biāo)準(zhǔn),具備良好的擴(kuò)展性。
電子票基于二進(jìn)制編碼格式,依據(jù)《QR Code國(guó)家標(biāo)準(zhǔn)GB/T 18284—2000》,采用Base64編碼方式將加密的字節(jié)數(shù)組編碼后轉(zhuǎn)換成二維碼圖片,有紙質(zhì)通知單上的靜態(tài)二維碼,也有手機(jī)上生成的動(dòng)態(tài)二維碼。靜態(tài)二維碼安全性低,主要應(yīng)用于核驗(yàn)場(chǎng)景,加密算法為SM4,密鑰存儲(chǔ)于硬件智能卡中;動(dòng)態(tài)二維碼可以檢票乘車,需要具備較高的安全性,加密算法包括SM2、SM3與SM4,有多組密鑰存儲(chǔ)于移動(dòng)終端的可信區(qū)域中。為滿足動(dòng)態(tài)二維碼雙離線校驗(yàn),增加安全性,本文在原有的信息數(shù)據(jù)外,還新增了用戶公鑰信息,用戶私鑰簽名信息和時(shí)間戳驗(yàn)證信息[3],數(shù)據(jù)結(jié)構(gòu)如表2所示。
表2 二維碼數(shù)據(jù)結(jié)構(gòu)
二維碼平臺(tái)架構(gòu)以新一代客票系統(tǒng)為基礎(chǔ),包括國(guó)鐵集團(tuán)級(jí)、鐵路局集團(tuán)公司級(jí)和車站級(jí)。其中:車站級(jí)需要在車站終端程序中集成電子客票識(shí)別碼的SDK(Software Development Kit),并在計(jì)算機(jī)終端安裝PSAM(Purchase Secure Access Module)卡;鐵路局集團(tuán)公司級(jí)需要部署二維碼生碼前置服務(wù);國(guó)鐵集團(tuán)級(jí)需要部署二維碼發(fā)碼服務(wù)。二維碼發(fā)碼服務(wù)為鐵路12306網(wǎng)站、12306 App、站車交互終端提供生碼或解碼服務(wù),可用于二維碼閘機(jī)檢票與手機(jī)二維碼乘車等業(yè)務(wù)。二維碼平臺(tái)具體架構(gòu)如圖1所示。
圖1 二維碼平臺(tái)架構(gòu)
2.2.1 二維碼發(fā)碼服務(wù)
二維碼發(fā)碼服務(wù)由加密機(jī)、加解密算法服務(wù)、生碼服務(wù)、ES(Elasticsearch)集群、密鑰管理服務(wù)構(gòu)成。各部分的功能如下:
(1)加密機(jī):加密機(jī)內(nèi)置密碼算法芯片,支持對(duì)稱與非對(duì)稱加密算法,主要用于加密業(yè)務(wù)數(shù)據(jù),其中,對(duì)稱加密密鑰與線下渠道PSAM卡中的密鑰保持一致。除此之外,加密機(jī)還用于生成二維碼平臺(tái)的公私鑰,并保存平臺(tái)的私鑰。
(2)密鑰管理服務(wù):二維碼發(fā)碼平臺(tái)將為開通乘車碼或檢票碼的用戶生成公私密鑰對(duì),其中私鑰會(huì)加密下發(fā)到用戶的12306 App中,公鑰存儲(chǔ)于數(shù)據(jù)庫(kù)中,二維碼發(fā)碼服務(wù)提供公私密鑰定期更新的功能。
(3)加解密算法服務(wù):二維碼平臺(tái)提供常用的加解密算法,包括對(duì)稱加密算法DES、3DES、AES,與國(guó)密算法SM4;摘要算法MD5、SHA-1、SHA-256與國(guó)密哈希算法SM3;非對(duì)稱加密算法RSA、SM2,可以對(duì)數(shù)據(jù)進(jìn)行加解密、數(shù)字簽名、驗(yàn)簽等功能。
(4)生碼服務(wù):生碼服務(wù)支持多種協(xié)議,為各業(yè)務(wù)提供加密數(shù)據(jù)。當(dāng)互聯(lián)網(wǎng)、手機(jī)、窗口、自動(dòng)售票機(jī)和閘機(jī)等需要生成二維碼數(shù)據(jù)時(shí),需要通過鐵路局集團(tuán)公司級(jí)的二維碼生碼前置服務(wù)連接到國(guó)鐵集團(tuán)的二維碼生成服務(wù),發(fā)起二維碼生成請(qǐng)求。二維碼生成服務(wù)通過調(diào)用密鑰數(shù)據(jù)庫(kù)與加密算法模塊來(lái)完成電子票數(shù)據(jù)的加密。
(5)ES集群: 12306網(wǎng)站、12306 App、車站窗口、自動(dòng)售票機(jī)、窗口核驗(yàn)、車站閘機(jī)等所有渠道的應(yīng)用程序在生成或解析二維碼的日志流水時(shí),均會(huì)通過SDK上傳至國(guó)鐵集團(tuán)級(jí)的ES集群。ES集群可對(duì)當(dāng)日的發(fā)碼情況進(jìn)行統(tǒng)計(jì),同時(shí)可針對(duì)具體的窗口或個(gè)人進(jìn)行行為分析,排查異常行為。
2.2.2 二維碼生碼前置服務(wù)
二維碼生碼前置服務(wù)部署在18個(gè)鐵路局集團(tuán)公司的數(shù)據(jù)中心,主要為售票窗口、自動(dòng)售票機(jī)、檢票閘機(jī)、人工核驗(yàn)窗口等車站終端提供連接二維碼平臺(tái)的能力,并具備業(yè)務(wù)路由管理能力,可根據(jù)SDK的命令路由至不同的服務(wù)提供者。
2.2.3 終端SDK
終端SDK通過發(fā)送APDU(Application Protocol Data Unit)指令的方式與PSAM智能卡進(jìn)行通信,可調(diào)用其完成數(shù)據(jù)的加密,同時(shí)SDK還可與二維碼生碼前置服務(wù)進(jìn)行通信,實(shí)現(xiàn)設(shè)備注冊(cè)、密鑰更新、設(shè)備授權(quán)、交易日志上傳等。
二維碼的生命周期包括二維碼的生成、定時(shí)更新、二維碼使用等。其中,生成階段包括數(shù)據(jù)加密與數(shù)據(jù)編碼,使用階段包括人工驗(yàn)票、閘機(jī)檢票、窗口退票、窗口改簽等。下面以鐵路e卡通業(yè)務(wù)為例來(lái)分析二維碼電子票流程,如圖2所示。
圖2 二維碼電子票生命周期
圖2 中,黑色線條為生碼流程;紅色線條為掃碼流程;綠色線條為密鑰管理流程;藍(lán)色線條為第三方平臺(tái)調(diào)用二維碼服務(wù);綠色方框?yàn)槎S碼平臺(tái)相關(guān)實(shí)體;灰色方框?yàn)榭推毕到y(tǒng)現(xiàn)有應(yīng)用程序。
2.3.1 加密
從圖2中可以看出,移動(dòng)終端通過手機(jī)應(yīng)用服務(wù)連接客票系統(tǒng)進(jìn)行購(gòu)票操作,購(gòu)票完成后向二維碼平臺(tái)請(qǐng)求生成二維碼,二維碼生碼服務(wù)會(huì)先將用戶的公鑰、加密后的電子票數(shù)據(jù)和時(shí)間戳一起打包發(fā)給App,App利用終端中的SDK對(duì)以上數(shù)據(jù)進(jìn)行簽名,離線生成二維碼。
電子票的原始數(shù)據(jù)加密在服務(wù)端完成,移動(dòng)終端收到的是電子票的密文。只有擁有服務(wù)端的兩個(gè)密鑰才能解密出電子票的數(shù)據(jù),保證了數(shù)據(jù)的機(jī)密性。App的簽名值帶有身份識(shí)別功能,第三方難以偽造出同樣的密鑰。時(shí)間戳驗(yàn)證信息包括二維碼的有效時(shí)間與二維碼的生成時(shí)間信息,這些數(shù)據(jù)通過PSAM卡的密鑰進(jìn)行加密處理,計(jì)算出MAC驗(yàn)證值,作為二維碼時(shí)間戳驗(yàn)證數(shù)據(jù)的一部分,有了這個(gè)時(shí)間戳驗(yàn)證信息,用戶生成的二維碼數(shù)據(jù)的有效時(shí)間將得到控制,防止二維碼電子票被復(fù)制[6]。
2.3.2 編碼
電子票的編碼過程有數(shù)據(jù)編碼、糾錯(cuò)編碼、構(gòu)造數(shù)據(jù)、增加版本信息和格式等步驟。過程中主要考慮糾錯(cuò)等級(jí),二維碼存在4個(gè)級(jí)別,由低到高分別為L(zhǎng)、M、Q、H級(jí)別,對(duì)應(yīng)的糾錯(cuò)比例為7%、15%、25%、35%。糾錯(cuò)等級(jí)越高,可修正的錯(cuò)誤就越多,需要的糾錯(cuò)碼的數(shù)據(jù)越多,可存儲(chǔ)的數(shù)據(jù)就越小。
紙質(zhì)媒介上的二維碼存在易破損、折疊的情況,比較適合高糾錯(cuò)級(jí)別;而手機(jī)上的動(dòng)態(tài)二維碼不存在損壞的情況,在數(shù)據(jù)量較大的前提下,為提高終端掃描速度,可選擇糾錯(cuò)等級(jí)為L(zhǎng)。構(gòu)造數(shù)據(jù)時(shí)需把票面數(shù)據(jù)與加密數(shù)據(jù)構(gòu)成的字符串轉(zhuǎn)為比特流,構(gòu)成二進(jìn)制序列,再將上述二進(jìn)制數(shù)據(jù)分塊,并根據(jù)糾錯(cuò)等級(jí)和分塊的碼字產(chǎn)生糾錯(cuò)碼,將其加入碼字序列,形成新的序列[7]。在規(guī)格確定的條件下,將新序列按次序放入矩陣塊,將版本信息與格式信息放入相應(yīng)的區(qū)域,構(gòu)成最終的二維碼。
目前,全國(guó)鐵路有近7萬(wàn)個(gè)的掃碼終端分散在4 000多個(gè)車站,存在設(shè)備品牌不一、性能不一的問題。二維碼平臺(tái)設(shè)計(jì)需要考慮如何在不更換設(shè)備、不修改應(yīng)用程序的前提下,讓終端較好地識(shí)讀新二維碼,同時(shí),保障二維碼的生成和解析在車站網(wǎng)絡(luò)環(huán)境復(fù)雜、信號(hào)較差的情況下,不受到影響。
針對(duì)上述難點(diǎn),二維碼平臺(tái)采用雙離線過閘技術(shù),通過在應(yīng)用啟動(dòng)時(shí)同步二維碼平臺(tái)密鑰,并在二維碼中預(yù)置用戶公鑰與終端中的簽名數(shù)據(jù)進(jìn)行聯(lián)合校驗(yàn),在終端離線完成二維碼的識(shí)別。即使在節(jié)假日高峰期間,人流量較大的車站依然具備高并發(fā)處理能力,不影響旅客出行體驗(yàn)。二維碼電子票雙離線過閘流程如圖3所示。
圖3 二維碼電子票核驗(yàn)流程
(1)電子票二維碼在通過閘機(jī)或被其他客票系統(tǒng)終端掃描時(shí),應(yīng)用程序?qū)⒆R(shí)別的二維碼信息提交到二維碼平臺(tái)SDK中。(2)SDK根據(jù)二維碼平臺(tái)公鑰、時(shí)間戳與數(shù)據(jù)簽名值,驗(yàn)證此二維碼是否為客票系統(tǒng)生成的二維碼,若一致,則表明電子票為真票;若不一致,則表明該電子票可能為惡意偽造。(3)通過拆解的用戶公鑰驗(yàn)證用戶簽名,確定此二維碼為當(dāng)前用戶生成,保證其不可否認(rèn)性[8]。(4)根據(jù)解析的返回值,驗(yàn)證二維碼有效期,若過期,可能是生成二維碼的截圖。(5)根據(jù)訂單或票號(hào)連接至客票系統(tǒng),查詢電子票的詳細(xì)信息,驗(yàn)證是否存在此電子票。
結(jié)合二維碼電子票業(yè)務(wù)現(xiàn)狀及發(fā)展需求,為加強(qiáng)客票系統(tǒng)密碼基礎(chǔ)設(shè)施的頂層設(shè)計(jì),在已有鐵路數(shù)字證書認(rèn)證系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)了符合國(guó)密要求的鐵路領(lǐng)域密鑰管理服務(wù),用于實(shí)現(xiàn)對(duì)全國(guó)鐵路密碼設(shè)備、應(yīng)用程序密鑰的管理工作,實(shí)現(xiàn)密鑰在生成、存儲(chǔ)和備份、分發(fā)和加載、使用、更新、歸檔、銷毀等全生命周期的管理,以及應(yīng)用接入管理和身份認(rèn)證功能。
多級(jí)密鑰管理服務(wù)支持在國(guó)鐵集團(tuán)和各鐵路局集團(tuán)公司兩級(jí)進(jìn)行部署應(yīng)用。一級(jí)密鑰管理以管理功能為主,實(shí)現(xiàn)二級(jí)密鑰管理的注冊(cè)及接入管理;二級(jí)密鑰管理主要提供密鑰生產(chǎn)及托管的功能,實(shí)現(xiàn)應(yīng)用系統(tǒng)類、密碼設(shè)備類密鑰的集中管理功能,確保核心密鑰數(shù)據(jù)安全可控。
2018年10月二維碼平臺(tái)試點(diǎn)運(yùn)行,支撐長(zhǎng)沙—株洲—湘潭(長(zhǎng)株潭)城際鐵路e卡通業(yè)務(wù)。旅客開通鐵路e卡通業(yè)務(wù)后,無(wú)須購(gòu)票就可以使用12306上的e卡通功能掃碼乘車,掃碼出站后進(jìn)行扣費(fèi)結(jié)算。2018年12月,二維碼平臺(tái)正式上線,北京、上海、廣州等鐵路局集團(tuán)公司接入該平臺(tái),除支持鐵路e卡通外,還支持購(gòu)票通知單二維碼、電子客票檢票碼等業(yè)務(wù)。
2020年12月,鐵路部門在成渝客運(yùn)專線(成都—沙坪壩)為通勤旅客推出了新型票制產(chǎn)品——計(jì)次票,持有者可以在有效期內(nèi)乘坐規(guī)定次數(shù)、指定發(fā)到站及席別的列車。旅客可使用新型客票產(chǎn)品二維碼直接掃碼乘車。2021年9月,二維碼平臺(tái)首次支持第三方應(yīng)用的接入,在珠三角城際線試點(diǎn)支付寶鐵路乘車碼功能,旅客打開支付寶上的12306小程序,完成授權(quán)、注冊(cè)后,可通過小程序上的鐵路e卡通二維碼享受“先進(jìn)站,后扣費(fèi)”服務(wù)。 2021年10月,為落實(shí)兩會(huì)代表關(guān)于方便未攜帶身份證旅客購(gòu)票出行的提案,國(guó)鐵集團(tuán)聯(lián)合鐵路公安研究鐵路臨時(shí)身份證明二維碼功能,通過12306 App中的臨時(shí)身份證明二維碼為旅客提供一碼通行的出行服務(wù)。
截至2021年12月,全國(guó)鐵路接入二維碼平臺(tái)的車站終端數(shù)近7萬(wàn)個(gè),使用二維碼電子票的手機(jī)終端數(shù)約為5 000萬(wàn)個(gè),用戶數(shù)近4 000萬(wàn)名,每天生成二維碼近200萬(wàn)次。
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,二維碼作為一種便捷的媒介逐漸得到廣泛應(yīng)用,本文研究了國(guó)密算法的優(yōu)勢(shì),梳理客票業(yè)務(wù)二維碼需求,實(shí)現(xiàn)了安全、可控、易擴(kuò)展的二維碼平臺(tái),闡述了電子票的業(yè)務(wù)流程和關(guān)鍵技術(shù)。實(shí)踐證明采用二維碼作為鐵路客票系統(tǒng)中的車票媒介,可以實(shí)現(xiàn)進(jìn)站驗(yàn)票、過閘檢票、真?zhèn)魏瞬榈葮I(yè)務(wù),給旅客帶來(lái)諸多便利的同時(shí)也為鐵路行業(yè)降低運(yùn)營(yíng)成本。