Article technique
Communiquer avec un lecteur de carte de crédit via RS-232 et Google Chrome
L'un des grands avantages des lecteurs de cartes ID TECH, c'est la facilité déconcertante avec laquelle on peut communiquer avec eux. Saviez-vous, par exemple, qu'il est possible de dialoguer avec la plupart de nos périphériques de paiement directement depuis votre navigateur Google Chrome ? Voyons comment procéder, car il est extrêmement pratique de pouvoir interagir avec des appareils série et/ou USB en utilisant uniquement du JavaScript et du HTML.
Dans cet article, je vais me concentrer sur la version RS-232 du lecteur de cartes SecuRED de ID TECH, conforme SRED lecteur de cartes SecuRED (illustré ci-dessous), qui est un lecteur de bande magnétique (MSR) à chiffrement permanent, capable de communiquer via USB-HID, USB-KB ou RS-232. Dans de prochains articles, nous aborderons en détail la connexion aux lecteurs ID TECH via USB-HID sous Chrome. Aujourd'hui, nous nous concentrons sur le RS-232, qui est légèrement plus simple que l'USB, tout en illustrant bon nombre des techniques que nous utiliserons ultérieurement pour les communications USB-HID.
Si vous vous dites « Mais mon ordinateur n'a même pas de port RS-232 », pas de panique. Vous pouvez connecter un appareil série à votre ordinateur à l'aide d'un câble adaptateur série vers USB (de marque Prolific ou d'un autre fabricant). Les données série conserveront leur apparence de données série, même si elles transitent par le port USB.
Le navigateur Chrome de Google offre une connectivité RS-232 via l' API chrome.serial.*, mais notez bien que cette API n'est pas accessible aux pages web ordinaires. Pour utiliser l'API série, vous devez implémenter une application Chrome et l'installer via le mécanisme des extensions Chrome (ce qui est tout à fait simple). Voyons ce que cela implique concrètement.
Pour créer une application Chrome, il suffit de placer une demi-douzaine de petits fichiers dans un dossier. L'application complète et prête à l'emploi pour l'exemple d'aujourd'hui (comprenant les 6 fichiers nécessaires) est disponible ici :
Téléchargez le fichier Zip sur votre disque local et décompressez-le dans son propre dossier. Il devrait contenir les fichiers suivants :
Je vous expliquerai comment installer l'application en tant qu'extension Chrome dans un instant. Mais pour l'heure, examinons rapidement les fichiers qui composent l'application.
La background.js est un fichier texte contenant le texte suivant :
Ce fichier indique à Chrome qu'il doit utiliser un fichier appelé window.html pour créer la fenêtre principale de l'application (avec une largeur de 390 pixels et une hauteur de 438 pixels).
Les deux fichiers suivants sont simplement de petites icônes PNG.
La manifest.json est un fichier texte contenant ce qui suit :
Le manifeste est un fichier important, car les applications Chrome s'exécutent dans un environnement de sécurité spécifique dans lequel, par exemple, les autorisations doivent être définies explicitement et à l'avance. Le manifeste indique à Chrome quelles autorisations sont nécessaires, quelles icônes doivent être associées à l'application, ainsi que d'autres informations essentielles.
La script.js (qui sera référencé depuis window.html) contient l'ensemble du code JavaScript qui assure le fonctionnement de notre application. Il se compose du code suivant :
D'accord. Cela ne semble peut-être pas être un fichier de petite taille, mais en réalité, nous parlons de moins de 200 lignes de code, ce qui (dans l'ensemble) représente une quantité de code véritablement négligeable.
Enfin, il y a window.html, qui est le fichier contenant le balisage HTML de notre application (l'interface utilisateur de l'application). Il se compose du balisage suivant :
Notez qu'il n'y a aucun JavaScript intégré dans la page. L'intégralité de la logique de l'application se trouve dans un fichier externe (le fichier script.js ). Cela permet une séparation très nette entre la logique du programme et le balisage de présentation, ce qui facilite grandement la maintenance du code et le débogage.
Plutôt que de parcourir le code (qui est assez explicite), voyons comment l'installer et l'exécuter.
Lancez votre navigateur Chrome, si ce n'est pas déjà fait, et accédez à votre page chrome://extensions . Dans le coin supérieur droit, repérez et cochez la case Developer Mode. Voir ci-dessous.
Une fois la case Mode développeur cochée, et uniquement dans ce cas, le bouton Charger les extensions non empaquetées… (à gauche) apparaîtra. Cliquez sur ce bouton. Naviguez jusqu'au dossier contenant vos 6 petits fichiers. Désignez simplement ce dossier comme dossier cible et cliquez sur OK. Vous reviendrez à la page chrome://extensions et l'application apparaîtra dans la liste des extensions disponibles. Repérez l'application et cliquez sur le lien Lancer qui lui est associé (examinez attentivement la capture d'écran ci-dessus). La fenêtre principale de l'application s'affichera alors :
Voici à quoi ressemblera la fenêtre si vous avez déjà un lecteur de carte SecuRED (ou tout autre périphérique série !) branché sur votre port COM3. Notez que le JavaScript dans script.js (voir ci-dessus) est codé en dur pour utiliser « COM3 » comme nom de port. Si votre ordinateur utilise un port série différent, modifiez manuellement le code pour indiquer le nom correct. (Vous pouvez le trouver dans « Périphériques et imprimantes » sous Windows. Sous Linux, votre port série peut avoir un nom tel que /dev/tty0 ou /dev/ttyUSB0 ou /dev/tty1.) Et oui, cette extension fonctionne sous Windows, Linux, Mac OS X ou ChromeOS, à condition que Chrome soit installé.
Si vous êtes connecté avec succès à votre périphérique série et que ce périphérique est le lecteur de carte SecuRED d'ID TECH, allez-y et glissez une carte de crédit dans le lecteur. Les données de la carte s'afficheront automatiquement dans la zone de texte supérieure de la fenêtre de l'application (notez les valeurs hexadécimales dans la capture d'écran ci-dessous) :
Bien entendu, l'analyse de ces données nécessite une bonne compréhension du format MSR chiffré amélioré d'ID TECH. (De même, le déchiffrementdes données requiert une connaissance de DUKPT, de la dérivation de clés, d'AES et/ou de TDES.) Nous aborderons ce sujet dans un prochain article. Pour l'instant, il suffit de noter que l'utilitaire de test série vous permet de capturer des données de carte de crédit instantanément et automatiquement depuis Google Chrome, sur toute plateforme où Google Chrome est disponible. Vous pouvez également utiliser les excellents outils de débogage intégrés de Chrome pour déboguer votre code, qui n'est que du JavaScript.
En parcourant le code pas à pas, vous constaterez (tout en bas du code) que pour recevoir des données série, nous transmettons une fonction de rappel de réception à chrome.serial.onReceive.addListener(). La fonction receive(), à son tour, appelle une fonction collect() qui accumule les octets reçus dans un tampon. Le contenu du tampon est affiché (sous forme de texte) dans l'interface de l'application après un délai WAIT_TIME de 500 millisecondes. Autrement dit, lorsque des données arrivent dans l'application depuis le lecteur de carte, un minuteur se déclenche et les données (qui arrivent en petits lots à quelques millisecondes d'intervalle) s'accumulent dans un tampon ; à l'expiration du minuteur (après 500 ms), le tampon est vidé vers l'écran (et le processus de mise en tampon recommence si des données continuent d'arriver). Cela permet de regrouper une quantité raisonnable de données avant de les afficher à l'écran. (Sans cela, on risquerait d'écrire de nombreux paquets très courts à l'écran à quelques millisecondes d'intervalle.)
Les seuls autres éléments de l'application qui pourraient ne pas être évidents d'emblée sont la petite « fenêtre de commande » juste au-dessus des boutons Envoyer et Effacer (voir la capture d'écran ci-dessus), ainsi que le menu déroulant (« Sélectionner une commande et appuyer sur Envoyer »). La zone de texte située au-dessus du bouton Envoyer permet de saisir manuellement des commandes firmware spécifiques que l'appareil cible (le SecuRED d'ID TECH, dans ce cas) est capable d'interpréter. Le menu déroulant contient quelques commandes préchargées (comme 02 53 11 01 33 03 71, qui fait émettre un bip au SecuRED) prêtes à l'emploi. Si vous connaissez d'autres commandes hexadécimales (peut-être parce que vous avez la documentation de l'appareil sous la main ?), vous pouvez saisir des commandes pour contrôler ou configurer l'appareil.
Même si vous n'utilisez pas le menu déroulant propre au SecuRED, le Serial Test Utility est un outil pratique pour intercepter n'importe quelle connexion série depuis votre navigateur Chrome. Il affiche toutes les données transitant par le port série, qu'elles proviennent ou non d'un lecteur de carte ID TECH.
J'espère que ce projet vous a plu. Dans un prochain article, nous verrons ce qu'il faut savoir pour communiquer avec un périphérique USB-HID à l'aide des API de connectivité de Chrome. C'est une compétence qui vaut vraiment la peine d'être maîtrisée !
