Note : au sens technique strict, les clés MIFARE concernées ne sont pas des clés NFC, même si elles fonctionnent en champ proche (voir le commentaire de geoffroy).

La duplication suppose plusieurs choses, toutes relativement peu complexes :

  • un lecteur NFC approprié
  • des supports NFC vierges
  • les bon outils

Pour le lecteur NFC, je déconseille tout ce qui est à base d'ACR122U. C'est malheureusement l'écrasante majorité des lecteurs NFC que l'on trouve facilement.

Pour une utilisation normale, ce matériel ne pose aucun problème que je connaisse. Pour l'objectif recherché, comme cela est bien dit (mais en anglais) sur le site nfc-tools.org, ACS ACR122 devices rely on PCSC which does not allow to cancel/abort a command, so all asynchronous commands (commands with delayed reply) could fail with timeouts, which makes ACR122's target support very limited and unstable.

En bref, les outils marchent, mais peuvent planter aléatoirement. Autant dire que la procédure globale en est allongée, surtout si vous n'avez pas de chance. Mais, même avec ce type de lecteur, j'ai fini par faire mes copies. Rien d'impossible donc, c'est juste non-déterministe.

J'ai acheté un StickID, fabriqué par nos amis italiens. Un peu plus cher, et bien plus fiable, en cela que les outils n'ont pas planté une seule fois. Ca permet de lancer l'extraction des clés le soir, et d'avoir un bon espoir de connaître les clés le lendemain matin.

Lecteur NFC à base d'ACR122 StickID, de SensorID

Voilà pour le matériel de base.

Les supports NFC vierges se trouvent sans difficulté sur eBay. Il faut acheter un support (ou un ensemble de supports) dont le secteur 0 peut être réécrit. Ce secteur contient le numéro de série du support, cette information pouvant être utilisée par le système de contrôle d'accès. Il ne faut donc pas utiliser les supports usuels, qui coûtent quelques centimes l'unité. Ce n'est pas ruineux malgré tout, de l'ordre de quelques euros l'unité.

Supports NFC

Restent les logiciels. Il en faut deux : mfcuk et mfoc. Essayez d'utiliser mfoc en premier, avec une commande du genre

mfoc -P 500 -O /tmp/copie.dmp

Si votre support NFC utilise des clés de chiffrement standard, ça va aller très vite (une poignée de minutes). Par contre, si vous avez la chance (ou la malchance, selon le point de vue) d'avoir un système de contrôle d'accès qui utilise des clés de chiffrement spécifiques, il vous faut en casser une au moins avec mfcuk. Là, ça peut être plus long[1]. La commande standard, qui ne tente de casser que la clé A du secteur zéro, est la suivante :

mfcuk -C -R 0:A -v 2 -s 250 -S 250 -O /tmp/copie.dmp

Mfcuk va travailler un bon moment, et devrait finir par afficher quelque chose comme

ACTION RESULTS MATRIX AFTER RECOVER -
UID aa bb cc dd - TYPE 0x08 (MC1K)
---------------------------------------------------------------------
Sector | Key A |ACTS | RESL | Key B |ACTS | RESL
---------------------------------------------------------------------
0 | XXXXXXXXXXXX | . R | . R | 000000000000 | . . | . .
1 | 000000000000 | . . | . . | 000000000000 | . . | . .
2 | 000000000000 | . . | . . | 000000000000 | . . | . .
3 | 000000000000 | . . | . . | 000000000000 | . . | . .
4 | 000000000000 | . . | . . | 000000000000 | . . | . .
5 | 000000000000 | . . | . . | 000000000000 | . . | . .
6 | 000000000000 | . . | . . | 000000000000 | . . | . .
7 | 000000000000 | . . | . . | 000000000000 | . . | . .
8 | 000000000000 | . . | . . | 000000000000 | . . | . .
9 | 000000000000 | . . | . . | 000000000000 | . . | . .
10 | 000000000000 | . . | . . | 000000000000 | . . | . .
11 | 000000000000 | . . | . . | 000000000000 | . . | . .
12 | 000000000000 | . . | . . | 000000000000 | . . | . .
13 | 000000000000 | . . | . . | 000000000000 | . . | . .
14 | 000000000000 | . . | . . | 000000000000 | . . | . .
15 | 000000000000 | . . | . . | 000000000000 | . . | . .

J'ai remplacé la clé de chiffrement extraite par mfcuk par une série de X.

Une fois que vous connaissez une seule des clés de chiffrement, A ou B, et quel que soit le secteur (clé A du secteur zéro pour la commande mfcuk ci-dessus), vous pouvez de nouveau lancer mfoc, en précisant cette clé :

mfoc -P 500 -k XXXXXXXXXXXX -O /tmp/copie.dmp

Cela suffit pour que l'outil en obtienne toutes les autres clés de chiffrement du support NFC. Si tout se passe bien, on obtient une copie du contenu du support NFC, qu'il suffit de dupliquer sur un support vierge.

Note

[1] C'est lors de cette étape que les plantages aléatoires liés à l'ACR122 sont très gênants.