【 M1 S70卡片的介绍 】
MIFARE DESFire是NXP B.V.的注册商标,依据授权使用。
1. 我们要进行的工作就是对IC卡的39扇区进行密钥替换和控制字节的替换,不进行其它数据的写入。要求能对IC卡进行批量操作。
2. IC卡采用NXP Standard Card IC M1 S70芯片。
3. 卡片有4K的存储空间,有32个小扇区和8个大扇区。小扇区的结构为:每扇区有4块,每块16个字节,一共64字节,第3块为密钥和控制字节;大扇区的结构为:每扇区16块,每块16个字节,一共256字节,第15块为密钥和控制字节;详细介绍如下所示。
l 4 K字节, 共40个扇区,前32个扇区中,每个扇区4个数据块,后8个扇区中,每 个扇区16个数据块,每个数据块16个字节。
l 每个扇区有独立的一组密码及访问控制;
l 每张卡有唯一序列号,为32位;
l 具有防冲突机制,支持多卡操作;
l 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路;
l 工作温度:-20℃~50℃;
l 工作频率:13.56MHZ;
l 通信速率:106KBPS;
l 读写距离:10mm以内(与读写器有关);
l 数据保存期为10年,可改写10万次,读不限次;
存储结构
4 K字节, 共40个扇区,前32个扇区中,每个扇区4个数据块,后8个扇区中,每个 扇区16个数据块,每个数据块16个字节。
a) Manufacturer Blcok:第一个扇区的第一块由厂商使用,存储了IC卡的生产产商代 码,这个块中的数据写入后不能被修改
b) Data Blocks(数据块)
扇区1到 扇区31有3个数据块, 扇区32到 扇区39 有15个数据块供存储数据(扇区0只有2个数据块和一个厂商数据存储块).数据块的读写操作由控制位控制
c) Value Block(值块): 值块可用做电子钱包(有效的命令为read,write,increment,decrement,restore,transfer),值块中的数据只占4个字节。
d) Sector Trailer(扇区尾部): 每个扇区都有个扇区尾部.包括密码A(不能读出)、密码B及相应扇区中的所有块的存储控制位(位于第6个字节到第9个字节),
存储结构如下:
A0A1A2A3A4A5 FF 07 80 69 B0B1B2B3B4B5
密码A(6字节) 存取控制(4字节) 密码B(6字节)
控制属性:
1.每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制。在存取控制中每个块都有相应的三个控制位,定义如下:
块0: C10 C20 C30
块1: C11 C21 C31
块2: C12 C22 C32
块3: C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节中的位置如下(字节9为备用字节,默认值为0x69):
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
bit 7 6 5 4 3 2 1 0
Byte 6 |
C23_b |
C22_b |
C21_b |
C20_b |
C13_b |
C12_b |
C11_b |
C10_b |
Byte 7 |
C13 |
C12 |
C11 |
C10 |
C33_b |
C32_b |
C31_b |
C30_b |
Byte 8 |
C33 |
C32 |
C31 |
C30 |
C23 |
C22 |
C21 |
C20 |
Byte 9 |
|
|
|
|
|
|
|
|
(注: _b表示取反)
1. 制块(块3)存取控制的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
|
|
|
密码 A |
控制位 |
密码B |
|||
C13 |
C23 |
C33 |
Read |
Write |
Read |
Write |
Read |
Write |
0 |
0 |
0 |
Never |
KeyA|B |
KeyA|B |
Never |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
KeyA|B |
Never |
1 |
0 |
0 |
Never |
KeyB |
KeyA|B |
Never |
Never |
KeyB |
1 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
0 |
0 |
1 |
Never |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
1 |
Never |
KeyB |
KeyA|B |
KeyB |
Never |
KeyB |
1 |
0 |
1 |
Never |
Never |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块3的存取控制位C13 C23 C33=100时,表示:
密码A: 不可读,验证KEYB正确后,可写(更改)。
存取控制:验证KEYA或KEYB正确后,可读不可写。
密码B: 不可读,验证KEYB正确后,可写。
2. 数据块(块0、块1、块2)的存取控制如下:
控制位(X=0..2)
|
控制条件(对块 0、1、2) |
|
||||||
C1X |
C2X |
C3X |
Read |
Write |
Increment |
Decrement, transfer, Restore |
||
0 |
0 |
0 |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
||
0 |
1 |
0 |
KeyA|B |
Never |
Never |
Never |
||
1 |
0 |
0 |
KeyA|B |
KeyB |
Never |
Never |
||
1 |
1 |
0 |
KeyA|B |
KeyB |
KeyB |
KeyA|B |
||
0 |
0 |
1 |
KeyA|B |
Never |
Never |
KeyA|B |
||
0 |
1 |
1 |
KeyB |
KeyB |
Never |
Never |
||
1 |
0 |
1 |
KeyB |
Never |
Never |
Never |
||
1 |
1 |
1 |
Never |
Never |
Never |
Never |
||
|
|
|
|
|
|
|
|
|
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块0的存取控制位C10 C20 C30=100时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。