ID TECH
Contact
Tous les articles techniques

Article technique

Outils pour l'intégration de terminaux de paiement : l'outil Chiffrement/Déchiffrement

ID TECH met à disposition un ensemble d'excellents utilitaires gratuits à l'intention de toute personne impliquée dans le développement d'applications de paiement utilisant nos produits. Dans de récents articles, j'ai présenté Parsomatic, notre parseur de données gratuit (disponible sous forme de formulaire web), ainsi qu'UDemo, l'application de test du SDK universel compatible avec l'ensemble de nos produits non Legacy (développée en C# pour Windows). Il serait dommage de ne pas vous inviter également à essayer notre outil Chiffrement/Déchiffrement, que vous pouvez ouvrir dans votre navigateur en cliquant sur ce lien.

L'outil Chiffrement/Déchiffrement est une application HTML autonome et puissante, tenant en une seule page, avec une implémentation JavaScript native du chiffrement AES, du Triple DES, de la dérivation de clés DUKPT, du hachage SHA, de l'HMAC, et bien plus encore. Toute la logique est contenue dans une page unique (sans aucun composant côté serveur), ce qui vous permet de télécharger le fichier HTML et d'en examiner le fonctionnement directement dans votre navigateur (par exemple, grâce aux excellents outils de développement de Chrome).

Comme vous pouvez le constater sur la capture d'écran ci-dessus, le bouton supérieur de l'outil Chiffrement/Déchiffrement affiche un menu déroulant présentant certaines des fonctionnalités disponibles. Une demande fréquente de nos clients est : « Comment puis-je déchiffrer les données de piste provenant de mon lecteur ? » (en référence aux informations de piste de carte de crédit pouvant figurer dans des données MagStripe ou dans un tag EMV). Ces données sont généralement chiffrées soit avec AES, soit avec le Triple DES (bien que ID TECH prenne également en charge d'autres algorithmes). Le déchiffrement de ces données peut s'avérer quelque peu délicat, non pas en raison de l'opération de déchiffrement elle-même, mais en raison de la manière dont les clés sont générées et utilisées.

Dans la plupart des scénarios de paiement par carte dans le secteur, le lecteur chiffre les données sensibles de la carte à l'aide d'une clé à usage unique propre à chaque transaction. Il s'agit du schéma appelé DUKPT . Dans le cadre de DUKPT (Derived Unique Key Per Transaction), une nouvelle clé est dérivée pour chaque transaction, de sorte qu'aucune clé ne puisse être utilisée deux fois (empêchant ainsi les attaques par rejeu). Le lecteur est initialisé avec une clé unique de 128 bits, puis, à chaque lecture de carte, un compteur s'incrémente. Ce compteur est intégré dans une valeur appelée Numéro de Série de Clé (KSN). Il convient de noter que le KSN lui-même est public. (Il sera transmis, accompagné des données chiffrées, à la partie chargée du déchiffrement, dans un scénario de déchiffrement réel.) Au moment de la transaction, le KSN est combiné, via un algorithme spécifique, avec la clé de chiffrement d'origine du lecteur, de manière à dériver une nouvelle clé unique (en utilisant des fonctions de hachage à sens unique, de sorte que si une clé particulière venait à être compromise, elle ne pourrait pas servir à calculer d'autres clés). L'algorithme en question est défini par la norme ANSI X.9-24. Il s'agit d'un mécanisme de gestion de clés symétriques particulièrement ingénieux, mais également assez complexe à mettre en œuvre. C'est pourquoi nous l'avons implémenté pour vous. (Remarque : le programme UDemo mentionné dans mon précédent article intègre également une fonctionnalité de déchiffrement capable d'effectuer les opérations DUKPT, bien qu'il ne soit pas fourni avec le code source.)

Pour déchiffrer des données de piste chiffrées, vous avez besoin du KSN de la transaction, d'une BDK et des données chiffrées. À l'aide de l'outil Encrypt/Decrypt, vous sélectionnez « Chiffrer ou déchiffrer des données » comme illustré dans la capture d'écran ci-dessus, puis vous cliquez sur le petit bouton Dériver . . . qui apparaît. Une petite boîte de dialogue s'ouvre alors, dans laquelle vous saisissez le KSN (dix octets hexadécimaux) ainsi qu'une Clé de Dérivation de Base (BDK) de 16 octets (représentant la clé d'origine ayant servi à créer la Clé de Chiffrement de PIN Initiale, ou IPEK, injectée dans le lecteur à sa fabrication). À des fins de test et de développement, la plupart des utilisateurs recourent à la clé de test standard ANSI (dont la valeur est 0123456789ABCDEFFEDCBA9876543210) comme BDK. Cette valeur est la BDK par défaut dans l'outil Encrypt/Decrypt (bien qu'elle puisse être facilement remplacée).

Après avoir saisi un KSN de 10 octets (en octets hexadécimaux, avec ou sans espaces), vous pouvez sélectionner la variante de clé que vous souhaitez générer (PIN, Données ou MAC), puis cliquer sur le bouton Dériver la clé . Une clé de 16 octets sera calculée (et s'affichera sur l'écran principal). Si vous souhaitez reproduire l'exemple, vous pouvez saisir un KSN de 62 99 49 01 19 00 00 00 00 02 (et accepter le BDK par défaut), puis cliquer sur Dériver la clé et vérifier que vous obtenez bien une valeur de clé de données dérivée de 1A994C3E09D9ACEF3EA9BD4381EFA334.

Avec la clé ainsi obtenue, il est possible de déchiffrer un bloc de données brutes :

DA 7F 2A 52 BD 3F 6D D8 B9 6C 50 FC 39 C7 E6 AF 22 F0 6E D1 F0 33 BE 0F B2 3D 6B D3 3D C5 A1 F8 08 51 2F 7A E1 8D 47 A6 0C C3 F4 55 9B 1B 09 35 63 BE 7E 07 45 90 72 AB F8 FA AB 53 38 C6 CC 88 15 FF 87 79 7A E3 A7 BE

Comme illustré ci-dessous dans la section Sortie, les données déchiffrées commencent par « %B42 » (remarquez l'info-bulle, qui affiche une lecture ASCII des données déchiffrées) et contiennent les données de carte d'un certain M. George W. Bush, Jr. :

Si même un seul bit de la clé avait été incorrect, nous aurions obtenu des données incompréhensibles lors du déchiffrement. (Essayez par vous-même : exécutez cet exemple dans l'outil et inversez aléatoirement un bit dans la clé.)

Il ne s'agit là que d'un aperçu de ce que l'outil de chiffrement/déchiffrement est capable de faire. Pour en savoir plus sur le fonctionnement du DUKPT (et sur la manière de déchiffrer les données de carte de crédit), consultez mon précédent article en deux parties sur le sujet, en commençant ici.

Vous avez des questions sur l'injection de clés ? Le chiffrement ? Le MSR ou EMV ? Contactez nos experts. Appelez-nous à tout moment au 1-800-984-1010.