潘新娜,鮑可進,唐宏斌
(1.江蘇大學計算機科學與通信工程學院,江蘇 鎮江 212013;2.揚州源悅支付技術有限公司,江蘇 揚州 225000)
基于ARM的雙界面IC卡讀寫器的設計與實現*
潘新娜1,鮑可進1,唐宏斌2
(1.江蘇大學計算機科學與通信工程學院,江蘇 鎮江 212013;2.揚州源悅支付技術有限公司,江蘇 揚州 225000)
為滿足智能卡在銀行、保險、醫療等管理系統的應用需求,設計了一款基于ARM的支持雙界面智能卡的讀寫系統。采用具有ARM Cortex-M3內核的STM32F103RBT6和近場通信收發器STRFNFCA等芯片進行相關的硬件設計。軟件設計完成了對非接觸式卡和接觸式卡的底層驅動及應用層通信模塊、LCD顯示等操作;根據PBOC 2.0標準對智能卡進行金融交易包括圈存、消費、查余額等;同時,讀卡器集成了Crypto 1加密算法來兼容市場上的Mifare系列卡。測試結果表明,讀寫系統性能穩定、功耗低、實用性強、可靠性高。
讀寫器;應用協議數據單元;報文鑒別碼;PBOC 2.0;DES
隨著國家金卡工程的不斷推進,國內各大商業銀行大量推出金融IC卡。金融IC卡能與多種行業應用相結合,并在非接觸式、新型支付方式上得到拓展,從而帶來新型的支付方式,如IC卡的互聯網支付、數字電視支付、手機移動支付等[1]。金融IC卡應用場景的變化以及支付方式的改變,對讀卡終端提出了更高的安全性、穩定性、便捷性的要求,傳統IC卡讀卡器僅僅作為數據交互的橋梁,擴展應用不便利,不能獨立地完成金融應用。
本文設計一款符合PBOC 2.0標準即《中國金融集成電路(IC)卡規范》的新型支持雙界面智能卡讀卡設備,不再是傳統功能單一的讀卡器,其在內部實現了金融交易,并按照銀聯規范開發網銀支付功能,實現電子現金的本地圈存、消費、余額查詢等金融交易;同時,在金融應用的基礎上也可開發擴展應用,擴大智能卡的使用范圍。

Figure 2 STRFNFCA schematic circuit diagram圖2 STRFNFCA電路原理圖
IC卡有接觸式和非接觸式兩種通信界面,接觸式IC卡通過八個觸點從讀寫器獲取能量和交換數據,符合ISO/IEC 7816協議,包括信號和傳輸協議及APDU(Application Protocal Data Unit)命令等;非接觸式符合ISO/IEC 14443協議,包括物理特性、射頻能量和信號接口、初始化和防沖突[2]以及應用層的傳輸協議[3]。雙界面卡是集接觸式與非接觸式接口為一體的智能卡,操作獨立,但可以共享CPU和存儲空間,具有一卡多用、高度安全、快速交易、兼容性好等特點,有廣泛的應用前景。
3.1 系統總體設計
讀寫器的硬件主要包括控制模塊、讀寫模塊及外圍電路、串行通信模塊、顯示模塊等,如圖1所示。控制模塊主要由MCU STM32F103RBT6、存儲器和晶振組成,負責整個系統的控制工作。讀寫模塊主要由STRFNFCA讀寫芯片、晶振及天線組成,載波頻率為13.56 MHz,模擬部分負責對IC卡的發送接收操作,數字部分則通過串口和中斷與微控制器通信,天線則主要由LC低通濾波器和LC諧振電路組成。STRFNFCA部分電路原理圖如圖2所示。串行通信模塊主要通過RS232串口通信。LCD液晶顯示模塊具有良好的人機交互能力,實時顯示讀寫芯片讀取的數據。

