CPU卡内部自带COS,有严格的密钥管理系统。相比M1来说,要复杂的多。我用的是复旦微电子的FM1208 CPU卡,读卡芯片用的是FM1702.FM1702有并口和SPI接口两种方式。NXP的RC500,RC531只有并口接口。用SPI接口,可以省下单片机很多IO口。下面是开发过程中我觉得比较重要的地方,

总结在下面:

1、 CPU卡的操作步骤:寻卡-防冲突-选卡-ATS,前面三步和M1操作完全一样,属于ISO14443A前面三层的操作,ATS成功后就进入ISO14443A-4协议层了,也就进入了CPU卡的操作层。

2、 PPS是可以不做的,只有RATS的返回值表明其接收能力大于PCD的发送即可。PPS用来设置通信时的波特率,通过RATS命令响应数据07 77 80 A0 02 47 56可以判断该卡仅支持106K波特率。所以PCD也没有通过PPS指令修改通信波特率的必要了。当然PPS指令重新按106K波特率设置一下也是可以的,RATS以及后续的PCD指令都需要加上CRC的。

3、 ISO14443-4只规定到PPS指令,后续的指令都需要由CPU卡内部的软件COS来解释,所以卡片完成SELECT,通过RATS和PPS指令后,必须发COS支持的指令。发COS支持的指令一般都需要加CRC的。

4、 发送取随机数命令00 84 00 00 04,根据块格式规定,除了发送这个指令外,还要发送PCB和CID,即实际发送的字符是0A 01 00 84 00 00 04,0A01这两个字节必须加在每个指令字符串的前面,并且块号不能重复,即如果你连续2次取随机数,需如下发送:0A 01 00 84 00 00 04 ,0B 01 00 84 00 00 04.即第一个字节的最后一位要不断变化。

5、 取随机数命令可取4字节或8字节。若取随机数命令下条指令为外部认证,则外部认证数据用指定的外部认证密钥解密后与该随机数进行比较。外部认证命令要求CPU卡存在用于外部认证的密钥。在满足该密钥的使用条件,且该密钥未被锁死时才能执行此命令。将命令中的数据用指定外部认证密钥解密,然后与先前产生的随机数进行比较,若一致则表示认证通过,置安全状态寄存器为该密钥规定的后续状态值,错误计数器恢复成初始值,若比较不一致则认证失败,可再试错误数减一,且不改变安全状态寄存器的值。

6、 MF文件唯一存在,CPU卡复位后,卡片自动选择MF文件为当前文件。任何一个DF在物理上和逻辑上都保持独立,都有自己的安全机制和应用数据。可以通过应用选择实现对其逻辑结构的访问。可以将单个DF文件以及其中一个或多个EF文件当做一个应用。也可以将多个DF以及其中多个EF文件当作一个应用。基本文件EF用于存放用户数据和密钥,存放用户数据的文件称为工作基本文件,在满足一定条件下用户可对文件进行相应的操作。KEY文件称为内部基本文件,不可由外部读出,但当获得许可的权限时可在卡内进行相应的密码运算,在满足写的权限时可以修改密钥。KEY文件必须在MF/DF下最先被建立,且一个目录只能有一个KEY文件。KEY文件可以存多个口令密钥,外部认证密钥,DES运算密钥,每个密钥为一个TLV格式的可变长记录,记录的长度为密钥数据长度加8,3DES密钥长度为24字节,DES密钥记录的长度为16字节。

7、 外部认证A、取随机数可以取4字节,也可以取8字节,如果是4字节,则在后面加上4字节0,也就是参与加密运算的随机数是8字节。B、 外部认证所用的加密算法是DES/3DES算法C、 密钥是指外部认证密钥D、如果密钥的长度是8字节,则适用DES算法,如果密钥长度为16字节,则适用3DES算法。

8、 一般CPU卡提供商提供CPU卡时,已经对CPU卡进行过初始化,即CPU卡上已经建立了主文件MF及主密钥文件(MF下的KEY文件),主密钥文件中也写入了初始化CPU卡主控密钥。在对CPU卡建立特定的卡结构及写入密钥和数据之前,程序设计中的第一步应该对CPU卡进行外部认证。外部认证所使用的密钥正是初始CPU卡主控密钥。当完成外部认证后,接下来最好是擦除CPU卡上已有的结构,然后开始重新建立CPU卡结构。

