140 likes | 242 Views
Simulation d’Applications Java Card Carine Courbis INRIA Sophia-Antipolis, Dyade/Bull, ENS de Lyon et INSA de Lyon. Quelques définitions Etat de l’art Construction de notre environnement de simulation Discussion/Travaux futurs Conclusion.
E N D
Simulation d’Applications Java CardCarine Courbis INRIA Sophia-Antipolis, Dyade/Bull, ENS de Lyon et INSA de Lyon Quelques définitions Etat de l’art Construction de notre environnement de simulation Discussion/Travaux futurs Conclusion Carte à puce multi-applications + Java Card = Nveaux Développeurs besoin de nouveaux outils pour mettre au point le comportement des Applets Simulation d’Applications Java Card
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 • 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) APDU de Commande APDU de Réponse Obligatoire cla ins p1 p2 lc data le data sw1 sw2 Falcultatif Simulation d’Applications Java Card
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
Etat de l’art: Outils adaptés à Java Card Le checker Java Card de Sun 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 Programme Java Card Byte code (.class) Validation Java Card Javac Checker Simulation d’Applications Java Card
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 Présentation textuelle de l’arbre Programme Java Type Checker (Typol) Résultats à interpréter pour l’utilisateur Pretty Printer (Ppml) Parseur (Metal) Interprète (Typol) Arbre de syntaxe abstraite • syntaxe en Metal • règles d ’affichage en Ppml • règles sémantiques en Typol Simulation d’Applications Java Card
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
Exemple de vérification statique :Tableau unidimensionnel 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; Programme incorrect + Règles Typol du checker testant les paramètres Simulation d’Applications Java Card
Légende Un Thread Un objet simple FrequentFlyer Notre simulateur d’applications Java Card: Présentation Notre Modèle • Acteurs(User, CAD, Carte) • Architecture • Acteurs = Threads • Comme dans réalité • Gestion evts asynchrones • Applets = Threads • Futur = multithreading • Séparation contextes meilleure visualisation User CAD APDU APDU PurseFr JCRE Applets Smart Card APDU de Commande APDU de Réponse Obligatoire Non implémenté dans notre modèle cla ins p1 p2 lc data le data sw1 sw2 Falcultatif Simulation d’Applications Java Card
Notre simulateur d’applications Java Card: Fonctionnement PurseFr JCRE CAD User Hypothèse: aucune applet n’avait été sélectionnée auparavant. Maître/esclave Déroulement séquentiel un seul Thread actif à la fois Modèle implémenté en Java (500 lignes) accepte t sendAction(PurseFr.AID, PurseFr.WITHDRAW, 100) 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
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
Résultats Simulation d’Applications Java Card
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
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
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