Mifare 卡非接數據通信流程

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會話。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章