白翠翠,夏春蕾,戴曙光
(上海理工大學光電信息與計算機工程學院,上海200093)
射頻識別[1](以下簡稱RFID)技術(又稱電子標簽)是一項利用射頻信號通過空間耦合(交變磁場或電磁場)實現無接觸信息傳遞并通過所傳遞的信息達到識別的目的技術。與傳統的條碼或磁條識別技術相比,RFID技術具有非接觸、精度高、作用距離遠、可動態識別多個數據及應用環境適應性較好等優點,在工業自動化、倉儲管理和門禁控制等眾多領域得到廣泛的應用與發展。
本文基于MF RC500設計了一種非接觸式CPU卡讀寫器,該讀寫器能夠對非接觸式CPU卡進行物理層和協議層操作,該系統既可以在實際應用場合中作為通用CPU卡讀寫器使用也可以作為非接觸式CPU卡的測試工具。
典型的RFID系統主要由閱讀器、電子標簽、RFID中間件和應用系統軟件4部分構成,一般把中間件和應用軟件統稱為應用系統。RFID系統的工作原理[2]是:由閱讀器通過發射天線發送特定頻率的射頻信號,當電子標簽進入有效的工作區域時產生感應電流,從而獲得能量被激活,使得電子標簽將自身編碼信息通過內置射頻天線發送出去;閱讀器的接收天線接收到從標簽發送來的調制信號,經天線調節器傳送到閱讀器信號處理模塊,經解調和解碼后將有效信息送至后臺主機系統進行相關處理;主機系統根據邏輯運算識別該標簽的身份,針對不同設定做出相應的處理和控制,最終發出指令信號控制閱讀器完成不同的讀寫任務。
CPU卡也稱智能卡,卡內集成電路帶有微處理CPU、存儲單元(包括隨機存儲器RAM、電可擦除存儲器E2PROM、程序存儲器R0M)以及芯片操作系統(Chip Operating System,COS[3])。裝有 COS 的CPU卡不僅具有數據存儲功能,同時具有命令處理和數據安全保護等功能。CPU卡芯片相當于芯片內裝置了一個微處理器,其功能大致與一臺微型計算機相同。在生活中,人們常使用的集成電路卡(IC卡)上的金屬片就是CPU芯片。由于CPU卡具有存儲空間大、處理能力強、信息存儲安全、支持一卡多用以及讀取速度快等優點,已經被廣泛用于金融、交警、保險和政府行業等諸多領域,并通過國家密碼委和中國人民銀行的認證。就外型而言,CPU卡與普通IC卡、射頻卡無明顯差別,但是使用性能、安全性卻有巨大提升,這主要源于CPU卡內含有隨機數發生器、3DES加碼算法、硬件DES和3DES加密算法等,并配合操作系統就可以達到金融級別的安全等級。
MF RC500[4]是一款 13.56 MHz 的高集成度非接觸讀寫芯片,集成了13.56 MHz下的各種被動式非接觸通信方法和協議,支持ISO/IEC 14443A標準信號的預處理。其數據處理部分可處理符合ISO/IEC 14443協議的數據幀和錯誤檢測(CRC和奇偶校驗),支持快速CRYPTO1[5]加密算法,用于 Mifare經典產品的(如Mifare標準1 K和4 K產品)的安全認證。良好的并行接口可直接與各種8位微處理器相接,保證了讀寫器設計的高效便捷性。
非接觸式CPU卡讀寫器硬件部分如圖1所示。主要包括P89LPC932主控制器、MF RC500高集成度讀寫模塊、電源模塊、看門狗及復位電路、LED顯示模塊、蜂鳴器驅動模塊、天線匹配電路和串口通信模塊等。

圖1 讀寫器硬件電路組成
系統的工作機制是:讀卡器與PC成功建立通信時,蜂鳴器啟動一次。PC機傳達應用系統控制指令給MCU,微控制器接收到命令后根據指示通過SPI通信方式控制讀寫模塊驅動天線對CPU卡進行相關操作,然后根據從卡中取得的數據控制發光二極管進行聲光提示,同時MCU把用戶數據或錯誤信息通過串行接口通信傳給PC進行處理。
軟件設計分為PC機端應用軟件和讀寫器軟件2部分,接口函數分為通用函數和命令函數2類。上位機軟件實現的功能是:通過串行通信的方式向讀寫器發送命令,并等待讀寫器返回操作結果或讀得的數據。讀寫器軟件實現的功能是:等待上位機發送的命令,一旦上位機由命令發來,通過串口接收并識別該命令,然后根據不同的命令執行響應的操作,完成(或操作失敗)后將操作結果或從IC卡讀得的數據通過串口發送會上位機。
讀寫器程序用來響應上位機命令,完成對CPU卡的控制,然后將操作的結果或讀的數據回送給上位機。使用 C51編制、模塊化設計,主程序流程如下。

