Online Store

Metodi di mappatura dei dati NDEF della memoria IC MIFARE Classic e MIFARE Plus

Directory delle applicazioni MIFARE #

I metodi NDEF di mappatura dei dati di memoria di MIFARE Classic e MIFARE Plus IC utilizzano la struttura di directory dell'applicazione MIFARE (MAD).

La directory dell'applicazione MIFARE (MAD) identifica a quale applicazione appartengono le informazioni memorizzate all'interno di ciascun settore di memoria.

Sono state specificate due directory applicative MIFARE:

      1. Directory dell'applicazione MIFARE 1 (MAD1): MAD1 PUÒ essere utilizzato in qualsiasi prodotto conforme a MIFARE Classic. Il MAD1 si trova nel settore MAD (settore 00h), nel caso in cui il MAD1 venga utilizzato su prodotti con una dimensione di memoria superiore a 1Kbyte, solo 1Kbyte di memoria può essere utilizzata e indirizzata dal MAD1. La memoria rimanente non viene quindi utilizzata per l'archiviazione NDEF e rimane libera.
      2. Directory dell'applicazione MIFARE 2 (MAD2): MAD1 PUÒ essere utilizzato in qualsiasi prodotto compatibile con MIFARE Classic con una dimensione di memoria superiore a 1 Kbyte. MAD2 non è applicabile per i prodotti con una dimensione di memoria inferiore o uguale a 1 Kbyte. Il MAD2 si trova nei settori MAD (settore 00h e 10h)

A ciascuna applicazione, il MAD associa un identificatore univoco dell'applicazione (AID). Gli identificatori dell'applicazione (AID) sono memorizzati all'interno del settore MAD 00h.

L'AID è lungo due byte ed è diviso in 2 campi da un byte ciascuno:

  1. il codice del cluster di funzioni (1 byte) che identifica il cluster a cui appartiene l'applicazione e
  2. il codice dell'applicazione (1 byte) che identifica l'applicazione all'interno del cluster. Per ulteriori informazioni su MAD1 e MAD2.

Il General Purpose Byte (GPB) del settore MAD DEVE essere impostato con un bit DA uguale a 1b (DA bit è il bit MAD disponibile del GPB).

Tutti i settori attualmente inutilizzati DOVREBBERO essere protetti da scrittura con chiavi segrete definite dall'emittente del tag al fine di prevenire la ridefinizione involontaria delle condizioni di accesso e delle chiavi. Si consiglia di utilizzare chiavi diverse per tutti i settori liberi. Ciò consente il rilascio futuro di alcuni settori a nuovi fornitori di servizi senza la necessità di rilasciare tutti i settori liberi.

Accesso al settore MAD #

I settori di memoria in cui sono memorizzati MAD1 e MAD2 (vedere [MAD]), sono protetti utilizzando la chiave A e la chiave B. Secondo [MAD] i settori di memoria sono:

        • MAD1: il settore MAD è 00h (settore 0), e
        • MAD2: i settori MAD sono 00h e 10h (settore 0 e settore 16).

Chiunque DEVE essere autorizzato a leggere i settori MAD. Ciò si ottiene utilizzando una chiave pubblica A descritta nella Tabella 1 (vedere anche [MAD]).

Tabella 1. Chiave pubblica Valore del/i settore/i MAD

Byte 0Byte 1Byte 2Byte 3Byte 4Byte 5
A0hA1hA2hA3hA4hA5h

I bit di accesso per i settori MAD sono impostati su:

        • come descritto nella tabella 2 se al settore MAD è concesso l'accesso in lettura e scrittura, oppure
        • come descritto nella tabella 3 se al settore MAD è concesso l'accesso in sola lettura (cfr. anche [MF1K, MF4K, MFPLUS]).

In questo contesto, il termine accesso in lettura e scrittura concesso significa che per i settori MAD che sono stati precedentemente autenticati con la chiave segreta B, è possibile leggere e scrivere tutti i blocchi di settore ad eccezione del blocco di rimorchio di settore (vedere la Tabella 2 per maggiori dettagli).

Invece, il termine accesso di sola lettura concesso significa che per i settori MAD che sono stati precedentemente autenticati con la chiave pubblica A della tabella 1 o la chiave segreta B, è possibile leggere solo tutti i blocchi di settore ad eccezione del blocco del trailer di settore (vedere la tabella 5 per maggiori dettagli).

