Professional Documents
Culture Documents
Lacarte
carteààpuce
puceet
etla
laTechnologie
TechnologieJava
Java
Samia Bouzefrane
Maître de Conférences
CEDRIC –CNAM
samia.bouzefrane@cnam.fr
http://cedric.cnam.fr/~bouzefra
La
Lacarte
carteààpuce
puce: :introduction
introductionet
etprincipe
principe
Monétique :
- Carte bancaire : Groupement Cartes Bancaires, nouvelles cartes EMV, etc.
- Porte-monnaie : Octopus, Moneo en France, Proton en Belgique,
Geldkarte en Allemagne
Identification :
Cartes d'identité nationales (eID en Belgique), E-passeports (août 2006 en France)
Titre de transport (Passe Navigo à Paris, Oyster à Londres, Korrigo (un seul
titre de transport pour tous ses déplacements en transports en commun ).
1971: Paul Castrucci de IBM dépose aux USA un brevet intitulé Information Card
Famille de produits
carte à mémoire
carte à microprocesseur
Cartes à microcontrôleur
Comportent un microcontrôleur :
- UC
- PROM
- RAM dans le même circuit
- EEPROM
- interface d’E/S
- crypto processeur
Processeur : 16 ou 32 bits
EEPROM : de 1Ko à 128 Ko (256 Ko pour une Java Card ou une Basic Card)
Fonctionnement
Mémoires :
- RAM : 1 à 4 Ko
- NVM (EEPROM/Flash) : 16 à 32 Ko
- ROM : 32 à 64Ko
Co-processeur
- Java Card : exécution directe du Byte Code Java Card Technology 2.2
Année 2008 :
Une carte SIM : un CPU (32 bits), RAM (16 Ko), ROM (512 Ko), EEPROM/FLASH
(512 Ko), processeur dédié au calcul cryptographique.
La ROM (Read Only Memory) contient le système d'exploitation de la carte, les
mécanismes de sécurité (algorithmes spécifiques (API GSM).
la RAM (Random Access Memory) permet d'effectuer des calculs ou de charger
des instructions et les exécuter.
La
Lanormalisation
normalisation
ISO,
Santé,
...
La norme ISO 7816-4 définit les commandes de base des cartes à puce
Les 3 formats
ID 01
ID 00 ID 000
Le fabricant produit une seule taille (ID1), le client final pourra réduire
ses dimensions au format ID00 ou ID000 (ex. carte SIM)
Carte ISO
Carte AFNOR
L’ISO 7816-2
Valeurs en mm
- Le protocole de transport ;
- Taux de transmission des données ;
L’ISO 7816-4
Elle définit les messages APDU (Application Protocol Data Units) utilisés
par les cartes à puce pour communiquer avec le lecteur.
carte
terminal
Commande APDU
Entête obligatoire Corps optionnel
CLA INS P1 P2 Lc Data field Le
•CLA (1 octet): Classe d’instructions --- indique la structure et le format pour une
catégorie de commandes et de réponses APDU
•INS (1 octet): code d’instruction: spécifie l’instruction de la commande
•P1 (1 octet) et P2 (1 octet): paramètres de l’instruction
•Lc (1 octet): nombre d’octets présents dans le champ données de la commande
Avec Le=0, - Si cde d’écriture => pas de données utiles
- Si cde de lecture => la cde doit retourner 256 octets de données utiles
•Data field (octets dont le nombre est égal à la valeur de Lc): une séquence d’octets dans
le champ données de la commande
Réponse APDU
•Data field (longueur variable): une séquence d’octets reçus dans le champ données de la
réponse
•SW1 (1 octet) et SW2 (1 octet): Status words (Mots d’état)—état de traitement par la carte
La
Lagestion
gestiondes
desfichiers
fichiersd’une
d’unecarte
carteààpuce
puce
- création/destruction de fichiers
- attribuer un nom à un fichier
- définir des restrictions d’accès en Letc/écrit
- lire/écrire dans un fichier
- le plus contraignant est l’échange en binaire entre le lecteur et la
carte
Fichier à structure transparente : suite d’octets (min=1 octet, max: 255 octets)
Fichier à structure linéaire fixe : enregistrements de taille fixe, indicé à partir
de 1
Fichier à structure linéaire variable: enregistrements de taille variable, indicé
à partir de 1
Fichier à structure linéaire cyclique : a la structure linéaire fixe fermée, avec
indice 1 = dernier enregistrement écrit.
Get/Put Data
Année Événement
La
Latechnologie
technologieJava
JavaCard
Card: :introduction
introductionet
etprincipe
principe
Les applications :
Longues à développer
Des tentatives
1ère version: octobre 1996, démarrage et produit réel
en 1998, une réalité industrielle à partir de 2000. En 2004, le nombre
de Java Cards vendus a atteint le milliard.
En 2007, 3 milliards de cartes SIM fabriquées
2006: 1,2 billions de téléphones mobiles utilisant des cartes SIM/Java Card
1,65 billions cartes à puce/ Java Card (source site de Sun )
un environnement d’exécution
La possibilité d’écrire des applets avec une approche orientée objet
(même si le format de chargement n’était pas encore spécifié)
Les plateformes Java Card sont normalisées par Sun et Java Card Forum
Le
Lelangage
langageJava
JavaCard
Card
Types supportés
Pas de Threads
Pas de clonage
Toutes ces caractéristiques sont intégrées dans la version 3.0 (pile TCP/IP,
servlets, multi-threading, etc.) : spécification publiée en mars 2008.
Atomicité
Partage
Off-Card
CAP file
On-Card
- compiler (.class)
- convertir (.cap)
est désélectionnée
-Inclure javacard.framework
- l’applet doit hériter de la classe Applet
- déclarer les constantes et variables
- dans le constructeur de l’applet, prévoir l’initialisation des variables déclarées
et l’enregistrement auprès du JCRE
-Une méthode process qui traite toute commande APDU reçue du terminal:
import javacard.framework.*;
public class APurse extends Applet {
/* declaration de constantes */
// code of CLA byte in the command APDU header
final static byte APP_CLA = (byte)0x80;
public static void install (byte [] bArray, short bOffset, byte bLength) {
new Monnaie (bArray, bOffset, bLength);
}
if (selectingApplet()) return;
if (buffer[ISO7816.OFFSET_CLA] != APP_CLA)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
switch (buffer[ISO7816.OFFSET_INS]) {
case VERIF_INS : verify(apdu);
break;
case GET_BALANCE_INS : getBalance(apdu);
break;
case CREDIT_INS : credit(apdu);
break;
case DEBIT_INS : debit(apdu);
break;
default : ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
break;
}
}
Rappel : Etapes d’
d’un appel de mé
méthode distante
Client Serveur
Serveur de
noms
3. Interroger
2. Publier
Application Cliente
1. Exposer Objet
4. Récupérer distant
Serveur d’objets
7. Appel méthode
6. Arguments
5. Appel de méthode sérialisation
Skeleton
Stub
8. Retour
10. Retour
9. Résultat
Terminal Carte
Client Serveur
Service de
noms
3. Interroger
2. Enregistrer
0. Créer
Application Cliente
Objet
4. Récupérer 1. Créer distant
Applet Serveur
7. Appel méthode
6. Arguments
5. Appel de méthode sérialisation
Skeleton
Stub
8. Retour
10. Retour
9. Résultat
Le service de noms
• Tout objet distant créé par l’applet est enregistré dans rmiService ;
2. Créer une classe implémentant cette interface (XyyImpl.java) qui sera l’objet
distant (ou le service)
9. Créer une classe cliente qui appelle les méthodes distantes de l’objet distant
(XyyClient.java) ;
Objectifs du dé
développement en JCRMI
Implé
Implémenter l’
l’interface de l’
l’objet distant
balance -=m;
}
Les arguments des méthodes distantes sont de type simple (boolean, byte,
short et int), ou bien un tableau à une dimension de type simple.
Le type int n’est pas supporté par toutes les plateformes.
La valeur de retour doit être aussi de type simple (boolean, byte, short ou int)
ou bien un type d’interface distante, ou encore de type void.
Les objets distants sont passés par référence. Une référence à un objet distant
est en fait une référence au stub qui est le représentant local de l’objet côté client.
Construire l’
l’applet Serveur/1
L’objet distant doit être instancié et initialisé, ce qui sera fait dans la méthode
install().
dispatcher.process(apdu)
Comportement de l’
l’appel côté
côté Serveur
Une invocation de méthode distante est récupérée par l’applet qui délègue
l’appel au service RMI qui propage l’appel vers l’objet distant. La valeur
retournée emprunte le chemin inverse.
Écriture du client
jcrmi.selectApplet(AID,JCRMIConnect.REF_WITH_CLASS_NAMES);
Le client doit obtenir la référence de l'objet distant pour faire les invocations.
Le client utilise la référence de l'objet distant pour faire l'invocation des méthodes.
ca.closeCard();
jcrmi.selectApplet(AID,JCRMIConnect.REF_WITH_INTERFACE_NAMES
);
PurseInterf myPurse = (PursetInterf)
jcrmi.getInitialReference();
myPurse.crediter((short)10000);
myPurse.getBalance());
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
93 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
finally{
try {
ca.closeCard();
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
} // end main
} // end class
ATR
Terminal Carte
-Dès la mise sous tension de la carte, elle envoie l’ATR au terminal pour
s’identifier.
Résumé
sumé/2
L’instance de RMIService répond en envoyant une réponse APDU FCI (File Control
Information) qui inclut la référence à l’objet distant.
Avantages
le code écrit est réutilisable sur d’autres plateformes JCRMI car il utilise
les services de RMI sans faire appel à des caractéristiques intrinsèques
(clés de sécurité, commandes APDU particulières ) à la carte: c’est le
principe de PIM.
Inconvénient
JCRMI cache les spécificités de la carte et les problèmes liés à son interaction
(la gestion de la sécurité, le protocole APDU, etc.) qui sont importants à connaître
si on s’intéresse à ce domaine.
1. http://java.sun.com/products/javacard/
2. Technology for smart cards: architecture and programmer’s guide, Zhiqun
Chen, Addison Wesley, sept. 2000
3. Understanding Java Card 2.0, Zhiqun Chen & Rinaldo Di Giorgio
4. http://www.javaworld.com/javaworld/jw-03-1998/jw-03-javadev.html
5. http://javacardforum.org
6. Zhiqun Chen, “How to write a Java Card applet: A developer's guide”,
http://www.javaworld.com/javaworld/jw-07-1999/jw-07-javacard.html.
7. Pierre Paradinas, Support de cours sur « Java Card », UV de Systèmes
Enfouis et Embarqués, Valeur C, Laboratoire CEDRIC, CNAM.
http://deptinfo.cnam.fr/~paradinas/cours/ValC-IntroJavaCard.pdf
8. Global Platform, Card Specification :
http://www.globalplatform.org/specificationform2.asp?id=archived
9. API Java Card : http://java.sun.com/products/javacard/htmldoc
10. Eric Vétillard : http://javacard.vetilles.com/2006/09/17/hello-world-smart-card/
11. Formation dispensée par Jan Nemec de Gemalto dans le cadre du concours
SIMAGINE, nov. 2007.
12. Application Programming Notes : Java Card™ Platform, Version 2.2.1,
Sun MicroSystems, 2003.
13. Samia Bouzefrane, Java RMI, Support de Cours en NFP111,
99
http://cedric.cnam.fr/~bouzefra
samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Bibliographie
http://java.sun.com/javacard/3.0/
http://www.gemalto.com
http://www.oberthur.com
http://www.globalplatform.org
http://www.javacardforum.org
http://www.opencard.org
http://www.linuxnet.com/
http://www.iso.org
http://www.ttfn.net/techno/smartcards/
http://eurekaweb.free.fr/ih1-carte_a_puce.htm
http://membres.lycos.fr/dbon/historique.htm
http://apte.net/info-e/pubs.htm
Articles MISC hors série Cartes à puce, octobre et novembre 2008.