复旦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
- 复旦FM17522芯片读写M1卡、CPU卡预研
- 复旦FM17522芯片读写M1卡(S50/S70)、CPU卡
- 复旦FM1208 CPU卡调试
- android m1卡读写
- 读写M1卡小结
- M1 卡 FM1702sl读写
- IC、ID、M1、CPU卡
- 复旦微电子CPU卡发卡流程
- 复旦FM1208 CPU卡调试(转)
- 复旦微电子CPU卡发卡流程
- M1卡升级CPU卡的方案
- nfc读写m1卡的方法
- CPU卡芯片技术特点
- Android NFC识别CPU卡和m1卡
- CPU卡加密系统与M1加密系统比较
- CPU卡加密系统与M1加密系统比较
- CPU卡加密系统与M1加密系统比较!
- CPU卡读写
- 极限学习机的使用方法
- Java常见笔试及面试考点总结
- 关于单行文字,多行文字溢出隐藏时 css jq处理方法 兼容各个浏览器
- ios UITableview使用
- Windows批处理或命令行循环变量不能设值--采用延迟环境变量扩展
- 复旦FM17522芯片读写M1卡、CPU卡预研
- MySQL的语句执行顺序
- 在线修改MySQL大表的表结构
- Android关于You must call removeView() on the child's parent first的解决
- tcp/udp套接口缓冲区
- XSS跨脚本攻击原理
- Android studio遇到的各类问题
- HTTPClient 发送请求
- Android Studio 检测内存泄漏与解决方法