Vous êtes sur la page 1sur 3

29/03/13

TP Java Card 2/2 : Utilisation d'une carte physique | Groupe SEN

Groupe SEN

Sys tmes lec troniques N umriques

Vie du groupe SEN A rchives

BCI Cycle master Projets matriels Les stages TEL

Cours en ligne A ide au choix des parcours A ffectations de projets Guides, manuels, mementos

Projets Recherche Site web COMELEC Site web ENST Intranet COMELEC Wiki COMELEC

Enseignement
BCI Cycle master C SMLP ELEC 222 ELEC 223 ELEC 342 - SO C ELEC 390 ELEC INF344 / ELEC INF381 ELEC INF359 Etude s biblio 2010-2011 Etude s biblio 2011-2012 Mini-proje ts 2008-2009 Mini-proje ts 2009-2010 TD SC A TP Javacard 1/2 TP Javacard 2/2 ELEC 920 / NSS04 Projets matriels Les stages TEL

Accue il :: Ense igne m e nt :: C ycle m aste r :: ELEC INF359

TP Java Card 2/2 : Utilisation d'une carte physique

Introduction
La premire partie de ce TP est disponible l'adresse ici. C ette partie a pour objectif dexpliquer, par un exemple concret, comment compiler et charger une applet Javacard sur une carte physique ainsi que de donner un exemple de code dapplication cliente permettant de dialoguer avec cette carte.

Matriel et environnement utilis


Vous utiliserez dans cette partie le matriel suivant : Le lecteur de carte puces (avec contact) intgr dans le clavier HP des stations de travail de la salle de TP Des cartes puce Gemalto GemXpresso 64k (blanches) qui seront distribues par l'encadrant Les cartes utilises sont relativement anciennes et ne supportent donc que la version 2.1.1 de Javacard. Nous allons donc installer cette version (en plus de la 2.2.2 installe lors de la premire partie du TP). De plus, ce sont des cartes Global Platform (norme qui dfini notamment les mcanismes de scurit lis au chargement d'une application sur une carte) et donc nous utiliserons, pour charger l'application, le programme GPShell.

C onnexion utilisateur
Nom d'utilisate ur :

Mot de passe :

Installation de l'environnement
Installation du Java Card Development Kit 2.1.1
Decompressez l'archive :

Se connecter

~ / E L E C I N F 3 5 9 $t a rx z v f~ d u c / e n s e i g n e m e n t s / T P _ E L E C I N F 3 5 9 / j a v a _ c a r d _ k i t 2 _ 1 _ 1 u n i x . t a r . Z

Compilation & Installation des bibliothques GlobalPlatform


Installez la bibliothque GlobalPlatform l'aide des commandes suivantes (pour info, l'archive d'origine se trouve l'adresse http://sourceforge.net/projects/globalplatform/) :

~ / E L E C I N F 3 5 9 $t a rx z v f~ d u c / e n s e i g n e m e n t s / T P _ E L E C I N F 3 5 9 / g l o b a l p l a t f o r m 5 . 0 . 0 . t a r . g z ~ / E L E C I N F 3 5 9 $c dg l o b a l p l a t f o r m 5 . 0 . 0 ~ / E L E C I N F 3 5 9 / g l o b a l p l a t f o r m 5 . 0 . 0 $. / c o n f i g u r ep r e f i x = / s t u d / u s e r s / p r o m o X X / Y Y Y / E L E C I N F 3 5 9 ~ / E L E C I N F 3 5 9 / g l o b a l p l a t f o r m 5 . 0 . 0 $m a k e ~ / E L E C I N F 3 5 9 / g l o b a l p l a t f o r m 5 . 0 . 0 $m a k ei n s t a l l ~ / E L E C I N F 3 5 9 / g l o b a l p l a t f o r m 5 . 0 . 0 $c d. .

Compilation & Installation de GPShell


Installez GPShell en utilisant les commandes suivantes :

