Vous êtes sur la page 1sur 3

29/03/13

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

Systèmes Électroniques Numériques

| Groupe SEN Groupe SEN Systèmes Électroniques Numériques Vie du groupe SEN BCI Cours en ligne

Enseignement

Connexion utilisateur

Nom d'utilisateur :

Les stages Connexion utilisateur Nom d'utilisateur : Mot de passe : Se conn Accueil :: Enseignement

Mot de passe :

Se connConnexion utilisateur Nom d'utilisateur : Mot de passe : Accueil :: Enseignement :: Cycle master ::

 

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

 

Introduction

La première partie de ce TP est disponible à l'adresse ici.

Cette partie a pour objectif d’expliquer, par un exemple concret, comment compiler et charger une applet Javacard sur une carte physique ainsi que de donner un exemple de code d’application cliente permettant de dialoguer avec cette carte.

Matériel et environnement utilisé

Vous utiliserez dans cette partie le matériel suivant :

Le lecteur de carte à puces (avec contact) intégré dans le clavier HP des stations de travail de la salle de TPVous utiliserez dans cette partie le matériel suivant : Des cartes à puce Gemalto GemXpresso 64k

Des cartes à puce Gemalto GemXpresso 64k (blanches) qui seront distribuées par l'encadrant Gemalto GemXpresso 64k (blanches) qui seront distribuées par l'encadrant

Les cartes utilisées 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 installée lors de la première partie du TP). De plus, ce sont des cartes Global Platform (norme qui défini notamment les mécanismes de sécurité liés au chargement d'une application sur une carte) et donc nous utiliserons, pour

charger l'application, le programme GPShell.

Installation de l'environnement

Installation du Java Card Development Kit 2.1.1

Decompressez l'archive :

Decompressez l'archive :

~/ELECINF359$tarxzvf~duc/enseignements/TP_ELECINF359/java_card_kit-2_1_1-unix.tar.Z

Compilation & Installation des bibliothèques GlobalPlatform

Installez la bibliothèque GlobalPlatform à l'aide des commandes suivantes (pour info, l'archive d'origine se

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

~/ELECINF359$tarxzvf~duc/enseignements/TP_ELECINF359/globalplatform-5.0.0.tar.gz

~/ELECINF359$cdglobalplatform-5.0.0

~/ELECINF359/globalplatform-5.0.0$./configure--prefix=/stud/users/promoXX/YYY/ELECINF359

~/ELECINF359/globalplatform-5.0.0$make

~/ELECINF359/globalplatform-5.0.0$makeinstall

~/ELECINF359/globalplatform-5.0.0$cd

Compilation & Installation de GPShell

Installez GPShell en utilisant les commandes suivantes :

Installez GPShell en utilisant les commandes suivantes :

~/ELECINF359$tarxzvf~duc/enseignements/TP_ELECINF359/gpshell-1.4.2.tar.gz

~/ELECINF359$cdgpshell-1.4.2

~/ELECINF359/gpshell-1.4.2$./configure--prefix=/stud/users/promoXX/YYY/ELECINF359CFLAGS=-I

/stud/u

~/ELECINF359/gpshell-1.4.2$make

~/ELECINF359/gpshell-1.4.2$makeinstall

~/ELECINF359/gpshell-1.4.2$cd

A priori, s'il n'y a eu aucune grosse erreur lors des compilations et des installations (quelques messages d'avertissement, warning, peuvent apparaître), vous devriez maintenant avoir tout ce qu'il vous faut pour la suite du TP.

Compilation et préparation de l'applet Java Card

Les applets sont chargées dans la carte par l'intermédiaire d'un fichier CAP. Ce fichier est généré en deux étapes. Premièrement, les classes Java sont compilées de façon classique (avec javac, la seule différence étant l'utilisation de l'API Java Card et non celle du Java classique) vers des fichiers .class. Ensuite, un outil de conversion (converter), fourni par le kit de développement Javacard, regroupe l'ensemble des classes d'un même package au sein d'un seul fichier CAP. Il effectue également un certain nombre de vérifications sur le code (vérification de la taille des entiers manipulés par exemple) ainsi que l'édition des liens entre les classes.

 

Compilation

Nous allons reprendre l'application développée dans la première partie du TP, mais cette fois-ci, nous allons effectuer l'étape de compilation à la main. Récupérez le fichier source MonApplet.javaet placez le dans un nouveau répertoire (ex. ~/ELECINF359/upload/monpackage). La compilation se fait grâce à la commande suivante :

~/ELECINF359/upload$javacmonpackage/MonApplet.java-classpath~/ELECINF359/jc211/bin/api21.

jar-so

29/03/13

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

Conversion Liens Filename/Title Maclasse2.java Les specs de l'API Javacard   Taille
Conversion Liens Filename/Title Maclasse2.java Les specs de l'API Javacard   Taille

Conversion

Liens

Liens Filename/Title Maclasse2.java

Filename/Title

Maclasse2.java

Conversion Liens Filename/Title Maclasse2.java Les specs de l'API Javacard   Taille

Les specs de l'API Javacard

 

Taille

installgemXpressoPro.txt

403 octets

 

3.71 Ko

Le paramètre classpathindique au compilateur de prendre en compte l'API Javacard (et non pas l'API classique Java SE), et les paramètres sourceet targetindiquent au compilateur de générer du bytecode compatible avec une machine virtuelle Java version 1.3 (donc on ne peut pas utiliser les dernières nouveautés de Java comme la généricité) car la machine virtuelle de la carte ne supporte pas les versions plus récentes.

Nous allons maintenant utiliser l'outil converterfourni par le kit de développement Javacard pour générer le fichier CAP à partir de la classe que nous venons de compiler.

Pour être certain de l'environnement, re-exportons les variables d'environement de la première partie du TP (en pratique, la commande converter n'est qu'un script qui lance l'exécution d'une classe à l'aide de la machine virtuelle Java, il faut donc que cette dernière soit convenablement configurée).

~/ELECINF359/upload$exportJC_HOME=~/ELECINF359/java_card_kit-2_2_2 ~/ELECINF359/upload$exportPATH=$PATH:$JC_HOME/bin ~/ELECINF359/upload$exportJAVA_HOME=/usr

L'opération de conversion proprement dite (on utilise l'outil de conversion du kit de développement version 2.2.2 car il fonctionne mieux que celui du kit version 2.1.1) :

~/ELECINF359/upload$converter-exportpath~/ELECINF359/jc211/api21\

MonAppletmonpackage0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x001.0 -applet0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x00:0x00\

S'il n'y a aucune erreur ni aucun avertissement, c'est bon. Le fichier CAP généré (ainsi qu'un fichier EXP) se situe dans le répertoire