Utilizzando il tasto A è sempre possibile leggere solo i blocchi del settore MAD. I rimorchi settoriali hanno una particolare configurazione di accesso quando viene concesso l'accesso in lettura/scrittura o l'accesso in sola lettura (cfr . tabella 2 e tabella 3).

I settori MAD DOVREBBERO essere protetti da scrittura mediante la chiave segreta B (ad esempio definita dall'emittente del tag) o impostando il tag MIFARE Classic e MIFARE Plus come di sola lettura utilizzando i bit di accesso.

Tabella 2. Impostazione dei bit di accesso per il settore MAD con accesso in lettura e scrittura concesso

Impostazione dei bit di accesso per il settore 0 di MAD1 o MAD2 e per il settore 16 di MAD2
Bit di accessoValoriOsservazioni
C10 C20 C30100biIl blocco 0 viene letto con la chiave A o la chiave B e scritto con il tasto B
C11 C21 C31100bIl blocco 1 viene letto con la chiave A o la chiave B e scritto con il tasto B
C12 C22 C32100bIl blocco 2 viene letto con la chiave A o la chiave B e scritto con la chiave B
C13 C23 C33011bIl blocco rimorchi di settore:

  • La chiave A è scritta con la chiave B e mai letta,
  • I bit di accesso vengono letti con la chiave A o la chiave B e scritti con la chiave B,
  • La chiave B è scritta con la chiave B e mai letta.
i. Valore consigliato per i bit di accesso C10 C20 C30 del settore 0 (blocco produttore).

Tabella 3. Impostazione dei bit di accesso per il settore MAD con accesso in sola lettura concesso

Impostazione dei bit di accesso per il settore 0 di MAD1 o MAD2 e per il settore 16 di MAD2
Bit di accessoValoriOsservazioni
C10 C20 C30010bIl blocco 0 viene letto con il tasto A o il tasto B
C11 C21 C31010bIl blocco 1 viene letto con la chiave A o la chiave B
C12 C22 C32010bIl blocco 2 viene letto con il tasto A o il tasto B
C13 C23 C33110bIl blocco rimorchi di settore:

  • La chiave A non è mai scritta e letta,
  • I bit di accesso vengono letti con la chiave A o B e mai scritti,
  • La chiave B non è mai scritta e letta.
i. Valore consigliato per i bit di accesso C10 C20 C30 del settore 0 (blocco produttore).

Blocchi TLV #

Un blocco TLV è costituito da uno o tre campi:

T (tag field, o T field) SHALL identifica il tipo di blocco TLV (vedi Tabella 9) e DEVE consistere in un singolo byte che codifica un numero da 00h a FFh. I valori dei tag 01h, 02h, 04h a FCh e FFh sono riservati per un uso futuro.

L (campo lunghezza, o campo L) DEVE fornire la dimensione in byte del campo valore. Ha due diversi formati composti da uno o tre byte. Il dispositivo Reader DEVE comprendere tutti i formati di campo a due lunghezze. La Fig 5 mostra le due diverse strutture di campo di lunghezza. Tuttavia, a seconda del valore del campo tag, il campo lunghezza POTREBBE non essere presente.

  • Formato a un byte: il formato a un byte CODIFICA la lunghezza del campo valore tra 00h e FEh byte. Questo byte DEVE essere interpretato come cardinale se il valore è compreso tra 00h e FEh. Se contiene FFh, il valore DEVE essere interpretato come un flag che specifica che il campo di lunghezza è composto da più di un byte.
  • Formato di tre byte consecutivi: questo formato CODIFICA la lunghezza del campo valore tra 00FFh e byte FFFEh. Si presume che il primo byte sia un flag uguale a FFh che indica che altri due byte di lunghezza DEVONO essere interpretati come una parola. Questa parola DEVE essere interpretata come cardinale se il valore è compreso tra 00FFh e FFFEh. Il valore FFFFh è riservato per un uso futuro (RFU).

V (campo valore o campo V) Se il campo lunghezza è uguale a 00h o non c'è campo lunghezza, NON ci sarà il campo valore, cioè il blocco TLV è vuoto. Se c'è il campo lunghezza e indica una lunghezza del campo valore N maggiore di zero (N>0), il campo valore DEVE essere costituito da N byte consecutivi.

Nella tabella 4 sono elencati i blocchi TLV specificati da questo documento descritti nelle sezioni seguenti.

Tabella 4. BlocchiTLV definiti  

Nome blocco TLVValore del campo tagBreve descrizione
NULL TLV00 orePotrebbe essere utilizzato per il riempimento delle aree di memoria e il dispositivo reader DEVE ignorarlo
Messaggio NDEF TLV03 oreContiene il messaggio NDEF
TLV proprietarioFDhTagga le informazioni proprietarie
Terminatore TLVFehUltimo blocco TLV nell'area dati

Il dispositivo Reader DEVE scrivere i blocchi TLV in un ordine specifico all'interno dell'area dati seguendo le regole seguenti:

  • I blocchi TLV DEVONO essere scritti in ordine a partire dal byte 0 del blocco 0 del settore NFC (settore contenente dati NDEF) con l'indirizzo più piccolo.
  • Un blocco TLB PUÒ essere memorizzato in due o più settori NFC.
  • Se presente, Terminator TLV è l'ultimo blocco TLV sul tag MIFARE Classic e MIFARE Plus.

NULL TLV e Terminator TLV sono gli unici blocchi TLV lunghi 1 byte (ad esempio composti solo dal campo Tag, vedi sotto).

I dispositivi di lettura DEVONO ignorare e saltare quei blocchi TLV che fanno uso di valori di campi tag riservati (vedi sopra). Per saltare su un blocco TLV con valori di campo tag riservati, il dispositivo Reader DEVE leggere il campo lunghezza per comprendere la lunghezza del campo valore.

Le definizioni future dei blocchi TLV composti solo dal campo tag non sono retrocompatibili con questa nota applicativa.

Messaggio NDEF TLV #

Almeno un messaggio NDEF TLV DEVE essere sempre presente all'interno del tag MIFARE Classic e MIFARE Plus. Il messaggio NDEF TLV memorizza il messaggio NDEF all'interno del campo Valore. Il dispositivo reader DEVE essere in grado di leggere ed elaborare il TLV del messaggio NDEF trovato dalla procedura di rilevamento NDEF (chiamato anche TLV obbligatorio del messaggio NDEF o primo TLV del messaggio NDEF); in ogni caso possono essere presenti ulteriori blocchi TLV di messaggi NDEF. Di seguito viene mostrata la codifica dei 3 campi TLV del messaggio NDEF TLV:

T DEVE essere uguale a 03h (vedi Tabella 4).

L DEVE essere uguale alla dimensione in byte del messaggio NDEF memorizzato.

V MEMORIZZERÀ il messaggio NDEF.

Un messaggio NDEF vuoto TLV DEVE essere definito come un messaggio NDEF TLV con campo L uguale a 00h e nessun campo V (cioè nessun messaggio NDEF è presente nel campo V, vedi [NDEF]).

Un messaggio NDEF non vuoto TLV PUÒ contenere messaggi NDEF vuoti o non vuoti.

TLV proprietario #

Il TLV proprietario contiene informazioni proprietarie. Un tag MIFARE Classic e MIFARE Plus DEVE contenere zero, uno o più TLV proprietari. Il dispositivo Reader potrebbe ignorare i dati contenuti in questo blocco TLV. Di seguito è riportata la codifica dei 3 campi TLV di Proprietary TLV:

T DEVE essere uguale a FDh (cfr. tabella 4).

L DEVE essere uguale alla dimensione in byte dei dati proprietari nel campo Vale.

V DEVE contenere dati protetti da proprietà industriale.

NULL TLV #

Il NULL TLV PUÒ essere utilizzato per il riempimento dell'area dati. Un tag MIFARE Classic e MIFARE Plus PUÒ contenere zero, uno o più NULL TLV. Il dispositivo Reader DEVE ignorare questo blocco TLV. NULL TLV DEVE essere composto da un campo tag da 1 byte. Di seguito è riportata la codifica del campo tag del NULL TLV:

T DEVE essere uguale a 00h (vedi Tabella 4).

L NON sarà presente.

V NON sarà presente.

Terminatore TLV #

Il Terminator TLV PUÒ essere presente all'interno del tag MIFARE Classic e MIFARE Plus, e un dispositivo Reader DEVE essere in grado di leggerlo/elaborarlo. Terminator TLV è l'ultimo blocco TLV nell'area di memoria dati. Terminator TLV DEVE essere composto da un campo tag da 1 byte. Di seguito è mostrata la codifica del campo tag del Terminator TLV:

T DEVE essere uguale a FEh (cfr. tabella 4).

L NON sarà presente.

V NON sarà presente.