~ / E L E C I N F 3 5 9 $t a rx z v f~ d u c / e n s e i g n e m e n t s / T P _ E L E C I N F 3 5 9 / g p s h e l l 1 . 4 . 2 . t a r . g z ~ / E L E C I N F 3 5 9 $c dg p s h e l l 1 . 4 . 2 ~ / E L E C I N F 3 5 9 / g p s h e l l 1 . 4 . 2 $. / c o n f i g u r ep r e f i x = / s t u d / u s e r s / p r o m o X X / Y Y Y / E L E C I N F 3 5 9C F L A G S = I / s t u d / u s e r s / p r o ~ / E L E C I N F 3 5 9 / g p s h e l l 1 . 4 . 2 $m a k e ~ / E L E C I N F 3 5 9 / g p s h e l l 1 . 4 . 2 $m a k ei n s t a l l ~ / E L E C I N F 3 5 9 / g p s h e l l 1 . 4 . 2 $c d. .
A priori, s'il n'y a eu aucune grosse erreur lors des compilations et des installations (quelques messages d'avertissement, warning, peuvent apparatre), vous devriez maintenant avoir tout ce qu'il vous faut pour la suite du TP.

Compilation et prparation de l'applet Java Card


Les applets sont charges dans la carte par l'intermdiaire d'un fichier C AP. C e fichier est gnr en deux tapes. Premirement, les classes Java sont compiles de faon classique (avec j a v a c , la seule diffrence tant l'utilisation de l'API Java C ard et non celle du Java classique) vers des fichiers . c l a s s . Ensuite, un outil de conversion (c o n v e r t e r ), fourni par le kit de dveloppement Javacard, regroupe l'ensemble des classes d'un mme package au sein d'un seul fichier C AP. Il effectue galement un certain nombre de vrifications sur le code (vrification de la taille des entiers manipuls par exemple) ainsi que l'dition des liens entre les classes.

Compilation
Nous allons reprendre l'application dveloppe dans la premire partie du TP, mais cette fois-ci, nous allons effectuer l'tape de compilation la main. Rcuprez le fichier source M o n A p p l e t . j a v aet placez le dans un nouveau rpertoire (ex. ~ / E L E C I N F 3 5 9 / u p l o a d / m o n p a c k a g e ). La compilation se fait grce la commande suivante :

~ / E L E C I N F 3 5 9 / u p l o a d $j a v a cm o n p a c k a g e / M o n A p p l e t . j a v ac l a s s p a t h~ / E L E C I N F 3 5 9 / j c 2 1 1 / b i n / a p i 2 1 . j a rs o u r c e1 . 3

sen.enst.fr/node/402

1/3

29/03/13

TP Java Card 2/2 : Utilisation d'une carte physique | Groupe SEN


Le paramtre c l a s s p a t hindique au compilateur de prendre en compte l'API Javacard (et non pas l'API classique Java SE), et les paramtres s o u r c eet t a r g e tindiquent au compilateur de gnrer du bytecode compatible avec une machine virtuelle Java version 1.3 (donc on ne peut pas utiliser les dernires nouveauts de Java comme la gnricit) car la machine virtuelle de la carte ne supporte pas les versions plus rcentes.

Conversion
Nous allons maintenant utiliser l'outil c o n v e r t e rfourni par le kit de dveloppement Javacard pour gnrer le fichier C AP partir de la classe que nous venons de compiler. Pour tre certain de l'environnement, re-exportons les variables d'environement de la premire partie du TP (en pratique, la commande converter n'est qu'un script qui lance l'excution d'une classe l'aide de la machine virtuelle Java, il faut donc que cette dernire soit convenablement configure).

~ / E L E C I N F 3 5 9 / u p l o a d $e x p o r tJ A V A _ H O M E = / u s r ~ / E L E C I N F 3 5 9 / u p l o a d $e x p o r tJ C _ H O M E = ~ / E L E C I N F 3 5 9 / j a v a _ c a r d _ k i t 2 _ 2 _ 2 ~ / E L E C I N F 3 5 9 / u p l o a d $e x p o r tP A T H = $ P A T H : $ J C _ H O M E / b i n
L'opration de conversion proprement dite (on utilise l'outil de conversion du kit de dveloppement version 2.2.2 car il fonctionne mieux que celui du kit version 2.1.1) :

