NXP

复旦FM17522芯片读写M1卡(S50/S70)、CPU卡要点摘录

2019-07-12 12:59发布

  目录 概述 卡的存储结构/文件结构 M1卡存储结构 复旦CPU卡的文件结构 卡的权限管理方式 M1卡控制字 CPU卡安全状态寄存器 卡的认证 M1卡的三次互相认证 复旦CPU卡的外部认证和内部认证 机具内部认证步骤 发卡流程 M1卡发卡流程 复旦cpu卡发卡流程 读卡器模块 PC/STM32端(控制端) ISO/IEC 14443 TYPE A协议 M1卡的流程 复旦CPU卡的流程 ISO/IEC 14413 A 规定的命令集

概述

四部分: PC/STM32         读卡器模块           卡特性                           协议  UART/SPI          读卡芯片               S50/70和复旦CPU卡    ISO/IEC 14443 A 归结为以下三方面问题:
  1. 卡怎么用?
  2. 读卡芯片怎么用?
  3. 主芯片与读卡芯片怎么通信?

卡的存储结构/文件结构

  • M1卡存储结构

  • M1卡(S50/S70)的存储结构:
  • 控制块的结构:
左边是低字节,则6、7、8、9字节为FF、07、80、69,这是默认的控制字,其中69是保留字节值并没有任何作用。
  • 复旦CPU卡的文件结构

以读写二进制示例为例: 初始化卡的时候必须要添加密钥文件,其作用是控制添加其他密钥的权限; 二进制文件在创建的时候定义了其读写的权限; 所有种类的密钥文件都有密钥标示,该字节的作用是标识多个同类型密钥,实现密钥索引的功能;

卡的权限管理方式

  • M1卡控制字

  • 存取控制中每个块都定义了3个控制位:
三个控制为以正和反两种形式,按规定的位置存放在控制字节中的前三个字节,这三个字节最终的值最终确定了该块的访问权限。
  • 控制位在控制字节中定义的位置:
  • 数据块的“权限-控制位值”表:
  • 控制块的“权限-控制位值”表:
  • CPU卡安全状态寄存器

FMCOS 通过核对口令和外部认证来改变当前文件夹下安全状态寄存器的值。   例: 设卡中某目录下有一个二进制文件,定义读二进制文件的权限为F1,写二进制文件权限为F2。该目录下有一个口令密钥,口令核对通过之后的后续状态为1,卡中有一外部认证密钥,使用权限为11,外部认证通过之后后续状态为2。 此处必须先认证外部口令成功之后才有使用口令密钥的权限。  

卡的认证

M1卡在选卡成功之后,会进行“三次互相验证”。 CPU在进入目录后,进行外部认证和内部认证。
  • M1卡的三次互相认证

  • 复旦CPU卡的外部认证和内部认证

CPU卡外部认证步骤: 1、CPU卡产生一个8字节随机数送给外部程序,CPU卡临时保存随机数在卡内 2、外部程序把8字节随机数送给机具,机具用密钥计算随机数,得到8字节随机数密文 3、外部程序把8字节随机数密文送给CPU卡 4、CPU卡在卡片内部解密8字节随机数得到随机数明文, 5、CPU卡在卡片内部把解密后的随机数和步骤1中临时存放的随机数比对,若相等,则外部认证成功,所以外部认证是CPU卡认证机具
  • 机具内部认证步骤

过程与外部验证一样,只是认证方与被认证方调换。 1、机具产生一个8字节随机数送给外部程序,机具临时保存随机数在机具中 2、外部程序把8字节随机数送给CPU卡,CPU用内部认证密钥计算随机数,得到8字节随机数密文 3、外部程序把8字节随机数密文送给机具 4、机具解密8字节随机数得到随机数明文 5、机具在内部把解密后的随机数和步骤1中临时存放的随机数比对,若相等,则内部认证成功,所以内部认证是机具认证CPU卡 *两种卡认证的机制相似,不同点在于内、外部验证一开始传的都是明文随机数,如果采用这两个认证的组合来认证M1卡,那需要更多的交互次数。

发卡流程

基于读卡器指令、COS指令的发卡流程举例:
  • M1卡发卡流程

关闭自动寻卡 复合寻卡(包括寻卡、防冲突、选卡)   密钥验证 写控制块(修改密钥) 新的密钥的验证 写控制块(修改控制字)   复合写块(包括密钥验证、写块)  
  • 复旦cpu卡发卡流程

FMCOS激活 选择MF 外部认证 删除MF目录下的文件   创建MF下新的密钥文件 添加外部认证密钥 建立子目录 选择子目录 创建子目录密钥文件 添加子目录下外部认证 添加口令密钥 外部认证 验证口令 创建二进制文件 选择文件 写文件 停活  

读卡器模块

初期主要是熟悉读卡器模块厂商的操作手册,这也是学习各种卡片特性、操作COS指令的良好工具,待板子出来后需要开发STM32读卡器模块,前期通过第三方封装的串口命令控制读写卡操作。
  • PC/STM32端(控制端

编写Linux环境下串口操作程序(串口终端),实现与第三方读卡器交互数据,熟悉函数字符串操作、熟悉函数封装、熟悉对相应返回数据的处理。 例: char* str_to_cmd(char* str, char count); void print_cmd(char *ptr, char count); int read_rfid(int fd, char **data); int write_rfid_base(int fd, char *buff, unsigned char num); int read_rfid_atomod(int fd); 以上用于预研阶段调试用,实际产品中STM32主芯片通过uart或者spi接口控制FM17522,读卡器模块的开发可参考官方SDK(或者参考RC522芯片资料,因为二者在软件和硬件上皆可通用)。   

ISO/IEC 14443 TYPE A协议

这两种卡都是在ISO/IEC 14413 TYPE A协议下操作。 ISO/IEC 14413标准共有四层: ISO/IEC 14413-1,规定物理特性 ISO/IEC 14413-2,规定了射频能量和型号接口,这一层有TYPE A和TYPE B两种空中接口 ISO/IEC 14413-3,防碰撞协议 ISO/IEC 14413-4,传输协议
  • M1卡的流程

寻卡-防冲突-选卡-ATS,协议中规定了若干命令(通过这些命令与支持该协议的读卡器芯片交互)来实现这个流程。 这些发送或者接受命令具有特定的帧结构,如ATQA应答命令中有厂商编码、UID大小等信息,在ISO/IEC 14413-3层,选卡命令SELECT之后,卡返回SAK应答命令的结构中b6 = 0,表示该卡不支持ISO/IEC 14413-4,则可判断该卡不是cpu卡。
  • 复旦CPU卡的流程

前面三步和M1操作完全一样,属于ISO14443A前面三层的操作,ATS成功后就进入ISO14443A-4协议层了,也就进入了CPU卡的操作层。
  • ISO/IEC 14413 A 规定的命令集

REQA/WUPA ATQA应答 ANTICOLLISION SELECT SAK RATS ATS *读卡器芯片是在这些命令的基础上来与卡片交互,双方都遵从ISO/IEC 14413A协议。   【以上内容作为前期开发的整理资料,语言描述多有不周,日后有机会定会补充完整】