Précédent : if (‘RFID’==’Radio Frequency Insecure Devices’) {Clonage();}
Mise à jour: le lien vers le code source du firmware a été mis à jour.
Introduction
Nous avons vu précédemment comment tirer parti des tags de type Q5 ou Hitag2, capables de cloner l’identifiant d’un tag EM4X02 et ainsi de se substituer à lui auprès du lecteur légitime. Bien que cette solution soit simple à mettre en oeuvre elle requiert l’accès au tag original et demande du matériel spécifique. Ainsi, peut-on faire mieux? Cet article est là non seulement pour montrer que l’on peut faire mieux, mais surtout pour expliquer comment le faire. Alors rentrons directement dans le vif du sujet: le but est – ici – de fabriquer un “faux” tag EM4X02 capable de prendre n’importe quel identifiant.
Circuit
Pour ce faire, nous allons utiliser uniquement du matériel électronique “standard” et plus précisément les composants suivants:
- 1 microcontrôleur Atmel ATtiny45
- 1 résistance 10K
- 1 transistor NPN (BC547)
- 1 condensateur 10nF
- du fil de cuivre émaillé (0.25mm de diamètre)
Avant d’attaquer – et pour rendre à César ce qui lui appartient – notons que l’émulateur que nous construisons ici est partiellement inspiré de travaux précédents, notamment en ce qui concerne la gestion de l’encodage Manchester. Ceci étant dit, le circuit que nous proposons ici est volontairement plus simple afin de pouvoir être mieux appréhendé en détail. Comme nous le voyons ci-dessous, le schéma électronique est très basique. Il manque toutefois le système d’alimentation ainsi que l’antenne. Concernant l’antenne, nous y reviendrons plus bas.
Pour ce qui est de l’alimentation, le problème est simple puisque le système n’a aucune entrée/sortie et que, par conséquent la seule contrainte est la plage de voltage supportée par l’ATtiny45: 2.7-5.5V (pour une fréquence maximale de 10MHz). Comme nous utilisons ici une fréquence d’horloge de 8 MHz, deux piles de 1,5V (AA ou AAA) devraient faire l’affaire. Toutefois, pour une meilleure fiabilité, rien n’empêche d’utiliser un véritable circuit d’alimentation, basé sur un régulateur de tension de type LM7805.
A ce stade vous vous demandez peut-être pourquoi nous avons besoin d’une alimentation alors que les tags EM4X02 sont purement passifs. Effectivement, il est possible de reproduire le comportement d’un tag authentique en utilisant le lecteur comme source d’alimentation (et de signal d’horloge). Pour des raisons de simplicité, nous n’avons pas opté pour cette solution ici et, du coup, nous obtenons un tag qui “triche” vis-à-vis du lecteur. En effet, au lieu d’être synchronisé avec ce dernier, notre tag se contente d’envoyer “égoïstement” et à répétition son identifiant à la bonne fréquence jusqu’à ce que “par accident” il se retrouve en phase avec le lecteur. Dans la pratique, tout ceci se passe en quelques fractions de seconde et n’est pas perceptible à l’utilisation.
Mis à part l’alimentation et l’antenne – sur laquelle nous reviendrons ci-dessous – le circuit se résume donc à un microcontrôleur qui embarque toute la logique et qui pilote l’antenne au travers d’un transistor NPN.
Encodage de l’identifiant
Comme nous l’avons vu dans les articles précédents, les systèmes EM4X02 transmettent un identifiant du tag au lecteur. Cet identifiant n’est pas envoyé tel quel et est, tout d’abord, encodé afin d’inclure des bits de parité permettant ainsi au lecteur de détecter un erreur de transmission. Cet encodage se fait de la manière suivante: tout d’abord, le tag envoie un série de neuf ‘1’ afin de signaler le début de transmission. Ensuite, l’identifiant – 40 bits – est envoyé sous la forme (conceptuelle) d’un tableau de 10 lignes x 4 colonnes agrémentés de bits de parité. Plus précisément l’identifiant est envoyé par blocs (lignes) de 4 bits, chacun de ces blocs étant suivi d’un bit de parité de ligne. Une fois les 10 blocs transmis, 4 bits de parité de colonne sont envoyés et terminés par un dernier bit ‘1’. Ceci fait donc un total de 64 bits. Toutes les parités utilisées sont des parités “paires”. Pour illustrer tout cela, prenons comme exemple l’identifiant 0x0123456789. Celui-ci sera envoyé de la manière suivante (les bits en noir constituent l’identifiant à proprement parler, ceux en rouge sont les bits de parité et ceux en bleu indiquent le début et fin de transmission):
111111111 0000 0 0001 1 0010 1 0011 0 0100 1 0101 0 0110 0 0111 1 1000 1 1001 0 0001 1
Transmission des données
Pour ce qui est de la trasmission des données, les tags utilisent un encodage de type Manchester. Du point de vue de notre émulateur, voici comment se fait la transmission de données.
L’antenne connectée aux bornes X1-1/X1-2 (sur laquelle nous reviendrons ci-dessous) ainsi que le condensateur C1, connecté en parallèle, forment un circuit LC résonnant à la fréquence de 125 KHz. Ce circuit est piloté par le microcontrôleur, au travers du transistor Q1. En bref, quand la pin #3 du microcontrôleur est à un niveau bas, aucun passage de courant ne se fait au travers du transistor. En conséquence, l’antenne de l’émulateur (plus précisément le circuit résonnant LC) est alors en syntonie avec l’antenne du lecteur, ce qui est perçu par le lecteur au travers d’une charge accrue et interprété comme un ‘1’ logique. A l’inverse, quand la pin du microcontrôleur est à un niveau haut, les bornes de l’antenne sont alors en court-circuit ce qui provoque la dé-syntonie de l’antenne et est alors interprété par le lecteur comme un ‘0’ logique.
Il est à noter que les tags EM4X02 utilisent généralement 64 cycles d’horloge par bit (bien que d’autres valuers soient également possibles). Ainsi un bit est transmis en 512 us et l’identifiant complet en 32.768 ms.
Au final donc, le microcontrôleur va changer compter des cycles à une fréquence de 125 KHz, et changer l’état du pin #3 tous les 32 cycles selon le bit à transmettre, l’encodage Manchester ayant des transitions en début et milieu de cycle.
L’antenne
Le dernier point important qu’il reste à aborder est l’antenne à utiliser. Le but de cette antenne est de former, avec le condensateur C1, un circuit LC d’une fréquence de résonance de 125 KHz. Ainsi, selon la formule correspondante – et en fixant la valeur de C1 à 10 nF – nous pouvons calculer qu’il nous faut une bobine de environ 162 uH.
Bien qu’il soit certainement possible de trouver une antenne toute prête répondant à ces exigences, il est certainement plus rapide (et plus intéressant) de la fabriquer soi-même. Pour cela il suffit de disposer d’une bonne longueur de fil de cuivre émaillé, de diamètre connu. Nous avons opté pour un diamètre de 0.25 mm.
En se référant à une note applicative publiée par la société EM Microelectronic, nous obtenons la formule permettant de calculer l’inductance d’une antenne en forme de bobine circulaire en fonction du diamètre de la bobine D, du diamètre du fil d et du nombre de spires N.
A partir de cette relation et en fixant le diamètre de la boucle à 4 cm (ce qui, au passage, correspond au diamètre du cylindre en carton autour duquel est enroulé un rouleau de papier toilette et autour duquel nous pouvons enrouler le fil pour fabriquer l’antenne), nous obtenons N=43. Il nous faut donc une bobine de 4 cm de diamètre, composée de 43 spires.
Circuit Final
En mettant toutes ces informations ensemble, nous obtenons le résultat ci-dessous. On peut noter que nous avons opté pour un circuit d’alimentation un peu plus élaboré, utilisant un régulateur de tension, alimenté par une pile 9V. Un petit interrupteur permet également de mettre le tout sous tension, ce qui est signalé par l’allumage de la LED verte.
Le connecteur six pôles situé à côté du microcontroleur est utilisé pour la programmation ISP (In System Programming) de l’AVR. Notre émulateur ne disposant (volontairement) d’aucun moyen de communication avec un PC, il est nécessaire de flasher le firmware du microcontroleur pour changer l’identifiant à émuler. Ce connecteur permet ainsi d’accomplir aisément et rapidement cette tâche, sans avoir à enlever le chip pour le mettre dans un circuit de programmation. D’ailleurs, en parlant du firmware, vous pouvez en télécharger le code source ici.
Démonstration
Au final, comme nous l’avons mentionné dans les précédents articles de cette série, le problème n’est pas tant le EM4X02 en lui-même que l’utilisation qui en est faite. Par exemple, de nombreux systèmes RFID sont suffisamment robustes pour être utilisés comme moyen de contrôle d’accès… toutefois celui-ci n’en fait définitivement pas partie. La preuve en images … quelque part en Suisse romande!
[youtube=http://www.youtube.com/watch?v=mVWALgC0TmA]
Ne refaites pas ça chez vous … et surtout pas chez votre voisin! 🙂