非接觸式CPU卡的空中傳輸協(xié)議的軟硬件設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
普通的邏輯加密卡,如Mifare1卡(即M1卡),由非易失性存儲(chǔ)器和硬件加密邏輯組成,通過(guò)校驗(yàn)密碼的方式來(lái)保護(hù)卡內(nèi)的數(shù)據(jù),其具有一定的安全性,但這只是低層次的安全保護(hù),無(wú)法防范惡意性的攻擊,因此無(wú)法滿(mǎn)足更高的安全性和更復(fù)雜的多應(yīng)用的需求。而CPU卡內(nèi)部具有微處理器芯片,且固化有COS操作系統(tǒng),可執(zhí)行嚴(yán)謹(jǐn)?shù)募用苓\(yùn)算,安全性極高,靈活性強(qiáng),且存儲(chǔ)容量大。來(lái)看一組金融領(lǐng)域的數(shù)據(jù),截至2014年6月底,全國(guó)金融IC卡累計(jì)發(fā)行超過(guò)8.7億張,其中上半年金融IC卡新增2.84億張,占新增銀行 卡總量的82%,商戶(hù)POS和ATM實(shí)現(xiàn)全面受理,行業(yè)應(yīng)用不斷涌新。隨著應(yīng)用環(huán)境的日漸成熟,各商業(yè)銀行將于年底前逐步關(guān)閉金融IC卡降級(jí)交易,并將在 2015年后,發(fā)行純芯片卡??梢钥吹?,原本的磁條卡時(shí)代正在緩緩落幕,銀行 卡“芯”時(shí)代已成大勢(shì)所趨,與此同時(shí),相應(yīng)的終端機(jī)具需求量必將劇增,這給企業(yè)帶來(lái)了巨大的商業(yè)契機(jī)。
本文在研究了ISO/IEC14443標(biāo)準(zhǔn)以及相關(guān)的金融標(biāo)準(zhǔn)基礎(chǔ)上,基于RC632射頻收發(fā)芯片,對(duì)非接觸式CPU卡和終端機(jī)具之間通信所采用的空中傳輸協(xié)議進(jìn)行了設(shè)計(jì)與實(shí)現(xiàn),并進(jìn)行有關(guān)測(cè)試,給出測(cè)試結(jié)果。
1 ISO14443協(xié)議簡(jiǎn)介
ISO14443協(xié)議是13.56MHz下非接觸式IC卡的國(guó)際標(biāo)準(zhǔn)協(xié)議,由以下4部分組成:(1)物理特性:規(guī)定了接近式IC卡(PICC)的物理特性;(2)射頻功率和信號(hào)接口:規(guī)定了在接近式耦合設(shè)備(PCD)和接近式IC卡(PICC)之間提供功率和雙向通信的場(chǎng)的性質(zhì)與特征;(3)初始化和防沖突:描述了PICC進(jìn)入PCD工作場(chǎng)的輪詢(xún),規(guī)定了在PCD和PICC之間通信的初始階段所使用的字節(jié)格式、幀格式和幀時(shí)序,以及在沖突發(fā)生的情況下如何從多張卡片中選出一張(防沖突)的方法;(4)傳輸協(xié)議:規(guī)定了非接觸式應(yīng)用中具有特色的半雙工傳輸協(xié)議。隨著應(yīng)用場(chǎng)景的不斷多元化,尤其是在快速消費(fèi)領(lǐng)域,由于卡片和終端機(jī)具的需求量與日俱增,ISO14443協(xié)議應(yīng)用也越來(lái)越廣泛,像國(guó)內(nèi)很多行業(yè)標(biāo)準(zhǔn),如中國(guó)金融集成電路(IC)卡規(guī)范等,都是在它的基礎(chǔ)上修訂的。
2 系統(tǒng)硬件部分
2.1 MCU控制電路
本系統(tǒng)中MCU芯片我們選取STM32F103RBT6,它是基于Cortex-M3 ARM內(nèi)核的高性能32位處理器,具有128KB Flash、20 KB SRAM,主頻可達(dá)72 MHz,且具有功耗低、價(jià)格便宜、接口資源豐富等特點(diǎn);與傳統(tǒng)的8位單片機(jī)相比,32位的高性能ARM處理器擁有更高的通信效率、更強(qiáng)的控制功能,更加方便后期的系統(tǒng)擴(kuò)展。
2.2 射頻收發(fā)電路
射頻收發(fā)電路是本系統(tǒng)的核心部分,由RC632應(yīng)用電路和天線(xiàn)組成。RC632是 NXP推出的一款多協(xié)議非接觸式讀寫(xiě)芯片,集成了在13.56MHz下所有類(lèi)型的被動(dòng)非接觸式通信方式和協(xié)議,也就是說(shuō)它支持ISO14443(包括 Type A和Type B)和ISO15693(包括I·CODE1)兩種國(guó)際標(biāo)準(zhǔn)。它的發(fā)送器電路設(shè)計(jì)成具有非常低的阻抗,只需要很少的用于匹配和濾波的無(wú)源器件就可以直接驅(qū)動(dòng)天線(xiàn),操作卡片的距離可達(dá)10cm,其引腳TX1和TX2上傳遞的信號(hào)是由包絡(luò)信號(hào)調(diào)制的13.56MHz的載波信號(hào),這兩個(gè)信號(hào)可通過(guò)寄存器 TxControl進(jìn)行控制;它的接收器設(shè)計(jì)有一個(gè)正交調(diào)制電路,該電路從輸入到RX引腳的13.56MHz的ASK調(diào)制信號(hào)中解析出副載波信號(hào),該副載波信號(hào)經(jīng)過(guò)放大濾波,然后輸入到相關(guān)性電路,對(duì)相關(guān)性結(jié)果數(shù)字化后輸入到數(shù)字電路。方便的并行接口可直接連接到任何8位微處理器,這給讀寫(xiě)器及終端的設(shè)計(jì)帶來(lái)了極大的靈活性;另外,RC632支持通過(guò)SPI方式連接到微處理器。
本系統(tǒng)中我們采用SPI的方式將RC632連接到 MCU,其原理圖如圖1所示。圖中的MOSI_rf,MISO_rf,SCK_rf,NSS_rf四個(gè)腳需連接到MCU的SPI外設(shè),C16f,C17f 兩端的GND_rf網(wǎng)絡(luò)是需要繪制天線(xiàn)線(xiàn)圈(天線(xiàn)的設(shè)計(jì)不在本文范圍內(nèi))的。硬件焊接調(diào)試完成后,其實(shí)物圖如圖2所示。
圖1 射頻收發(fā)電路
圖2 實(shí)物圖
3 系統(tǒng)軟件部分
與M1卡一樣,非接觸式CPU卡(以后稱(chēng)PICC)符合ISO14443-1、- 2、-3標(biāo)準(zhǔn),不同的是它通過(guò)RATS命令可進(jìn)入到CPU模式,以后都按照ISO14443-4的塊傳輸協(xié)議與讀寫(xiě)設(shè)備(以后稱(chēng)PCD)進(jìn)行信息交互。 PCD訪(fǎng)問(wèn)PICC的工作流程如圖3所示,激活CPU卡的過(guò)程總共包括尋卡,防沖突,尋卡,RATS四步,其中RATS是在判斷選卡命令的響應(yīng)支持 ISO14443-4標(biāo)準(zhǔn)的情況下發(fā)送的,以便進(jìn)入CPU模式。
圖3 讀寫(xiě)設(shè)備訪(fǎng)問(wèn)卡片工作流程
根據(jù)OSI參考模型分層原理設(shè)計(jì)的思想,對(duì)PCD和PICC之間的半雙工塊傳輸協(xié)議進(jìn)行概況,可抽象出三層,如圖4所示。物理層處在該層次結(jié)構(gòu)的最底層,它利用空中射頻信道為上層協(xié)議提供了一個(gè)傳輸數(shù)據(jù)的物理媒介,在這一層數(shù)據(jù)的單位是bit;數(shù)據(jù)鏈路層起著承上啟下的作用,它負(fù)責(zé)在物理層提供的傳輸媒介上將應(yīng)用層的數(shù)據(jù)加工后發(fā)送出去;應(yīng)用層則是提供符合某行業(yè)標(biāo)準(zhǔn)的APDU命令。由于應(yīng)用層和數(shù)據(jù)鏈路層聯(lián)系很緊密,故本節(jié)將二者合并為協(xié)議層加以介紹。
圖4 半雙工傳輸協(xié)議軟件設(shè)計(jì)的層次劃分
3.1 物理層設(shè)計(jì)
物理層的實(shí)現(xiàn)在雙方通信過(guò)程中起著“橋梁”的作用,本系統(tǒng)中“擔(dān)此重任”的角色就是射頻收發(fā)芯片RC632。在程序初始化時(shí),配置RC632的相關(guān)寄存器,使芯片工作在ISO14443 Type A模式;而針對(duì)不同的傳輸要求,需及時(shí)調(diào)整相關(guān)寄存器的值,使PCD和PICC之間的底層“對(duì)話(huà)”按照規(guī)定的比特流進(jìn)行,比如通信采用短幀還是標(biāo)準(zhǔn)幀可通過(guò)調(diào)整BitFraming寄存器,有無(wú)奇偶校驗(yàn)或者CRC校驗(yàn)可通過(guò)調(diào)整ChannelRedundancy寄存器。RC632的狀態(tài)由可執(zhí)行特定命令集的內(nèi)部狀態(tài)機(jī)決定,這些命令通過(guò)將相應(yīng)的命令碼寫(xiě)入到Command寄存器來(lái)啟動(dòng)。本系統(tǒng)中主要用到了Transceive指令,其指令碼是0x1E,該指令從FIFO緩沖區(qū)中取出數(shù)據(jù)并送到發(fā)送器發(fā)送出去,接收器在間隔約定時(shí)間后自動(dòng)啟動(dòng),所有從RF接口接收到的數(shù)據(jù)再通過(guò)FIFO緩沖區(qū)返回;而處理一個(gè)命令所需要的變量或者數(shù)據(jù)則要通過(guò)FIFOData寄存器寫(xiě)入到FIFO緩沖區(qū),然后進(jìn)行交換。概況起來(lái),RC632的射頻收發(fā)過(guò)程如下:在Idle 命令有效時(shí),將所有要發(fā)送到卡片的數(shù)據(jù)通過(guò)FIFOData寄存器寫(xiě)入到FIFO,之后將Transceive指令碼寫(xiě)入到Command寄存器來(lái)啟動(dòng)收發(fā)過(guò)程,然后再通過(guò)FIFOData寄存器從FIFO中取出返回的數(shù)據(jù)。
3.2 協(xié)議層設(shè)計(jì)
要運(yùn)行一個(gè)應(yīng)用,還需要在終端上實(shí)現(xiàn)一個(gè)附加的應(yīng)用協(xié)議層,這個(gè)協(xié)議層包括向卡片發(fā)送命令、卡片內(nèi)處理命令和返回IC卡處理響應(yīng)等步驟。應(yīng)用層發(fā)出的命令報(bào)文和卡片返回到應(yīng)用層的響應(yīng)報(bào)文統(tǒng)稱(chēng)為應(yīng)用協(xié)議數(shù)據(jù)單元(APDU);響應(yīng)是和命令相對(duì)應(yīng)的,通常被稱(chēng)為APDU命令-響應(yīng)對(duì);在一個(gè)APDU命令-響應(yīng)對(duì)中,命令報(bào)文(C-APDU)或響應(yīng)報(bào)文(R-APDU)都可能包含數(shù)據(jù)[4]。
C- APDU由4字節(jié)長(zhǎng)的必備頭和變長(zhǎng)的條件體構(gòu)成,如圖5所示。其中,CLA表示指令類(lèi)型,INS表示指令碼,P1表示指令參數(shù)1,P2表示指令參數(shù) 2,Lc表示命令數(shù)據(jù)域中發(fā)送的數(shù)據(jù)字節(jié)數(shù),Data表示命令發(fā)送的數(shù)據(jù)串,Le表示期望返回的數(shù)據(jù)字節(jié)數(shù)。當(dāng)Le存在且值為0時(shí),表示需要最大字節(jié)數(shù)(256字節(jié));在命令報(bào)文需要時(shí),Le可始終被設(shè)為‘00’。
圖5 C-APDU 格式
R- APDU由變長(zhǎng)的條件體和兩字節(jié)長(zhǎng)的必備尾組成,如圖6所示。其中,Data表示響應(yīng)中接收的數(shù)據(jù)串,SW1、SW2表示卡片執(zhí)行命令的返回代碼。當(dāng) SW1的高半字節(jié)為‘9’,且低半字節(jié)不為‘0’時(shí),其含義依賴(lài)于相關(guān)應(yīng)用;當(dāng)SW1的高半字節(jié)為‘6’,且低半字節(jié)不為‘0’時(shí),其含義與應(yīng)用無(wú)關(guān) [5]。
圖6 R-APDU 格式
PCD 和PICC之間的半雙工協(xié)議支持塊格式傳輸,塊格式由一個(gè)開(kāi)始域(強(qiáng)制),一個(gè)信息域(可選),一個(gè)結(jié)束域(強(qiáng)制)組成,如圖7所示。其中,方括號(hào)中的數(shù)據(jù)為可選數(shù)據(jù)。本系統(tǒng)開(kāi)始域中只含有強(qiáng)制的PCB(協(xié)議控制字節(jié)),信息域中的數(shù)據(jù)是基于某行業(yè)標(biāo)準(zhǔn)的APDU命令,結(jié)束域則是CRC校驗(yàn),該校驗(yàn)值可由射頻芯片RC632自動(dòng)產(chǎn)生。
圖7 塊格式
協(xié)議控制字節(jié)PCB用于傳送控制數(shù)據(jù)傳輸所需要的信息,它的設(shè)計(jì)實(shí)現(xiàn)在本程序中起著至關(guān)重要的作用。根據(jù)PCB編碼的不同,協(xié)議定義了塊的三種基本類(lèi)型:用于為應(yīng)用層的使用傳送信息的信息塊(I-塊);用于傳送確認(rèn)或不確認(rèn)的接收準(zhǔn)備塊(R-塊);用于在 PCD 和 PICC 間交換控制信息的管理塊(S-塊)。PCB的編碼依賴(lài)于它的類(lèi)型,具體可參看協(xié)議ISO14443-4。需要詳述的是這樣一個(gè)關(guān)鍵點(diǎn):I-塊和R-塊的 PCB中最低位表示塊號(hào),它遵循如圖8所示的特定的編碼規(guī)則。具體描述如下:
(1) PCD規(guī)則:對(duì)于當(dāng)前被激活的PICC,PCD塊編號(hào)應(yīng)初始化為0;當(dāng)接收到一個(gè)塊編號(hào)與當(dāng)前塊編號(hào)相等的正確的I塊或正確的R-塊(ACK)時(shí),PCD在發(fā)送任意一個(gè)塊之前,應(yīng)反轉(zhuǎn)當(dāng)前的PICC塊編號(hào)。
(2) PICC規(guī)則:在激活時(shí),PICC塊編號(hào)應(yīng)初始化為1;當(dāng)接收到一個(gè)I-塊,PICC應(yīng)在接收I-塊之后立即反轉(zhuǎn)它的塊編號(hào);當(dāng)接收到一個(gè)塊編號(hào)不等于目前的PICC的塊編號(hào)的R-塊(ACK)時(shí),PICC應(yīng)在接收R-塊(ACK)之后立即反轉(zhuǎn)它的塊編號(hào)。
圖8 PCB中塊編號(hào)規(guī)則
關(guān)鍵部分代碼如下:
void APDU_Handle(u8 *APDU_Data)
{
if((APDU_Data[0]&PCB_BlkNo_Mask)==Blk_Info.PCB_BlkNo)
{Blk_Info.PCB_BlkNo ^= PCB_BlkNo_Mask;} //反轉(zhuǎn)塊號(hào)
else { return; } //塊號(hào)不對(duì)!
switch(APDU_Data[0]&PCB_Type_Mask)
{
case 0x00: //收到I塊
{
if(!(APDU_Data[0]&I_PCB_Link_Mask))
{ }//PICC發(fā)送的最后一塊數(shù)據(jù),后續(xù)無(wú)鏈接
else
{ }//PICC分段發(fā)送響應(yīng)數(shù)據(jù),后續(xù)有鏈接。PCD需要發(fā)送R-塊確認(rèn)
break;
}
case 0x80: //收到R塊
{
//說(shuō)明PCD分段發(fā)送請(qǐng)求數(shù)據(jù),需通過(guò)鏈接位。
break;
}
case 0xC0: //收到S塊
{
if((APDU_Data[0]&0x30)==0x30) //PICC請(qǐng)求等待時(shí)間擴(kuò)展
{
//以后的等待超時(shí)時(shí)間(Timeout)需要隨之改變!
}
break;
}
default:
{ break; }
}
}
4 測(cè)試
我們選取復(fù)旦微電子的非接觸式CPU卡做測(cè)試。點(diǎn)擊“尋找卡片”,依次執(zhí)行圖3中的尋卡,防沖突,選卡等三個(gè)步驟,獲得卡片序列號(hào)和卡片類(lèi)型;點(diǎn)擊“RATS”,發(fā)送選擇應(yīng)答請(qǐng)求來(lái)激活CPU模式,PICC返回ATS響應(yīng) “107880B0022090000000000026BAB4A2”,具體含義如表1所示;發(fā)送表2所示的取隨機(jī)數(shù)指令,PICC返回表3所示的四字節(jié)隨機(jī)數(shù);發(fā)送表4所示的選擇MF主文件命令,PICC返回表5所示的嵌套TLV格式的文件控制信息(FCI)。測(cè)試效果圖如圖9所示。
圖9 上位機(jī)測(cè)試效果圖
結(jié)語(yǔ)
本文硬件電路采用ARM內(nèi)核的32位微處理器芯片STM32F103RBT6和NXP公司的RC632來(lái)完成,軟件開(kāi)發(fā)則從物理層和協(xié)議層兩個(gè)層面對(duì)PCD 和PICC之間的無(wú)線(xiàn)射頻通信進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。經(jīng)實(shí)際測(cè)試證明,該讀寫(xiě)設(shè)備工作穩(wěn)定,抗干擾能力強(qiáng),讀卡準(zhǔn)確且操作距離大于5cm。由此可見(jiàn),對(duì)空中傳輸協(xié)議進(jìn)行了較好的實(shí)現(xiàn)。另外,還可以進(jìn)行擴(kuò)展改進(jìn),如增加GPRS模塊再結(jié)合相關(guān)的非接觸式IC卡支付規(guī)范,便可實(shí)現(xiàn)方便快捷的移動(dòng)支付。
參考文獻(xiàn)
[1] ISO/IEC14443-3. Identification cards — Contactless integrated circuit cards — Proximity cards — Part 3: Initialization and anticollision[S].
[2] 潘新娜,鮑可進(jìn),唐宏斌. 基于ARM的雙界面IC卡讀寫(xiě)器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與科學(xué),2014,36(5):991—996.
[3] NXP Semiconductors. CL RC632 Multiple protocol contactless reader IC Product data sheet[R]. Rev. 3.5—10 November 2009.
[4] JR/T 0025.3—2013. 中國(guó)金融集成電路(IC)卡規(guī)范 第3部分:與應(yīng)用無(wú)關(guān)的IC卡與終端接口規(guī)范[S].
[5] JR/T 0025.8—2013. 中國(guó)金融集成電路(IC)卡規(guī)范 第8部分:與應(yīng)用無(wú)關(guān)的非接觸式規(guī)范[S].
[6] ISO/IEC14443-4. Identification cards — Contactless integrated circuit cards — Proximity cards — Part 4: Transmission protocol[S].
[7] JR/T 0025.11—2013. 中國(guó)金融集成電路(IC)卡規(guī)范 第11部分:非接觸式IC卡通訊規(guī)范[S].