Les coulisses de Hex NFC : l'application NFC ultime

Hex NFC est un outil NFC de qualité professionnelle développé de zéro en 4 mois. Cet article retrace son développement et tout ce qu'il a demandé.

Matthew Scott12 min de lecture
An NFC chip with a passport on the left and a PASMO transit card on the right.

Note

Hex NFC sort dans les prochains jours ; pour en savoir plus, rendez-vous sur apps.hex.pro/hex-nfc

Il y a environ 4 mois, lors d'un week-end à Melbourne, l'idée de la première application de Hex Pro m'a percuté comme un camion avec un conducteur ivre au volant. Et la comparaison est juste, parce que c'est exactement l'impression que j'ai eue 2 mois après le début du projet.

NFC : un triste état des lieux

Quelques jours plus tôt, j'aidais ma salle de sport à mettre en place une solution de paiement pour son mini-frigo (que j'avais si gentiment donné 3 jours après l'avoir acheté 1 000 $AU chez Bunnings, une chaîne de magasins de bricolage, en réalisant qu'il était bien trop bruyant pour rester dans ma chambre). Le jeune débrouillard qui voulait se faire quelques dollars de plus en vendant des boissons énergisantes comptait se faire payer par PayID, un système de virement instantané. En ingénieur logiciel qui se respecte, je ne pouvais pas le laisser adopter une approche aussi bâclée. Je me suis donc porté volontaire pour mettre en place gratuitement une solution de paiement NFC.

Je n'avais en fait jamais travaillé avec des tags NFC à l'époque, mais j'ai fait mes recherches, puis je suis allé sur AliExpress commander un lot de 10 NTAG213. J'ai ensuite monté rapidement un portail de paiement avec Stripe. Au moment de programmer les nouveaux tags NFC avec l'URL du portail, je suis tombé sur quelque chose d'intéressant. La plus grosse application NFC de l'App Store iOS affichait 14 000 avis, que dis-je, des centaines de milliers d'installations, voire des millions. Je l'ai donc naturellement installée pour l'essayer. Qu'est-ce que j'ai trouvé ? Une application complètement merdique de piètre qualité. Je n'arrivais pas à croire que c'était ça le numéro un. Ne pouvait-on vraiment pas faire mieux ? Honnêtement, je n'en veux pas à son développeur. Avec le recul, je comprends maintenant les difficultés qu'il a dû rencontrer en développant son application. Mais disons que ça a été le déclencheur de Hex NFC.

Une introduction au NFC

Pour les non-initiés, qu'est-ce que le NFC, au juste ? C'est l'acronyme de Near Field Communication (communication en champ proche), un terme « hautement technique » pour dire « approchez l'appareil du tag pour le scanner ».

Les puces NFC sont en réalité de minuscules ordinateurs, de vraies puces de silicium capables d'effectuer des opérations logiques et de stocker des données. La plupart sont trop simples pour les premières, mais certaines savent chiffrer et effectuer des opérations mathématiques sur des nombres aléatoires (les réponses à un défi). Le plus beau, avec les puces NFC, c'est qu'elles n'ont pas de source d'énergie propre. C'est votre appareil lecteur (ici, un iPhone) qui projette un champ électromagnétique qui alimente la puce NFC. Une technologie vraiment géniale, et ce n'est pas fini. La puce fait ensuite osciller un rythme magnétique en réponse, que le lecteur détecte et convertit en bits lisibles.

Le plus délicat, c'est qu'il existe une grande variété de modèles et de fabricants de puces NFC, chacun avec ses propres protocoles et sa propre architecture, et toutes leurs fiches techniques ne sont pas particulièrement transparentes.

Les défis du travail avec le NFC

La première chose que j'ai faite en rentrant de Melbourne sur la Sunshine Coast a été de commencer à construire des émulateurs virtuels pour différentes puces NFC. À l'époque, je n'avais pas accès à beaucoup de tags NFC. Mon inventaire de départ se résumait à 5 NTAG213 de l'expédition à la salle de sport et à deux mystérieuses cartes de transport public (une Pasmo japonaise et une Myki de Melbourne), que l'iPhone savait scanner, mais sans donner d'indice évident sur leur nature.

Je me disais que, si la documentation en ligne des puces NFC était assez solide, je pourrais me passer de posséder physiquement chaque type de puce. Il me suffirait de faire tourner ma logique dans des émulateurs pour savoir qu'elle fonctionne. Comme j'étais naïf à l'époque.

Avec le NTAG213, en fait, les choses se sont plutôt bien passées. C'est le type de puce NFC grand public le plus répandu, et il est bien documenté. Un composant éprouvé, utilisé dans le monde entier et fortement conforme aux standards ouverts.

Quand j'ai commencé à travailler sur ces deux mystérieuses cartes de transport, j'ai compris que les choses n'allaient pas être aussi simples que je le pensais. La Pasmo s'est révélée être de fabrication Sony, une carte à puce FeliCa utilisée dans tous les réseaux de transport public du Japon, avec des capacités qui dépassent pratiquement toutes les autres puces du même type. La Myki était une MIFARE DESFire EV3 en lecture seule, de fabrication NXP, le même fabricant que le NTAG213.

L'objectif était de créer l'outil NFC ultime, quelque chose qui surclasse vraiment tous les autres. À mesure que les exigences de capacités s'élargissaient, et que j'en apprenais plus sur le nombre et la variété des puces réellement disponibles, j'ai su que je ne pourrais pas éviter les tests en conditions réelles. J'ai donc commandé une grande variété de puces pour maximiser ma couverture. Vous pouvez voir la liste complète ici.

Et c'est ainsi que le développement des émulateurs a commencé pour de bon. Chaque puce a eu le sien, et j'ai méticuleusement testé chaque opération et chaque capacité sur du vrai silicium pour m'assurer que les émulateurs collaient aux vraies puces d'aussi près que possible. Pas une mince affaire, et extrêmement chronophage, mais cela en valait à 100 % la peine. J'y ai passé des centaines d'heures pour obtenir une fiabilité impressionnante et la possibilité de faire des tests unitaires contre chaque modèle de silicium réel.

Licences, provenance des données et paquets tiers

L'un des obstacles majeurs de ce projet est que je voulais développer ce paquet sans aucune dépendance à des bibliothèques externes (à l'exception d'Apple). Tout l'esprit de Hex Pro, c'est la confidentialité, la confiance et l'intégrité. C'est un ensemble de principes qu'on m'a inculqués enfant, et je crois vraiment que bien faire les choses mène plus loin que faire ce qui arrange sur le moment. Tout au long de ma carrière, j'ai toujours tout fait pour conserver la confiance de mes clients, et la confiance implicite qu'on m'a accordée dans mes fonctions a toujours conduit à des relations de travail plus efficaces et plus productives. Pour mes futurs clients, c'est donc une priorité de leur témoigner le même respect.

J'ai donc complètement évité les paquets tiers, ce qui donne au final une application bien plus propre, entièrement développée en natif. Personne ne glissera là-dedans quoi que ce soit dont je n'aurais pas connaissance. Cela dit, j'ai dû développer mes propres implémentations du code suivant :

  • Les calculs sur grands nombres et les courbes elliptiques de PACE (courbes Brainpool).

  • Les pilotes de puces et la gestion du NDEF.

  • Les lecteurs d'historique de transport (pour les puces FeliCa)

  • La bibliothèque de noms de stations des transports publics japonais

PACE, le problème du passeport

L'une des fonctionnalités uniques de Hex NFC est sa capacité à lire les données des passeports électroniques. C'est une capacité particulièrement fascinante et sous-exploitée des appareils iOS. J'ai découvert son existence il y a un an, en m'authentifiant avec une application d'identité gérée par un gouvernement. Disons que j'ai été complètement conquis par l'idée de simplement approcher sa pièce d'identité pour prouver qui l'on est. Dès lors que je savais que c'était possible, je savais qu'il me la fallait.