Figure 1 System block diagram圖1 系統框圖
3.2 系統主芯片特性
本設計方案的MCU芯片STM32F103RBT6基于ARM Cortex-M3內核32位高性能處理器,具有64個引腳、51個GPIOs、128 KB Flash、20 KB SRAM、2個ADC、4個TIMER、7通道DMA、高達9個通信接口、主頻可達72 MHz,具有低功耗、高性能、接口資源豐富等特點[4]。相比傳統讀卡器的8位51單片機處理器,32位高性能ARM處理器不僅可以提高與IC卡的通信效率,同時可增強控制功能,擴展系統的應用功能[5]。
讀寫器主芯片STRFNFCA是意法半導體(ST)公司的一款可應用于13.56 MHz非接觸式通信的中高集成收發器芯片,支持ISO 14443 Type A和Type B卡、ISO/IEC15693、ISO/IEC18092、NFC Forum等類型卡片;硬件特性包括內置內部幀控制器、高集成度的RF通訊模擬前端(AFE);發送和接收模式下實現自動卡檢測和場檢測、優化的電源管理功能;它有32個引腳,通信接口包括高達2 Mbps SPI、UATR及256 Byte指令緩存(FIFO)[6]。這些特性使得STRFNFC收發器應用于金融類讀卡器、二代身份證讀卡器、金融POS機、安全門禁等方面有很大的優勢。
4.1 系統初始化
為保證系統正常運行,必須在系統復位時進行初始化。其中包括系統時鐘初始化、定時器配置、中斷配置、SPI/UART串口初始化等操作。
部分底層軟件驅動函數:
(1)hw_config.c:硬件配置函數,對MCU外設RCC、NVIC、TIMER、EXTI、GPIO等進行配置、使能操作。
(2)drv_strfnfca.c:STRFNFCA驅動函數,處理STRFNFCA通過UART或SPI接口跟主機發送、接收信息,包括初始化STRFNFCA、配置引腳、設置通信波特率、開啟時鐘、數據傳輸等。
(3)drv_uart.c和drv_spi.c:驅動函數使能UART和SPI接口收發信息,串口通過配置可選。
4.2 智能卡與讀寫器通信模塊
4.2.1 非接觸式ISO 14443協議層對Type A卡的操作
(1)下電狀態,在空閑狀態的PICC(Proximity Card 鄰近卡)監聽REQA(Request Command,type A尋A類卡)或WUPA(Wake Up command for PICC type A)命令后,進入就緒狀態。
(2)就緒狀態,卡片接收基于二進制搜索算法的防沖突命令(Anticollision),得到一張卡的完整UID(Unique Identification)后,進行選卡操作,選中的卡片進入激活狀態。
(3)激活狀態下選卡返回值選卡應答SAK(Select Acknowledge)來判斷卡片是否支持ISO 14443-4,支持則發送請求應答RATS(Request for Answer To Select)命令,卡片返回值ATS(Answer To Select)。
(4) PPS(Protocol and Parameter Selection)指協議和參數選擇命令,若支持可變參數則根據參數值進行相應設置,沒有參數改變則直接進行數據傳輸。
(5)發送HLTA(HALT command)命令,卡片進入停止狀態,此狀態卡片只響應WUPA命令。
讀寫設備對A類卡的激活流程圖如圖3所示。

Figure 3 Activation of a PICC Type A by a PCD圖3 讀寫設備對A類卡的激活流程圖
讀寫系統經過硬件調試、底層軟件程序設計開發,系統各模塊和卡片間可進行數據傳輸和交換,讀寫器完成對IC卡進行的符合ISO/IEC 14443協議指令集如尋卡、初始化、防沖突及RATS等底層基本操作。實驗結果如表1所示。

