Conclusion :
Le matériel utilisé pour l'expérience comprend donc
les banques n'ont exploité aucunes des sécurités de la puce :
Le code aurait dû servir à restreindre l'accès des secrets (la valeur d'authentification et l'identifiant composé du numéro de carte bancaire)
aux seuls titulaires du code secret,
mais ces secrets sont accessibles sans le code !
La puce peut faire des calculs cryptographiques complexes permettant de prouver qu'elle détient un secret sans le révéler,
ce qui permet d'éviter les attaques par clonage de carte ou le rejeu.
Cette possibilité de la puce n'a pas non plus été utilisée dans les cartes bancaires.
MATERIELS ET DOCUMENTS UTILISES POUR L'EXPERIENCE :
Pour les observations sur la carte bancaire, l'auteur de cette page a rassemblé les matériels suivants :
(note : le matériel réellement nécessaire est réduit)
| 1. Kit BasicCard |
Ce kit permet de programmer facilement des cartes à puce par exemple pour des projets d'identification, contrôle d'accès, porte-monnaie électronique,
conservation de codes secrets...
Son prix assez bas (650 francs), la facilité d'utilisation et la diversité des applications possibles le rend très attractifs. Les possibilités de programmation de ce kit n'ont pas été utilisées dans l'expérience décrite sur cette page : seul le lecteur cybermouse compris dans le kit a été utilisé Ce kit ne permet de programmer que des cartes asynchrones en mode T=1 (pour info, la carte bancaire est en mode T=0) Les cartes fournies supportent les algorithmes DES, triple DES, IDEA, courbes elliptiques, SHA-1 mais pas RSA (est annoncé pour mai 2001 des cartes programmables en T=0 ou T=1 supportant l'algorithme RSA). |
| 2. Applied Cryptography |
Livre sur les techniques de cryptographie, permet de comprendre l'algorithme RSA, mais il existe des livres plus simples.
Pour la carte bancaire, il n'y a pas besoin de ce gros livre puisque l'algorithme d'authentification est décrit dans cet article de 1988 publié par Louis Claude Guillou et Professeur Jean-Jacques Quisquater et Marc Davio (Philips) dans le numéro 43 des annales des télécommunications. |
| 3. Lecteur XiPuce de Xiring |
Ce lecteur de carte à puce de poche permet de lire le solde d'une télécarte, les informations d'une carte vitale ou l'historique d'une carte bancaire à puce.
Il sert ici pour vérifier et comparer les inscriptions dans l'historique des transactions entre ce qui est lu sur la puce à l'aide du lecteur Cybermouse. Accessoirement, il peut servir pour entrer un code bon après des manipulations hasardeuses (au bout de 3 code faux consécutifs, la carte est bloquée, si vous avez fait une fausse manipulation avec le lecteur cybermouse et craignez d'avoir présenté un code faux, vous pouvez rentrer la carte bancaire dans le lecteur XiPuce et entrer le bon code puis continuer vos expériences sans risquer de bloquer la carte. |
| 4. Livre PC et Cartes à Puce |
Ce livre écrit en 1995 par Patrick Gueulle aux éditions Dunod, collection ETSF décrit les cartes à puce, comment faire un lecteur de carte, comment émuler une carte à puce...
Pratiquement la moitié du livre est consacrée à la découverte de la carte bancaire.
Une disquette avec des programmes d'exploration de la carte bancaire et de consultation de l'historique des transactions est fourni.
Ces programmes sont un peu obsolètes (écrits en GWBasic)
mais les sources sont utiles.
Cette page a été principalement conçue à partir des informations glanées dans ce livre. Il est intéressant de posséder ce livre pour aller plus loin dans l'exploration de la carte bancaire sinon se référer aux indications contenues dans cette page. Notes : ce livre est réputé épuisé mais semble actuellement dispo (avec une autre couverture) sur amazon.fr. Cette page n'a été conçue par Patrick Gueulle mais par Laurent PELE |
| 5. Maple V édition Etudiant |
Ce logiciel de calcul mathématique grand public est disponible au prix de 500 francs environ à la Fnac.
Il permet de faire des calculs sur les grands nombres comme fait pour la vérification de carte bancaire (la carte bancaire ne fait pas de calcul RSA mais les terminaux de paiements en font). Voir la "petite feuille Maple" démontrant la révélation du secret de la carte bancaire |
| 6. Carte bancaire expirée |
Pour commencer l'exploration d'une carte bancaire à puce, une carte bancaire expirée a été utilisée, ce qui permet de prendre
moins de risque de griller une carte bancaire récente.
Ici une carte expirée en septembre 1998 a été utilisée. Seul problème : à cette époque, les puces n'étaient pas placées au même endroit : elles étaient plus situées sur le côté (la norme a évolué depuis). Comme le lecteur Cybermouse ne lit pas les puces situées à cet endroit, il a fallu découper la carte avec des ciseaux autour de la puce (cela détruit la piste magnétique située derrière), la RETOURNER (le côté de la puce qui était près du bord devient près du centre), puis l'insérer dans un support au bon emplacement. Le support utilisé ici est un carte plastique SIM ISO (de téléphone GSM) qui contenait une puce au format mini SIM. Pour fixer la puce au support, du ruban adhésif ("scotch") a été mis au dos de la carte. Ensuite il suffit d'insérer la carte dans le lecteur XiPuce pour voir si on arrive à la lire et si la puce a été mise à la bonne position. Cette manipulation n'est heureusement pas à faire avec les cartes bancaires actuelles. Note : vous ne devez utiliser que des cartes dont vous êtes le légitime porteur. |
| 7. Carte bancaire actuelle |
Prenez votre carte bancaire actuelle pour vérifier la persistance des failles de sécurité
Ici nous avons utilisé des cartes émises à partir de novembre 1999 Note : vous ne devez utiliser que des cartes dont vous êtes le légitime porteur. |

| Instruction (Hexa) | Description ordre |
| 0E | Effacement |
| 10 | Présentation de la clé banque (dite "CB") (en clair) |
| 20 | Présentation du code confidentiel (dit "CC") ou du code de déblocage de la carte (en clair) |
| 30 | Présentation de la clé d'ouverture (CO) (en clair) |
| 40 | Validation de lecture |
| 50 | Ecriture de verrou |
| 70 | Validation d'écriture |
| 80 | Certification avec 1er jeu secret |
| 82 | Certification avec 2ème jeu secret |
| 84 | Certification avec 3ème jeu secret |
| 86 | Certification avec 4ème jeu secret |
| 88 | Certification avec 5ème jeu secret |
| A0 | Recherche du premier mot vierge ou sur argument |
| A8 | Recherche du premier mot non vierge |
| B0 | Lecture d'octets |
| C0 | Lecture de résultat |
| D0 | Ecriture d'un mot |
| D2 | Changement code porteur |
| 0200h | Zone secrète (effacement intedit, lecture interdite, écriture interdite) |
| ADM | Zone d'accès (effacement intedit, lecture protégée, écriture interdite) |
| ADC | Zone confidentielle (effacement intedit, lecture protégée, écriture interdite) ou zone de travail n°2 (l'application définit les droits d'accès à cette zone) |
| ADT | Zone de travail n°1 (l'application définit les droits d'accès à cette zone) |
| ADL | Zone de lecture (effacement intedit, lecture libre, écriture interdite) |
| ADMAX-8h | Zone de fabrication (effacement intedit, lecture libre, écriture interdite sauf verrou) |
Note : il n'y a pas besoin d'installer le kit BasicCard pour faire la manipulation décrite dans cette page.
On introduit la puce de la carte bancaire dans le lecteur.
Dans le logiciel CardEasy, on choisit l'onglet "Commands", il n'y a pas besoin de changer le type de carte (le laisser à 0 -Auto Detect).
Maintenant on va pouvoir commencer à lire la puce.
Cela semble assez encourageant, cela marche, on arrive à envoyer des commandes à la carte et elle répond (fenêtre du bas de CardEasy),
et il faut moins de 5 minutes pour installer le lecteur de carte et le logiciel CardEasy, les 2 derniers octets sont 90 00, ce qui signifie que la commande ISO
s'est déroulée correctement.
On appuie sur le bouton "Exchange ADPU" pour envoyer la commande à la carte et on obtient le résultat suivant dans la fenêtre du bas.
La fenêtre du bas affiche
< BC B0 09 E0 00 20 ce qui correspond à la commande envoyée à la carte (selon la convention de CardEasy)
puis
> 9000 (SW1,SW2) c'est le statut de la réponse de la carte, 90 00 signifie qu'il n'y a pas d'erreur.
Enfin
> 3F E5 20 02 08 4D 00 94 15 0D 86 A4 D1 01 9F FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3F E5 correspond bien au type de la carte bancaire stocké en 09 E0 d'après le livre de Patrick Gueulle.
On a ainsi réussi à lire une partie de la carte (ici une partie de la zone de lecture et de la zone de fabrication)
Vous noterez que le 16 derniers octets renvoyés sont nuls, c'est parce que l'adresse 09 E0 est une adresse exprimée en quartets et
la dernière adresse lisible est 09FF, on ne peut pas lire après car il n'y a rien.
Il n'y a donc que 16 octets entre les adresses 09 E0 et 09 FF, or nous avons demandé à lire 32 octets
Comme la zone d'adresse de la carte bancaire commence en 0200,
il n'y a donc qu'un kilo-octets de stockage sur cette carte.
Les autres octets après 3F E5 (aux adresses à partir de 09 E4) sont expliqués dans le livre de Patrick Gueulle.
Lecture zone d'adressage en 09 C0 :
Sur les cartes Bull CP8, se trouve à partir de l'adresse 09 C0 le début de la zone d'adressage donnant les adresses de début de chacunes des zones de la carte, à savoir ADL, ADS, ADT, AD1, AD2, ADM.
Pour lire ces adresses, il faut répéter des manipulations au niveau des bits,
si cela vous gonfle,
passez au paragraphe suivant en vous contentant des résultats des recherches (cette étape n'est pas essentielle).
On appuie sur le bouton "Exchange ADPU" pour envoyer la commande à la carte et on obtient le résultat suivant dans la fenêtre du bas.
on lit ainsi sur cette carte en 09C8 : 23 9F 0A C3 0A C3 0A 57
11 premiers bits en 09C8 :
00100011100
on multiplie par 8 (soit ajout de 3 bits à 0) :
00100011100000
soit
00 1000 1110 0000
soit 0 8 E 0 en hexadécimal
on a donc ADL =08E0
C'est la même valeur que donne le livre de Patrick Gueulle.
| ADL | 08E0 |
| ADT | 02B0 |
| ADC | 02B0 |
| ADM | 0290 |
| AD2 | 0278 |
| ADS | 0230 |
| AD1 | 0210 |
La fenêtre du bas affiche donc les résultats suivants :
< BC B0 09 48 00 40
> 9000 (SW1,SW2)
> 2E 02 38 F1 30 04 97 XX 3X XX XX XX 3X XX XF FF 31 01 96 07 32 50 98 09 32 50 54 97 34 D5 22 0Y 3Y YY YY YY 3Y YY YY Y2 30 YY YY YY 3Y Y2 02 02 30 20 20 20 32 02 02 02 30 20 F0 20 1D 9F F5 16
On voit donc bien l'entête 2E 02 pour le prestataire 02 puis suit la taille du prestataire : 38h soit 56 octets.
ensuite suit F1 puis un quartet avec un "3" de redondance. il y a en fait des quartets de "3" de tels 3 de redondance tous les 8 quartets, c'est à dire tous les 4 octets,
il convient d'ignorer ces quartets avec des "3" pour analyser la chaine convenablement.
La chaine initiale
30 04 97 XX 3X XX XX XX 3X XX XF FF 31 01 96 07 32 50 98 09 32 50 54 97 34 D5 22 0Y 3Y YY YY YY 3Y YY YY Y2 30 YY YY YY 3Y Y2 02 02 30 20 20 20 32 02 02 02 30 20 F0 20 1D 9F F5 16
devient donc, après suppression des 3 de redondance tous les 4 octets :
0 04 97 XX X XX XX XX X XX XF FF 1 01 96 07 2 50 98 09 2 50 54 97 4 D5 22 0Y Y YY YY YY Y YY YY Y2 0 YY YY YY Y Y2 02 02 0 20 20 20 2 02 02 02 0 20 F0 20 1D 9F F5 16
Maintenant en groupant par octets :
00 49 7X XX XX XX XX XX XX FF F1 01 96 07 25 09 80 92 50 54 97 4D 52 20 YY YY YY YY YY YY YY 20 YY YY YY YY 20 20 20 20 20 20 20 20 20 20 20 F0 20 1D 9F F5 16
On reconnait, au début après l'octet 00, le numéro à 16 chiffres 497X XXXX XXXX XXXX gravé sur la carte bancaire, il est tout simplement codé sur la puce en BCD (Binaire codé décimal)
Ensuite suivent 3 "F", car le numéro de carte pourrait passer sur 19 caractères.
Puis il y a 3 quartets codés en BCD avec 101 correspondant au code usage (aussi appelé code service),
Suit ensuite la date de début de validité sur 2 octets codés en BCD : 96 07 soit juillet 1996, c'est la date d'émission de la carte
Suit ensuite 3 quartets codés en BCD 250 qui représente le code langue (250 = français)
Suit ensuite 2 octets codés en BCD correspondant à la date de fin de validité de la carte : 98 09, la date d'expiration indiquée sur la carte
est bien septembre 1998.
Suit ensuite 3 quartets codés en décimal codés binaire avec le code devise ici 250, cela correspond au code numérique ISO du franc français.
Suit ensuite 1 quartet 5 qui correspond à l'exposant. 5 signifie unité, 3 signifie centième. Cela indique comment sont stockés les montants dans l'historique des transactions.
Comme sur cette carte il y a un 5, les décimales ne sont pas stockées dans l'historique des transactions :
si un paiement de 133.33 francs est effectué, seul 133 apparaîtra dans l'historique des transactions.
Ensuite suit 3 quartets 497
Ensuite suit une longue chaine de 26 caractères ASCII stockée à partir de l'adresse 0980 qui vaut comme vu plus haut (après suppression des "3" de redondance tous les 8 quartets) :
4D 52 20 YY YY YY YY YY YY YY YY YY YY YY YY 20 20 20 20 20 20 20 20 20 20 20
C'est l'identité du porteur stockée en ASCII
ainsi
le code hexa 4D correspond à 77 en décimal et au code ascii de "M"
[vous pouvez le voir avec l'utilitaire Charmap.exe de Windows ou en ouvrant un éditeur de texte (tel que le Bloc Note),
vous appuyez sur la touche ALT de votre clavier
et sans la relâcher, vous tapez sur les chiffres 0 puis 6 puis 9 puis relâchez la touche ALT, un M devrait apparaître )
52h correspond à la lettre "R" et le code 20h à l'espace
On arrive ainsi à lire le nom du porteur : "MR " suivi du prénom du porteur, d'un espace et du nom du porteur de la carte.
On a donc réussi à lire avec succès toute la zone identifiant de la carte bancaire à puce expirée et comprendre la signification des données qui y sont stockées.
Lecture zone Valeur d'authentification de la puce :
Maintenant on va lire la valeur d'authentification de la puce (prestataire 03) de la carte bancaire expirée
qui commence selon le livre de Patrick Gueulle en 08E0 (égale aussi à l'adresse ADL) et commence par l'entête 2E 03
Une lecture avec CardEasy de 16 octets en 08 E0 nous donne :
< BC B0 08 E0 00 10
> 9000 (SW1,SW2)
> 2E 03 30 33 30 00 03 90 37 83 46 D4 3A CC B5 E6
On trouve bien l'entête 2E 03 avec une taille de 30h soit 48 octets.
Pour avoir la valeur d'authentification en entier, il suffit donc de lire 48 octets à partir de l'adresse 08 E8:
La fenêtre du bas de CardEasy affiche :
< BC B0 08 E8 00 30
> 9000 (SW1,SW2)
> 30 00 03 90 37 83 46 D4 3A CC B5 E6 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX 3X XX XX XX
(des nombres ont été remplacés par des X pour masquer la valeur d'authentification)
Vérification Valeur d'authentification de la puce :
On va maintenant vérifier l'authenticité de la carte bancaire expirée en faisant des calculs cryptographiques, par exemple à l'aide du logiciel
de calcul Maple.
En supprimant les quartets de "3" tous les 4 octets de la valeur d'authentificaiton obtenue précédemment, on a :
0 00 03 90 7 83 46 D4 A CC B5 E6 X XX XX XX X XX XX XX X XX XX XX X XX XX XX X XX XX XX X XX XX XX X XX XX XX X XX XX XX X XX XX XX
sans les espaces :
000039078346D4ACCB5E6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
On remarque que cette valeur d'authentification fait bien 320 bits codée en hexadécimal.
Dans Maple, on ouvre une nouvelle feuille.
on rentre dans Maple :
> produit := 2135987035920910082395022704999628797051095341826417406442524165008583957746445088405009430865999;
(ce produit de 321 bits (aussi appelé clé publique) provient notamment du Message de "mail" du 04/03/2000)
Ensuite on rentre dans Maple la valeur d'authentification
> VA_LP0998:=convert(`000039078346D4ACCB5E6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`, decimal, hex);
Maple affiche l'équivalent en décimal de la Valeur d'authentification.
Ensuite on demande à Maple d'élever cette valeur d'authentification au cube modulo le produit de la clé publique RSA :
>exp_3_VA_LP0998:=VA_LP0998 &^ 3 mod produit;
Maintenant on convertit en hexa dans Maple :
> hex_exp3_VA_LP0998:=convert(exp_3_VA_LP0998, hex, decimal);
On voit s'afficher dans Maple comme résultat :
hex_exp3_VA_Laposte0998 := 10A00000497XXXXXXXXXXXXXFFF109607980900010A00000497XXXXXXXXXXXXXFFF1096079809
(Note : le numéro de carte bancaire a été masqué).
On peut voir l'identifiant du prestataire 02 "497XXXXXXXXXXXXXFFF1096079809" qui est dupliqué 2 fois.
Cet identifiant contient bien le numéro de carte bancaire 497XXXXXXXXXXXXX.
En effet, comme expliqué dans ce document de 1988
(publié par Louis Claude Guillou dans le numéro 43 des annales des télécommunications)
, en élevant au cube la valeur d'authentification, on peut voir une redondance d'un motif de 160 bits composé de l'identifiant (numéro de carte, date de début de validité et date d'expiration).
Nous avons donc vérifié que cette carte bancaire est réputée émaner de l'autorité bancaire.
Celui qui a créé cette carte est supposé connaître la clé secrète associée à la clé publique.
Cependant cette clé n'est plus du tout secrète puisqu'elle a été révélée le 04/03/2000 et il est maintenant possible d'inverser ce calcul et de voir apparaître que
le dit Louis Claude Guillou dans cet article de 1988,
des "simulacres de carte bancaires" créés par des fraudeurs mais reconnus par les terminaux de paiement comme émanant de l'autorité bancaire.
A noter que, outre l'identifiant du prestataire 02, on peut voir 3 quartets "10A" dans la valeur hex_exp3_VA_Laposte0998, ces 3 quartets dépendent de la carte, ces 3 quartets ne sont pas très importants,
ils permettent de faire en sorte que la Valeur d'authentification ait 320 bits et non 321 bits (taille du produit).
Ces informations identifiant (prestataire 02) et valeur d'authentification (prestataire 03) en lecture libre suffisent pour authentifier la carte bancaire.
Pourquoi sont elles en lecture libre alors qu'elles permmettent à n'importe qui de faire des émulations de carte bancaire ?
En conclusion de cette section, nous avons vérifié l'authenticité de la carte bancaire, vérifié la signification de cette valeur d'authentification stockée dans le prestataire 03.
et vous noterez que nous n'avons toujours pas rentré le code secret !
De plus, En substituant la puce par une autre puce dont on connait le code secret au cours de l'authentification par un terminal de paiement, il est possible de débiter une carte dont on ignore le code
Lecture zone accessible avec code confidentiel de la puce :
Préparation lecture zone protégée de la puce
Maintenant nous allons lire la zone de la mémoire de la puce de la carte bancaire protégée par un code secret.
Ces informations "ultra-confidentielles" (puisque protégées par un code secret à 4 chiffres)
sont tout simplement l'historique des transactions de paiement effectuées avec la puce chez un commerçant.
Non ne cherchez pas, il n'y a rien d'autre d'intéressant dans cette zone.
On va quand même lire la zone, elle commence à l'adresse ADT (02B0) et va jusqu'à 08DF (ADL-1).
Mais pour lire cette zone, il faut d'abord présenter le code secret.
Pour cela il faut présenter de façon spéciale le code secret :
Supposons que le code secret soit 1515 (ce qui n'est pas le cas sur les cartes testées)
il faut envoyer la séquence de 4 octets 05 45 7F FF à la carte.
Pour obtenir cette séquence de 4 octets, est fourni dans cette page un logiciel de codage/décodage.
On rentre 1515 dans le champ "Code secret à 4 chiffres" et on appuie sur le champ "Codage -->", la séquence en héxadécimal à présenter à la puce (05 45 7F FF pour 1515 comme code PIN)
apparait alors dans le champ suivant.
Logiciel de codage/décodage code secret envoyé à la puce :
Pour convertir un code secret en séquence hexadécimal, il suffit de renter le code secret à 4 chiffres dans le 1er champ suivant et d'appuyer sur le bouton "Codage -->"
Ce logiciel est assez simple, il est a été conçu à partir des explications du livre de Patrick Gueulle (qui fourni un autre logiciel avec des fonctions analogues),
ceux qui veulent comprendre comment il fonctionne n'ont qu'à examiner le source de la page.