9、 文件标识符是文件的标识代码,用2个字节表示,同一目录下的文件标识符必须是唯一的,MF的文件标识符是3F00。短文件标识符选择只能用5位来决定。所以可选择的最大文件标识符是31。选择文件后,只要文件存在,该文件就被置为当前文件,以后可以不用选择而直接对该文件进行操作。文件类型在建立文件时规定。

10、 删除MF文件后,选择MF会返回FA 01 01,程序要一直发送FA 01 01给1208,直到收到0A 0B开头的数据。如果MF下没有密钥文件,建立KEY文件不需外部认证。

11、 在多应用卡中,MF下通常包含多个DF,这里的MF就是一个典型的DDF,为了维护管理DDF下所有的DF,在每一个DDF下一般可以包含一个系统文件(DIR),记录所有子DF的入口,如果只有一个ADF应用,不需建立DIR文件。

12、 DF文件短标识符,当高三位为000时,为DDF,当高三位为100时,为ADF的短文件标识符,在建立目录文件时,要指定2字节文件标识符,短文件标识符,文件名。短文件标识符要在1-31之间,和文件标识符没有关系。在卡片出厂时建立MF,MF的短文件标识符应为01,因为建立MF下密钥文件使用的DF短标识符是01。所以自建一个DF,短文件标识符应定义为02或其它值。同一目录下的文件标识符必须是唯一的。

13、 密钥标识,如果该目录下某类型密钥只有一个,则其密钥标识原则上应为00,否则应从01顺序开始。

14、 增加权限:在当前目录下创建新文件的权限激活权限:激活失效安全机制的权限终止权限:永久终止的权限,对于MF来说,标识卡锁定,对于ADF来说,表示当前应用永久锁定,即应用失效。读权限:对EF文件的内容的读操作权限写权限:对EF文件内容的写操作权限安装权限:安装密钥和密码的权限使用权限:表示使用密钥或密码的权限修改权限:修改密钥或密码的权限解锁权限:解锁密码PIN的权限,此权限只有PIN才有

15、 安全机制是指安全状态的改变所采用的方法和手段以及安全属性和安全状态之间的控制关系,COS命令在执行过程中,首先要检查COS环境所处的安全状态是否符合执行命令需求的安全属性,假设当前COS所处的是安全状态A,执行COS命令安全属性要求为安全状态B,在执行COS命令前要通过安全机制涉及安全提升方法,将安全状态提升到安全状态B。

16、 内部认证是用读卡设备来认证卡,保证卡的合法性,内部认证可以防止伪造的卡在读卡设备上进行操作。外部认证是用卡来认证外部读卡设备的合法性,外部认证可以防止恶意对卡进行操作,读取或更改卡内信息。外部认证还可以改变卡的安全状态,一般卡内存储了多个外部认证密钥,每个外部认证密钥多能改变的安全状态不一样,在进行外部认证时,必须通过密钥索引参数选择对应的外部认证密钥完成外部认证。CPU卡和读卡设备存放吸纳沟通的密钥外部认证步骤:A、CPU卡产生一个8进制随机数送给读卡器,CPU卡临时保存随机数在卡内B、 读卡器程序用密钥计算随机数,得到随机数密文C、 读卡器程序把8字节随机数密文送给CPU卡D、CPU卡在卡片内部解密8字节随机数得到随机数明文E、 CPU卡在卡片内部把解密后的随机数和步骤A中临时存放的随机数对比,若相等,则外部认证密钥成功外部认证是CPU卡认证读卡器内部认证步骤:A、读卡器产生一个8字节随机数,发送给CPU卡,读卡器临时保存这个随机数。B、 CPU卡用内部认证密钥计算这个随机数,得到8字节随机数密文。C、 CPU卡把随机数密文发给读卡器D、读卡器解密8字节随机数密文得到随机数明文E、 读卡器把解密后的随机数和步骤A中产生的随机数对比,若相等,则内部认证成功。内部认证是读卡器认证CPU卡

原文链接:http://www.itgo.me/a/x8645961561392057307/FM1208。

