您的位置:首页 > 其它

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

2017-09-13 23:58 309 查看

概述

四部分:

PC/STM32 读卡器模块 卡特性 协议

UART/SPI 读卡芯片 S50/70 复旦CPU卡 ISO/IEC 14443 A

 

归结为一下三方面问题:

卡怎么用

读卡芯片怎么用

主芯片与读卡芯片怎么通信

卡的存储结构/文件结构

M1卡存储结构

M1卡(S50/S70)的存储结构:



 

控制块的结构:



左边是低字节,则6、7、8、9字节为FF、07、80、69,这是默认的控制字,其中69是保留字节值并没有任何作用。

复旦CPU卡的文件结构

以读写二进制示例为例:



初始化卡的时候必须要添加密钥文件,其作用是控制添加其他密钥的权限;

二进制文件在创建的时候定义了其读写的权限;

所有种类的密钥文件都有密钥标示,该字节的作用是标识多个同类型密钥,实现密钥索引的功能;

卡的权限管理方式

控制字

存取控制中每个块都定义了3个控制位:



三个控制为以正和反两种形式,按规定的位置存放在控制字节中的前三个字节,这三个字节最终的值最终确定了该块的访问权限。

 

控制位在控制字节中定义的位置:



数据块的"权限-控制位值"表:



控制块的"权限-控制位值"表:



安全状态寄存器

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(或者参考RC
9a89
522芯片资料,因为二者在软件和硬件上皆可通用)。

 

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协议。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: