ID TECH
Contact
Tous les articles techniques

Article technique

Outils pour l'intégration de dispositifs de paiement : outil de chiffrement/déchiffrement

ID TECH met à disposition un ensemble d'excellents utilitaires gratuits destinés à 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 outil gratuit d'analyse de données (sous forme de formulaire web), ainsi qu'UDemo, l'application de test de l'Universal SDK 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 Encrypt/Decrypt, que vous pouvez charger dans votre navigateur en cliquant sur ce lien.

L'outil Encrypt/Decrypt est une puissante application HTML monopage autonome, dotée d'une implémentation JavaScript native du chiffrement AES, du Triple DES, de la dérivation de clés DUKPT, du hachage SHA, du HMAC, et bien plus encore. Toute la logique est contenue dans une seule page (aucun traitement côté serveur), ce qui signifie que vous pouvez télécharger le fichier HTML et inspecter la logique directement dans votre navigateur (en utilisant, par exemple, les excellents outils de développement de Chrome).

Comme vous pouvez le constater sur la capture d'écran ci-dessus, le bouton principal de l'outil Encrypt/Decrypt affiche un menu déroulant présentant certaines des fonctionnalités disponibles. Une question qui nous est fréquemment posée par 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 faire partie d'un tag EMV). Ces données sont généralement chiffrées soit en AES, soit en Triple DES (bien que ID TECH prenne également en charge d'autres algorithmes). Le déchiffrement 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 grande majorité 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 dit DUKPT . Dans le cadre du 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 (prévenant ainsi les attaques par rejeu). Le lecteur est initialisé avec une clé unique de 128 bits ; ensuite, à chaque lecture de carte, un compteur s'incrémente. Ce compteur est intégré dans une valeur appelée le 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é du lecteur original clé de chiffrement de manière à dériver une clé nouvelle (à l'aide de hachages unidirectionnels, de sorte que si une clé particulière venait à être volée, elle ne pourrait pas être utilisée pour calculer d'autres clés). L'algorithme en question est défini par la norme ANSI X.9-24. Il s'agit d'un système de gestion de clés symétriques particulièrement ingénieux, mais dont la mise en œuvre peut s'avérer délicate. C'est pourquoi nous l'avons fait pour vous. (Remarque : le programme UDemo mentionné dans mon précédent article intègre également une fonction de déchiffrement capable d'exécuter la logique 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 correspondant à la transaction, d'un BDK, ainsi que des données chiffrées. À l'aide de l'outil Encrypt/Decrypt, sélectionnez « Chiffrer ou déchiffrer des données » comme illustré dans la capture d'écran ci-dessus, puis 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 utilisée pour créer la clé de chiffrement PIN initiale, ou IPEK, injectée dans le lecteur lors de sa fabrication). À des fins de test et de développement, la plupart des utilisateurs ont recours à la clé de test standard ANSI (dont la valeur est 0123456789ABCDEFFEDCBA9876543210) en tant que BDK. Cette valeur constitue la valeur 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, Data ou MAC), puis cliquer sur le bouton Dériver la clé Une clé de 16 octets sera calculée (et s'affichera dans l'écran principal). Si vous souhaitez reproduire cette opération chez vous, vous pouvez saisir un KSN de 62 99 49 01 19 00 00 00 00 02 (et conserver le BDK par défaut), puis cliquer sur Dériver la clé et vérifiez que vous avez obtenu 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 » (notez l'infobulle, 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-le : exécutez vous-même cet exemple dans l'outil et inversez aléatoirement un bit dans la clé.)

Ce n'est là qu'un aperçu de ce que l'outil Chiffrer/Déchiffrer peut accomplir. Pour en savoir plus sur le fonctionnement de DUKPT (et sur la façon 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 ? MSR ou EMV ? Contactez nos experts. Appelez-nous à tout moment au 1-800-984-1010.