裴 練 軍
(上海華虹計通智能系統(tǒng)股份有限公司 上海 201206)
隨著我國城市化進(jìn)程的進(jìn)一步加快和城市規(guī)模的逐步擴(kuò)大,城市軌道交通已成為大中型城市最重要的基礎(chǔ)交通設(shè)施之一[1]。
城市軌道交通自動售檢票系統(tǒng)是現(xiàn)代化的收費系統(tǒng),一般采用五層架構(gòu):第一層為城市軌道交通票務(wù)清分系統(tǒng),第二層為線路中央計算機(jī)系統(tǒng),第三層為車站計算機(jī)系統(tǒng),第四層為車站終端設(shè)備,第五層為車票。乘客可通過售票、檢票設(shè)備實現(xiàn)關(guān)于車票票務(wù)的自助服務(wù),最終在票務(wù)清分系統(tǒng)實現(xiàn)各運營商的收益分配[2]。
作為城市軌道交通自動售檢票系統(tǒng)的第五層——車票層,軌道交通售檢票系統(tǒng)支持的票卡類型有很多。儲值類票一般分單程票、儲值票和二維碼支付等。儲值票遵循的標(biāo)準(zhǔn)一般可分為地鐵自發(fā)一票通卡、住建部一卡通卡、交通部一卡通卡和銀行卡支付等。除二維碼外,其他車票類型均為非接觸式IC卡[3],非接觸式IC卡是城市軌道交通自動售檢票系統(tǒng)中的常規(guī)基礎(chǔ)票卡類型。不同類型的票卡同時在檢票機(jī)上使用,這樣的應(yīng)用場景決定了終端設(shè)備須快速識別車票類型,并予以處理。
近年來,全國各地城市軌道自動售檢票接入“互聯(lián)網(wǎng)+”得到了大力發(fā)展,快速培養(yǎng)新一代的熟悉非接觸式IC卡的開發(fā)人員任務(wù)越來越緊迫;與此同時,基于非接觸式IC卡的公共交通行業(yè)優(yōu)惠應(yīng)用也督促開發(fā)商和開發(fā)人員需要響應(yīng)快速。
城市軌道交通是一種大運量交通運輸系統(tǒng),自動售檢票系統(tǒng)須適應(yīng)客流密集的進(jìn)、出站需求。目前,軌道交通領(lǐng)域使用的非接觸式IC卡種類較多,為了識別和區(qū)分,現(xiàn)常用的方法包括有:常量值法和命令重試法。
常量值法是指根據(jù)特定命令返回的常量值,標(biāo)記不同車票介質(zhì)的類別。采用常量值法可在車票種類較少時可快速區(qū)分不同的車票種類,但在自動售檢票系統(tǒng)支持較多票卡供應(yīng)商、較多發(fā)行方的車票時往往導(dǎo)致識別重試增多。
命令重試法是指嘗試發(fā)送不同票卡的交易指令,以是否獲得成功應(yīng)答的方式來識別票卡。這種方式將導(dǎo)致交易時間過長,從而延長了整個的交易流程時間。
隨著技術(shù)發(fā)展,軌道交通售檢票終端設(shè)備已從單片機(jī)向嵌入式操作系統(tǒng)擴(kuò)展。在傳統(tǒng)的開發(fā)環(huán)境下,票卡處理業(yè)務(wù)應(yīng)用與射頻驅(qū)動應(yīng)用是緊密耦合在一起,開發(fā)人員既需要了解硬件設(shè)計、掌握射頻驅(qū)動,又需要關(guān)注業(yè)務(wù)需求,并將兩者緊密結(jié)合在一起完成應(yīng)用軟件開發(fā)。這種開發(fā)方式既對開發(fā)人員提出了很高的要求,也不能快速響應(yīng)業(yè)務(wù)變化的外部需求。
因此,通過分析票卡的物理特性,參考ISO-14443國際標(biāo)準(zhǔn)來識別票卡,歸納出層級軟件開發(fā)架構(gòu)不失為一種解決方法。
在軌道交通領(lǐng)域使用的非接觸式IC卡物理介質(zhì)主要包括有基于MIFARE Ultralight的單程票、基于MIFARE Classic的儲值票和基于MIFARE Pro卡的儲值票。目前,基于MIFARE Pro卡的儲值票成為應(yīng)用主流。
MIFARE Ultralight卡是一種小容量、符合ISO1443-A的存儲車票。Ultralight車票有以下典型特點[4]:
1) 具有7個字節(jié)唯一物理卡號;
2) 具有4字節(jié)OTP;
3) 一般容量512位,分為16個page,每個page為4個字節(jié);
4) 具有Lock鎖功能,可對關(guān)鍵數(shù)據(jù)區(qū)進(jìn)行鎖;
5) 數(shù)據(jù)區(qū)可任意讀、寫。
MIFARE Ultralight卡本身不具備邏輯判斷功能,在軌道交通應(yīng)用時一般作為循環(huán)使用、面值不高的單程票。
MIFARE Ultralight卡的存儲結(jié)構(gòu)如圖1所示。
圖1 MIFARE Ultralight卡存儲結(jié)構(gòu)圖
MIFARE Classic卡是一種廣泛應(yīng)用的非接觸式IC卡,包括MIFARE S50、MIFARE S70等,常用來作為儲值卡使用。在軌道交通領(lǐng)域常使用是MIFARE Classic卡是1 KB容量、符合ISO14443-A[5]。
MIFARE Classic具有以下特點:
1) 具有4個字節(jié)的唯一物理序列號;
2) 每個塊有16個字節(jié),4個塊組成一個扇區(qū)。1 KB容量的共有16個扇區(qū);
3) 每個扇區(qū)可獨立設(shè)置讀、寫權(quán)限,只有認(rèn)證通過才可對本扇區(qū)的塊進(jìn)行讀、寫操作;
4) 扇區(qū)可分為數(shù)據(jù)區(qū)和值區(qū),值區(qū)一般用于存儲卡片金額數(shù)據(jù)。
MIFARE Classic卡本身具有邏輯判斷功能,但沒有邏輯計算功能。在初次通信時須進(jìn)行三重認(rèn)證,之后的交互數(shù)據(jù)以加密形式進(jìn)行,從而防止截取報文數(shù)據(jù)以促進(jìn)安全性。
典型的MIFARE Classic卡的存儲結(jié)構(gòu)如圖2所示。
圖2 MIFARE Classic卡存儲結(jié)構(gòu)圖
MIFARE Pro卡是指卡片內(nèi)含微處理器、存儲單元和芯片操作系統(tǒng)的具有邏輯處理能力的集成電路卡,一般稱為CPU卡。CPU卡是將密鑰安全存儲在卡片內(nèi),在實際使用中自身進(jìn)行邏輯計算來確定合法性,極大提高了卡片的安全。
CPU卡具備有以下特點:
1) 具有4字節(jié)的唯一物理編號;
2) 具有硬件DES/3DES協(xié)處理器;
3) 具有硬件真隨機(jī)數(shù)發(fā)生器;
4) 以文件、目錄形式定義存儲結(jié)構(gòu),以目錄進(jìn)行安全隔離;
5) 空間容量大。一般常用的有8 KB空間,目前已達(dá)到128 KB。
由于CPU卡內(nèi)具有操作系統(tǒng),典型的CPU卡存儲結(jié)構(gòu)如圖3所示。
圖3 CPU卡存儲結(jié)構(gòu)圖
無論MIFARE Ultralight卡、MIFARE Classic卡或MIFARE Pro卡,在軌道交通領(lǐng)域都是作為非接觸式IC卡來使用,通過射頻完成數(shù)據(jù)交互。不同的IC卡交互流程有所不同,操作命令不同,但均遵循ISO-14443國際標(biāo)準(zhǔn)。
典型的交互流程分為以下三種。
非接觸式IC卡經(jīng)過尋卡(request)、防沖突(anti-collision)和選擇(select)交互命令進(jìn)入數(shù)據(jù)交互過程,確保了交互過程的唯一性[6]。非接觸式IC卡尋卡流程如圖4所示。
圖4 非接觸式IC卡尋卡流程圖
由于MIFARE Ultralight卡具有7字節(jié)的唯一長度,須進(jìn)行二次防沖突和二次選擇后進(jìn)入數(shù)據(jù)交互過程。而MIFARE Classic卡和MIFARE Pro卡具有4字節(jié)的唯一長度,只須一次防沖突和選擇卡后進(jìn)入后續(xù)的操作過程。
MIFARE Classic卡不支持ISO-14443-4的協(xié)議,在選擇(select)卡片后進(jìn)行三重認(rèn)證完成加密握手,然后根據(jù)相應(yīng)的命令完成操作:
1) 對于數(shù)據(jù)區(qū)可使用讀塊、寫塊命令;
2) 對于值區(qū)可使用加值、減值、恢復(fù)等命令,確認(rèn)后進(jìn)行傳遞完成;
3) 對MIFARE Classic卡的操作以塊為基礎(chǔ)單位進(jìn)行。
MIFARE Classic卡操作命令流程如圖5所示。
MIFARE Pro卡支持ISO14443-4的協(xié)議。由于MIFARE Pro卡容量大、數(shù)據(jù)交互量大。須發(fā)送RATS以交換雙方的特性信息,包括是否支持PPS以更快速的進(jìn)行數(shù)據(jù)交互;設(shè)置、獲取FWT值以確定后續(xù)數(shù)據(jù)接收、傳輸緩存大小等特性。
RATS命令后所有CPU卡的操作稱為APDU(Application Protocol Data Unit)命令。APDU命令在空中可讀取,所以稱為交換透明數(shù)據(jù)。正如之前所述,CPU卡的安全性依賴于CPU卡的邏輯計算處理能力,而不需要對空中數(shù)據(jù)進(jìn)行加密傳輸。
MIFARE Pro卡操作命令流程如圖6所示。
圖6 MIFARE Pro卡操作命令流程圖
在實際軌道交通自動售檢票系統(tǒng)應(yīng)用中,上述幾種類型的車票都有可能使用,且會有不同的供應(yīng)商供貨。不同的車票物理介質(zhì)其交互使用的命令接口不同,同是CPU卡物理介質(zhì)的車票,其文件、目錄也會隨發(fā)行方的設(shè)計有所不同。因此,根據(jù)實際應(yīng)用區(qū)分不同介質(zhì)的車票,尤其是區(qū)分不同的發(fā)行主體的CPU介質(zhì)車票是軌道交通應(yīng)用的首要解決的問題。
Request命令的應(yīng)答值定義如圖7所示。
圖7 尋卡(Request)命令應(yīng)答值定義
其中的b7、b8兩位表示卡號的長度,含義分別為:00b表示4字節(jié)的長度;01b表示7字節(jié)的長度;10b表示10字節(jié)的卡號,11b預(yù)留[6]。因此,根據(jù)Request的應(yīng)答數(shù)據(jù)首先可以區(qū)分出MIFARE Ultralight卡,然后根據(jù)Ultralight卡命令執(zhí)行后續(xù)操作。
Select命令的應(yīng)答值定義如圖8所示。
圖8 選擇卡(Select)命令應(yīng)答值定義
其中的b6和b3位組合起來:10b表示唯一卡號完整,且符合ISO14443-4;00b表示唯一卡號完整,但不符合ISO14443-4。同時,若b3位值為1時,則說明卡片物理卡號不完全,還需要再次防沖突和選擇卡[6]。
MIFARE Classic卡不支持ISO14443-4協(xié)議,因此可根據(jù)Select的應(yīng)答區(qū)分出MIFARE Classic卡,然后根據(jù)MIFARE Classic卡命令執(zhí)行后續(xù)操作。
所有不符合上述的流程判斷的卡,可認(rèn)為是MIFARE Pro卡。
完整的區(qū)分識別MIFARE Ultralight、MIFARE Classic卡和MIFARE Pro卡的流程如圖9所示。
圖9 區(qū)分MIFARE Ultralight、MIFARE Classic和MIFARE Pro流程圖
在軌道交通自動售檢票系統(tǒng)中應(yīng)用的CPU卡,除了地鐵自身發(fā)行的IC卡外,還有符合住建部IC卡服務(wù)中心標(biāo)準(zhǔn)的一卡通、符合交通部標(biāo)準(zhǔn)的一卡通、符合銀聯(lián)標(biāo)準(zhǔn)的銀行卡,以及其他系統(tǒng)發(fā)行的但不允許在地鐵使用的CPU卡。因此在識別出CPU卡后,還需要進(jìn)一步區(qū)分CPU卡的發(fā)行主體。
CPU卡的存儲結(jié)構(gòu)為文件、目錄,因此可利用目錄名、文件名以及文件內(nèi)容來進(jìn)行區(qū)分。比如,交通部和銀聯(lián)均要求其應(yīng)用須在PPSE的支付環(huán)境下,可通過選擇PPSE的返回值來確定是否為交通部卡;住建部IC卡服務(wù)中心標(biāo)準(zhǔn)的AID值為唯一值,可通過其確認(rèn)是否為符合住建部標(biāo)準(zhǔn)的一卡通;其他發(fā)卡方可以在設(shè)計時,通過約定其中某一個文件的值來定義區(qū)分。
綜上所述,CPU卡的區(qū)分發(fā)行主體須根據(jù)具體的應(yīng)用環(huán)境進(jìn)行設(shè)計、識別。以某城市地鐵的應(yīng)用為例,該城市地鐵CPU卡的應(yīng)用流程如圖10所示。
圖10 某城市地鐵CPU卡應(yīng)用流程
使用華虹計通公司生產(chǎn)的DTD-3018型讀寫器進(jìn)行尋卡時間測試。測試時間為通過命令可確定車票物理介質(zhì)為止。
嘗試法尋卡按照優(yōu)先MIFARE Pro卡,其次MIFARE Classic卡,最后MIFARE Ultralight卡的來測試其尋卡的時間,如表1所示。
表1 嘗試法尋卡時間表 ms
針對同樣的卡使用優(yōu)化方法進(jìn)行尋卡時間測試,如表2所示。
表2 優(yōu)化后尋卡時間表 ms
從測試結(jié)果可以看出,嘗試法尋卡時間與確定車票物理介質(zhì)的先后順序相關(guān)聯(lián),首先確認(rèn)的車票其尋卡時間更快,而優(yōu)化后的尋卡時間與車票的介質(zhì)不相關(guān),提高了車票尋卡確定速度。
通過上述對卡的快速識別的整理,提出讀寫器軟件開發(fā)過程層級開發(fā)架構(gòu)概念,使讀寫器的業(yè)務(wù)集中在應(yīng)用層,而與射頻的交互由底層驅(qū)動完成。
典型的軟件系統(tǒng)結(jié)構(gòu)設(shè)計如圖11所示。
圖11 讀寫器內(nèi)軟件系統(tǒng)結(jié)構(gòu)示意圖
在識別車票種類后,采取業(yè)務(wù)與硬件分離統(tǒng)一對射頻的調(diào)用接口,并按照ISO-14443的卡片交互流程定義了相應(yīng)的函數(shù)接口,使應(yīng)用層開發(fā)直接面向應(yīng)用開發(fā)。例如:
尋卡、防沖突、選擇卡相應(yīng)的函數(shù)定義:
UBYTE mcml_request(UBYTE request_type,UBYTE*atq);
UBYTE mcml_anticoll(UBYTE*psnr);
UBYTE mcml_select(UBYTE*psnr, UBYTE*status);
讀、寫MIFARE Ultralight的信息函數(shù):
UBYTE UL_Page_Read(UBYTE addr, UBYTE*pReaddata);
UBYTE UL_Page_Write(UBYTE addr, UBYTE*pWritedata);
ISO-14443-4的交換透明數(shù)據(jù)接口函數(shù):
UBYTE mifpro_icmd(UBYTE*inbuf,UBYTE inbytes,UBYTE*outbuf,UWORD*outbytes);
隨著新建城市軌道交通的擴(kuò)展,快速響應(yīng)城市軌道交通自動售檢票系統(tǒng)的應(yīng)用面臨更緊迫的需求。與此同時,既有已開通軌道交通的城市也面臨接入更多票卡的需求。本文通過對軌道交通大量使用的各種介質(zhì)車票的分析,參照ISO-14443規(guī)范的角度提出了識別車票的一種方法,進(jìn)而優(yōu)化了交易時間的處理。
針對軌道交通自動售檢票系統(tǒng)使用的儲值類車票進(jìn)行進(jìn)一步分析,提出了一種根據(jù)專用AID標(biāo)識識別的方式,更進(jìn)一步建議車票設(shè)計時的相互協(xié)調(diào)的方法,使得在滿足業(yè)務(wù)的情況下,加快車票的交易處理時間。
最后,針對新一代的開發(fā)環(huán)境,將原來緊密耦合射頻驅(qū)動、業(yè)務(wù)處理的軟件開發(fā)變更為層級式開發(fā),并提出了基于嵌入式系統(tǒng)讀寫器層級軟件開發(fā)結(jié)構(gòu),使參與讀寫器的不同開發(fā)人員關(guān)注其重點方面,最終使對車票的處理轉(zhuǎn)向?qū)I(yè)務(wù)的分析、處理,更加靈活地適應(yīng)變化的軌道交通業(yè)務(wù)需求,加快了開發(fā)速度,增強了產(chǎn)品的穩(wěn)定性。
在寧波軌道自動售檢票系統(tǒng)中增加符合交通部標(biāo)準(zhǔn)的一卡通、符合銀聯(lián)標(biāo)準(zhǔn)的銀行卡功能應(yīng)用時,使用票卡快速識別方法保證了不影響既有的MIFARE Ultralight卡、MIFARE Classic卡的交易速度,又可快速識別各發(fā)行主體的CPU卡。同時,利用層級式開發(fā)方法在寧波軌道應(yīng)用公共交通換乘優(yōu)惠時,使開發(fā)人員重點關(guān)注優(yōu)惠規(guī)則的業(yè)務(wù)實現(xiàn),快速響應(yīng)了客戶的需求。