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

 

目录

概述

卡的存储结构/文件结构

M1卡存储结构

复旦CPU卡的文件结构

卡的权限管理方式

M1卡控制字

CPU卡安全状态寄存器

卡的认证

M1卡的三次互相认证

扫描二维码关注公众号,回复: 5956302 查看本文章

复旦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协议。

 

【以上内容作为前期开发的整理资料,语言描述多有不周,日后有机会定会补充完整】

猜你喜欢

转载自blog.csdn.net/hxkrrzq/article/details/52816187