Online Store

Méthodes de mappage de données NDEF de la mémoire MIFARE Classic et MIFARE Plus IC

Répertoire des applications MIFARE #

Les méthodes NDEF de mappage de données mémoire des MIFARE Classic et MIFARE Plus IC utilisent la structure de répertoires d’application MIFARE (MAD).

Le répertoire d’applications MIFARE (MAD) identifie à quelle application appartiennent les informations stockées dans chaque secteur de mémoire.

Deux répertoires d’applications MIFARE ont été spécifiés :

      1. Répertoire d’application MIFARE 1 (MAD1) : MAD1 PEUT être utilisé dans n’importe quel produit conforme à MIFARE Classic. Le MAD1 est situé dans le secteur MAD (secteur 00h), Dans le cas où le MAD1 est utilisé sur des produits dont la taille de mémoire est supérieure à 1 Ko, seule la mémoire de 1 Ko peut être utilisée et traitée par le MAD1. La mémoire restante n’est donc pas utilisée pour le stockage NDEF et reste libre.
      2. Répertoire d’application MIFARE 2 (MAD2) : MAD1 PEUT être utilisé dans n’importe quel produit compatible MIFARE Classic avec une taille de mémoire supérieure à 1 Ko. MAD2 ne s’applique pas aux produits dont la taille de mémoire est inférieure ou égale à 1 Ko. Le MAD2 est situé dans les secteurs MAD (secteurs 00h et 10h)

À chaque application, le MAD associe un identifiant d’application unique (AID). Les identificateurs d’application (AAD) sont stockés dans le(s) secteur(s) MAD 00h.

L’AID est long de deux octets, et il est divisé en 2 champs d’un octet chacun:

  1. le code de cluster de fonction (1 octet) qui identifie le cluster auquel l’application appartient, et
  2. le code d’application (1 octet) qui identifie l’application à l’intérieur du cluster. Pour plus d’informations sur MAD1 et MAD2.

L’octet à usage général (GPB) du secteur MAD DOIT être défini avec un bit DA égal à 1b (le bit DA est le bit MAD disponible du GPB).

Tous les secteurs actuellement inutilisés DOIVENT être protégés en écriture par des clés secrètes définies par l’émetteur de la balise afin d’éviter la redéfinition involontaire des conditions d’accès et des clés. Il est RECOMMANDÉ d’utiliser différentes clés pour tous les secteurs libres. Cela permet la libération future de certains secteurs à de nouveaux fournisseurs de services sans qu’il soit nécessaire de libérer tous les secteurs libres.

Accès au secteur MAD #

Les secteurs de mémoire où sont stockés mad1 et MAD2 (voir [MAD]), sont protégés à l’aide des clés A et B. Selon les secteurs de [MAD] mémoire sont:

        • MAD1 : le secteur MAD est de 00h (secteur 0), et
        • MAD2 : les secteurs MAD sont 00h et 10h (secteur 0 et secteur 16).

N’importe qui DOIT être autorisé à lire les secteurs MAD. Ceci est réalisé en utilisant une clé publique A décrite dans le tableau 1 (voir aussi [MAD]).

Ongletle 1. Clé publique Valeur du ou des secteurs MAD

Octet 0 Octet 1 Octet 2 Octet 3 Octet 4 Octet 5
A0h A1h A2h A3h A4h A5h

Les bits d’accès pour le(s) secteur(s) MAD sont définis sur :

        • comme décrit dans le tableau 2 si le secteur MAD dispose d’un accès en lecture et en écriture accordé, ou
        • comme décrit dans le tableau 3 si le secteur MAD dispose d’un accès en lecture seule accordé (voir également [MF1K, MF4K, MFPLUS]).

Dans ce contexte, le terme accès en lecture et en écriture accordé signifie que pour les secteurs MAD qui ont été préalablement authentifiés avec la clé secrète B, il est possible de lire et d’écrire tous les blocs de secteur à l’exception du bloc de remorque de secteur (voir le tableau 2 pour plus de détails).

Au lieu de cela, le terme accès en lecture seule accordé signifie que pour les secteurs MAD qui ont déjà été authentifiés avec la clé publique A du tableau 1 ou la clé secrète B, il est possible de lire uniquement tous les blocs de secteur à l’exception du bloc de remorque de secteur (voir le tableau 5 pour plus de détails).