Ma seule crainte était que ce soit réservé aux applications des organismes gouvernementaux. Je n'avais pas à m'inquiéter, car il s'avère que les puces des passeports électroniques sont bien documentées et étonnamment faciles à manipuler... Ce serait le cas si Apple prenait nativement en charge les algorithmes de chiffrement de type PACE. Pas de chance, et avec ma contrainte « aucun paquet tiers », cela signifiait que je devais développer ma propre implémentation des courbes Brainpool. Une tâche extrêmement chronophage, qui en valait à 100 % la peine. Les capacités de lecture de passeport qui en résultent sont fascinantes, et j'ai eu le privilège de les tester à la fois sur un passeport australien et, ça tombait bien, sur un passeport népalais. C'est une fonctionnalité que je recommande vraiment d'essayer par vous-même : vous seriez fasciné par les informations que conserve la partition accessible de la puce de votre passeport (sauf si vous êtes américain, auquel cas il n'y a pratiquement rien).

Les noms de stations des transports publics japonais

L'autre gros morceau pour moi, c'étaient les cartes de transport japonaises. Une capacité que je savais possible, mais que je n'avais jamais vue dans un lecteur NFC. Ces cartes sont fascinantes. Elles peuvent contenir toutes sortes d'informations. Elles suivent le solde de la carte, gardent l'historique de quand et où vous avez validé à l'entrée et à la sortie des transports publics, et enregistrent même vos dépenses dans les supérettes ou aux distributeurs automatiques.

Le gros défi, c'est que le gouvernement japonais n'est pas vraiment d'une grande aide pour faire correspondre les identifiants de stations à de vrais noms. Si j'étais une ordure, je pourrais simplement voler les données des collections d'amateurs sous licence disponibles en ligne. Mais ici, on fait les choses correctement, alors j'ai décidé de constituer notre propre base de données de zéro. J'ai commencé par identifier les noms des stations sur ma propre Pasmo, puis j'ai demandé autour de moi dans le quartier et j'ai mis la main sur une Suica. Toutes deux renseignaient sur les endroits où le voisin et moi avions voyagé. À partir de là, je me suis mis au travail sur la base de données. Malheureusement, pour deux touristes, la collecte était maigre. J'ai fait ici une entorse à ma règle « aucune requête réseau », en ajoutant une fonction « soumettre les vôtres » pour ceux qui souhaiteraient apporter leurs propres informations sur les noms de stations. Avec le temps, j'espère que nous constituerons une véritable table de correspondance open source, capable de rivaliser avec les amateurs qui (à juste titre) interdisent par licence à d'autres d'utiliser leur travail.

Variété et prise en charge des puces

Hex NFC fait un effort considérable pour prendre en charge chaque puce qu'Apple vous laisse scanner. Je n'ai pas pu me procurer chaque type de puce en silicium réel, mais j'ai obtenu une couverture suffisante pour extrapoler l'architecture des puces manquantes à partir des fiches techniques et de modèles proches. Par exemple, je n'ai jamais pu obtenir de NTAG215, mais son architecture est assez proche de celles du NTAG213 et du NTAG216 pour que j'aie pu construire un émulateur qui devrait la couvrir entièrement.

Voici les puces que j'ai entièrement testées sur silicium.

  • NTAG 210µ
  • NTAG213
  • NTAG216
  • NTAG424 DNA
  • Ultralight EV1 128b
  • Ultralight C
  • ICODE SLIX
  • ICODE SLIX2
  • DESFire EV3
  • FeliCa (Suica et Pasmo)

Je sais aussi que la MIFARE Classic fonctionne ; c'est simplement Apple qui ne la scanne pas.

Vous imaginez bien qu'avec la lecture, l'écriture, le chiffrement, le verrouillage permanent, les tentatives de mot de passe limitées, l'effacement et le vidage de blocs de données, et plus encore, il a fallu une énorme quantité de tests sur banc. Vous seriez étonné du nombre de petites subtilités que les fiches techniques ont omises et que les émulateurs ont dû intégrer. Je suis en fait assez convaincu, à ce stade, que les émulateurs de Hex NFC sont les meilleures reproductions du silicium réel qu'on puisse trouver sur Internet.

Prise en charge des enregistrements NDEF

En plus de tout cela, j'ai intégré tous les types d'enregistrement utiles qui me venaient à l'esprit. En voici la liste :

Texte, liens URL, liens d'application Android/iOS, identifiants Wi-Fi, contacts, e-mail, téléphone, SMS, FaceTime, cartes, transfert Bluetooth, adresses de cryptomonnaies, Raccourcis, données à modèle et octets bruts, plus les profils sociaux de 22 plateformes et la recherche sur sept moteurs.

Si quelqu'un a des recommandations ou des demandes de prise en charge supplémentaire, [email protected] est ouvert.

Le chef-d'œuvre qui en résulte

Ce que nous avons obtenu est, j'en suis certain, l'application NFC la plus capable et la mieux conçue sur iOS. Elle fournit des outils de qualité professionnelle, dont l'écriture de tags en masse, un affichage supérieur des informations et des données, l'enregistrement de modèles et de préréglages de données, et une console de commandes avancée pour les utilisateurs chevronnés. Elle est solide, gère bien les mauvaises lectures, et peut servir à formater des puces sorties d'usine, et à réparer des puces cassées dans certains cas.

Transparence, et pourquoi elle est gratuite

Alors, si elle est si bonne, pourquoi ne pas la vendre ? J'ai passé des centaines d'heures à y travailler, alors qu'on m'a généralement payé environ 100 $AU de l'heure pour mon travail par le passé. En théorie, c'est plus de 30 000 $AU investis là-dedans, si l'on compte ainsi. Ne devrais-je pas récupérer ma mise ? Vous avez peut-être même remarqué qu'elle est sous licence BSL 1.1 (Business Source License), c'est-à-dire à code disponible, et qu'elle passera automatiquement en open source au bout de quelques années.

Eh bien, j'ai des projets plus ambitieux. Hex Pro est aujourd'hui une start-up, ce qui veut dire que je n'ai ni réputation établie ni base d'utilisateurs. Mon espoir, c'est que Hex NFC décolle et devienne un outil populaire, un vrai concurrent des applications NFC les plus installées. Je ne collerai jamais de publicité tierce dans aucune de mes applications. Je ne le ferai pas, par principe. Mais quand je sortirai d'autres projets, j'aimerais placer une bannière de promotion croisée en bas de la page d'accueil. Rien d'envahissant, mais assez pour mettre mes autres travaux sous les yeux de ceux qui apprécient la qualité de Hex NFC et s'intéressent à d'autres applications de qualité.

Mon objectif premier, au-delà d'offrir au monde un logiciel qui manquait cruellement, est donc de bâtir la réputation de Hex Pro, et de faire la promotion croisée d'applications qui, elles, rapportent de l'argent.


J'espère que les utilisateurs soutiendront cette entreprise, et j'ai hâte de voir les gens profiter de Hex NFC.

Je vous laisse en juger : je vous présente Hex NFC.