~ / E L E C I N F 3 5 9 / u p l o a d $c o n v e r t e re x p o r t p a t h~ / E L E C I N F 3 5 9 / j c 2 1 1 / a p i 2 1\ a p p l e t0 x 0 1 : 0 x 0 2 : 0 x 0 3 : 0 x 0 4 : 0 x 0 5 : 0 x 0 6 : 0 x 0 7 : 0 x 0 8 : 0 x 0 9 : 0 x 0 0 : 0 x 0 0\ M o n A p p l e tm o n p a c k a g e0 x 0 1 : 0 x 0 2 : 0 x 0 3 : 0 x 0 4 : 0 x 0 5 : 0 x 0 6 : 0 x 0 7 : 0 x 0 8 : 0 x 0 9 : 0 x 0 01 . 0
S'il n'y a aucune erreur ni aucun avertissement, c'est bon. Le fichier C AP gnr (ainsi qu'un fichier EXP) se situe dans le rpertoire ~ / E L E C I N F 3 5 9 / u p l o a d / m o n p a c k a g e / j a v a c a r d .

Chargement de l'applet sur la carte


Premirement, insrez une carte dans le lecteur situ sur le ct du clavier (mieux vaut l'crire, parfois on oublie de mettre une carte dans le lecteur, et donc a marche moins bien...). Placez vous ensuite dans le rpertoire ~ / E L E C I N F 3 5 9 / u p l o a d / m o n p a c k a g e / j a v a c a r det rcuprez le fichier installgemXpressoPro.txt. C e fichier contient un script, excut par GPShell, indiquant comment charger l'application sur la carte. Pour votre culture, voici le contenu du fichier :

m o d e _ 2 0 1/ /S e tp r o t o c o lm o d et oO p e n P l a t f o r m2 . 0 . 1 g e m X p r e s s o P r o e n a b l e _ t r a c e e s t a b l i s h _ c o n t e x t c a r d _ c o n n e c t s e l e c tA I DA 0 0 0 0 0 0 0 1 8 4 3 4 D 0 0 o p e n _ s cs e c u r i t y3k e y i n d0k e y v e r0k e y4 7 4 5 4 d 5 8 5 0 5 2 4 5 5 3 5 3 4 f 5 3 4 1 4 d 5 0 4 c 4 5/ /O p e ns e c u r ec h a n n e l d e l e t eA I D0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 0 0 0/ /D e l e t eo l dp a c k a g ea n da p p l e ti n s t a n c e d e l e t eA I D0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 0 d e l e t eA I D0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 0 0 0 i n s t a l lf i l em o n p a c k a g e . c a ps d A I DA 0 0 0 0 0 0 0 1 8 4 3 4 D 0 0n v C o d e L i m i t4 0 0 0/ /I n s t a l lt h ea p p l e to nt h ec a r d c a r d _ d i s c o n n e c t r e l e a s e _ c o n t e x t


Il n'y a plus qu' donner ce script GPShell et le laisser travailler :

~ / E L E C I N F 3 5 9 / u p l o a d / m o n p a c k a g e / j a v a c a r d $L D _ L I B R A R Y _ P A T H = / s t u d / u s e r s / p r o m o X X / Y Y Y / E L E C I N F 3 5 9 / l i b~ / E L E C I N F 3 5 9
(le LD_LIBRARY_PATH indique o est installe la bibliothque GlobalPlatform, puisque vous l'avez installe en dbut de cette partie dans un endroit non courant). Si toutes les rponses aux commandes (APDU) d'installation envoyes la cartes sont bonnes (elles doivent se terminer par 90 00), l'applet est correctement charge sur la carte. Bravo !

Communication avec la carte & test de l'applet


Nous allons maitenant modifier le code de l'application cliente crite dans la premire partie pour qu'elle communique maintenant avec la carte et non plus avec le simulateur. Bonne nouvelle, les versions rcentes de machines virtuelles Java intgrent nativement tout ce qu'il faut pour communiquer avec un lecteur de carte (moyennant qu'il dispose d'un driver PC /SC ) et avec une carte. Le code source de l'application cliente modifie : Maclasse2.java. C ompilez (dans Eclipse par exemple) cette classe et testez la communication avec la carte. Une fois que tout fonctionne, et s'il vous reste du temps, parcourez la document de l'API Javacard (voir lien plus bas), et amusezvous inventer quelques programmes un peu plus volus pour votre carte.

Liens
Les specs de l'API Javacard

Filename/Title

Taille

installgemXpressoPro.txt 403 octets Maclasse2.java 3.71 Ko

sen.enst.fr/node/402

2/3

29/03/13

TP Java Card 2/2 : Utilisation d'une carte physique | Groupe SEN


(c) C OMELEC 2007

sen.enst.fr/node/402

3/3