RFID Card Clone

你有没有了解过你的学生证,厂牌还有公交卡,地铁卡是以一种什么样原理存在?

1 About NFC

NFC (Near Field Communication)

NFC技术是由NXP(当时的Phillips)发明的,NFC(近场通信)是一组短距离(通常高达10厘米)的无线通信技术,旨在提供两种设备之间的轻量和安全通信。
NFC的操作是在13.56 MHz,它基于一个“启动端”initiator和“目标端”target model,在这个model中,发起者生成一个小的磁场来驱动目标,这意味着目标端将不需要电源。
这种通信方式被称为被动通信Passive Communication,用于读取和写入小型、廉价的13.56 MHz RFID标签,这些标签是基于ISO14443A等标准的。
当两个设备都有电源时,主动通信Active communication (点对点)也是可能的,在这种情况下,每个设备交替地创建自己的磁场,从机作为目标,反之亦然。

2 Hardware
  • Arduino nano
  • RFID RC522
  • MIFARE Classic (1k)
3 Software
  • Arduino Ide 1.8.5

 

硬件连接图如下,Arduino nano v3:

4 RC522 与 PN532

上方的是RC522,下方为PN532。

两者都是NXP公司生产的芯片,而且都支持Mifare 1K,4K,UltraLight,和DESFire卡,协议ISO / IEC 14443-4,用于13.56MHz的近场通信,兼容SPI,I2C,UART接口。

区别在于RC522是一个硬连接的逻辑,寄存器基于前端。所有的硬件和协议抽象逻辑都必须在mirocontroller上实现。另一方面,PN532是一个集成的NFC控制器,因此硬件和协议抽象在PN532中运行,并且与非接触式接口紧密耦合。在host端,为了激活/检测一个标签,必须发送一些命令,而RC522需要多个低层次的寄存器操作,每个操作都会产生一个单独的spi/i2c传输。PN532直接在芯片上执行这个低级寄存器操作(在PN532中),所以操作一个寄存器甚至不需要1微秒。不过host端写入RC522需要花费几百微秒(计算软件开销、spi/i2c传输时间等)。另外,RC522 工作电流为13—26mA/直流3.3V,而PN532为100mA/直流3.3V。

粗俗的认为,PN532除了兼容RC522的所有功能,还有传输速度,处理数据会更快。不过我们为了实现Mifare 1K卡的复制,用RC522足以。

5 Program

在开始前需将环境配置好,我们需要Arduino的MFRC522库文件,硬件上读取与写入都是使用SPI(Serial Peripheral Interface)来实现。

下载github源码并解压至Arduino IDE 安装路径library文件夹下:

https://github.com/miguelbalboa/rfid

读取Mifare 1K卡的UID信息,打卡串口模拟器记录UID值:

 

初始化之后,需要识别key 值权限来实现身份验证。
一般的出厂设置值为 KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,还有一些常用key:
0XD3 0XF7 0XD3 0XF7 0XD3 0XF7
0XA0 0XA1 0XA2 0XA3 0XA4 0XA5
0XB0 0XB1 0XB2 0XB3 0XB4 0XB5
0X4D 0X3A 0X99 0XC3 0X51 0XDD
0X1A 0X98 0X2C 0X7E 0X45 0X9A
0XAA 0XBB 0XCC 0XDD 0XEE 0XFF
0X00 0X00 0X00 0X00 0X00 0X00
0XAB 0XCD 0XEF 0X12 0X34 0X56

识别之后我们94 A6 DC CD 写入新卡:

提示写入成功:

当然也有可能出现下面这种情况,很有可能是key值不对获取不到写入权限造成。

本demo实现了简单的uid复制案例也是被动通讯如门禁访问,因为启动端是通过识别每张卡的Unique Identifier 来判断卡的权限。

那如果要实现数据读取及写入,比如食堂卡,地铁卡,公交卡数据写入等,还要更进一步了解NFC 数据交换格式 Data Exchange Format (NDEF)等知识,从而访问Mifare卡(1 K或4 K)的EEPROM内存扇区来进行解密及修改。

那想要进一步了解RFID相关,还请关注我也不知道什么时候发布的下一期。

发表评论