圖2 讀寫器主程序流程圖
主程序中的最后一步是一個反復循環,MCU在接收到一個來自上位機的命令,返回處理結果后,繼續等待上位機發來的下一個命令并進行處理,如此不斷循環。
智能卡操作系統包含了安全報文[5]傳送的概念。安全報文傳送的目的是保證數據的機密性、完整性和對發送方的驗證,數據的機密性通過數據域的加密來得到保證。數據完整性和對發送方的認證通過使用報文鑒別碼MAC[6]來實現。智能卡操作系統接受并處理來至讀卡器的命令。CPU卡與終端之間使用命令與應答的通信機制,即終端把命令送到CPU卡,CPU卡接收并處理后發送響應給終端。這種機制包括2種應用協議數據單元(APDU):命令應用數據單元與響應應用數據單元。因此,讀寫器軟件設計其實就是用程序實現這樣的通信機制。
下面對此通信機制的2種應用協議數據單元進行闡述:
①命令APDU。命令APDU格式如表1所示。

表1 命令頭格式
命令頭的內容如表2所示。

表2 命令頭內容
命令體中的各項是可選的。其中Data表示命令和響應中的數據域;Lc表示命令數據域中Data的長度。Le是期望中的應答APDU數據字段的最大字節數。當Le=0時,表示請求送回最大的應答數據字節數,如Le為1字節長度,則最大數據字節數為256。
②應答APDU。應答APDU由數據和狀態字組成,格式如表3所示。

表3 應答APDU格式
其中,返回數據域是可選的,SW1和SW2是返回的狀態字,即卡片執行命令的返回代碼。如對命令的處理失敗,則由SW1和SW2指明錯誤情況。
根據上述應用協議,在keil編譯器下編寫了如下應用協議數據單元信息交換函數:

∥接收命令,返回響應信息
上位機程序通過串行通信的方式向讀寫器發送命令并接收返回數據。上位機軟件中與串行通訊有關的部分采Windows API函數中與串行通訊相關的函數編寫。
4.3.1 函數類表
考慮到用戶編制應用軟件的需要,編寫以下的C接口函數,如表4和表5所示,同時給出它們的功能描述和簡單說明。

表4 通用函數

表5 專用函數
4.3.2 上位機測試程序設計
關于測試軟件操作CPU卡的說明:對于用讀寫器操作CPU卡而言一般用2個命令就可以實現:第1個是CPU卡復位,這個命令是對CPU卡上電并得到卡片的初始信息,復位成功后就可以進行指令操作。指令操作是發送COS手冊上的命令到CPU卡并從CPU卡獲得返回信息。對于讀寫器而言,就是建立一個卡片和用戶的通道。在通道上傳輸數據要根據自己卡片的COS手冊、文件結構、密鑰體系和要實現的功能來決定。
測試過程:發送數據,在命令數據空格輸如:0084000008-取隨機數指令(其他指令請參閱相應的COS手冊)00A40000023f00-取主文件指令,點擊“發送命令”,返回相應數據。
關鍵代碼如下:


按上述思想設計的非接觸式CPU卡讀寫器已經在上位機測試軟件得到了驗證,證明該方案是合理可行的。該系統提供了豐富的接口函數,用戶可以編寫專用的測試應用軟件,滿足不同的測試需求。在本設計方案上可以做模塊級的擴充使功能和性能達到更高的要求,比如可以將RS232接口更換成USB2.0接口,使通訊速率大幅提高;可更換ARM7之類速度、功能更快更強大的處理器,不僅可以提高與IC卡的通信效率,控制功能也可以有所增強;可以添加7816模塊將其升級為雙界面讀寫器,豐富了系統的功能,避免了資源浪費。
[1]劉錚,章兢.非接觸式IC卡中的射頻識別技術[J].信息技術,2002(4):22-24.
[2]康東,石喜勤,李勇鵬.射頻識別(RFID)核心技術與典型應用開發案例[M].北京:人民郵電出版社,2008.
[3]車平躍.智能卡操作系統內核的研究與實現[D].北京:北京郵電大學,2010.
[4]PHILIPS Seniconductors.Mifare MF RC 500 Highly Integrated ISO 14443A Reader IC[R],January 2001.
[5]International Standard ISO/IEC 7816, Identification cards.Integrated Circuit(s)cards with contacts,Part 4:Interindustry Commands for Interchange[S],1997.
[6]張之津,李勝廣,薛藝澤.智能卡安全與設計[M].北京:清華大學出版社,2010.
[7]高守傳,聶云銘,鄭靜.Visual C++6.0開發指南[M].北京:人民郵電出版社,2007.