复旦FM1208 CPU卡调试(转)相关推荐

  1. 复旦FM1208 CPU卡调试

     原帖:http://www.itgo.me/a/x8645961561392057307/FM1208%E3%80%82 CPU卡内部自带COS,有严格的密钥管理系统.相比M1来说,要复杂的多.我用 ...

  2. 复旦微电子CPU卡发卡流程

    前言 指令列表 发卡 卡片擦除 目录文件及用户密钥的创建及写入 命令报文数据域 指令集列表 指令集说明 数据(二进制数据,记录数据)的写入 MF下05文件写入 EF下15文件写入 前言 近段时间一直在 ...

  3. 复旦微电子CPU卡FMCOS协议封装

    头文件fmcos.h #ifndef _FM_COS_H_ #define _FM_COS_H_ #define SW_OK           (0x9000) // FMCos命令集 namesp ...

  4. CPU卡校验MAC1、计算MAC2、校验TAC的方式及流程

    前言 mac1验证.mac2计算.tac验证流程 运行结果如下 涉及的帮助类 DES工具类 ByteUtil 前言 CPU卡的各个密钥是需要通过加密机分散获得,因此这里使用的是之前自己发的一张复旦微电 ...

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

    目录 概述 卡的存储结构/文件结构 M1卡存储结构 复旦CPU卡的文件结构 卡的权限管理方式 M1卡控制字 CPU卡安全状态寄存器 卡的认证 M1卡的三次互相认证 复旦CPU卡的外部认证和内部认证 机 ...

  6. CPU卡电子钱包圈存消费调试记录

    参考规范: <复旦FMCOS ><PBOC2.0第2部分> 1.密钥装载 圈存密钥装载: 80D40102153FF0F2000200112233445566778899aab ...

  7. switch芯片和phy芯片的区别_感应式芯片卡CPU卡的FM1208-9和FM1208-10有什么区别,你知道吗?...

    感应式CPU卡是目前芯片卡中安全系统较高的芯片,使用范围也较为广泛,但是这款CPU分为FM1208-9和FM1208-10,那你们知道分别代表什么意思呢?他们之间有什么不同呢? CPU白卡 FM是什么 ...

  8. 应公司需要,开发了一个CPU卡的发卡工具

    前言 应公司需要,开发了一个CPU卡的发卡工具. 目的是对同方.复旦.伯通的cpu卡进行建文件结构的操作. 写了一天,目前仅支持复旦的(同方.伯通的库还没有进行集成). 先发个简单的使用界面及其发卡脚 ...

  9. Mifare plus卡调试总结

    Mifare plus卡调试总结 默认nxp发行的plus卡为L0级别未初始化的卡片,此时active操作表现为支持ISO1443-4的CPU卡特性(ATQA: 02 00 ,SAK:20  UID: ...

最新文章

  1. 如何减少浏览器repaint和reflow(下)
  2. JMM内存模型如何为并发保驾护航
  3. Tkinter的OptionMenu组件
  4. spring boot + vue + element-ui全栈开发入门——项目部署
  5. 洛谷 P1706 P1036 -小试牛刀
  6. pythontime库简单使用_Python time库基本使用方法分析
  7. 聚簇索引和非聚簇索引的区别_学习索引的一些总结
  8. Docker跨服务器通信Overlay解决方案(上) Consul单实例
  9. teched2004视频资料下载,又加了5段,全是开发类的
  10. cad转excel插件c2e_CAD表格互转EXCEL插件(CAD和EXCEL表格互转工具)V1.1 最新版
  11. oracle财务数据权限思考
  12. try固定搭配_【昂立推荐】初中英语动词固定搭配大全,值得收藏!
  13. Netfilter学习之NAT类型动态配置(三)MASQUERADE内核空间的实现
  14. dw 用html修改文字样式,Dreamweaver中插入文本以及文本格式设置方法?
  15. 大数据血缘分析系统设计
  16. 电子凸轮追剪曲线生成算法 麦格米特
  17. marker 上的气泡 callout属性设置无效
  18. [T00ls]DEDECMS 0DAY
  19. urho3D 运动逆解Inverse Kinematics
  20. 集中式版本控制器和分布式版本控制器的个人理解

热门文章

  1. matlab曲线拟合成直线,曲线拟合与曲线直线化
  2. SpringBoot修改tomcat配置
  3. python列表常见排序方法
  4. js解析emoji表情
  5. struts2表单验证里field-validator type值一共可以取哪些?都什么含义?
  6. Uniapp 微信小程序@click点击事件失效
  7. html css 横杠样式设置
  8. 计算机类英文文献 英语怎么说,计算机专业外文文献翻译共5页(样例3)
  9. Unity Shader学习:素描效果
  10. emd 函数 matlab 中文备注