Table 1 Software flow and experimental results
4.2.2 接觸式界面ISO/IEC7816協議層命令
除支持以上的T=0型字符傳輸通信協議,讀卡器還支持T=1的塊傳輸,定義了三種基本塊類型[7]:信息塊(I-block)用于傳送應用層信息;接收準備塊(R-block)用于發送肯定或否定的確認信息,它的信息域不出現;管理塊(S-block)用于讀卡設備和卡片之間交換控制信息。塊幀即一個塊由一串字節組成,每個字節以異步字符的形式傳輸。塊傳輸主要指應用協議數據單元(APDU)命令。
C-APDU命令結構包括命令頭:CLA INS P1 P2(CLA為類型,INS為指令,P1、P2為命令參數,如:消費交易命令 80h 54h 01h 00h),條件體:Lc Data Le(Lc為發送命令的長度,Data為輸入數據,Le為期望返回的數據長度)。
R-APDU響應格式:Data SW1 SW2(Data數據域是可選的,指卡片返回的數據,SW1、SW2是狀態字,如9000表示指令執行成功)。
4.3 MAC算法實現
智能卡信息的有效讀取和寫入必須基于相應的應用協議數據單元即APDU命令,終端需使用對稱密鑰體系中3DES加密數據域并用指令頭及加密后的數據產生校驗碼MAC(Message Authentication Code),卡在命令執行前先要驗證校驗碼、解密數據域并根據數據域執行指令。為保證數據的可靠性、完整性和對發送方的認證需用安全報文傳送。安全報文傳送格式如表2所示。

Table 2 Secure messaging format
IC卡與讀卡器終端數據通信生成校驗碼MAC時需建立過程密鑰,過程密鑰是在交易過程中用可變數據產生的單倍長密鑰,只能在某過程/交易中使用一次。不同交易類型中產生過程密鑰的消費子密鑰或圈存子密鑰即K值不同,輸入數據也由交易類型決定。16 Byte子密鑰K=Kl||Kr(Kl為密鑰左半部分,Kr為密鑰右半部分),過程密鑰KMA=3DES(Data,K)=DES{DES-1[DES(Data,Kl),Kr],Kl} 。
把待發送的數據按順序串聯一起,每8字節為單位分成數據塊(最后一個數據塊可能是1~8個字節,其后加上16進制‘80’字節,然后用‘00’填充到8個字節)。用MAC過程密鑰對數據塊進行加密,過程密鑰KMA由DES或3DES算法生成,依照圖4方式產生MAC。最終得到的是從計算結果左側取得的4字節長度的MAC(根據第二步中產生的數據塊長度的不同,有可能在計算中會多于或少于四步)。
4.4 電子存折ED的圈存和消費交易流程
本系統智能卡支持DES/3DES 加密算法[8]、支持多種應用、強大的支付功能(電子錢包ED和

Figure 4 MAC algorithm for single-length DES key圖4 單長度DES密鑰的MAC算法
電子存折EP)、符合ISO 7816-1/2/3/4協議、符合PBOC2.0標準。智能卡應用指令集有:驗證/更改PIN(Personal Identification Number)碼、圈存、消費/取現、圈提、查詢余額、交易確認、取現初始化、圈存初始化、消費初始化、圈提初始化、修改透支限額初始化、修改透支限額等。
圈存交易指持卡人將其在銀行相應賬戶上的資金劃入電子存折或電子錢包中的過程。這種交易必須在金融終端上聯機進行并要求提交個人識別碼(PIN)[9]。

Figure 5 Credit for load transaction flow chart圖5 圈存交易處理流程圖
根據軟件流程及PBOC 2.0標準,在keil uVision4集成開發環境用C語言開發應用程序并加載到已調試好的硬件設備中,讀寫器可按交易流程選中存放密鑰的文件、校驗PIN碼、查詢余額、初始化圈存,根據MAC求解算法算出圈存交易待發送指令中的MAC值,驗證正確后進行圈存操作。同樣,可進行消費交易。為驗證系統的軟硬件設計及數據傳輸的正確性,進行讀卡測試實驗,實驗結果如表3所示。

