Carte à puce et Java
Stéphane AMATO
Julien CHABANON
Novembre 2001
Sommaire
Historique
Partie I : Carte à puce
Partie II : JavaCard
Conclusion
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Sommaire Novembre 2001
Historique (1/6)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Historique (2/6)
1974 - Roland Moreno crée la carte à
puce à circuit intégré
1979 - Création de Bull CP8
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Historique (3/6)
1980 - La carte à puce comme un
nouveau moyen de paiement
1983 - La carte à puce dans le secteur
sanitaire et social
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Historique (4/6)
1984 - La télécarte
1986 : 2 millions de cartes vendues par
an
1991 : 6 millions de cartes vendues par
mois
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Historique (5/6)
Novembre 1996 - Schlumberger
simplifie la programmation des
SmartCards Spécification JavaCard 1.0
Février 1997 - Bull, Sun et Gemplus se
joignent à Schlumberger pour fonder le
JavaCard forum
Novembre 1997 - Sun présente les
spécifications de JavaCard 2.0
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Historique (6/6)
Mars 1999 - La version 2.1 des
spécifications de la JavaCard sort :
The JavaCard 2.1 API Specification
The JavaCard 2.1 Runtime
Environment Specification
The JavaCard 2.1 Virtual Machine
Specification
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Historique Novembre 2001
Carte à puce
Les différents types de cartes
Le système informatique
La normalisation
Cycle de vie d’une carte
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Types de cartes (1/3)
Carte à mémoire
Mémoire simple (sans processeur)
accessible en lecture sans protection,
mais l’écriture peut être rendue
impossible
Programmation impossible
Carte « porte-jetons » pour applications
de prépaiement (carte téléphonique)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Type de carte Novembre 2001
Types de cartes (2/3)
Carte à logique câblée
Mémoire accessible via des circuits
préprogrammés et figés pour une
application particulière
Carte « sécuritaire » pouvant effectuer
des calculs figés (accès à un local …)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Type de carte Novembre 2001
Types de cartes (3/3)
Carte à puce ou SmartCard
Microcontrôleur encarté (processeur
+ mémoires)
Carte « programmable » pouvant
effectuer tout type de traitements
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Type de carte Novembre 2001
Carte à puce
Les différents types de cartes
Le système informatique
La normalisation
Cycle de vie d’une carte
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Système informatique
(1/2)
Processeur, mémoire, interface de
communications
Un véritable ordinateur mais :
Communiquant environ 300 fois moins vite
(de 3,58 à 4,92 MHz)
Possédant 200 000 fois moins de mémoire
(64 Ko de ROM)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Système informatique Novembre 2001
Système informatique
(2/2)
Une application carte = une carte +
un terminal
Traitement conjoint des données
présentes sur la carte ET sur le terminal
Communication entre la carte et le
terminal
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Système informatique Novembre 2001
Carte à puce
Les différents types de cartes
Le système informatique
La normalisation
Cycle de vie d’une carte
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Normalisation (1/7)
ISO 7816 0,76
mm
Format carte de crédit 54 mm
Définition des
contraintes physiques 85 mm
supportables (chaleur,
humidité...)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (2/7)
La puce
Seule interface de communication
avec l’extérieur
Lecteur de cartes = CAD (Card
Acceptance Device)
Surface 25 mm²
Épaisseur 0,3 mm
Composée de 8 contacts métalliques
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (3/7)
Protocoles de communication
ISO 7816-3
Protocoles de communication asynchrones
et half-duplex
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (4/7)
Format de commandes
Protocole APDU Application Protocol Data
Unit
Communication entre le lecteur de cartes
(CAD) et la SmartCard
Message de commande du lecteur vers la
carte ou ...
... message de réponse de la carte au lecteur
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (5/7)
Commandes applicatives
ISO 7816-4 : Manipulation des données au
travers d’une structure hiérarchique de fichiers
ISO 7816-5 : Identification des applications
ISO 7816-6 : Éléments de données
référencées (accès direct)
ISO 1816-7 : Manipulation des données au
travers d’un schéma relationnel
ETSI GSM 11.11 : Commandes des cartes
S.I.M.
E.M.V. : Commandes de paiement
...
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (6/7)
Le microcontrôleur (1/2)
Technologie M.A.M. :
Substrat de silicium (0,35 à 0,7 microns)
contenant microprocesseur + bus + mémoires
Mémoire non volatile reprogrammable
Sécurité :
Composant inaccessible (seule la puce l’est)
Détecteurs de conditions anormales
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Normalisation (7/7)
Le microcontrôleur (2/2)
Types de microprocesseurs utilisés :
8, 16 ou 32 bits + coprocesseur cryptographique
Hitachi, Motorola, NEC, SGS-Thomson, Siemens...
Types de mémoires :
ROM : jusqu’à 64 Ko (mémoire non volatile en
lecture seule)
RAM : jusqu'à 2 Ko (mémoire volatile)
Flash EEPROM : jusqu'à 32 Ko (mémoire non
volatile réinscriptible)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Normalisation Novembre 2001
Carte à puce
Les différents types de cartes
Le système informatique
La normalisation
Cycle de vie d’une carte
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Cycle de vie (1/2)
Fabrication
ROM : inscription d’un programme définissant les
fonctions de base de la carte
Initialisation
EEPROM (Electrical Erasable Programmable ROM) :
inscription des données communes à l’application
Personnalisation
EEPROM : inscription des données personnelles de
l’utilisateur
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Cycle de vie Novembre 2001
Cycle de vie (2/2)
Utilisation
Envoi d’APDU de commandes à la carte via
le lecteur (CAD)
Traitement des commandes effectué par le
masque de la carte Sinon renvoi d’un code
d’erreur
Mort
Invalidation logique (volontaire ou lors
d’une tentative d’intrusion), saturation
mémoire, vol, perte, bris ...
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Cycle de vie Novembre 2001
Résumé
La carte à puce est un véritable serveur embarqué
Elle gère des données personnelles et les sécurise
Cependant :
Le code applicatif est figé en ROM
Pas de protocole standard de communication
entre le lecteur et son hôte
Communications de bas niveaux (APDUs)
nécessite des compétences spécifiques
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Résumé Novembre 2001
JavaCard
Présentation
Architecture
Les outils commerciaux adaptés à la
JavaCard
Quelques applications
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Présentation (1/3)
JavaCard un sous-ensemble du langage Java
Une applet est une application JavaCard
Possibilité de charger dynamiquement une nouvelle
applet
JavaCard lié aux spécificités des SmartCard
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Présentation Novembre 2001
Présentation (2/3)
Supportés Non supportés
Boolean, byte, short, Float, double, long
int Char, String
Object Tableau à n
Tableau à une dimensions
dimension Class et ClassLoader
Méthodes virtuelles Ramasse-miettes
Allocation dynamique SecurityManager
Paquetages Threads
Exceptions
Interface
Méthodes natives
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Présentation Novembre 2001
Présentation (3/3)
API java.lang de JavaCard réduite à :
Object { public Object () ;
public boolean equals (Object obj) ; }
Throwable { public Throwable () ; }
-- Exception
-- RuntimeException
-- Arthmetic Exception
-- ClassCastException
-- NullPointerException
-- SecurityException
-- ArrayStoreException
-- NegativeArraySizeException
-- IdexOutOfBoundsException
-- ArrayIndexOutOfBoundsException
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Présentation Novembre 2001
Machine virtuelle
Implémentation en deux parties :
La partie on-card (SmartCard)
La partie off-card (JavaCard)
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JCVM Novembre 2001
Librairies standard
JavaCard.lang
JavaCard.framework
JavaCard.security
JavaCardx.crypto
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Les standards Class Librairies Novembre 2001
JCRE
JCRE = JavaCard Runtime Environment
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JCRE Novembre 2001
Compiler en Java (1/3)
Obtention d’un code JavaCard
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Compiler en Java Novembre 2001
Compiler en Java (2/3)
...
...
Method public static int fact(int)
public static int fact(int n) >> max_stack=2, max_locals=3 <<
{ 0 iconst_1
int i,j; 1 istore_2
j=1; 2 iconst_1
for(i=1;i<n;i++) 3 istore_1
j*=i; 4 goto 14
return j; 7 iload_2
} 8 iload_1
... 9 imul
10 istore_2
11 iinc_1 by 1
14 iload_1
Bytecode désassemblé
15 iload_0
16 if_icmplt 7
19 iload_2
20 ireturn
...
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Compiler en Java Novembre 2001
Compiler en Java (3/3)
Récapitulatif des opérations
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Compiler en Java Novembre 2001
JavaCard
Présentation
Architecture
Les outils commerciaux adaptés à la
JavaCard
Quelques applications
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Architecture (1/8)
Card Executive Applet 1 Applet N
Charge et sélectionne les applications Programme Programme
Communique avec le monde
extérieur
Librairies standard (API)
Gère le cycle de vie de la carte
Interface cachant l’infrastructure de la carte
Machine Virtuelle Java (interpréteur)
Exécute les applets, garantit la sécurité et gère le partage des données
Méthodes Natives
Donne accès aux ressources physiques telles que la mémoire, les E/S, le coprocesseur cryptographique
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (2/8)
Méthodes natives
Fonctions de bas niveaux gérant
Les E/S
La mémoire
Le coprocesseur cryptographique
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (3/8)
Machine virtuelle Java
Exécute le bytecode (obtenu après
compilation et édition de liens)
Offre le support du langage
Gère le partage des données entre
applications
Implantée au dessus du circuit intégré (OS +
méthodes natives)
Indépendance totale par rapport à la plate-
forme de la carte
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (4/8)
Librairies standard
Ensemble d’APIs
Cache les détails de l’infrastructure
Interface facile à manipuler
Définition des conventions utilisées par
les applets pour accéder aux méthodes
natives
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (5/8)
Applets
Programmes écrits en JavaCard puis
compilés
Exécution en réponse à des
demandes du terminal
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (6/8)
Installation d’une applet
Réalisé lors de la fabrication de la carte ou
de sa mise à jour à partir d’un terminal
Chargement l’applet en mémoire (ROM ou
EEPROM)
Appel automatique de la méthode install ()
par le JCRE : phase de connaissance
Applet définitivement connue par le JCRE
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (7/8)
Sélection, activation et
désactivation d’une applet
Une Applet est inactive tant qu’elle n’est pas
sélectionnée pour être exécutée
Identification d’une Applet par une clé unique
Sélection réalisée par le terminal
Suspension de l’exécution de l’Applet active :
deselect()
Activation de l’Applet sélectionnée : select()
Le JCRE redirige tous les APDUs de
commande vers cette Applet
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
Architecture (8/8)
Communication avec les
applets
Le JCRE appelle process() lorsqu’il
reçoit un APDU de commande pour
cette applet
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Architecture Novembre 2001
JavaCard
Présentation
Architecture
Les outils commerciaux adaptés à la
JavaCard
Quelques applications
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Outils commerciaux
Odissey-Lab de Bull
GemXpresso Rapid Applet Development (RAD) de
Gemplus
Cyberflex 2.0 Multi8K de Schlumberger
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Les outils commerciaux Novembre 2001
Odissey-Lab de Bull
Conforme aux spécifications JavaCard
API 2.0
Sa JVM est l’une des plus performantes
du marché selon Bull
A été conçu pour les besoins des plate-
formes ouvertes
Est adaptée à de nouveaux
mécanismes de sécurité
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Odissey-Lab de Bull Novembre 2001
GemXpresso RAD de
Gemplus
Plate-forme de développement basée
sur les spécifications de JavaCard 2.0 et
sur un processeur RISC 32 bits
Supporte les API JavaCard 2.0 pour 8 ou
32 bits
Accélère le développement et les tests
Simulateur pour tester les programmes
directement sur une station de travail
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - GemXpresso RAD de Gemplus Novembre 2001
Cyberflex de
Schlumberger
Conforme aux spécifications de JavaCard 2.0
Pas d’environnement de développement car
très facile de l’intégrer dans un environnement
de développement Java existant
Simulateur qui vérifie le code
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Cyberflex de Schlumberger Novembre 2001
JavaCard
Présentation
Architecture
Les outils commerciaux adaptés à la
JavaCard
Quelques applications
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001
Applications (1/2)
Télévision
Santé
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Applications Novembre 2001
Applications (2/2)
Carte d’étudiant
Fidélité
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - Applications Novembre 2001
Conclusion
• Carte à puce vs JavaCard
Stéphane AMATO / Julien CHABANON Cartes à puce et Java - JavaCard Novembre 2001