Mifare plus卡调试总结

默认nxp发行的plus卡为L0级别未初始化的卡片,此时active操作表现为支持ISO1443-4的CPU卡特性(ATQA: 02 00 ,SAK:20  UID: CD 65 E5 03),当执行写相关AES KEY及数据块初始化并commit后则进入L1安全级别,其active操作表现为一张M1S70卡特性(ATQA: 02 00 ,SAK:18  UID: CD 65 E5 03),但实质其仍然可支持ISO1443-4,执行rats成功(也必须支持,否则无法执行switchL2及switch3操作),当在L1级别执行switchL2认证转换为L2级别后,其active操作后返回值为(ATQA: 02 00 SAK:11, UID: CD 65 E5 03 ),此时现有驱动中无此匹配SAK则表现为未知卡类型,在L2安全级别执行switch3认证后卡片升级至L3安全级别,重新执行active操作后返回值为(ATQA: 02 00 ,SAK:20 , UID:CD 65 E5 03)。

将L1及L2级别的操作均运行于active态(ISO14443-3层);当卡片位于L1级别时,可完全执行M1相关接口,也可先加执行AES SL1认证后再执行M1认证,但此时执行AES SL1认证后不需要产生session key base并与M1密钥计算推导新的M1密钥作为真正的M1认证密钥,直接使用M1原密钥即可(此点与L2级别不同)。

在L0级别,执行后PICC的返回码为与M1卡一致的ACK/NAK,为半字节返回码并不带CRC,故此时当打开CRC校验则出现CRC错误;

在L1级别的AES SL1认证过程,当执行正确则返回带CRC返回码及信息,而当出错时(AES密钥错误,RNDB解密错误等)则返回与M1卡一致的NAK,为半字节并不带CRC错误,故此时打开CRC校验则出现CRC错误。

在ISO14443-4级别执行switchL2指令,当执行成功后则PICC进入L2安全级别,此时再执行switchL2指令在第一次发送Cmd+BNo+LenCap+PCDCap2时即返回两个状态字节0x02,0x09其中0x09可理解为无效块号,但0x02无法理解。

在L2级别中,如手册所说,必须先进行AES认证在进行M1认证,并且将AES产生的session key base的低6字节与实际块的M1密钥异或而为真正M1块认证密钥。经过测试得AES Key类型必须与M1 Key类型保持一致(即均为A或者均为B类型),否则导致M1认证失败!当扇区A的AES与M1密钥类型和值与扇区B保持一致,则当对扇区A认证通过后对扇区B的访问与对扇区A的访问一致,无需再对扇区B认证。

在L2安全级别调试mifPLAuthInPro期间,调用s_AESCbcEnDecrypt时,由于其输入iv在加解密完成后会改写iv导致下次进行加解密时iv改变而导致加解密失败!必须注意iv的值!

