Vous êtes sur la page 1sur 51

La carte puce et la Technologie Java La carte puce et la Technologie Java

Samia Bouzefrane Matre de Confrences CEDRIC CNAM samia.bouzefrane@cnam.fr http://cedric.cnam.fr/~bouzefra

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La carte puce : :introduction et principe La carte puce introduction et principe

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La carte puce aujourdhui


Montique : - 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 (aot 2006 en France) Enseignement (comme carte d'tudiant et/ou de restauration) Tlphonie mobile (carte SIM) Secteur mdical (carte Vitale en France, carte SIS en Belgique). Titre de transport (Passe Navigo Paris, Oyster Londres, Korrigo (un seul titre de transport pour tous ses dplacements en transports en commun ). Scurit informatique (authentification forte et signature lectronique): carte dot dun cryptoprocesseur pour la gnration des cls et le stockage de la cl prive).
3 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Historique Invention de la carte puce


1967-1968: Jrgen Dethloff et Helmut Grtrupp ingnieurs allemands (dposent un brevet en 1969)

1970: Kunitaka Arimura japonais dpose un brevet en mars 1970 au Japon

1971: Paul Castrucci de IBM dpose aux USA un brevet intitul Information Card

1974-1979 : Roland Morno franais dpose 47 brevets dans 11 pays (cre ensuite la socit Innovation) Implication industrielle de Bull et Schlumberger

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Premire carte puce

1979: 1re carte base de microcontrleur Fabrique par Motorola pour Bull CP8 Possde une UC de type 6805 (micro-contrleur 8 bits de Motorola)

1re implmentation de la smart card (CP8) RAM : 36 octets EPROM : 1ko ROM : 1,6 ko

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Famille de produits
carte mmoire carte logique cble carte microprocesseur

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Dveloppement dune application

Carte mmoire = X zones mmoires Carte micro-processeur : installation de vrais programmes

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Cartes microcontrleur
Cartes puce intelligentes Comportent un microcontrleur : - UC - PROM - RAM - EEPROM - interface dE/S - crypto processeur Processeur : 16 ou 32 bits EEPROM : de 1Ko 128 Ko (256 Ko pour une Java Card ou une Basic Card) Interface srie: UART simplifi

dans le mme circuit

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Synoptique interne dune carte microcontrleur

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Fonctionnement

10

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les grandes familles de SE

Les prmisses (avant 1990): - M4, BO, COS,... Mono-application Plus ou moins fig dans les fonctions et structures COS : possibilit dajouter des fonctions Les volutions (1990-1995) : - MP, MP100, MCOS - Multi-application - CQL (1993), Basic Card,.... En avant vers louverture... - Java Card - .Net

11

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Architecture matrielle aujourdhui

CPU : 8, 16 & 32 bits, - Coeur 8051, AVR, ARM, MIPS, propritaire Mmoires : - RAM : 1 4 Ko - NVM (EEPROM/Flash) : 16 32 Ko - ROM : 32 64Ko Co-processeur - Java Card : excution directe du Byte Code Java Card Technology 2.2

12

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Caractristiques physiques dune carte SIM

Dbut des annes 90: Une carte SIM : un CPU (8 bits), RAM (128 octets), ROM (7 Ko), EEPROM (3 Ko). Anne 2008 : Une carte SIM : un CPU (32 bits), RAM (16 Ko), ROM (512 Ko), EEPROM/FLASH (512 Ko), processeur ddi au calcul cryptographique. La ROM (Read Only Memory) contient le systme d'exploitation de la carte, les mcanismes de scurit (algorithmes spcifiques (API GSM). l'EEPROM (Electrically Erasable Programmable Read Only Memory) contient des rpertoires dfinis par norme GSM (tels que les numros de tlphones l'abonn) et des donnes lies aux applets (service de messages courts et applications spcifiques). la RAM (Random Access Memory) permet d'effectuer des calculs ou de charger des instructions et les excuter.
13 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La normalisation La normalisation

14

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les standards

Les normes lies la carte : ISO, ETSI, (tlcommunications, GSM) EMV, (cartes de paiement) ICAO, (agence de lONU, biomtrie, passeport) Sant, ...

15

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Normes principales des cartes contact : lISO 7816

LISO 7816 Idenfication cards Integrated circuit cards with contacts publi par lISO (International Organisation for Standardisation) le plus important standard dfinissant les caractristiques des cartes puce qui fonctionnent avec un contact lectrique 15 normes sont proposes pour les cartes contact.

16

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Normes principales des cartes contact


La norme ISO 7816-1 prcise les caractristiques physiques de la carte

La norme ISO 7816-2 dfinit la position et le brochage des contacts de la carte

La norme ISO 7816-3 dfinit les niveaux lectriques utiliss pour le dialogue avec la carte

La norme ISO 7816-4 dfinit les commandes de base des cartes puce

17

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La norme ISO 7816-1


ISO 7816-1 : rvis en mars 1998 dfinit les caractristiques physiques des cartes puce contact, ex : la gomtrie, la rsistance, les contacts, etc.

18

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Caractristiques mcaniques des cartes puce

Mme si on connat en gnral deux formats de la carte puce Celui de la carte bancaire Celui de la carte SIM

3 formats normaliss : ID1, ID00 et ID000

19

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les 3 formats
ID 01

ID 00

ID 000

20

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les 3 formats
Le fabricant produit une seule taille (ID1), le client final pourra rduire ses dimensions au format ID00 ou ID000 (ex. carte SIM)

21

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Normalisation AFNOR / ISO


La position des contacts : position AFNOR et position ISO

Carte ISO

Carte AFNOR

22

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-2

Elle spcifie le dimensionnement physique (extrieur) des contacts de la puce. 2 des 8 contacts rservs une utilisation future (RFU) sont redfinis pour lutilisation USB dans la norme ISO 7816-12.

Dimension et emplacement des contacts, rvis en mars 1998.

23

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-2

Valeurs en mm

24

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-2

Vcc: tension lectrique (3 5 V) RST: cest le reset , initialise le microprocesseur (warm reset) cold reset = coupure et rtablissement de lalimentation CLK: signal dhorloge car pas dhorloge sur la carte GND: masse Vpp: utilis dans les anciens modles pour avoir une autre source dalimentation I/O: utilis pour le transfert des donnes et des commandes entre la carte et le lecteur. La communication half-duplex.
25 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Signification des contacts


Vcc : tension dalimentation positive de la carte fournie par le lecteur (4.75V Vcc 5.25V) Vcc=3.3V pour une carte SIM RST: commande de reset de la carte, fournie par le lecteur (entre non obligatoire avec certaines cartes mmoire) CLK: Clock, horloge fournie la carte par le lecteur - rythme les changes de donnes entre la carte et le lecteur RFU (Reserved for Future Use) non utiliss pour le moment GND masse lectrique de la carte Vpp: tension de programmation de la carte fournie par le lecteur -inutilis aujourdhui -21V ncessaire dans les premires cartes pour crire dans des EPROM I/O entres/sorties des donnes - ligne bidirectionnelle (carte
26

lecteur)
samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-3
Elle dfinit linterface lectrique et les protocoles de transmission : Les protocoles de transmission (TPDU, Transmission Protocol Data Unit) T=0 : protocole orient octet, T1 : protocole orient paquet, T=14 : rserv pour les protocoles propritaires, La slection dun type de protocole, La rponse un reset (ATR, ou Answer To Reset) qui correspond aux donnes envoyes par la carte immdiatement aprs la mise sous tension, Les signaux lectriques, tels que le voltage, la frquence dhorloge et la vitesse de communication.

27

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

ATR dfini dans lISO 7816-3

ATR (Answer To Reset): Ds que la carte est mise sous tension, elle envoie un message de rponse dinitialisation appel ATR, il peut atteindre une taille maximale de 33 octets. Il indique lapplication cliente les paramtres ncessaires pour tablir une communication avec elle. Paramtres envoys par la carte : - Le protocole de transport ; - Taux de transmission des donnes ;

28

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Le protocole APDU Le protocole APDU

29

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-4

Elle dfinit les messages APDU (Application Protocol Data Units) utiliss par les cartes puce pour communiquer avec le lecteur.

Les changes seffectuent en mode client-serveur,

Le terminal est toujours linitiateur de la communication.

30

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-4 : Le protocole APDU

terminal

carte

Commande APDU (xxxx)

Rponse APDU (xxxx)

31

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Format des commandes APDU

Commande APDU Entte obligatoire CLA INS P1 P2 Lc Corps optionnel Data field Le

CLA (1 octet): Classe dinstructions --- indique la structure et le format pour une catgorie de commandes et de rponses APDU INS (1 octet): code dinstruction: spcifie linstruction de la commande P1 (1 octet) et P2 (1 octet): paramtres de linstruction Lc (1 octet): nombre doctets prsents dans le champ donnes de la commande Avec Le=0, - Si cde dcriture => pas de donnes utiles - Si cde de lecture => la cde doit retourner 256 octets de donnes utiles Data field (octets dont le nombre est gal la valeur de Lc): une squence doctets dans le champ donnes de la commande

32

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Format des rponses APDU


Rponse APDU Corps optionnel Data field SW1 Partie obligatoire SW2

Data field (longueur variable): une squence doctets reus dans le champ donnes de la rponse SW1 (1 octet) et SW2 (1 octet): Status words (Mots dtat)tat de traitement par la carte

SW1 SW2 =

0x90 0x00 0x6E 0x00 0x6D 0x00 0x6B 0x00 0x67 0x00 0x98 0x04 0x98 0x40

Succs CLA error INS error P1, P2 error LEN error Bad PIN Card blocked
samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

33

Exemples de classes : CLA

34

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

LISO 7816-5
Elle dfinit la procdure denregistrement et dattribution des identifiants des applications (AID, ou Application IDentifier). Un unique AID est associ chaque application = {RID, PIX} RID : le numro denregistrement du fournisseur dapplication attribu par la Copenhagen Telephone Company Ltd. Le RID doit tre le mme pour le paquetage et l'applet.

Application identifier (AID) National registered provider (RID) 5 octets application Proprietary application extension (PIX) 0 to 11 octets identifier

35

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La gestion des fichiers dune carte puce La gestion des fichiers dune carte puce

36

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les fichiers
Cartes mmoire: composes de zones mmoire destines la lect/crit Cartes puce: comportent un vritable systme de fichiers - cration/destruction de fichiers - attribuer un nom un fichier - dfinir des restrictions daccs en Letc/crit - lire/crire dans un fichier - le plus contraignant est lchange en binaire entre le lecteur et la carte

37

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Arborescence des fichiers et rpertoires


La norme ISO 7816-4 dfinit larborescence de fichiers Vocabulaire propre aux cartes puce - EF (Elementary Files): fichiers lmentaires (feuilles de larbre) - DF (Dedicated Files) : quon peut appeler Directory Files (rpertoires) - MF (Master File): fichier matre, cest le rpertoire racine

38

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Types de Fichiers
Fichier structure transparente : suite doctets (min=1 octet, max: 255 octets) Fichier structure linaire fixe : enregistrements de taille fixe, indic partir de 1 Fichier structure linaire variable: enregistrements de taille variable, indic partir de 1 Fichier structure linaire cyclique : a la structure linaire fixe ferme, avec indice 1 = dernier enregistrement crit.

39

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les commandes de gestion de fichiers

Binary (read, write, search, erase) Record (read, write, update, append, search, erase) Get/Put Data

40

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Larrive de la technologie Java Card


Anne 1979 1980-81 1983 1984 1987 1989 1998 vnement Premire carte fabrique par Motorola pour Bull CP8 Premires exprimentations de tlvision payante Premires cartes tlphoniques France Tlecom Premire version de la carte bleue base de carte Bull CP8 Publication des normes ISO 7816 Premires cartes GSM pour tlphones mobiles (Gemplus) Premires cartes Java Card

41

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

La technologie Java Card : :introduction et principe La technologie Java Card introduction et principe

42

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Java Card - Introduction


Besoin des systmes programmables Recherche de solution volutive (dpasser la ROM) Les applications : Longues dvelopper Statiques dans leurs fonctions Des tentatives 1re version: octobre 1996, dmarrage et produit rel en 1998, une ralit industrielle partir de 2000. En 2004, le nombre de Java Cards vendus a atteint le milliard. En 2007, 3 milliards de cartes SIM fabriques

43

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

tapes du dveloppement de lindustrie


La carte microprocesseur et les grandes tapes de dveloppement de la technologie : Les pionniers (1975-1985): premires ides (les bases technologiques sont tablies) 1985-1995: la technologie est amliore - marchs et dploiements importants: CB, GSM - limites : besoin de davantage de flexibilit 1995-2005 : explosion du march, nouveau paradigme avec - les cartes volutives bases sur Java Card 2006: 1,2 billions de tlphones mobiles utilisant des cartes SIM/Java Card 1,65 billions cartes puce/ Java Card (source site de Sun ) 2005-???: la carte devient un lment du rseau -Les SCWS (Smart Card Web Server) - .Net
44 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Larrive de la technologie Java Card


Novembre 1996, premire proposition dutilisation de Java pour les cartes est faite par une quipe de Schlumberger (Austin) proposition de Java Card API permettant la programmation en Java de la carte Cest la Java Card 1.0 Bull, Gemplus et Schlumberger crent le Java Card Forum le JCF discute et propose Sun des spcifications Novembre 1997, publication de la spcification Java Card 2.0 Gemplus dmontre en oct./nov. CASCADE, le premier chip RISC 32 bit (ARM 7) avec de la mmoire Flash, une implmentation de la Java Card 2.0 et des DMIs (Direct Method Invocation), etc.

45

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Les volutions de la 2.x


La version 2.0 de la Java Card Specification introduit: un environnement dexcution La possibilit dcrire des applets avec une approche oriente objet (mme si le format de chargement ntait pas encore spcifi)

Mars 1999, la version 2.1 qui contient 3 parties est publie: Java Card API Specification Java Card Runtime Environment Specification Java Card Virtual Machine Specification

46

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Un lment de la technologie Java

47

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Une plate-forme Java Card (rsum)


est une carte puce avec une machine virtuelle Java capable dexcuter des applications crites en Java

Les plateformes Java Card sont normalises par Sun et Java Card Forum Java est le langage de programmation le plus utilis dans les applications ddies la carte puce

48

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Java Card = Java + smart Card

49

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Le langage Java Card Le langage Java Card

50

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Acteurs dune Java Card

51

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Types supports

52

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Caractristiques non supportes jusqu V2.2.2


Pas de Threads Pas de chargement dynamique Pas de Garbage Collector (ramasse-miettes, jusqu la version 2.2) Pas de clonage Pas de tableaux plusieurs dimensions Toutes ces caractristiques sont intgres dans la version 3.0 (pile TCP/IP, servlets, multi-threading, etc.) : spcification publie en mars 2008.

53

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Rsum des caractristiques


Caractristiques supportes boolean, byte, short Tableau une dimension Paquetage Java, classes, interface et exceptions Hritage, mthode abstraite, surcharge et cration dobjets (instantiation) int est optionnel Caractristiques non supportes long, double, float, char, String Tableau plusieurs dimensions Threads, srialisation Chargement dynamique de classes

Gestionnaire de scurit

54

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Caractristiques spcifiques Java Card


Objets temporaires (APDU, Reset, Select) Atomicit Partage Gestion dexceptions sur la carte (runtime, ISO) API particulire : Java Card 2.1.x et 2.2 Mthodes spciales pour linstallation dapplets, dAPDUs et de slection

55

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Processus de dveloppement dapplets

Off-Card CAP file On-Card

56

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Comment crire une applet Comment crire une applet

57

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Construction dapplets Java Card


Une application carte Code dans la carte : application serveur = Applet Java Card Code dans le terminal : application cliente Une application construite en 3 tapes criture de lapplication serveur (applet) Installation de lapplet dans la Java Card criture de lapplication cliente

58

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

crire une applet Java Card


Java Card API 2.1 tapes du dveloppement dune applet Spcifier les fonctions de lapplet : - spcifier les AIDs (Application IDentity) de lapplet et du paquetage auquel elle appartient - crire le corps de lapplet - compiler (.class) - convertir (.cap) - charger dans la carte

59

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Phases de dveloppement dune applet

Spcifier les fonctions de lapplet Assigner des AIDs lapplet et au paquetage contenant la classe de lapplet Concevoir les programmes de lapplet Dfinir linterface entre lapplet et le terminal

60

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Comportement dune applet

Application crite en Java Card Applet sur la carte est slectionne reoit des messages partir du lecteur traite ces messages retourne des donnes au lecteur est dslectionne

61

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Exemple de lapplet porte-monnaie lectronique

Les oprations offertes par lapplication : Lire le montant du porte monnaie, dbiter ou crditer son compte. Ces oprations sont implantes sur lapplet laide des mthodes suivantes : getBalance(), credit(), debit() Ces mthodes sont appeles directement par la mthode process(). Do: pour chaque opration dfinir une commande APDU qui dclenchera la mthode correspondante.

62

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Commandes de lapplet porte-monnaie lectronique


Commande APDU CREDIT Commande APDU CLA 0xB0 INS 0x30 P1 0x0 P2 0x0 Lc 1 Data field Valeur crditer Le NS

Commande APDU DEBIT Commande APDU CLA 0xB0 INS 0x40 P1 0x0 P2 0x0 Lc 1 Data field Valeur dbiter Le NS

Commande APDU GET BALANCE Commande APDU CLA 0xB0 INS 0x50 P1 0x0 P2 0x0 Lc NS Data field NS Le 2

63

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Structure dune Applet/1


-Inclure javacard.framework - lapplet doit hriter de la classe Applet - dclarer les constantes et variables - dans le constructeur de lapplet, prvoir linitialisation des variables dclares et lenregistrement auprs du JCRE
Monnaie (byte [] bArray, short bOffset, byte bLength) { balance = (short) 0x1000; register(); }

- Une mthode install pour linstallation de lapplet auprs du JCRE


public static void install (byte [] bArray, short bOffset, byte bLength) { new Monnaie (bArray, bOffset, bLength); }

Linstallation = cration de lobjet Applet et son enregistrement. - Deux mthodes select et deselect pour slectionner ou dslectionner lapplet, car avant toute utilisation dune applet, celle-ci doit tre slectionne.
64 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Structure dune Applet/2


-Une mthode process qui traite toute commande APDU reue du terminal:
public void process (APDU apdu) throws ISOException { byte [] buffer = apdu.getBuffer(); if (selectingApplet()) return; . }

- La mthode process doit faire appel selectingApplet() car mme la commande APDU SELECT sera reue par la mthode process.

- Toute commande APDU traite ncessitera une rponse APDU

65

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Applet porte-monnaie lectronique/1


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; // codes INS dans lentete de la commande APDU final static byte VERIF_INS = (byte)0x20; final static byte GET_BALANCE_INS = (byte)0x30; final static byte CREDIT_INS = (byte)0x40; final static byte DEBIT_INS = (byte)0x50; // Poids le plus faible a droite final static short MAX_BALANCE = (short)0x7fff; final static short MAX_TRANSACTION_AMOUNT = (short)0x3fff; final static byte [] MAX_BALANCE = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; final static byte [] MAX_TRANSACTION_AMOUNT = {(byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};

66

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Applet porte-monnaie lectronique/2

final static short SW_INVALID_AMOUNT = (short)0x6A83; final static short SW_AMOUNT_EXCEEDS_MAX = (short)0x6A82; final static short SW_NEGATIVE_BALANCE = (short)0x6A84; /* instance variables declaration */ byte [] balance; short balance; public void Monnaie (byte [] bArray, short bOffset, byte bLength) { balance = (short) 0x1000; register(); }

public static void install (byte [] bArray, short bOffset, byte bLength) { new Monnaie (bArray, bOffset, bLength); }

67

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Applet porte-monnaie lectronique/3

public boolean select () { return true; } public void deselect () { } public void process (APDU apdu) throws ISOException { byte [] buffer = apdu.getBuffer();

if (selectingApplet()) return;

68

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Applet porte-monnaie lectronique/4

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; } }

69

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Applet porte-monnaie lectronique/5

public void credit (APDU apdu) { byte [] buffer = apdu.getBuffer(); byte lc = buffer[ISO7816.OFFSET_LC]; short bytesRead = apdu.setIncomingAndReceive(); if ((lc != BALANCE_RESP_SZ) || (bytesRead != BALANCE_RESP_SZ)) { ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); } short creditAmount = Util.makeShort(buffer[ISO7816.OFFSET_CDATA], buffer[ISO7816.OFFSET_CDATA+1]); if (creditAmount < 0) ISOException.throwIt(SW_INVALID_AMOUNT); if (creditAmount > MAX_TRANSACTION_AMOUNT) ISOException.throwIt(SW_INVALID_AMOUNT); if (((short)(balance + creditAmount) > MAX_BALANCE) || (((short)(balance + creditAmount) < 0))) ISOException.throwIt(SW_AMOUNT_EXCEEDS_MAX); balance = ((short) (balance + creditAmount)); } . } // fin de lapplet 70
70

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture dune applet pour une plateforme criture dune applet pour une plateforme Java Card RMI Java Card RMI

