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会话。