RFID

Présentation des générations de tags Mifare (NFC 13,56 MHz)


La carte que l'on trouve un peu partout est la Mifare Classic 1k, elle fonctionne sur la fréquence 13,56 MHz (HF : High Frequency).
NomSurnomEEPROM
Mifare Classic 1kMF1 S501Koctet
Mifare Classic 4kMF1 S704Koctet
Mifare Plus XMF1 PLUS S602Koctet
MF1 PLUS S804Koctet
Mifare Plus SMF1 SPLUS S602Koctet
MF1 SPLUS S804Koctet
Stockage des données (mémoire) Pour une carte de 1ko de stockage EEPROM, réparti dans 16 secteurs de 4 blocs de 16 octets : 16*4*16 = 1024 octets (donc 1ko).
Chaque secteur contient 4 blocs de 16 octets, le dernier bloc s'appelle le sector trailer.
Ces secteurs de 4 blocs individuels (contenant 64 octets par secteur) dispose de fonctionnalités sécuritaires de base. Ces fonctionnalités sont: A cause de ces fonctionnalités de sécurisation (qui sont stocké sur le dernier bloc, ainsi appelé "fin de secteur" (Sector Trailer en anglais, ce terme est important), seuls les 3 blocs du bas de chaque secteur sont disponibles pour le stockage des données. Cela signifie que vous disposez uniquement de 48 octets pour votre propre usage par secteur de 64 octets.
Ce qui signifie que l'espace mémoire disponible pour une carte 1k n'est que de:
$15_{secteurs}\times 3_{blocs}\times 16_{octets}+2_{blocs}\times 16_{octets}=752_{octets}$
Les MIFARE Classic ne sont pas lisibles par tous les smartphones
SecteurBlocOctetsDescription
0123456789101112131415
00Données FabricantBloc Fabricant ("Manufacturer block")
1DonnéesDonnées
2DonnéesDonnées
3CLE ABits d'accèsCLE BFin de secteur ("Sector Trailer")
14DonnéesDonnées
5DonnéesDonnées
6DonnéesDonnées
7CLE ABits d'accèsCLE BFin de secteur ("Sector Trailer")

Les secteurs sont numérotés de 0 à 15.
Le premier bloc du secteur 0 est spécial car il contient l'identifiant du tag (manufacturer block).
On l'appelle vulgairement le "block 0" car c'est là qu'est écrit le numéro de série du tag UID (Unique ID), normalement inscrit en usine et pouvant être écrit (normalement) une seule fois.
Dans notre cas l'UID est sur 4 octets.
Exemple
Secteur 6
Bloc
 
Octets
Secteur 
Bin
dec1514131211109876543210
000110002400000000000000000000000000000000
000110012500000000000000000000000000000000
000110102600000000000000000000000000000000
0001101127484558414354 78778800 AA0720018738
clé A
Access
clé B
Accéder à la mémoire de l'EEPROM Vous devez effectuer les opérations suivantes pour accéder à l'EEPROM de la carte:
  1. Vous devez retrouver les 4-octetse NUID de la carte (ce NUID peut également avoir 7-octets de long, cela reste cependant rare pour une carte Mifare Classic). Cette opération est nécessaire pour le processus d'accès qui va suivre.
  2. Vous devez vous authentifier sur le secteur auquel vous voulez accéder en accord avec les règles d'accès (définis sur le bloc de fin de secteur/Trailer Bloc), en fournissant la clé d'authentification appropriée (clé de 6 octets) qui est à 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF pour une nouvelle carte.
  3. Une fois l'authentification réussie, et en fonction des persmissions sur le secteur, vous pouvez lire/écrire/incrémenter/décrémenter le contenu d'un bloc spécifique.
    Notez que vous devez vous authentifier sur chaque secteur auquel vous voulez avoir accès étant donné que chaque secteur dispose ses propres droits et ses propres clés d'accès!
Access conditions for data block 0,1 et 2
Access bitsAccess condition forApplication
C10C20C30readwriteincrementdecrement, transfer, restore
000key A|B1key A|B1key A|B1key A|B1transport configuration
010key A|B1neverneverneverread/write block
100key A|B1key B1neverneverread/write block
110key A|B1key B1key B1key A|B1value block
001key A|B1neverneverkey A|B1value block
011key B1key B1neverneverread/write block
101key B1neverneverneverread/write block
111neverneverneverneverread/write block

1 si la clé B peut être lue dans la fin de secteur correspondante, elle ne peut pas servir à l'authentification (toutes les lignes grisées du dernier tableau).
En conséquence, si le lecteur authentifie un bloc d’un secteur qui utilise les conditions d’accès grisées et utilise la clé B, la carte refusera tout accès ultérieur à la mémoire après l’authentification.

Access conditions for the sector trailer
Access bitsAccess condition forRemark
KEYAAccess bitsKEYB
C13C23C33readwritereadwritereadwrite
000neverkey Akey Aneverkey Akey AKey B may be read[1]
010neverneverkey Aneverkey AneverKey B may be read[1]
100neverkey Bkey A|Bneverneverkey B
110neverneverkey A|Bnevernevernever
001neverkey Akey Akey Akey Akey AKey B may be read, transport configuration[1]
011neverkey Bkey A|Bkey Bneverkey B
101neverneverkey A|Bkey Bnevernever
111neverneverkey A|Bnevernevernever
1 pour cette condition d'accès, la clé B est lisible et peut être utilisée pour les données
NTAG
Type:NTAG 203NTAG 210NTAG 212NTAG 213NTAG 215NTAG 216
Mémoire totale (octets)168 80144180540924
organized    45 pages of
4 byte/page
135 pages of
4 byte/page
231 pages of
4 byte/page
reserved for manufacturer and configuration data (octets)    262626
used for the read-only locking mechanism (octets)    342837
available as capability container (octets)    444
Mémoire utilisateur (octets)14448128144504888
UID
7 octets
URL Max (caractères)13840120136488872
Data Trans. Rate
106 kbit/s

Organisation de la mémoire

NTAGAdr
Page
octet
0123
All0x00
Numéro de série
SN0SN1SN2BCC0 : check byte SN0,SN1,SN2
0x01
Numéro de série
SN3SN4SN5SN6
0x02Numéro de série
BCC1 : check byte SN3,SN4,SN5,SN6
Reservé internelock bytes 0lock bytes 1
0x03
Conteneur de capacité CC
0x04
User Memory
0x05
2160xE2
Octets de verrouillage dynamique
RFUI
0xE3
CFG 0
MIRRORRFUIMIRROR_PAGEAUTH0
0xE4
CFG 1
ACCESSRFUIRFUIRFUI
0xE5
PWD : Mot de passe 32 bits utilisé pour la protection d'accès mémoire
valeur par défaut : 0xFFFFFFFF
0xE6PACK : Accusé de réception de mot de passe 16 bits utilisé
lors du processus de vérification du mot de passe
valeur par défaut : 0x0000
RFUI

Lock bytes

Les pages de 0x03 (CC) à 0x0F peuvent être verrouillées individuellement en réglant le bit de verrouillage correspondant Lx à 1.
Le vérouillage empêche tout accès ultérieur en écriture.
lock bytes
lock bytes 0lock bytes 1
L7L6L5L4LCCBL15-10BL9-4BLCC L15L14L13L12L11L10L9L8
0x070x060x050x040x03page
0x0A à 0x0F
page
0x04 à 0x09
Page
0x03 (CC)
0x0F0x0E0x0D0x0C0x0B0x0A0x090x08
Le vérouillage d'un BL engendre que les Lx associés ne pourront plus être modifier
Tout vérouillage de bit à 1 est irréversible!

Conteneur de capacité CC

Conteneur de capacité CC
0x03Octets
0123
0xE10x10Capacité/80
L'octet 2 du conteneur de capacités définit la taille de la mémoire disponible pour les messages NDEF.
Exemple : Capactité 0x12 : 0x12*8=144 octets disponibles, normal pour un NTAG 213.
NTAG216: 0x6D pour 872 octets

Octets de verrouillage dynamique

NTAG216
Octet
0
1
2
Bit765432107654321076543210
Page0x80
0x8F
0x70
0x7F
0x60
0x6F
0x50
0x5F
0x40
0x4F
0x30
0x3F
0x20
0x2F
0x10
0x1F
RFUIRFUI0xE0
0xE1
0xD0
0xDF
0xC0
0xCF
0xB0
0xBF
0xA0
0xAF
0x90
0x9F
RFUI0xD0
0xE1
0xB0
0xCF
0x90
0xAF
0x70
0x8F
0x50
0x6F
0x30
0x4F
0x10
0x2F
RFUI : Reserver pour utilisation future - implémenté
Remarque: Définissez tous les bits marqués avec RFUI sur 0 lors de l'écriture dans les octets de verrouillage dynamique.

Octet de configuration MIRROR

MIRROR
Bit76543210
MIRROR_CONF MIRROR_BYTERFUISTRG_MOD_ENRDUI
Config00 pas de miroir ASCII
01 UID miroir ASCII
10 Miroir ASCII de compteur NFC
11 Miroir ASCII des compteurs UID et NFC
Position de l'octet dans la page
définie par MIRROR_PAGE
00 mode de modulation forte désactivée
1 mode de modulation forte activée
0

Définit quel miroir ASCII doit être utilisé, si le miroir ASCII est activé par un octet MIRROR_PAGE valide.

MIRROR_Page définit la page pour le début de la mise en miroir ASCII
Une valeur> 03h active la fonction de miroir ASCII

AUTH0 définit l'adresse de la page à partir de laquelle la vérification du mot de passe est requise.
La plage d'adresses valide pour l'octet AUTH0 va de 00h à FFh.
Si AUTH0 est défini sur une adresse de page supérieure à la dernière page de l'dernière page de la configuration de l'utilisateur, la protection par mot de passe est désactivée.

Octet de configuration ACCESS


ACCESS
Bit76543210
PROTCFGLCKRFUINFC_CNT_ENNFC_CNT_PWD_PROTAUTHLIM
0 l'accès en écriture est protégé par la vérification du mot de passe
1 l'accès en lecture et en écriture est protégé par la vérification du mot de passe
Écrire un bit de verrouillage pour la configuration de l'utilisateur
0 configuration utilisateur ouverte pour l'accès en écriture
1 configuration utilisateur verrouillée en permanence
contre l'accès en écriture, à l'exception des PWD et PACK
0 Configuration du compteur NFC
0 compteur NFC désactivé
1 Compteur NFC activé
Si le compteur NFC est activé, le compteur NFC sera automatiquement augmenté à
la première commande READ ou FAST_READ après une réinitialisation à la mise sous tension
Protection par mot de passe du compteur NFC
0 compteur NFC non protégé
1 protection du mot de passe du compteur NFC activée

Si la protection par mot de passe du compteur NFC
est activé, le tag NFC ne répond que
à une commande READ_CNT avec la valeur de compteur NFC
après vérification du mot de passe
Limite des tentatives de vérification du mot de passe négatif
000 tentatives de vérification de mot de passe négative désactivée
001-111 nombre maximum de tentatives de vérification de mot de passe négatif (7 maxi)


Mifare access bytes
Byte 6
Byte 7
Byte 8
Byte 9
~C2~C1C1~C3C3C2
User

Byte 6
~C23~C22~C21~C20~C3~C12~C11~C10
Byte 7
C13C12C11C10~C33~C32~C31~C30
Byte 8
C33C32C31C30C23C22C21C20
Byte 9 - USER
Access BitsValid CommandsBlockDescription
C13 C23 C33read, write3sector trailer
C12 C22 C32read, write, increment, decrement, transfer, restore2data block
C11 C21 C31read, write, increment, decrement, transfer, restore1data block
C10 C20 C30read, write, increment, decrement, transfer, restore0data block

Format NDEF

APDU

"APDU Command" (Application Protocol Data Unit Command)
APDU Command
HeaderBody
CLAINSP1P2LcDATA (7 bytes)Le
00A4040007A000000247100100

CLA

l'octet Classe est utilisé pour indiquer dans quelle mesure la commande est conforme à la norme ISO7816 et, le cas échéant, quel type de «messagerie sécurisée» sera utilisé. Pour que les choses restent simples, nous n'utiliserons pas cet octet dans notre exemple et nous passerons 0x00 tout le temps.

INS

l'octet Instruction est utilisé pour indiquer la méthode à exécuter. Il peut s'agir de plusieurs méthodes telles que: 0xA4 pour sélectionner un fichier ou une applet,0xB0 pour lire un fichier binaire, 0xD0 pour écrire un fichier binaire … (Voir la liste complète des instructions ici)

P1 et P2

ces deux octets de paramètre sont utilisés pour personnaliser davantage l'instruction, ils dépendent des commandes personnalisées spécifiées par la carte. Cliquez ici pour la liste des cas possibles

Lc

est la longueur des données à envoyer

DATA

correspond aux données réelles pour l'instruction.

Le

est la longueur de la réponse attendue
Ainsi, un exemple pour sélectionner un fichier ou une applet avec un
ID = A0000002471001 sera le suivant: 00 A4 0400 07 A0000002471001 00
Une fois que la carte a reçu la commande, elle répondra par une réponse APDU comme suit:
APDU Response
BodyTailer
Data FieldSW1SW2

Data Field

Champ de données: est le corps de la réponse

SW1 et SW2

sont les octets d'état, ils sont séparés car parfois, le premier octet peut nous indiquer l'état actuel, et le deuxième octet peut spécifier davantage d'informations sur cet état. Par exemple, si nous utilisons une commande pour "Vérifier un code confidentiel" avec un code confidentiel incorrect, la carte renverra un statut de 0x63 0xCXX est le nombre de tentatives restantes.
Ainsi, l'application du lecteur peut facilement vérifier le premier octet pour le statut et deuxième pour le nombre de tentatives restantes. Lorsque la commande a été exécutée avec succès, nous obtenons généralement le statut 0x90 0x00 (voir la liste complète des réponses possibles ici).
Le code d'identification de l'URI (URI Identifier Code) est utilisé pour raccourcir la longueur de l'URI et peut avoir l'une des valeurs suivantes:
    Valeur   Protocole
    -----    --------
    0x00     Pas d'utilisation de préfix... l'URI est entièrement inclus dans le champ URI
    0x01     http://www.
    0x02     https://www.
    0x03     http://
    0x04     https://
    0x05     tel:
    0x06     mailto:
    0x07     ftp://anonymous:anonymous@
    0x08     ftp://ftp.
    0x09     ftps://
    0x0A     sftp://
    0x0B     smb://
    0x0C     nfs://
    0x0D     ftp://
    0x0E     dav://
    0x0F     news:
    0x10     telnet://
    0x11     imap:
    0x12     rtsp://
    0x13     urn:
    0x14     pop:
    0x15     sip:
    0x16     sips:
    0x17     tftp:
    0x18     btspp://
    0x19     btl2cap://
    0x1A     btgoep://
    0x1B     tcpobex://
    0x1C     irdaobex://
    0x1D     file://
    0x1E     urn:epc:id:
    0x1F     urn:epc:tag:
    0x20     urn:epc:pat:
    0x21     urn:epc:raw:
    0x22     urn:epc:
    0x23     urn:nfc:
    0x24-0xFF RFU