Mifare 卡非接数据通信流程

Mifare 卡广泛用于公交一卡通,门禁卡及校园一卡通场景,网上有许多mifare的工作流程介绍,本文侧重于介绍通过安全芯片模拟mifare卡时的非接数据通信流程。

典型的卡模拟组成包括两部分硬件,即CLF+UICC。CLF即非接触前端,一端控制天线与读卡器进行数据交换,一端通过SWP接口与UICC进行通信。UICC内部安装mifare应用,以配合CLF完成mifare的卡模拟。

                              Mifare 卡非接数据通信流程

 

CLF与UICC之间通过SWP进行通信,SWP是一种全双工的单总线通信接口,其遵循ETSI TS 102 613技术规范。

在CLF进入读卡器的磁场之后,CLF配合读卡器完成防冲突及卡的选择。此流程主要由读卡器及CLF完成。本文着重介绍CLF与UICC的通信流程。

 

在CLF探测到进入读卡器的磁场之后,即开始与UICC进行通信,通信的主要步骤包括:

  • SWP接口**;
  • SWP接口的SHDLC会话建立;
  • SWP接口的会话初始化;
  • Mifare应用数据交互

 

  • SWP接口**

SWP接口**流程通过ACT帧来完成,其流程图如下:

               Mifare 卡非接数据通信流程

 

  • 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端主动发起。

                                           Mifare 卡非接数据通信流程

 

在上图中,包括一个Initialisation流程,其详细流程包括PIPE创建及Set Paremeter,可以参考如下2个图。

                                       Mifare 卡非接数据通信流程

                                                             Mifare 卡非接数据通信流程

 

 

在会话初始化过程中包括Mifare的Type A RF gate的与RF application创建pipe的过程,并且在pipe 创建完成之后,UICC会主动通过set parameter过程来通知CLF一些关键参数,例如UID(参数索引为02)。

                               Mifare 卡非接数据通信流程

 

  • Mifare应用数据交互

Mifare应用数据的交互是通过CLT帧来进行交互的。

                                              Mifare 卡非接数据通信流程

 

例如,对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会话。