在L2安全级别,使用强制AES+M1密钥认证中必须保持AES密钥类型与M1密钥类型一致(即AES TypeA Key+M1 TypeA key或者AES TypeB Key+M1 TypeB key,如AES TypeA Key+M1 TypeB key认证即使密钥均正确都会认证失败!

完成L2级别的调试,可反复进行FirstAuth,并且每次FirstAuth得到的TI值均不一样,在执行完一次正确的FirstAuth认证并得到TI后才可进行正确的followAuth(followAuth的iv基于FirstAuth认证)。当执行一次正确FirstAuth后可反复进行followAuth。由于FirstAuth and followAuth运行于ISO14443-4 mode,故当任何错误发生PICC还是保持在ISO14443-4 mode,无须重寻卡操作。

L2安全级别的MultiWriteBlock与MultiReadBlock命令仅支持同扇区内的多数据块读写操作!而L3安全级别的ReadBlock与WriteBlock命令支持跨扇区的连续数据块读写(仅限本扇区内!!!)

L3安全级别的followAuth操作的获取ENC KEY及MAC KEY加密所使用的iv向量为0而非 TI+W_ctr+R_ctr!!!

在ISO14443-4 mode操作中,只要任何错误则必须进行FirstAuth操作!

对于M1卡值相关操作的理解:Restore命令的实质是将传入的数据块对应值(必须为钱包格式)复制到M1卡内部的一个16字节的Transfer Buffer内,而Transfer命令的实质是将M1卡内部的Transfer Buffer值复制入传入的数据块内。Increment命令的实质是将输入的钱包块值加上传入的增加值并复制到Transfer Buffer内,故必须将再调用Transfer命令将Transfer Buffer值复制入指定的数据块内。

Mifare plus卡调试总结相关推荐

  1. Mifare UltraLight 卡存储结构

    原文地址::http://blog.csdn.net/rabbit100/article/details/47415391 相关文章 1.Mifare ultralight IC卡说明----http ...

  2. 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理

    S50(Mifare 1K)卡简介及存储控制原理 https://blog.csdn.net/D_azzle/article/details/85012669?ops_request_misc=%25 ...

  3. 由Mifare 1卡破解带来的危险以及应对方法

    今年年初以来,一个消息的传出震惊了整个IC卡行业.最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法.Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围 ...

  4. NDEF格式的smart tag在Mifare UltraLight卡中的存储方式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 用USB ...

  5. 关于校园一卡通的便携化及Mifare M1卡的内部结构

    一.便携化: 随着智能设备的普及化以及功能的集成化,现在人们出行只需要一部手机就可以了.但是如果你是在大学的话,就会知道,大学有校园卡这一说.学校会将校园的服务认证.集成到一张卡里面,只有通过卡片进行 ...

  6. MIFARE DESFire卡介绍

    原文地址::http://www.nxp.com/zh-Hans/products/identification-and-security/smart-card-ics/mifare-ics/mifa ...

  7. MIFARE 1卡读写控制

    原文地址::http://wenku.baidu.com/link?url=2HThgd75DWH083Z7hdzUjsWceLT524fShl_KOivgBcAsjdtR-6gcmi_GZbP0YI ...

  8. ST17H26读ID卡调试过程

    1.单独测试pwm功能:把这路pwm接到一块原本1601控制的读卡器上,驱动读卡器电路,读卡器工作正常. 2.单独测试id卡数据io口:ST17H26从1601控制板上引入读卡信号,能读出卡号. 3. ...

  9. Mifare l卡特性简介

    电气特性 l         容量为8K位EEPrOM l         分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 l         每个扇区有独立的一组密码及访问控制 l  ...

最新文章

  1. 三星android 7.0 root,三星G9300 7.0 root教程及获取7.0的root权限
  2. 2000年华中科技大学计算机研究生机试真题 对称矩阵
  3. java直线函数_java实现顺序结构线性列表的函数代码
  4. all()是python内置函数吗_Python内置函数all(),python
  5. appcrash事件怎么解决_解决问题的最佳办法,是让问题不再是问题
  6. 第 5 节:前端面试指南 — Vue 篇(附面试题)
  7. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)
  8. Redmi 卢伟冰:要做就做真旗舰 绝不通过简配压低成本
  9. 为什么叫C++而不叫++C ?
  10. 产品经理 - 统一支付 、结算、清算
  11. redis 永不过期_Redis系列八Redis数据过期策略详解
  12. html+css+js实现的3D魔方小游戏源代码
  13. Dagger2利器系列二:懒/重加载+Component 的组织关系
  14. python中encoding是什么意思_python中encoding是什么意思
  15. OpenCV:02基础知识和绘制图形
  16. QQ图片文件夹说明及清理
  17. 计算机软件指数代码是多少,指数代码列表
  18. Lucene.Net 的“System.IndexOutOfRangeException: 索引超出了数组界限”错误
  19. 邮箱每日发送上限小知识,告诉你各大邮箱每天最高发信数量
  20. 如何应对失业潮风险?——普通人的生存指南

热门文章

  1. 你造吗,Oracle SQLplus 也有History命令了
  2. mysql备份工具xtr,xtrbackup备份mysql与恢复
  3. linux下登陆FTP
  4. 超导材料应用于量子计算机,Nature子刊:超导超材料有望助力量子计算机的实现...
  5. 遇到Python嵌套不要怕,你足够认真,它就是纸老虎(14)
  6. Flask框架——数据库操作命令(增删改查)
  7. 视频教程-手把手实现Java图书管理系统(附源码)-Java
  8. 内网直播(局域网直播)系统的搭建
  9. Jquery文本域(textarea)改变事件
  10. Shell 脚本中 set -ex 命令的作用