En utilisant la touche A, il n’est toujours possible de lire que les blocs du secteur MAD. Les remorques sectorielles ont une configuration d’accès particulière lorsque l’accès en lecture/écriture ou l’accès en lecture seule est accordé (voir tableau 2 et tableau 3).

Les secteurs MAD DOIVENT être protégés en écriture au moyen de la clé secrète B (par exemple définie par l’émetteur de la balise) ou en définissant la balise MIFARE Classic et MIFARE Plus en lecture seule à l’aide des bits d’accès.

Tableau 2. Paramètre des bits d’accès pour le secteur MAD avec l’accès en lecture et en écriture accordé

Paramètre des bits d’accès pour le secteur 0 de MAD1 ou MAD2 et pour le secteur 16 de MAD2
Bits d’accès Valeurs Remarques
C10 C20 C30 100bi Le bloc 0 est lu avec la touche A ou la clé B et écrit avec la clé B
C11 C21 C31 100b Le bloc 1 est lu avec la touche A ou la clé B et écrit avec la clé B
C12 C22 C32 100b Le bloc 2 est lu avec la touche A ou la clé B et écrit avec la clé B
C13 C23 C33 011b Le bloc remorque du secteur :

  • La clé A est écrite avec la clé B et ne se lit jamais,
  • Les bits d’accès sont lus avec la clé A ou la clé B et écrits avec la clé B,
  • La clé B est écrite avec la clé B et ne se lit jamais.
i. Valeur recommandée pour les bits d’accès C10 C20 C30 du secteur 0 (bloc fabricant).

Tableau 3. Paramètre des bits d’accès pour le secteur MAD avec accès en lecture seule accordé

Paramètre des bits d’accès pour le secteur 0 de MAD1 ou MAD2 et pour le secteur 16 de MAD2
Bits d’accès Valeurs Remarques
C10 C20 C30 010b Le bloc 0 est lu avec la touche A ou la clé B
C11 C21 C31 010b Le bloc 1 est lu avec la touche A ou la clé B
C12 C22 C32 010b Le bloc 2 est lu avec la touche A ou la clé B
C13 C23 C33 110b Le bloc remorque du secteur :

  • La clé A n’est jamais écrite et lue,
  • Les bits d’accès sont lus avec la clé A ou la clé B et jamais écrits,
  • La clé B n’est jamais écrite et lue.
i. Valeur recommandée pour les bits d’accès C10 C20 C30 du secteur 0 (bloc fabricant).

Blocs TLV #

Un bloc TLV se compose d’un à trois champs :

T (champ de balise, ou champ T) DOIT identifier le type du bloc TLV (voir tableau 9) et DOIT consister en un seul octet codant un nombre de 00h à FFh. Les valeurs de balise 01h, 02h, 04h à FCh et FFh sont réservées pour une utilisation ultérieure.

L (champ de longueur ou champ L) DOIT indiquer la taille en octets du champ de valeur. Il a deux formats différents composés d’un ou trois octets. Le lecteur DOIT comprendre tous les formats de champs de deux longueurs. La figure 5 montre les deux structures de champ de longueur différentes. Toutefois, en fonction de la valeur du champ de balise, le champ de longueur PEUT ne pas être présent.

  • Format d’un octet : Le format d’un octet DOIT coder la longueur du champ de valeur entre 00h et FEh octets. Cet octet DOIT être interprété comme un cardinal si la valeur est comprise entre 00h et FEh. S’il contient FFh, la valeur DOIT être interprétée comme un indicateur qui spécifie que le champ de longueur est composé de plus d’un octet.
  • Format de trois octets consécutifs : Ce format DOIT coder la longueur du champ de valeur entre 00FFh et FFFEh octets. Le premier octet est supposé être un indicateur égal à FFh indiquant que deux octets de plus de longueur DOIVENT être interprétés comme un mot. Ce mot DOIT être interprété comme un cardinal si la valeur est comprise entre 00FFh et FFFEh. La valeur FFFFh est réservée à une utilisation future (RFU).

V (champ de valeur, ou champ V) Si le champ de longueur est égal à 00h ou s’il n’y a pas de champ de longueur, il NE DOIT PAS y avoir le champ de valeur, c’est-à-dire que le bloc TLV est vide. S’il y a le champ de longueur et indique une longueur du champ de valeur N supérieure à zéro (N>0), le champ de valeur DOIT être constitué de N octets consécutifs.

Le tableau 4 répertorie les blocs TLV spécifiés par ce document qui sont décrits dans les sections suivantes.