Table 3 Financial transaction testing data sheet
1 PCB:協議控制字節Protocol Control Byte;2 CRC:循環冗余碼校驗Cyclic Redundancy Check;3 TAC:交易驗證碼Transaction Authorization Crypogram
測試實驗采用一張信息完全的雙界面測試卡,根據設備返回的信息解析數據,系統可按預定金額執行ED和EP的圈存和消費交易,讀寫系統完成交易的安全認證、寫卡、修改卡片金額。此功能驗證了前面所述的金融交易及安全機制的可行性和功能實現。
Mifare系列IC卡是NXP公司的產品,它采用了一種NXP特有的加密算法來完成認證和加解密運算。將同樣的算法引擎放置在NXP的專用Mifare讀寫基站芯片中,認證過程由基站芯片代替用戶系統與Mifare芯片之間完成。這一認證過程就是Mifare系列芯片的三重認證[10],其實質是基站芯片與Mifare芯片之間相互傳遞隨機數以及隨機數的密文,通過對隨機數密文的解密比對實現對卡片的認證。這個算法和機制已經被破解,移植Mifare系列卡Crypto 1加密算法到相應讀寫器設備即可兼容Mifare卡。
Crypto 1算法是通過一個48位線性反饋移位寄存器(lfsr)和隨機數產生寄存器(prng)不斷地更新(加密)數據。對明文每個字節加密即8次循環更新48位lfsr狀態值,隨機地對每一步的值進行異或運算,返回密鑰流。
循環迭代48位lfsr狀態值函數:
static uint8_tmifare_update(struct _crypto1_state* conststate, const uint8_tinjection, const uint8_tfeedback)
{const uint64_tx=state→lfsr;
const uint8_tks=mf20(state→lfsr);
state→lfsr=(x>>1)|((((x>>0)∧(x>>5)∧(x>>9)∧(x>>10)∧(x>>12)∧(x>>14)∧(x>>15)∧(x>>17)∧(x>>19)∧(x>>24)∧(x>>25)∧(x>>27)∧(x>>29)∧(x>>35)∧(x>>39)∧(x>>41)∧(x>>42)∧(x>>43)∧injection∧(feedback?ks:0))&1)<<47);
returnks;
}
用Crypto1算法對Mifare卡進行三重認證的軟件實現過程如下:
(1)讀卡器發送要存取的扇區號并選中密鑰KeyA或KeyB;
(2)Mifare卡片返回4字節卡片隨機數給讀卡器(一重);
(3)讀卡器產生隨機數和過程密鑰(UID+KeyA/B+卡隨機數+讀卡器隨機數產生Mifare過程密鑰)并發送8字節數據(4字節改變的讀卡器隨機數和4字節加密卡片隨機數)給卡片(二重);
(4)卡片驗證加密的卡片隨機數并計算加密的讀卡器隨機數然后返回4字節返回值給讀卡器(三重);
(5)讀卡器通過比對加密的讀卡器隨機數來驗證卡片。
集成Crypto1加密算法到STRFNFCA讀卡器,進行三重認證操作,每一步驗證通過后,實現卡片和讀卡器的相互認證,可對Mifare卡進行讀、寫、增值、減值、存儲、傳送等內存操作從而兼容Mifare系列卡。
本文基于ARMCortex-M3微處理器完成了接觸式、非接觸式IC卡讀寫器的硬件設計,遵循ISO/IEC14443協議、ISO/IEC7816協議和PBOC2.0標準完成了支持雙界面IC卡讀寫器的設計和開發,讀寫器可實現IC卡的金融交易,具有近場通信NFC功能,可單獨用于支付系統亦可嵌入到POS機終端及其它應用系統;讀寫器集成了Crypto1加密算法,可兼容市場上主流的Mifare系列卡。根據IC卡的不同行業應用,讀卡終端可實現滿足不同需求的應用,提供一種便捷的支付消費方式,在銀行、保險、醫療等領域有很好的市場前景。
[1]ZhouXuan-qian.TransformationtimetablefrombankcardtoICcard[N].ShanghaiFinancialNews,2010-11-9(4).(inChinese)
[2]ISO/IECFDIS14443-3:2000(E).Identificationcards-Contactlessintegratedcircuit(s)cards-Proximitycards-Part3:Initializationandanticollision[S].ISO/IECFOS,2000.
[3]ISO/IECFDIS14443-4:2000(E).Identificationcards-Contactlessintegratedcircuit(s)cards-Proximitycards-Part4:Transmissionprotocol[S].ISO/IEC,2000.
[4]STM32referencemanual(RM0008)[R].DocID13902Rev13,STMicroelectronics, 2011.
[5]BaiCui-cui.DesignandimplementationofcontactlessCPUcardreader[J].RadioCommunicationsTechnology, 2012,38(5):70.(inChinese)
[6]STRFNFCANearfieldcommunicationtransceiverdatasheet[R].DocID023077Rev9,ST,2012.
[7]ISO/IEC7816-3:2006(E).Identificationcards-Integratedcircuitcards-part3:Cardswithcontacts-Electricalinterfaceandtransmissionprotocols[S].ISO/IEC,2006.
[8]GemGoldR2.1referencemanualversion1.1 [Z].GEMPLUS, 2000.
[9]Chinafinancialintegratedcircuitcardspecifications-part2:Electronicpurse/electronicdepositapplicationspecification[S].ThefinancialindustrystandardofthePeople’sRepublicofChinaJR/T0025.2-2010,2010.(inChinese)
[10] MF1S50YYX:Mifare classic 1k-mainstream contactless smart card IC product data sheet[S].Rev.3.0-2,2011.
附中文參考文獻:
[1] 周軒千.銀行卡IC化設定時間表[N].上海金融報,2010-11-9(4).
[5] 白翠翠.非接觸式CPU卡讀寫器的設計與實現[J].無線電通信技術,2012,38(5):70.
[9] JR/T 0025.2-2010,中國金融集成電路(IC)卡規范第2部分:電子錢包/電子存折應用規范[S].北京:中華人民共和國金融行業標準.
PANXin-na,born in 1982,MS candidate,her research interest includes embedded system.

