Simulation d `Application Java Card

publicité
Simulation d’Applications Java Card
Carine Courbis
INRIA Sophia-Antipolis, Dyade/Bull, ENS de Lyon et INSA de Lyon
Carte à puce multi-applications + Java Card = Nveaux Développeurs 
besoin de nouveaux outils pour mettre au point le comportement des Applets
Quelques définitions
Etat de l’art
Construction de notre environnement de simulation
Discussion/Travaux futurs
Conclusion
Simulation d’Applications Java Card
1
Quelques Définitions
• APDU (Application Protocole Data Unit) ISO 7816-3
Format standardisé des données échangées entre le lecteur de carte et
la carte
APDU de Commande
cla
ins
p1
p2
lc
data
le
APDU de Réponse
Obligatoire
data
Falcultatif
sw1
sw2
• CAD (Card Acceptance Device = lecteur de carte)
Rôle: Traduire choix de l’utilisateur en APDU de commande pour la carte et
attendre l ’APDU de réponse pour l’afficher décodée
• JCRE (Java Card Runtime Environment) machine virtuelle + classes
• AID (Application Identifier)
• Applet  Application
(Unité de sélection, contexte, fonctionnalité et de sécurité sur une carte Java Card)
Simulation d’Applications Java Card
2
Etat de l’art : Travaux formels
Preuve de la sûreté des types en Java
2 approches:
 source
  sous-ens. Java séquentiels  prouver préservation des types
[Drossopoulou, Eisenbach, Syme]
 Empilement de  sous-ens Java pour sém. dynamique [Börger,
Schultze]
 byte code
 Transitions d’états d’un sous-ens. des instructions de la JVM [Qian]
dans la mémoire qd. exécution  prouver bon fonctionnement
 Systèmes à états finis pour vérif. de byte code Java Card [Posegga,
Vogt]
 Procédure de vérif. de la sûreté du byte-code sur un sous-ens. [Rose]
Simulation d’Applications Java Card
3
Etat de l’art: Outils adaptés à
Java Card
• Le checker Java Card de Sun
Programme
Java Card
Javac
Byte code
(.class)
Checker
Validation
Java Card
• Outils commerciaux :
– GemXpresso Rapid Applet Development de Gemplus
– Cyberflex 2.0 Multi8K de Schlumberger
– Odyssey Lab de Bull/CP8
Spécifiques Java Card uniquement sur le byte code
 notre environnement basé sur une sémantique formelle
du langage source
Simulation d’Applications Java Card
4
La Sémantique Naturelle de Java
• Large sous-ensemble, spécifié par M. Russo
– Héritage, caractéristiques objets  sém. Big-Step
– Multithreading  sém. Small-Step
 400 règles Typol exécutables dans système Centaur
• Centaur: outil de génération d ’environnement de langage
Parseur
(Metal)
•
•
Présentation
textuelle de l’arbre
Programme
Java
Type
Checker
Pretty
Printer
(Typol)
(Ppml)
Arbre de syntaxe
abstraite
Interprète
Simulation d’Applications Java Card
Résultats à
interpréter
pour
l’utilisateur
•
syntaxe en Metal
règles d ’affichage en
Ppml
règles sémantiques en
Typol
(Typol)
5
Définition Syntaxique de Java
Card
• Suppressions
char, long, double, float, synchronized, volatile, transient
• Ajout
structure de résultats = liste des APDUs transmis
• Modification
Tableaux à 1 seule dimension
Possible d ’avoir int[] i ou int i[]
mais aussi int[] i[]
un vérificateur statique
Simulation d’Applications Java Card
6
Exemple de vérification statique :
Tableau unidimensionnel
Programme incorrect +
Règles Typol du checker
testant les paramètres
Simulation d’Applications Java Card
set checkParam is
judgement |- javacard -> Bool;
ArrayArrayParamRule: //erreur 2 dim
|- parameter(_,arrayof(T),array(P))-> false();
do message("javacard", "checker",
"errorDimArray", "Error", subject, "");
ArrayParamRule: // 1 dim
|- parameter(_,arrayof(T),Param) -> false();
provided diff(Param, array(_));
SimpleParamRule:
|- parameter(_, TypParam, _) -> true() ;
provided diff(TypParam, arrayof(_));
end checkParam;
7
Notre simulateur d’applications
Java Card: Présentation
Notre Modèle
• Acteurs (User, CAD,
• Architecture
User
Légende
Un Thread
CAD
– Acteurs = Threads
Un objet simple
APDU
• Comme dans réalité
• Gestion evts asynchrones
APDU
PurseFr
JCRE
APDU de Commande
cla
ins
– Applets = Threads
• Futur = multithreading
• Séparation contextes 
meilleure visualisation
FrequentFlyer
Applets
Smart Card
p1
p2
lc
data
Simulation d’Applications Java Card
le
Carte)
APDU de Réponse
Obligatoire
data
Falcultatif
sw1
sw2
Non implémenté
dans notre modèle
8
Notre simulateur d’applications
Java Card: Fonctionnement
PurseFr
Hypothèse:

accepte


aucune applet
n’avait été
sélectionnée
auparavant.
JCRE

 

CAD
User

Maître/esclave
Déroulement
séquentiel  un
seul Thread actif
à la fois

t
 sendAction(PurseFr.AID, PurseFr.WITHDRAW, 100)
Modèle
implémenté en
Java (500 lignes)
 sendActionToCard() & APDU1 (Cla Ins = SELECT, P1 = PurseFr.AID)
 select()  APDU2 (Sw1 = OK)
 sendActionToCard() & APDU3 (Cla = PROCESS, Ins = PurseFr.WITHDRAW, Data=100)
 process(APDU3)  APDU4 (Data = 900, Sw1 = OK)
 Affichage du compte-rendu de l ’action
Simulation d’Applications Java Card
9
Modifications sémantiques
• Modification de l’entrelacement des threads
sém small-step  avance jusqu’à mort ou suspension du thread
Not_suspended_thread:
send_current(ObjL1, OThId1) &
exec_activity(ObjL1, ClVarL1, OThId1, ObjId1 |- Clr :> ObjL1_1, ClVarL1_1, ThStatus1_1)
---------------ObjL1, ClVarL1, OThId1, ObjId1 |- ThStatus1, Clr -> ObjL1_1, ClVarL1_1, ThStatus1_1;
provided not_eq(ThStatus1, suspended(_));
• Construction de la structure contenant les APDUs
DisplayCADApdu:
find_Apdu_attribute(identifier "commandApdu" |- ObjL1, AttrL1 -> AttrL2)
---------------(ObjL1, OThId1, object(_, identifier "CAD", AttrL1, _, _, _, _), clr(_, _, _, _,
inst_l[Inst1.InstL1])) ;
provided not_eq(Inst1, i_block(inst_l[], _));
do
update_apduL(apdu(OThId1, AttrL2) -> ApduL) &
emit_tree("apdu", ApduL);
Simulation d’Applications Java Card
10
Résultats
Simulation d’Applications Java Card
11
Discussion/Travaux Futurs (1/2)
• Le modèle
– Gestion des APIs d’authentification du PIN (Personal Identifier Number)
– A compléter (tableaux de bytes, nb hexa, APIs)
– Gestion des evts. asynchrones (coupure courant, retrait de carte)
• La sémantique
– De Java
exceptions, tableau, nb hexa,
op (décalages droite ou gauche, and, or, xor bit à bit…), packages
Simulation d’Applications Java Card
12
Discussion/Travaux Futurs (2/2)
• La semantique (suite)
– De Java Card
Spécifier comportement JCRE, CAD, Classe Applet en Typol 
taille prog performances + gestion transparente des threads
Spécifier les classes et APIs de Java Card (51 classes dont 18 d’exception)
Liste d’objets transients (moment de maj), transactions atomiques, partage
des objets
• Performances
Prog assez gros (500 lignes) exécuté en 7 mn sur un DEC PWS 500
• Interface
Interface interactive - Pb: avoir un CAD générique
Fê pour visualiser comportement JCRE et Obj File
Simulation d’Applications Java Card
13
Conclusion
• Durant ce stage:
– Etude langage, standards liés aux cartes à puce
– Modélisation de tous les acteurs
– Modification sém. formelle de Java
• Objectifs:
– Compléter description formelle du langage
– Proposer de nouveaux outils
– Etude et Formalisation de propriétés liées à la sécurité
 Disposer d’un env. complet de dév. et vérification
Simulation d’Applications Java Card
14
Téléchargement