71

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Rappel : Etapes dun appel de mthode distante d m

Client Serveur de noms

Serveur

3. Interroger

2. Publier

Application Cliente

1. Exposer 4. Rcuprer Serveur dobjets

Objet distant

7. Appel mthode
Skeleton

5. Appel de mthode Stub 10. Retour

6. Arguments srialisation

8. Retour

9. Rsultat

72

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Etapes dun appel de mthode distante en JCRMI d m


Terminal
Client Service de noms 2. Enregistrer 0. Crer
Application Cliente

Carte
Serveur

3. Interroger

4. Rcuprer
Applet Serveur

1. Crer

Objet distant

7. Appel mthode
Skeleton

5. Appel de mthode Stub 10. Retour

6. Arguments srialisation

8. Retour

9. Rsultat

73

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Le service de noms

rmiService est un service de noms qui possde une table de hachage dont les cls sont des noms et les valeurs sont des rfrences aux objets distants ;

rmiService est un objet cr par lapplet ;

Tout objet distant cr par lapplet est enregistr dans rmiService ;

74

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Dvelopper une application JCRMI Ct Serveur (carte) /1 Ct

1. Dfinir une interface distante (Xyy.java) ;

2. Crer une classe implmentant cette interface (XyyImpl.java) qui sera lobjet distant (ou le service)