~/ELECINF359/upload/monpackage/javacard.

Chargement de l'applet sur la carte

Premièrement, insérez une carte dans le lecteur situé sur le côté 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 répertoire ~/ELECINF359/upload/monpackage/javacardet récupérez le fichier installgemXpressoPro.txt. Ce fichier contient un script, exécuté par GPShell, indiquant comment charger l'application sur la carte. Pour votre culture, voici le contenu du fichier :

mode_201//SetprotocolmodetoOpenPlatform2.0.1 gemXpressoPro

card_connect establish_context enable_trace delete-AID01020304050607080900 delete-AID0102030405060708090000//Deleteoldpackageandappletinstance open_sc-security3-keyind0-keyver0-key47454d5850524553534f53414d504c45//Opensecure select-AIDA000000018434D00 install-filemonpackage.cap-sdAIDA000000018434D00-nvCodeLimit4000//Installtheapplet card_disconnect delete-AID0102030405060708090000 release_context

on

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

~/ELECINF359/upload/monpackage/javacard$LD_LIBRARY_PATH=/stud/users/promoXX/YYY/ELECINF359/l

ib

(le LD_LIBRARY_PATH indique où est installée la bibliothèque GlobalPlatform, puisque vous l'avez installée en début de cette partie dans un endroit non courant).

Si toutes les réponses aux commandes (APDU) d'installation envoyées à la cartes sont bonnes (elles doivent se terminer par 90 00), l'applet est correctement chargée 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 première partie pour qu'elle communique maintenant avec la carte et non plus avec le simulateur.

Bonne nouvelle, les versions récentes de machines virtuelles Java intègrent 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 modifiée : Maclasse2.java. Compilez (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 amusez- vous à inventer quelques programmes un peu plus évolués pour votre carte.

channel

the

~/EL

29/03/13

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

(c) COMELEC 2007