Tableau 4. BlocsTLV définis  

Nom du bloc TLV Valeur du champ de balise Brève description
NULL TLV 00h Il peut être utilisé pour le remplissage des zones de mémoire et le périphérique Reader DOIT l’ignorer
NDEF Message TLV 03h Il contient le message NDEF
TLV propriétaire FDh Étiqueter les informations exclusives
Terminateur TLV Feh Dernier bloc TLV dans la zone de données

Le dispositif Reader DOIT écrire les blocs TLV dans un ordre spécifique à l’intérieur de la zone de données en suivant les règles ci-dessous:

  • Les blocs TLV DOIVENT être écrits dans l’ordre à partir de l’octet 0 du bloc 0 du secteur NFC (secteur contenant des données NDEF) avec la plus petite adresse.
  • Un bloc TLB PEUT être mémorisé sur deux secteurs NFC ou plus.
  • S’il est présent, le Terminator TLV est le dernier bloc TLV sur les balises MIFARE Classic et MIFARE Plus.

NULL TLV et Terminator TLV sont les seuls blocs TLV de 1 octet de long (par exemple, composés uniquement du champ Tag, voir ci-dessous).

Les lecteurs DOIVENT ignorer et sauter par-dessus les blocs TLV qui utilisent des valeurs de champ de balise réservées (voir ci-dessus). Pour sauter par-dessus un bloc TLV avec des valeurs de champ de balise réservées, le périphérique Reader DOIT lire le champ de longueur pour comprendre la longueur du champ de valeur.

Les définitions futures des blocs TLV composés uniquement du champ de balise ne sont pas rétrocompatibles avec cette note d’application.

NDEF Message TLV #

Au moins un message NDEF TLV DOIT être toujours présent à l’intérieur des balises MIFARE Classic et MIFARE Plus. Le message NDEF TLV stocke le message NDEF dans le champ Valeur. Le dispositif de lecture DOIT être capable de lire et de traiter le message NDEF TLV trouvé par la procédure de détection NDEF (également appelé message NDEF obligatoire TLV ou premier message NDEF TLV); quoi qu’il en soit, d’autres blocs TLV NDEF Message PEUVENT être présents. Ci-dessous l’encodage des 3 champs TLV du message NDEF TLV est indiqué:

T DOIT être égal à 03h (voir tableau 4).

L DOIT être égal à la taille en octets du message NDEF stocké.

V DOIT stocker le message NDEF.

Un message NDEF TLV vide DOIT être défini comme un message NDEF TLV avec un champ L égal à 00h, et aucun champ V (c’est-à-dire qu’aucun message NDEF n’est présent dans le champ V, voir [NDEF]).

Un message NDEF TLV non vide PEUT contenir des messages NDEF vides ou non vides.

TLV propriétaire #

Le TLV propriétaire contient des informations exclusives. Une étiquette MIFARE Classic et MIFARE Plus DOIT contenir zéro, un ou plusieurs TLV propriétaires. Le périphérique Reader peut ignorer les données contenues dans ce bloc TLV. Ci-dessous l’encodage des 3 champs TLV de TLV propriétaire est montré:

T DOIT être égal à FDh (voir tableau 4).

L DOIT être égal à la taille en octets des données propriétaires dans le champ Vale.

V DOIT contenir des données propriétaires.

NULL TLV #

Le TLV NULL PEUT être utilisé pour le remplissage de la zone de données. Une balise MIFARE Classic et MIFARE Plus PEUT contenir zéro, un ou plusieurs TLV NULL. Le lecteur DOIT ignorer ce bloc TLV. NULL TLV DOIT être composé d’un champ de balise de 1 octet. Sous l’encodage du champ de balise de la valeur NULL TLV est affiché :

T DOIT être égal à 00h (voir tableau 4).

L NE DOIT PAS être présent.

V NE DOIT PAS être présent.

Terminateur TLV #

Le Terminator TLV PEUT être présent à l’intérieur des étiquettes MIFARE Classic et MIFARE Plus, et un lecteur DOIT être capable de le lire/traiter. Le Terminator TLV est le dernier bloc TLV dans la zone de mémoire de données. Terminator TLV DOIT être composé d’un champ de balise de 1 octet. Ci-dessous l’encodage du champ de balise du Terminator TLV est affiché:

T DOIT être égal à FEh (voir tableau 4).

L NE DOIT PAS être présent.

V NE DOIT PAS être présent.