ID TECH
Contact
Tous les articles techniques

Article technique

Anatomie d'une commande MAC

Nombre de clients d'ID TECH s'intéressent au chiffrement point à point (P2PE)et, dans le cadre de leur démarche pour se conformer aux exigences strictes de PCI en matière de P2PE, ils envisagent souvent de recourir à des terminaux de paiement SRED (Secure Reading and Exchange of Data). Ces appareils non seulement chiffrent les données au point de capture (comme tous les appareils d'ID TECH en sont capables), mais intègrent également la détection des tentatives d'altération, l'effacement automatique des données en cas d'altération, ainsi que d'autres fonctionnalités de sécurité spécialisées.

Parmi ces « autres fonctionnalités de sécurité spécialisées », l'une des plus importantes est ce que l'on appelle l'authentification MAC des commandes.

En cryptographie, un code d'authentification de message (MAC) est un code court permettant au destinataire d'un message d'en vérifier l'authenticité — autrement dit, de confirmer que le message provient bien d'un expéditeur de confiance. La valeur MAC protège à la fois l'intégrité des données du message et son authenticité, en associant le message à un secret partagé entre l'expéditeur et le destinataire. Le message est transmis en clair, mais également accompagné du couple message-MAC (qui contient le secret sous forme chiffrée). Toute personne disposant du secret peut déterminer si le message (et son contenu MAC associé) provient bien d'une autre partie ayant accès à ce même secret.

Dans les lecteurs de cartes SRED d'ID TECH, certaines commandes sensibles sont protégées par MAC, ce qui signifie que l'appareil n'exécutera la commande que si celle-ci est accompagnée d'un hachage MAC vérifiable (à l'aide d'une clé déjà stockée dans l'appareil). L'émetteur de la commande doit construire le hachage MAC en utilisant la même clé que celle employée par l'appareil pour le valider.

Un exemple permettra peut-être de mieux comprendre.

Supposons que vous souhaitiez régler la date et l'heure sur un lecteur de cartes Augusta S d'ID TECH, qui est un appareil SRED. La commande « Régler la date et l'heure » est considérée comme sensible, car une partie non autorisée ne devrait pas être en mesure d'antidater (ou de modifier de quelque autre façon) des transactions. (Parmi les autres commandes « sensibles » figurent, par exemple, celles permettant d'ajouter ou de supprimer des cartes d'une liste blanche, ou encore de modifier la liste de révocation de certificats de l'appareil.)

En règle générale, pour régler la date et l'heure d'un Augusta non SRED, on utilise la commande firmware 78 53 01 50, suivie de la longueur du payload (0x08), puis de la longueur date/heure (0x06), puis des six octets de date et d'heure au format AA MM JJ HH MM SS, suivi de la « longueur MAC », qui est zéro pour un appareil non SRED. Dans le cas de l'Augusta S, la formule est identique, à ceci près que la longueur du payload est 0x26 et que la « longueur MAC » est 0x1E, car 30 octets supplémentaires de « payload MAC » sont ajoutés à la fin.

Bien entendu, avec Augusta, l'intégralité de la commande doit être formatée selon le protocole NGA d'ID TECH, ce qui consiste à ajouter STX (0x02) et deux octets de longueur en little-endian en début de structure, puis LRC, checksum et ETX (0x03) en fin de structure. La version MAC finale de la commande complète se présente comme suit (les octets de commande sont surlignés en jaune) :

02 2B 00 78 53 01 50 26 06 17 11 10 09 15 00 1E 10 00 4E C7 DF CF 04 D3 3C C6 EC 6F 50 92 00 86 A1 DD 0A 00 62 99 49 00 00 00 00 00 00 02 EB F9 03

Décomposons la structure, section par section :

02 est STX.

2B 00 est la longueur (en little-endian) de l'ensemble de la structure, hors le trailer LRC/checksum/ETX.

78 53 01 50 est la commande firmware Set Date and Time.

26 (en hexadécimal) indique que 38 octets de payload suivent.

06 signifie que la date/heure est constituée de 6 octets, à savoir :

17 11 10 09 15 00 — 10 novembre 2017, 09:15:00.

1E signifie que 30 octets de charge utile MAC suivent.

10 00 est une valeur de longueur en little-endian de 16 (car tous les hachages MAC ID TECH font 16 octets).

4E C7 DF CF 04 D3 3C C6 EC 6F 50 92 00 86 A1 DD est le hachage MAC de 16 octets, ou « HMAC ».

0A 00 est une longueur en little-endian de 10, pour le KSN qui suit.

62 99 49 00 00 00 00 00 00 02 est le KSN MAC.

EB est la valeur de contrôle de redondance longitudinale (LRC).

F9 est la somme de contrôle sur 8 bits de tout ce qui se trouve entre 78 et le dernier octet du KSN (soit 02).

03 est l'ETX (fin de transmission).

La construction de cette commande ne présente aucune difficulté particulière. Les éléments qui ne s'expliquent pas d'eux-mêmes sont le KSN et le HMAC (le hachage lui-même).

MAC KSN

Le MAC KSN (numéro de série de clé) est une valeur que vous devez interroger directement auprès de l'appareil au moment où vous en avez besoin. Si vous connaissez la norme ANSI X9.24-1 (la norme DUKPT — Derived Unique Key Per Transaction), vous savez que le KSN est une valeur de 10 octets dont les 21 bits de poids faible constituent un compteur qui s'incrémente après chaque utilisation. Ce que vous n'avez peut-être pas réalisé, c'est que si un appareil contient plusieurs clés DUKPT (pour les données, le MAC et le PIN, par exemple), chacune disposera de son propre KSN dédié, qui s'incrémente de manière indépendante des autres. Le KSN est toutefois une valeur publique, et vous pouvez interroger le MAC KSN dans Augusta de ID TECH à l'aide de la commande (complète et formatée) 02090078463e040005010000000603, à tout moment.

Le KSN est important, car il entre dans le calcul de la clé MAC, laquelle est unique pour chaque utilisation (et donc à l'abri des attaques par rejeu). Pour plus d'informations sur les KSN et la dérivation des clés DUKPT, consultez mon précédent article en deux parties sur ce sujet.

DÉRIVATION HMAC

Voici maintenant la partie technique.

Le HMAC (voir la RFC 2104) est une méthode reconnue par l'industrie pour créer des hachages MAC à l'aide des éléments suivants :

  • — une clé à usage unique de 128 bits
  • — un contenu de message arbitraire
  • — le hachage SHA-256

La clé en question est dérivée dynamiquement à partir du MAC KSN et de l'IPEK du dispositif (elle-même dérivée d'un BDK), conformément aux règles DUKPT standard. Ces règles définissent une méthode spécifique de dérivation d'une clé MAC (par opposition à une clé de données ou à une clé PIN). L'ensemble est décrit dans mon précédent article en deux parties

Le redoutable hachage HMAC est calculé selon la recette à l'allure particulièrement intimidante suivante :

H( (K' ⊕ opad) ‖ H( (K' ⊕ ipad) ‖ m) )

Ne vous laissez pas décourager par cette formule. Elle est en réalité tout à fait compréhensible. La valeur K est la clé de 128 bits. K' (k-prime) désigne cette même clé, complétée par des zéros jusqu'à atteindre une longueur totale de 64 octets.

Le ipad (inner pad) est simplement la constante 36363636… répétée sur une longueur de 64 octets.

K' ⊕ ipad signifie combiner la clé complétée par des zéros avec la valeur ipad, en utilisant le OU exclusif (alias XOR), une opération arithmétique bit à bit chère aux passionnés d'informatique.

K' ⊕ ipad) ‖ m signifie concaténer le message (m) à la valeur obtenue ci-dessus. Il suffit d'ajouter les octets à la fin. (La longueur sera désormais supérieure à 64 octets. Ne vous en inquiétez pas.)

H( (K' ⊕ ipad) ‖ m) signifie appliquer votre fonction de hachage (dans ce cas, SHA-256) à l'ensemble de la valeur entre parenthèses.

Une fois cette étape terminée, vous ajouterez le résultat à K' ⊕ opad, où opad (the outer pad) est une constante constituée de 5C5C5C5C… répétée sur une longueur de 64 octets. Vous hacherez ensuite l'ensemble une nouvelle fois.

Si vous vous posez la question, les valeurs ipad et opad ont été choisies (par les auteurs originaux de cet algorithme) de manière arbitraire, mais de façon à maximiser la distance de Hamming (ou les différences bit à bit) entre les moitiés avant et arrière du hachage. Le hachage est effectué en deux moitiés imbriquées afin de prévenir diverses formes d'usurpation.

Pour vous aider à générer des valeurs HMAC, ID TECH a mis en ligne un formulaire HTML icidans lequel vous pouvez saisir des valeurs KSN et BDK (clé racine), dériver votre clé MAC et utiliser HMAC pour créer un hachage MAC de 32 octets (via SHA-256). N'hésitez pas à essayer l'option « Generate HMAC (with verbose output) » disponible dans le menu déroulant en haut du formulaire. Vous obtiendrez une trace verbeuse très pratique qui explique, sans ambiguïté, à quoi ressemble chaque élément du puzzle HMAC.

Si vous utilisez notre outil en ligne pour générer une clé MAC avec un KSN de 62 99 49 00 00 00 00 00 00 02 et une clé racine (BDK) de 0123456789ABCDEFFEDCBA9876543210, qui est la clé de test standard ANSI, votre clé MAC devrait avoir la valeur 3E4A480ACE8B239B9539E6053EAB03D9. Si vous appliquez l'algorithme HMAC à un payload de 78 53 01 50 26 06 17 11 10 09 15 00 1E 10 00 en utilisant cette clé, vous devriez obtenir un hachage HMAC de 32 octets, dont les 16 premiers octets sont 4EC7DFCF04D33CC6EC6F50920086A1DD. (ID TECH n'utilise que les 16 premiers octets.) Il s'agit de l'« empreinte » magique qui sera ajoutée à la commande Set Date and Time. Le lecteur de carte analysera les octets du payload en clair et utilisera son propre KSN ainsi que son code interne de dérivation de clé pour obtenir la même valeur HMAC que celle que vous avez incluse dans votre commande, vérifiant ainsi que la commande provient nécessairement d'une source qui connaît la BDK magique (0123456789ABCDEFFEDCBA9876543210) — et donc, d'une source de confiance.

Vous avez des questions sur DUKPT ? HMAC ? SRED ? P2PE ? Contactez nos experts. Nous sommes là pour vous aider :

Numéro gratuit
1-800-984-1010