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.
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é.
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.
4 réactions
1 De Boupjof - 30/12/2014, 01:59
Merci pour cet article intéressant et bien documenté. Une petite question sur quel site avez vous acheté le Stick ID? Je ne le trouve que sur des site "douteux"
2 De geoffroy - 30/12/2014, 22:32
Bonjour,
Sans vouloir être trop tatillon, les mifare Classic, ne devrait pas être appellées TAG NFC : "MIFARE Classic technology do not comply with the NFC Forum specifications and require NFC devices to utilize a proprietary protocol stack to read them, these tags will not work with all NFC devices, creating user frustration."
Dans la pratique, on les trouvent partout, mais pour le contrôle d'accès, il faut être un peu sérieux... même NXP préconise d'autres solutions plus sécurisées à base de tripleDES ou d'AES, mais ils ne peuvent pas tuer la poule aux oeufs d'or...
3 De Da Scritch - 31/12/2014, 10:18
Hello NDC !
On ne s'est pas revus depuis longtemps, un TC....
J'organise une cryptoparty le 22 sur le theme de l'ID.
Veux tu venir parler de ton expérience ?
Nous y ferons déjà de la lecture de NFC bancaire.
4 De Nuits de Chine - 02/01/2015, 12:12
Boupjof : j'ai acheté le mien sur SensorID.it. C'est, sauf erreur, le fabricant officiel.
geoffroy : je suis d'accord sur ce point.
Da Scritch : tu peux me donner plus de détails, par mail ?