Espionner une transaction avec carte à puce

La suite de l’article d’introduction sur la réalisation d’un espion pour carte à puce.
Afin de rendre les choses plus explicites on commence par un petit schéma :

Diagramme en boite de l'espion
Diagramme de l’espion de carte à puce

Le micro-contrôleur va lire les niveaux logiques qui circulent sur les entrées/sorties de la carte à puce. Pour cela il est nécessaire d’utiliser une rallonge. La construction de cette rallonge est décrite dans l’article précèdent :

Plus tard, une interface de lecture, pour les humains, sera développée avec un écran LCD. Au cous du développement, nous aurons besoin de réaliser des transactions. Cette article va traiter de la mise en place de l’environnement de test et de la lecture des données d’une carte bancaire.
Notez que nous utilisons une carte bancaire mais que ceci aurait pu marcher avec n’importe quelle autre carte à puce.

Lecteur de carte à puce

Afin de dialoguer avec la carte à puce, nous utiliserons un lecteur de carte à puce de type PC/SC. Ces lecteurs sont des lecteurs pour PC qui se connectent en USB. Il existe des librairies pour faciliter l’utilisation de ces lecteurs en Java. J’ai acheté le mien sur le site de Monéo : Boutique Moneo

une fois branché, il est nécessaire d’installer les drivers du lecteur. Pour ma Debian cela donne ça :

$:sudo apt-get install libpcsclite1
$:sudo apt-get install libacsccid1
$:sudo apt-get install pcsc-tools

Pour vérifier que l’installation s’est bien déroulée, on insère une carte dans notre lecteur et on le lance dans un terminal :

$pcsc_scan
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau 
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: ACS ACR 38U-CCID 00 00
 
Mon Jun 11 20:03:00 2012
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted, 
  ATR: 3F 65 25 08 66 04 6C 90 00
 
ATR: 3F 65 25 08 66 04 6C 90 00
+ TS = 3F --> Inverse Convention
+ T0 = 65, Y(1): 0110, K: 5 (historical bytes)
  TB(1) = 25 --> Programming Param P: 5 Volts, I: 1 milliamperes
  TC(1) = 08 --> Extra guard time: 8
+ Historical bytes: 66 04 6C 90 00
  Category indicator byte: 66 (proprietary format)
 
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3F 65 25 08 66 04 6C 90 00
3F 65 25 .. .. 04 6C 90 .0
	Carte Bancaire (Frenc

Si vous recevez une réponse du type, alors le driver pcsc est correctement installé.

Analyse de la réponse

L’ATR (Answer to reset) provient de la carte et nous indique quel protocole doit être utilisé aussi bien en terme de durée d’un caractère que de signification d’un niveau logique. Nous y reviendrons plus en détails lorsqu’il s’agira de programmer notre espion puisqu’il devra se caler sur le rythme de la transaction.

Dans le prochain article nous parlerons de l’échantillonnage à proprement parlé et nous montrerons comment se synchroniser avec les données de la carte.
Si vous souhaitez reproduire les échanges de l’article http://oversimple.fr/que-trouve-t-on-dans-une-carte-bancaire/ vous pouvez utiliser le programme gscriptor présent dans le paquetage pcsc-tool que vous venez de télécharger.

It’s oversimple, isn’t it?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.