复旦FM17522芯片读写M1卡、CPU卡预研

来源:互联网 发布:事件提醒软件app 编辑:程序博客网 时间:2024/04/29 21:16

一、 概述

四部分:

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

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

 

解决三方面问题:

卡怎么用

读卡芯片怎么用

M3与读卡芯片的通信

二、 卡特性

卡的存储结构/文件结构

M1卡存储结构

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

 

2.      控制块的结构:

复旦CPU卡的文件结构


以读写二进制示例为例:

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

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

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

卡的权限管理方式

控制字


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

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

 

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


3.      数据块的“权限-控制位值”表:


4.      控制块的“权限-控制位值”表:


安全状态寄存器

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指令的良好工具。

有待熟悉读卡器芯片,查找资料,学习如何使用。

四、 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开发环境,进行串口/SPI编程。

 

五、 ISO/IEC 14443 TYPE A协议

这两种卡都是在ISO/IEC 14413 TYPE A协议下操作。

 

ISO/IEC 14413标准共有四层:

ISO/IEC 14413-1,规定物理特性

ISO/IEC 14413-2,规定了射频能量和型号接4口,这一层有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协议,对协议的学习和理解还有待深入。

 

未完待续,2016.09.08-hxk

0 0