Mifare S50把1K字节的容量分为16个扇区(Sector0-Sector15)。每一个扇区包括4个数据块(Block0-Block3)。我们也将16个扇区的64个块按绝对地址编号为0~63。每一个数据块包括16个字节(Byte0-Byte15)。64*16=1024。
Mifare S70把4K字节的容量分为40个扇区(Sector0-Sector39),当中前32个扇区(Sector0-Sector31)的结构和Mifare S50全然一样,每一个扇区包含4个数据块(Block0-Block3)。后8个扇区每一个扇区包含16个数据块(Block0-Block15)。我们也将40个扇区的256个块按绝对地址编号为0~255。每一个数据块包含16个字节(Byte0-Byte15),256*16=4096。
型号 | 扇区号 | 名称 | 绝对块 |
Mifare S50 |
sector0 | 厂商代码 | B0 |
数据块 | B1 | ||
B2 | |||
扇区尾块 | B3 | ||
- - - Sector15 |
数据块 | B60 | |
B61 | |||
B62 | |||
扇区尾块 | B63 | ||
Mifare S70 | - - - Sector31 |
数据块 | B124 |
B125 | |||
B126 | |||
扇区尾块 | B127 | ||
- - - - - - - - - Sector39
|
数据块 | B240 | |
B241 | |||
B242 | |||
B243 | |||
B244 | |||
B245 | |||
B246 | |||
B247 | |||
B248 | |||
B249 | |||
B250 | |||
B251 | |||
B252 | |||
B253 | |||
B254 | |||
扇区尾块 | B255 |
1. 制造商块
0扇区0块是特殊的数据块,用于存放制造商代码,包含芯片序列号。此块仅仅读。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。
2. 普通数据块
普通数据块可通过数据块备份进行数据完整性的管理。
一般每块16个字节中有两个用来存放校验码和备份块的地址。各区均有3个16字节的块用于存储数据(区0仅仅有两个数据块以及一个仅仅读的厂商代码块)。
数据块可作两种应用:
1) 用作一般的数据保存,能够进行读、写操作。比如用于非接触门禁管理。
2) 用作数值块,能够进行加值、减值、转存和恢复。比如用于电子钱包。可直接控制存储值,如增值、减值。在用于非充值卡的一种情况(‘001’)下。仅仅能够读和减值。在还有一种情况(‘110‘)下。能够用key B充值。
数值块具有电子钱包功能(有效命令:read,write, increment,decrement, restore, transfer)。数值块有固定的数据格式。它採用冗余存储方法以保证其数据的正确性。
以便于错误检測、纠错和备份管理。数值块格式例如以下:
字节号 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
存储形式 | VALUE | VALUE-1 | VALUE | A | A-1 | A | A-1 | |||||||||
说明 | 数值 | 地址 |
Ø 数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
Ø 地址(Adr):1字节地址。当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它仅仅能通过write命令更改。
3. 尾块的读写条件
对密钥和控制位的读写取决于尾块(块3)的訪问控制位,分为“禁止”、“KEYA”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
字节号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
说明 | 密钥A | 读写控制 | 密钥B(可选) |
在每一个扇区最后一个块即区尾中存放有密钥A、訪问条件、密钥B等内容。它们用于控制对该扇区的操作。
当中第0-5字节为48位的密钥A;第6-8字节为訪问控制条件;第9字节为备用区可用于存放特殊的应用数据,如存放数据备份区的地址;剩下的6个字节存放密钥B,如用户不须要密钥B,则可用于存放一般的应用数据。因为区尾中訪问条件的数据非常重要,因此使用了冗余存储的方法。
控制位字节详细说明例如以下:
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
字节6 | C23_b | C22_b | C21_b | C20_b | C13_b | C12_b | C11_b | C10_b |
字节7 | C13 | C12 | C11 | C10 | C33_b | C32_b | C31_b | C30_b |
字节8 | C33 | C32 | C31 | C30 | C23 | C22 | C21 | C20 |
字节9 |
|
|
|
|
|
|
|
|
比如:M1的卡片初始控制字为:7F078800,我们对它分析例如以下:
字节6-7F:01111111
字节7-07:00000111
字节8-88:10001000
字节9-00:0000 0000
那么我们能够得出:
块0 | C10 | C20 | C30 | 0 0 0 |
块1 | C11 | C21 | C31 | 0 0 0 |
块2 | C12 | C22 | C32 | 0 0 0 |
块3 | C13 | C23 | C33 | 0 1 1 |
块3的訪问控制位为011,依据下表查得:
passwordA:不可读。验证KEYB正确后。可写(更改)。
存取控制:验证KEYA或KEYB正确后。可读。验证KEYB正确后。可写。
passwordB:不可读;验证KEYB正确后,可写。
訪问控制位 | 所控制的訪问对象 | 凝视 | |||||||
KEY A | 訪问控制位 | KEY B | |||||||
C1 | C2 | C3 | 读 | 写 | 读 | 写 | 读 | 写 |
|
0 | 0 | 0 | 禁止 | Key A | Key A | Key B | Key A | Key A | Key B可读 |
0 | 1 | 0 | 禁止 | 禁止 | Key A | 禁止 | Key A | 禁止 | Key B可读 |
1 | 0 | 0 | 禁止 | Key B | Key A|B | 禁止 | 禁止 | Key B |
|
1 | 1 | 0 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 |
|
0 | 0 | 1 | 禁止 | Key A | Key A | Key A | Key A | Key A | Key B可读 传输配置状态 |
0 | 1 | 1 | 禁止 | Key B | Key A|B | Key B | 禁止 | Key B |
|
1 | 0 | 1 | 禁止 | 禁止 | Key A|B | Key B | 禁止 | 禁止 |
|
1 | 1 | 1 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 |
|
4. 数据块的訪问控制条件
訪问控制位 | 所控制的訪问操作 | 用途 | |||||
C1 | C2 | C3 | 读 | 写 | 加值 | 减值 转存 恢复 |
|
0 | 0 | 0 | key A|B1 | key A|B1 | key A|B1 | key A|B1 | 传输配置状态 |
0 | 1 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 0 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 1 | 0 | key A|B1 | key B1 | key B1 | key A|B1 | 数值块 |
0 | 0 | 1 | key A|B1 | 禁止 | 禁止 | key A|B1 | 数值块 |
0 | 1 | 1 | key B1 | key B1 | 禁止 | 禁止 | 读写块 |
1 | 0 | 1 | key B1 | 禁止 | 禁止 | 禁止 | 读写块 |
1 | 1 | 1 | 禁止 | 禁止 | 禁止 | 禁止 | 读写块 |
注:在传输配置状态下,必须用key A认证。
假设对应扇区尾块Key B可读,则不得用作认证。假设读写器试图用灰色行的訪问控制条件以Key B认证不论什么扇区的不论什么块。卡将在认证后拒绝全部兴许存储器訪问。