Mifare 卡廣泛用於公交一卡通,門禁卡及校園一卡通場景,網上有許多mifare的工作流程介紹,本文側重於介紹通過安全芯片模擬mifare卡時的非接數據通信流程。
典型的卡模擬組成包括兩部分硬件,即CLF+UICC。CLF即非接觸前端,一端控制天線與讀卡器進行數據交換,一端通過SWP接口與UICC進行通信。UICC內部安裝mifare應用,以配合CLF完成mifare的卡模擬。
CLF與UICC之間通過SWP進行通信,SWP是一種全雙工的單總線通信接口,其遵循ETSI TS 102 613技術規範。
在CLF進入讀卡器的磁場之後,CLF配合讀卡器完成防衝突及卡的選擇。此流程主要由讀卡器及CLF完成。本文着重介紹CLF與UICC的通信流程。
在CLF探測到進入讀卡器的磁場之後,即開始與UICC進行通信,通信的主要步驟包括:
- SWP接口激活;
- SWP接口的SHDLC會話建立;
- SWP接口的會話初始化;
- Mifare應用數據交互
-
SWP接口激活
SWP接口激活流程通過ACT幀來完成,其流程圖如下:
-
SWP接口的SHDLC會話建立
SWP接口的SHDLC會話建立主要通過U幀來實現。CLF發送U-RESET幀,UICC通過UA幀來進行響應(或者U-RESET幀),具體流程參考TS 102 613的10.5描述。在接收到UA幀之後,SHDLC會話即建立完成。
-
SHDLC會話初始化
SHDLC會話初始化主要用於識別CLF與UICC之間的連接關係是否發生變化,如果發生變化,則重新打開CLF與UICC之間的邏輯gate間的pipe。
會話初始化的流程如下圖所示(參考TS 102 613 8.4節),會話初始化在SHDLC會話建立之後,由UICC端主動發起。
在上圖中,包括一個Initialisation流程,其詳細流程包括PIPE創建及Set Paremeter,可以參考如下2個圖。
在會話初始化過程中包括Mifare的Type A RF gate的與RF application創建pipe的過程,並且在pipe 創建完成之後,UICC會主動通過set parameter過程來通知CLF一些關鍵參數,例如UID(參數索引爲02)。
-
Mifare應用數據交互
Mifare應用數據的交互是通過CLT幀來進行交互的。
例如,對Block 0 進行三重認證,對block1進行讀寫的數據流如下
三重認證數據流
CLF 發送:58 60 00
(58的bit5=1,bit4~1=8表示字節對齊,CL_PROTO_INF(A))
UICC響應:40 XX XX XX XX XX
(40的bit5=0,bit4~1=8表示Type A對齊,ADMIN_FIELD=NONE, 5個XX 表示UICC發送四字節隨機數,轉換爲5字節的Type A數據)
CLF 發送:40 XX XX XX XX XX XX XX XX XX
(9個XX 表示CLF發送8字節加密數據,轉換爲9字節的Type A數據)
UICC響應:40 XX XX XX XX XX
(5個XX 表示UICC發送四字節加密數據,轉換爲5字節的Type A數據)
讀數據流:
CLF發送:40 XX XX XX XX XX
CFL發送 命令 30 01 CRC1 CRC2 ,該4字節命令經過加密之後,轉換爲5字節的Type A數據
UICC發送:40 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
UICC 發送16字節數據加2字節CRC,轉換爲20字節的Type A 數據。
在該通信流程中,很重要的一點是ADMIN_FIELD= CL_PROTOL_INF(A)只能發送一次(重新進行三重認證除外),並且第一幀數據是採用字節對齊發送,在初始化Type A 協議之後,後續的數據都必須使用Type A對齊的格式進行發送。
如TS 102 613技術規範的11.6節所述,一個CL_PROTOL_INF(A)意味着打開一個新的Type A會話。