RFID研究(一)M1卡背景与数据结构

免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

文章的最开始,先来致敬nfc-tools项目组。

0x00 锲机

一直没有下定决心认真的去研究某个安全领域,很早的时候就看到有很多前辈去研究这个RFID。

恰逢看到某个公告说提到了这件事,心里一直纠结是否写一系列关于RFID的文章,比较纠结,想了想还是整理一下吧,但愿不会被请去喝茶。

我也只是希望本篇文章能为大家在RFID安全方向上起到一个抛砖引玉的作用。

0X01 RFID

射频识别,RFID技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据。

从概念上来讲,RFID类似于条形码扫描,相对于条形码扫描而言,它是将编码放入目标物的RFID标签中,利用频率信号将信息由RFID标签转送至RFID读写器。RFID标签相当于附着于物品上的二维码,但是与条形码最大的不同在于,RFID标签中的数据可以被改写,而条形码中的数据是无法进行改写的。

当然也只是简单的说一下,更多的信息,请看百度百科。

0X02 RFID标签 介绍

RFID技术中所衍生的产品大概有三大类:无源RFID产品、有源RFID产品、半有源RFID产品。

根据RFID Tag的工作方式,有可分为被动,主动、半主动三种。最常见的就是被动式的了。

我们目前接触的多的就是无源、被动式产品,其中最为广泛常见的就是MIFARE Classic 1K卡,简称M1卡、S50卡。
nfc-data-introduction-20183280136

0X03 M1卡的数据结构

M1卡其中分为16个扇区,每个扇区有16个字节。

每个扇区都有相对独立的一组密码及访问控制。

M1卡其中包括了 0 ~ 15 总共16个扇区,

每个扇区又分成了从0 ~ 3 共四个块,每个块保证可以存放16B

为何非要从零开始,这里可能是与C语言里面数组下标默认从零开始计算有关系吧,可以非常容易的计算地址偏移量。

其中每个扇区的第3块是用来保存KEYA、KEYB和控制位的 。

每张 M1 卡都有一个全球唯一的 UID 号,这个 UID 号保存在卡的第一个扇区(0 扇区)的第一段(0 段),也称为厂商段,其中前 4 个字节是卡的 UID,第 5 个字节是卡 UID 的校验位,剩下的是厂商数据。并且这个段在出厂之前就会被设置了写入保护锁死了UID,只能读取不能修改。当然有需求就有市场,这个也有例外,有种叫 UID 卡的特殊卡,UID 是没有设置保护的,其实就是厂家不按规范生产的卡。
下图很清晰的列出了 M1 卡的结构。
nfc-data-introduction-20183280212

结构总结如下:

1、M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63

2、第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。

3、每个扇区的块0、块1、块2为数据块,可用于存贮数据。

4、每个扇区的块3为控制块,包括了密码A、存取控制、密码B。

5、每个扇区的密码和存取控制都是独立的,设有各自的密码及存取控制。

0X04 关于M卡的控制位计算

关于控制位的介绍刚开始感觉对于这个没有什么用处,但是作为一个入门级别的文章,还是加一下吧。

其中每个扇区中的0~2数据段的读、写、加值、减值操作权限包括第3块中的对KEYA、KEYB的操作。

nfc-data-introduction-20183280314

nfc-data-introduction-20183280320

nfc-data-introduction-20183280329

计算方法如下图(符号查上面的表):

nfc-data-introduction-20183280343

当然我们没有必要按照位数进行一步一步的计算,我们要学会使用工具(任何动物的最大区别)。

网上有许多的“M1卡控制字节生成工具”

0x05 结语

此篇文章仅作为RFID技术的入门级别的文章,今天的这篇文章仅仅作为M1卡的介绍

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://blog.suixin.kim/2016/12/08/nfc-data-introduction/