Tema 2 – Tarjetas NFC MiFare Classic
Hay varios tipos de tarjetas NFC, las cuales se diferencian fundamentalmente por el protocolo de
comunicación que utilizan. Una de las más populares son las MiFare Classic [1], cuyo fabricante es
NXP, las cuales cumplen con el estándar ISO 14443A, y que tienen una EPROM de 1Kbyte ó 4Kbyte
dependiendo del modelo.
En el caso de las tarjetas MiFare su memoria está dividida en sectores y bloques. En el caso de tarjetas
MiFare Classic de 1K se disponen de 16 sectores con 4 bloques cada uno. Cada sector contiene 64
bytes (cada bloque 16 bytes).
De los cuatro bloques el cuarto bloque se denomina “Sector Trailer” y está compuesto por dos claves
de acceso de 6 bytes: Key_A y Key_B, y un conjunto de Bits_Acceso, que indican las reglas de
acceso a los otros tres bloques del sector. Dichas reglas pueden implicar que el lector deba proporcionar
alguna de las claves de acceso indicadas en los campos Key_A y Key_B.
En el caso de almacenar registros NDEF, el sector 0 de la tarjeta MiFare se organiza según la estructura
MAD (Mifare Application Diretory). El bloque 0 del MAD sector contiene información sobre el
fabricante, y luego los bloques 1 y 2 contienen 15 bytes con el valor 0x03E1. El último bloque es el
“Sector Trailer” que está configurado para que el sector tenga derecho de lectura utilizando la Key_A,
la cual será siempre una clave pública (su valor es bien conocido por todos 0xA0A1A2A3A4A5) para
asegurar que este sector puede ser leído.
Los registro NDEF son almacenados en los sectores 1 al 15. Todos ellos tienen el campo Key_A =
0xD3F7D3F7D3F7, y tendrán al menos derecho de lectura utilizando dicha clave pública. Los
mensajes NDEF son almacenados en los llamados Bloques TLV, los cuales son estructuras con los
siguientes campos:
• Tag (T): Indica el tipo de bloque TLV. Es un byte que puede tomar los valores mostrados en
la Tabla 6:
Tabla 6.- Tipo de Bloque TLV.
Block Type Value Description
NULL 0x00 These blocks should be ignored
NDEF Message 0x03 Block contains an NDEF message
Proprietary 0xFD Block contains proprietary information
Terminator 0xFE Last TLV block in the data area
• Longitud (L): Indica la longitud del bloque TLV. Se pueden utilizar uno o tres bytes para
indicar la longitud que tendrá el campo Valor (V).
• Valor (V): contiene el mensaje NDEF cuya longitud será la indicada en el campo L.
Figura 1: Ejemplo del contenido de una tarjeta MiFare Classic 1K inicializada [0].
Un ejemplo de los datos almacenados en una tarjeta MiFare Classic 1K inicializada se muestra en
Figura 1. Como se puede observar el primer sector es un sector MAD, en el que se da la información
sobre el fabricante en el bloque 0. El segundo sector (sector 1), contiene un único bloque TLV que
contiene un registro NDEF (valor del campo T = 0x03), cuya longitud es 0 (valor campo L = 0), es
decir es un campo NDEF vacío. También se observa como siempre debe aparecer un bloque TLV de
finalización (campo T = 0xFE).
Otro ejemplo de estado de la memoria de una tarjeta MiFare Classic 1K, donde se almacena un registro
NDEF no vacío se muestra a continuación:
[ Start of Memory Dump ]
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 #Byte
-----------------------------------------------
------------------------Sector 0-------------------------
Block 0 3E 39 AB 7F D3 88 04 00 47 41 16 57 4D 10 34 08 >9«Ó?..GA.WM.4.
Block 1 14 01 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 ...á.á.á.á.á.á.á
Block 2 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 03 E1 .á.á.á.á.á.á.á.á
Block 3 A0 A1 A2 A3 A4 A5 78 77 88 C1 00 00 00 00 00 00 ......xw?Á......
------------------------Sector 1-------------------------
Block 4 00 00 03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 ....Ñ..U.adafrui
Block 5 74 2E 63 6F 6D FE 00 00 00 00 00 00 00 00 00 00 t.comþ..........
Block 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 7 D3 F7 D3 F7 D3 F7 7F 07 88 40 00 00 00 00 00 00 .......?@......
------------------------Sector 2-------------------------
Block 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 11 D3 F7 D3 F7 D3 F7 7F 07 88 40 00 00 00 00 00 00 .......?@......
------------------------Sector 3-------------------------
Block 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 15 D3 F7 D3 F7 D3 F7 7F 07 88 40 00 00 00 00 00 00 .......?@......
.......
------------------------Sector 15-------------------------
Block 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Block 63 D3 F7 D3 F7 D3 F7 7F 07 88 40 00 00 00 00 00 00 .......?@......
[ End of Memory Dump ]
En el ejemplos se puede ver como las Key_A están resaltadas en amarillo, siendo su valor dependiente
del sector al que pertenecen.
Centrándonos en el sector 1, observamos como hay tres bloques TLV:
• Primer bloque TLV (00 00): Según la Tabla 6 es un bloque TLV nulo (campo T = 0x00),
con una longitud (campo L = 0x00) de 0 bytes.
• Segundo bloque TLV(03 11 D1 01 0D 55 01 61 64 61 66 72 75 69 74 2E
63 6F 6D): Según la Tabla 6, y el valor del primer byte (campo T = 0x03), es un bloque
TLV que almacena un registro NDEF. El campo L = 11 (segundo byte) indica que la longitud
del registro NDEF es de 17 bytes. Los otros 17 bytes (D1 01 0D 55 01 61 64 61 66
72 75 69 74 2E 63 6F 6D), corresponden a la codificación del registro NDEF, que ya
se interpretó en la sección “Ejemplo de RTD URI” (pag. 7) del documento “Tema 2 – NDEF
(NFC Data Exhange Format)”.
• Tercer bloque TLV(FE): bloque con el campo T = 0xFE que indica bloque de FIN, lo que
nos dice que ya no hay más bloques en la memoria de la tarjeta en este sector.
El resto de sectores están vacío.
Bibliografía
[1] NXP Semiconductors. " Familia MIFARE Classic ". , https://www.mifare.net/es/productos/ics-de-
tarjetas-con-chip/familia-mifare-classic/. Último acceso: 11/2021.
[2] NXP B.V.. " AN1304 - NFC Type MIFARE Classic Tag Operation". 2011.
https://www.newark.com/pdfs/techarticles/nxp/AN1304.pdf. Último acceso: 11/2021