【 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塊為密鑰和控制字節;詳細介紹如下所示。
MIFARE Classic 4K(MF1 ICS70)
FEATURE:
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正確后可寫;不能進行加值、減值操作。