鮑可進(1958-),男,江蘇靖江人,教授,研究方向為嵌入式系統。E-mail:bkj@ujs.edu.cn
BAOKe-jin,born in 1958,professor,his research interest includes embedded system.

唐宏斌(1968-),男,江蘇揚州人,工程師,研究方向為嵌入式系統。E-mail:tanghongbin@sina.com
TANGHong-bin,born in 1968,engineer,his research interest includes embedded system.
DesignandimplementationofdualinterfaceICcardreaderbasedonARM
PAN Xin-na1,BAO Ke-jin1,TANG Hong-bin2
(1.School of Computer Science and Telecommunication Engineering,Jiangsu University,Zhenjiang 212013;2.Yangzhou Yuanyue Payment Technology Co. LTD, Yangzhou 225000,China)
To meet the smart cards’application requirements in the banking, insurance, medical management systems, a smart card reader system is designed based on ARM. The chip STM32F103RBT6 with ARM Cortex-M3 and the near field communication transceiver STRFNFCA are used in the hardware design. In the process of software design,it gives initialization operations and application layer data transactions,LCD display between contactless/contact IC card and reader,implements smart card’s financial transactions including credit for load, debit for purchase and getting balance transactions, and integrates Crypto 1 encryption algorithm into reader so as to be compatible with Mifare cards.Experimental results indicate that the system has stable performance, low power consumption,strong practicability and high reliability.
reader;APDU;MAC;PBOC 2.0;DES
1007-130X(2014)05-0991-06
2012-11-23;
:2013-02-25
TP333.91
:A
10.3969/j.issn.1007-130X.2014.05.034

潘新娜(1982-),女,河南通許人,碩士生,研究方向為嵌入式系統。E-mail:panxinna@126.com
通信地址:212013 江蘇省鎮江市江蘇大學計算機科學與通信工程學院
Address:School of Computer Science and Telecommunication Engineering,Jiangsu University,Zhenjiang 212013,Jiangsu,P.R.China