Life’s Developper : À la découverte de la NFC et de ses usages

by Évolt

Le but de cet article — et des prochains — est de raconter mon expérience de développeur, apporter des ressources et des idées sur un sujet qui m’intéresse, tout en essayant de vous faire passer un bon moment.

En tant que développeur chez Évolt, la rencontre entre mon monde et celui des designers de service a donné naissance à une ambition : hacker les usages et les services à l’aide des nouvelles technologies. Hacker un usage, c’est quoi ?

Au final, c’est simplement transformer les expérimentations et bidouilles de notre équipe en une nouvelle expérience enrichissante pour l’utilisateur.

Plutôt sympa comme boulot, non ? Une idée avait donc émergé, fallait-il encore définir le cadre de notre premier prototype. Quels usages ? Quelle techno ?

On est finalement arrivés à un premier projet, un outil de vote utilisant des codes couleurs et des cartes NFC afin d’animer des réunions. Et c’est maintenant que ça commence à être intéressant : la phase de découverte d’une nouvelle technologie ! Je ne vais pas vous parler du projet, mon collègue développeur s’en occupe très bien dans cet article :

Non, aujourd’hui, je vais tâcher de définir la technologie et de vous faire réfléchir sur les usages que l’on peut imaginer avec. Mais, c’est aussi une expérience qui a été enrichissante pour moi et que je veux partager avec vous.


La NFCQUOI ?

La Near Field Communication (Communication en Champ Proche) ou NFC est une technologie de communication sans fil. Le protocole de communication s’effectue avec deux éléments principaux : le tag et le lecteur NFC. Le tag est l’élément qui contient de la donnée structurée, du simple texte aux fichiers plus complexes et plus lourds comme une photo. Le lecteur, lui, va permettre de communiquer avec le tag afin de récupérer l’information qu’il contient, comme les smartphones Android par exemple.

De fait, avec ce système à deux composantes, le champs des possibles devient immense. D’ailleurs, je suis certain que vous connaissez déjà l’usage le plus connu : le paiement sans contact à l’aide de sa carte bancaire, ou encore, directement avec son smartphone. On la retrouve aussi dans certains systèmes de transports urbains afin de valider son voyage. La NFC n’est qu’une branche de la technologie RFID, la radio-identification. On retrouve cette dernière dans les passeports biométriques français et aussi dans les chaînes de traçabilité de produits dans les entrepôts. La NFC se différencie donc par sa portée faible (maximum 10cm mais couramment autour des 4cm) car elle utilise la fréquence radio spécifique de 13,56 MHz.


Maintenant que nous avons bien en tête les caractéristiques techniques et les contraintes d’utilisation de la technologie NFC, il est temps de vous narrer mes aventures…


Mon voyage initiatique en Terre Inconnue

Tout débute un lundi avec l’arrivée du matériel au bureau. Un Raspberry Pi (mini ordinateur), un lecteur NFC et une cinquantaine de cartes NFC de type Mifare Classic 1k. Il est temps de se fixer le premier objectif : faire un programme très simple capable d’utiliser le lecteur pour récupérer la donnée inscrite sur une carte NFC afin de l’afficher.

Après quelques recherches, on trouve enfin de quoi piloter le lecteur NFC : la librairie pcsc-lite. Son implémentation a été faite dans plusieurs langages de programmation. On trouve aussi des sur-couches permettant de commencer plus rapidement un projet, notamment pour le développement Android. Mais, dans un souci de bien appréhender le fonctionnement de la technologie, on a choisi de commencer le développement en C, ce qui nous oblige à rester rigoureux.

Oui mais voilà, on ne sait qu’établir un lien entre notre Raspberry Pi et notre lecteur. Se pose donc la question de comment communiquer avec nos cartes NFC. Et là, c’est le début des emmerdes.

“Qu’est-ce qu’il faut envoyer à cette f****** carte ?”

True Story. Non, sérieusement, c’est la partie sur laquelle on s’est le plus cassé les dents : on ne trouvait tout simplement pas de documentation sur le protocole de communication avec une carte NFC Mifare Classic 1k. Et en y réfléchissant maintenant, avec du recul, c’est un simple problème de vocabulaire qui faisait qu’on ne trouvait absolument aucune ressource, la sémantique étant vraiment spécifique.

C’est donc après 42 jurons fleuris et autant de cafés que je me suis souvenu qu’il y avait un étudiant de mon école, Epitech, qui avait déjà potassé le sujet. Ce sauveur venu d’ailleurs (oui, parce qu’il était en Chine quand je l’ai contacté) m’a donné deux liens de docs qui m’ont réellement aidé, celui-ci et celui-là. Alors, merci JB (qui a d’ailleurs fait une sur-couche de node-pcsclite que vous pouvez trouver ici).

Ayant ces nouvelles informations, on peut enfin envoyer des directives à notre lecteur. Il peut maintenant demander la donnée contenue dans nos cartes NFC. Ces fameuses commandes APDU, pour Application Protocol Data Unit, sont à envoyer en héxadécimal. Elles permettent différentes actions comme l’authentification à un bloc de données pour ensuite lire le contenu ou écrire sa propre donnée. Notre premier objectif était de lire l’intégralité d’une carte NFC, la “dumper”. On a donc développé de quoi envoyer les commandes d’authentification et de lecture pour chaque bloc, ainsi qu’un petit “parser” (c’est-à-dire de quoi analyser notre donnée héxadécimale pour la rendre lisible par l’humain). Quand on a vu, grâce à l’application Android NFC-Tools, que le programme affichait le texte que l’on avait écrit sur les cartes, le test était réussi ! Ainsi de suite, on a itéré sur le développement d’autres fonctionnalités. Dans le cadre de notre projet d’outil de vote, on s’est ensuite concentrés sur l’écriture de la donnée.


Bien sûr, ce n’est qu’un des nombreux usages qu’offre la NFC. Ce que je voulais surtout exposer ici, c’est que le hack d’un usage par la technologie nécessite une bonne compréhension de cette dernière couplée à une posture, une démarche centrée autour de l’utilisateur afin de ne jamais tomber dans l’absurdité d’un usage inutile ou plus contraignant qu’à l’origine.

Pour illustrer cette idée, j’écrirais bientôt un article sur un usage auquel j’ai pensé dans le but de réinventer l’expérience utilisateur au sein d’une bibliothèque dite “2.0”.

Si vous appréciez cet article, n’hésitez pas à le partager ou le recommander grâce aux boutons ci-dessous. Merci !

Jordan Lorho, développeur au sein de l’agence d’innovation service Évolt