mifare plus 卡可以兼容mifare class卡。
它的激活分为两种,一个是发送14443-3的激活,称为L3激活,一个是发送激活后发送14443-4的rats,成为L4激活。
白卡默认为等级0,初始化后为等级1,然后就可以进行升级。部分卡片必须先升级到等级2,然后才可以升级到等级3。不同等级对应不同的功能和指令。
等级0需要写入密钥进行初始化,包括扇区和全部等级的升级密钥,然后提交初始化。等级升级密钥是必须的,扇区密钥如果不写入会默认是16字节的0xFF,是作为AES认证的密钥。
密钥的存储地址如图:
以容量1k 的mifare plus se卡为例,它有16个扇区,每个扇区4块,每块16字节,支持等级0,1,3.
所以初始化时候,需要写入0x9003和0x9004的升级密钥,以及从0x40000到0x4001F的16个扇区的密钥。然后调用提交初始化指令。需要注意的是,初始化前的激活方式L3和L4激活都可以。区别就是L3激活后,指令底层与mifare class卡通信方式一样。L4激活后,通信方式与CPU卡或者说智能卡一样,用半双工方式通信。
提交初始化后,plus卡的等级为1.
等级1兼容全部的mifare class指令,包括读写值,读写块,mifare认证。但是需要注意的是,如果想要使用mifare class卡的指令,那么应该使用L3激活,否则就会报错。
mifare class卡就是经典的Mifare 卡,指令比较简单。
等级1升级到等级3,需要对块0x9003进行认证。认证分为第一次认证和后续认证,这里使用第一次认证,认证流程可以参考NXP的资料,双方对随机数进行加密和解密验证。需要注意的是,在认证指令前的激活方式应该是L4激活。
升级到等级3后就可以执行plus卡的加密读写指令。
一般对数据块扇区读写前进行第一次认证,切换扇区重新认证。
对非数据库扇区读写需要进行后续认证,比如修改某个扇区的密钥块。
具体指令可以参考NXP的plus卡资料和代码例程。