3. Compiler cette classe (javac XyyImpl.java) ;

4. Crer une applet qui jouera le rle du serveur dobjets (XyyServer.java) ;

5. Compiler lapplet serveur et linstaller sur la carte ;

75

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Dvelopper une application JCRMI Ct Serveur (carte): gnration de Stub Ct g


6. Lancer le gnrateur rmic explicitement : Solaris and Linux platforms: rmic -classpath ../..;$JC_HOME/lib/javacardframework.jar -d examples/purse -v1.2 examples.purse.PurseImpl Microsoft Windows 2000 platform: rmic -classpath ../..;%JC_HOME%/lib/javacardframework.jar -d examples/purse -v1.2 examples.purse.PurseImpl On doit trouver dans examples/purse PurseImpl_Stub.class Purse.class 7. Linstallation de lapplet sur la carte permet la cration du service de noms rmiService et des objets enregistrer auprs de ce service;

76

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Dvelopper une application JCRMI Ct Client (terminal) Ct

8. La classe cliente qui sera crite doit disposer localement de : - linterface de lobjet distant et du - stub de lobjet (gnr pralablement par rmic lors de la compilation de lobjet distant) Le partage de lobjet distant se fait automatiquement grce JBuilder alors que le stub doit tre copi explicitement dans le rpertoire class du projet Client 9. Crer une classe cliente qui appelle les mthodes distantes de lobjet distant (XyyClient.java) ; 10. Compiler cette classe et lancer son excution.

