lundi 18 juillet 2016

Edito du 18 juillet 2016

Il y a une quinzaine d'années, le monde de la carte bancaire à puce tremblait : un jeune ingénieur nommé Serge Humpich craquait la clé secrète de la carte bleue et était en mesure de créer des fausses cartes bleues dites « yes card » (car elles répondent toujours oui quand on tape un code à 4 chiffres). Serge Humpich a depuis payé cher son exploit technologique, qu'il raconte dans un livre qui devient rare mais qu'il est toujours possible de trouver à la vente : « Le cerveau bleu ».

A cette époque, le sujet des cartes à puce m'a assez intéressé pour que je m'y mette de manière sérieuse. J'ai appris à programmer une carte wafer gold, j'ai écrit en C un assembleur/desassembleur pour le PIC16F84, j'ai créé de toute pièce un programmateur de wafer gold sur port parallèle, j'ai appris à naviguer dans ma carte bancaire, etc. Bien sûr, rien d'illégal, juste pour la compréhension technique du fonctionnement des cartes à puce.

Puis les aléas de la vie m'ont éloigné pendant presque 15 ans de ces objets merveilleux que sont les cartes à puce à micro-processeurs. Je m'y suis remis récemment, et comme je tenais un blog généraliste qui ne marchait pas, l'idée m'est venue de scratcher mon blog et de créer celui-ci sur lequel je vais raconter mes expériences, succès (j'espère) et probablement échecs (sûrement aussi) dans ce domaine.

Mon but est à la fois de me faire une culture générale (et la partager ici) sur les cartes à puce les plus courantes (j'en ai pas moins de 6 types différentes dans mon porte-feuille), mais aussi de développer ma propre carte à puce.

En ce qui concerne l'aspect culture générale, je me suis vite rendu compte que, contrairement à il y a 15 ans, il n'y a aujourd'hui presque plus de sites internet traitant du sujet (c'est aussi d'ailleurs ce qui m'a donné l'idée de créer ce site). Du coup il est devenu pas évident de trouver de l'information.

Mais l'inverse est aussi vrai : si le système des cartes bancaires a abandonné le standard B0 depuis l'affaire Humpich pour adopter le standard EMV, la documentation sur ce standard est pléthorique (plus de 800 pages de spécifications accessibles au grand public à lire pour comprendre comment fonctionne la carte) et donc il est difficile de trouver une synthèse bien faite permettant d'aller à l'essentiel.

Concernant le développement de ma propre carte à puce, mon projet numéro un sera de réussir à créer un système de chiffrement/déchiffrement symétrique, utilisable sur PC, et réalisé entièrement par une carte à puce programmée par mes soins. En clair : l'utilisateur a une carte à puce connectée à son PC, et c'est elle et elle seule qui détient la clé de chiffrement/déchiffrement (rien sur le PC), et c'est elle qui chiffre/déchiffre les données qu'on lui envoie. La carte sera bien sûr protégée par un code PIN à 3 essais.

Pour réaliser ce projet perso, je n'envisage pas d'utiliser de Java card, basic card, ou autre carte à puce programmable via un langage de haut niveau. Il y a 15 ans je programmais ma wafer gold card directement en assembleur, et la méthode m'avait particulièrement bien convenu. Je compte donc réitérer cette méthode, mais en partant plutôt sur une carte Silvercard (j'expliquerai sur le blog ce que c'est et comment ça marche) qui est aussi simple à programmer mais dispose de plus de mémoire, ce qui permet d'envisager des projets plus ambitieux.

Enfin, sur le blog j'expliquerai aussi les aspects outillages à avoir ou à fabriquer pour bidouiller avec les cartes à puce. La première chose à avoir est évidemment un lecteur de cartes à puce, de manière à pouvoir discuter avec des cartes (courantes ou celles qu'on programme soit même). Mais dès qu'on veut programmer ses propres cartes, il faut à minima un programmateur de cartes (dispositif permettant d'aller injecter dans la carte à puce un programme qu'on vient d'écrire), ainsi qu'un assembleur et un desassembleur.

Dernier point : je travaille sous Linux (depuis 1995). Le système d'exploitation Windows ne m'intéresse pas le moins du monde, aussi, sauf à y être contraint parce que je n'ai pas de solution sous Linux sur un sujet donné, j'éviterai comme la peste cet OS.

Au moment où je débute ce blog, j'en suis au stade suivant :

- J'ai acheté un lecteur de cartes à puce Gemalto ID Bridge CT30 USB, qui marche parfaitement sous Linux (reconnu nativement par PCSC Linux)
- J'ai acheté une carte programmable Silvercard (10€ avec frais de port sur Priceminister)
- J'ai commandé sur Internet en Chine (sur AliExpress) un programmateur de cartes à puce InfinityUSB Unlimited (vendu 20€ en Chine contre 90€ en France). Malheureusement, vu d'où il vient, je ne l'aurai probablement pas avant début août, et comme je pars en vacances en août, je ne pourrai probablement pas jouer avec avant fin août.
- J'ai programmé un desassembeur de PIC16F876 (la puce qui se trouve dans la Silvercard) en C (419 lignes de C seulement, j'en suis assez fier)
- J'ai récupéré, avec difficulté, pas mal de doc sur les cartes à puce

Publié le 18 juillet 2016 par Alan Cartman

Aucun commentaire: