Article technique
Communiquer avec un lecteur de carte de crédit via RS-232 avec Google Chrome
L'un des 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 pouvoir interagir avec des appareils série et/ou USB en utilisant simplement du JavaScript et du HTML est extrêmement pratique.
Dans cet article, je vais me concentrer sur la version RS-232 du lecteur de cartes SecuRED conforme SRED de ID TECH lecteur de cartes SecuRED (illustré ci-dessous), qui est un lecteur de piste magnétique (MSR) à chiffrement permanent pouvant 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 (dans Chrome). Pour aujourd'hui, nous nous concentrerons sur le RS-232, qui est légèrement plus simple que l'USB, tout en illustrant bon nombre des techniques que nous utiliserons par la suite 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-USB (de marque Prolific ou d'un autre fabricant). Les données série resteront identiques à des 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 n'est pas du tout difficile). Voyons ce que cela implique.
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 du jour (incluant 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 doit 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.
Le 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.
Le manifest.json est un fichier texte contenant les éléments suivants :
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 les autorisations requises, les icônes à associer à l'application, ainsi que d'autres informations essentielles.
Le script.js (qui sera référencé depuis window.html) contient l'intégralité du code JavaScript qui assure le fonctionnement de notre application. Il comprend le code suivant :
D'accord. Cela peut ne pas sembler représenter un fichier volumineux, mais en réalité, il s'agit de moins de 200 lignes de code, ce qui (toutes proportions gardées) constitue une quantité de code tout à fait 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 comprend le balisage suivant :
Remarquez qu'il n'y a aucun JavaScript intégré dans la page. La totalité de la logique de l'application se trouve dans un fichier externe (le fichier script.js ). Cela permet une séparation très claire 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 ligne par ligne (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, recherchez et cochez la case Mode développeur. Voir ci-dessous.
Une fois la case Mode développeur cochée, et uniquement dans ce cas, le bouton Charger une extension non empaquetée… (à 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 retournerez sur 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é (regardez 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 du type /dev/tty0 ou de l' /dev/ttyUSB0 ou de l' /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, passez une carte de crédit dans la fente. 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'interprétation de ces données nécessite une connaissance du format MSR chiffré amélioré d'ID TECH (Enhanced Encrypted MSR Format). (De même, le déchiffrementdes données requiert une compréhension 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 Serial Test Utility vous permet de capturer instantanément et automatiquement des données de carte de crédit depuis Google Chrome, sur toute plateforme où Google Chrome est disponible. Vous pouvez également utiliser les excellents outils de débogage intégrés à 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 passons une fonction de rappel de réception à chrome.serial.onReceive.addListener(). La fonction receive() appelle à son tour une fonction collect() qui accumule les octets reçus dans un tampon. Ce tampon est écrit (sous forme de texte) dans l'interface de l'application après un délai d'attente (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) sont accumulées dans un tampon ; lorsque le minuteur expire (après 500 ms), le tampon est vidé vers l'écran (et le processus de mise en tampon reprend si des données continuent d'arriver). Cela permet de regrouper une quantité raisonnable de données avant de les afficher. (Sans cela, on risquerait d'écrire de nombreux paquets très courts à l'écran à des intervalles de quelques millisecondes.)
Les seules autres parties de l'application qui pourraient ne pas être immédiatement évidentes sont la petite "fenêtre de commande" juste au-dessus des boutons Send et Clear (voir la capture d'écran ci-dessus), ainsi que le menu déroulant ("Select a command and hit Send"). La petite zone de texte au-dessus du bouton Send est un espace où vous pouvez saisir manuellement des commandes firmware spécifiques auxquelles le périphérique cible (le SecuRED d'ID TECH, dans ce cas) sait répondre. 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 (parce que vous avez peut-être la documentation de l'appareil sous les yeux), vous pouvez saisir des commandes pour contrôler ou configurer le périphérique.
Même si vous n'utilisez pas le contrôle de menu déroulant spécifique à SecuRED, le Serial Test Utility est un outil pratique pour surveiller 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 comment 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 !