77

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Objectifs du dveloppement en JCRMI d

Appeler le service (mthodes) offert par lapplet comme si le service se trouve sur le mme terminal que le client (faire abstraction de lendroit physique o se trouve le service appeler) Avoir un niveau dabstraction plus lev afin de ne pas manipuler par exemple le protocole APDU qui est dun niveau plus bas Sparer les spcifications fonctionnelles de lapplication des aspects nonfonctionnels (relatifs la communication avec la carte).

78

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Linterface de lobjet distant l


- Inclure en plus de javacard.framework le package java.rmi - Linterface doit hriter de la classe java.rmi.Remote
public interface Purse extends Remote { // on dclare les constantes utiliser // exemple public static final short BAD_ARGUMENT

= (short)0x6002;

// on dfinit les signatures des mthodes avec une leve // de lexception RemoteException et UserException si exception // dfinie par lutilisateur // exemple : public void debit(short m) throws RemoteException, UserException; }

79

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Implmenter linterface de lobjet distant Impl l l


- La classe dimplmentation doit tendre CardRemoteObject pour dsigner lobjet distant - Cette classe doit implmenter linterface pour associer un code aux mthodes dfinies dans linterface
public class PurseImpl extends CardRemoteObject implements Purse { // dfinir le constructeur qui se contente dappeler la classe mre public PurseImpl() { super(); } // associer un code chaque mthode dfinie dans linterface // en utilisant Java standard // Exemple de la mthode debit public void debit(short m) throws RemoteException, UserException { if(m<=0) UserException.throwIt(BAD_ARGUMENT); if((short)(balance-m) < 0) UserException.throwIt(UNDERFLOW); balance -=m; }
80 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Paramtres des mthodes distantes Param m

Les arguments des mthodes distantes sont de type simple (boolean, byte, short et int), ou bien un tableau une dimension de type simple. Le type int nest 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 dinterface distante, ou encore de type void.

Les objets distants sont passs par rfrence. Une rfrence un objet distant est en fait une rfrence au stub qui est le reprsentant local de lobjet ct client.

81

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Construire lapplet Serveur/1 l


LAID attribu lapplet doit tre connu du client (terminal)

Lobjet distant doit tre instanci et initialis, ce qui sera fait dans la mthode install(). Les objets distants communiqueront avec lextrieur via la mthode process() de lapplet.

La mthode install() permet lenregistrement de lapplet auprs du JCRE pour quelle soit slectionne aprs

Les mthodes select() et deselect() pour la slection et la dslection de lapplet

82

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Construire lapplet Serveur/2 l


Le constructeur de lapplet serveur contient la ligne suivante :
RemoteService rmi = new RMIService(new test.PurseImpl() ) ;

permet de crer lobjet sur la carte et de lui associer une rfrence RMI qui sera accessible par le client
dispatcher = new Dispatcher((short)1) ; dispatcher.addService(rmi, Dispatcher.PROCESS_COMMAND) ;

dfinit un seul service rajouter dans le service de noms (RMIService)

La mthode process() propage la commande APDU vers le service RMI:


dispatcher.process(apdu)

dlgue le traitement de la commande APDU au service RMI qui propage lappel lobjet distant.

83

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Comportement de lappel ct Serveur l ct

La commande APDU SELECT invite le service RMI renvoyer la rfrence de lobjet distant.

Une invocation de mthode distante est rcupre par lapplet qui dlgue lappel au service RMI qui propage lappel vers lobjet distant. La valeur retourne emprunte le chemin inverse.

84

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Exemple dapplet Serveur d


package RMITest; import javacard.framework.service.*; import javacard.framework.*; import java.rmi.*; public class PurseApplet extends Applet { private Dispatcher dispatcher; protected PurseApplet() { super(); RemoteService rmi = new RMIService(new RMITest.PurseImpl()); dispatcher = new Dispatcher((short)1); dispatcher.addService(rmi, Dispatcher.PROCESS_COMMAND); } public static void install(byte[] buffer, short offset, byte length) { //instantiation et enregistrement de l'applet (new PurseApplet()).register(buffer,(short)(offset+1),(byte)buffer[offset]); } public void process(APDU apdu) { dispatcher.process(apdu); } public boolean select() {/* rien a faire*/ return super.select(); } public void deselect() {/* rien a faire*/ super.deselect(); } }
85 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client

Dans notre environnement, le client est gnr automatiquement. Il restera uniquement faire des invocations aux mthodes distantes.

Oprations faites par le client : - Initialisation d'un CardAccessor - Connexion la plateforme JCRMI - Slection de lapplet serveur - Obtention de la rfrence de lobjet distant -Faire les invocations des mthodes de l'objet distant - Mise hors tension de la carte aprs usage .

86

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: Initialisation d'un CardAccessor

L'interface CardAccessor est utilise par la plateforme JCRMI pour communiquer avec la carte. L'initialisation de la carte est effectue la cration du CardAccessor : CardAccessor ca = (CardAccessor) new PCSCAccessor();

87

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: connexion la plateforme JCRMI

La classe JCRMIConnect permet la connexion du client la plateformes JCRMI. Elle fournit les fonctions ncessaires pour slectionner l'applet. Le constructeur a besoin d'un CardAccessor.

// Crer une connexion RMI a la plateforme Java Card

JCRMIConnect jcrmi = new JCRMIConnect(ca);

88

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: Slection de lApplet Serveur S l

Avant toute invocation de mthodes distantes, le client doit slectionner l'applet serveur adquate, identifie sur la carte par son AID (dfini lors de l'installation) : // slectionner l'applet Java Card:
jcrmi.selectApplet(AID,JCRMIConnect.REF_WITH_CLASS_NAMES);

89

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: Obtenir la rfrence de l'objet distant r

Le client doit obtenir la rfrence de l'objet distant pour faire les invocations. La rfrence retourne est celle du Stub.

// obtenir la rfrence initiale de l'interface PurseInterf


PurseInterf myPurse = (PurseInterf) jcrmi.getInitialReference(); if (myPurse == null) { throw new RuntimeException("Cannot get the initial reference"); }

90

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: Utiliser l'objet distant dans les invocations

Le client utilise la rfrence de l'objet distant pour faire l'invocation des mthodes.

// appel de la mthode debit()


short balance = myPurse.debit ( debitAmount );

91

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

criture du client: Fin de lutilisation de la carte l

Terminer l'utilisation de la carte (libration de ressources) : ca.closeCard();

92

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Exemple de client
Package rmiClient; import com.sun.javacard.clientlib.*; import com.sun.javacard.rmiclientlib.*; import java.rmi.*; import javacard.framework.UserException; import rmi.PurseInterf; public class MonClient { private static byte AID (byte) 0xA0, (byte) (byte) 0x50, (byte) (byte) 0x00, (byte) (byte) 0x41, (byte) }; static CardAccessor ca public MonClient() {

[]= { 0x00, 0x00, 0x00, 0x44,

(byte) (byte) (byte) (byte)

0x00, (byte) 0x18, 0x00, (byte) 0x00, 0x00, (byte) 0x52, 0x41

= null; PurseInterf wallet; }

public static void main(String[] args) { Instance init try { ca = (CardAccessor)new PCSCAccessor(); JCRMIConnect jcrmi = new JCRMIConnect(ca); 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) -

Exemple de client (suite)

finally{ try { ca.closeCard(); } catch(Exception e) { System.out.println(e.getMessage()); } } } // end main } // end class

94

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Rsum/1 sum

ATR

Terminal

Carte

-Ds la mise sous tension de la carte, elle envoie lATR au terminal pour sidentifier. - LATR est prise en compte par lobjet CardAccessor

95

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Rsum/2 sum

Commande APDU SELECT

Terminal

FCI

Carte

Lorsque le client appelle la mthode selectApplet de JavaCardRMIConnect, il envoie une commande APDU SELECT la carte via lobjet CardAccessor. Linstance de RMIService rpond en envoyant une rponse APDU FCI (File Control Information) qui inclut la rfrence lobjet distant.

96

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Rsum/3 sum

INVOKE(Rf, debit, (short)val)

Terminal

RETURN avec (short)valeur

Carte

- Lorsque le client appelle la mthode debit() de linterface distante Purse, lobjet PurseImpl_Stub envoie une commande dinvocation vers la carte via lobjet CardAccessor, en identifiant la rfrence distante, la mthode et paramtres de linvocation. - Linstance RMIService de lapplet dsrialise linformation et appelle la mthode debit() de lobjet distant et retourne la rponse dans une rponse APDU.
97

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Conclusion: Java Card RMI


Avantages offre un niveau dabstraction plus lev (pas de manipulation de commandes/rponses APDU qui deviennent dun niveau plus bas) se concentre sur laspect fonctionnel (laspect non-fonctionnel telle que la communication selon le protocole APDU est la charge de la plateforme) le code crit est rutilisable sur dautres plateformes JCRMI car il utilise les services de RMI sans faire appel des caractristiques intrinsques (cls de scurit, commandes APDU particulires ) la carte: cest le principe de PIM. Inconvnient JCRMI cache les spcificits de la carte et les problmes lis son interaction (la gestion de la scurit, le protocole APDU, etc.) qui sont importants connatre si on sintresse ce domaine.
98 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Bibliographie
1. http://java.sun.com/products/javacard/ 2. Technology for smart cards: architecture and programmers 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 Systmes Enfouis et Embarqus, 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 Vtillard : http://javacard.vetilles.com/2006/09/17/hello-world-smart-card/ 11. Formation dispense 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, http://cedric.cnam.fr/~bouzefra

99

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Bibliographie

Magazine MISC nov./dc. 2008

Octobre 2008

100

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Webographie
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 srie Cartes puce, octobre et novembre 2008.

101

samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -

Vous aimerez peut-être aussi