Projet de Veille Technologique Programmation carte à puce - JavaCard Ing. MZOUGHI Ines (i.mzoughi@gmail.com) Dr. MAHMOUDI Ramzi (mahmoudr@esiee.fr)
TEST Sommaire Programmation JavaCard Les prérequis... 3 I. Introduction :... 3 II. Architecture JavaCard :... 3 III. Le langage Java Card... 6 III.1 Les concepts de programmation :... 6 III.2 L'Applet carte :... 7 III.3 L'application Cliente (Application terminal)... 8 III.4 Construction d'une application Java Card :... 9 IV. Conclusion :... 9 2
Programmation JavaCard Les prérequis I. Introduction : Java Card une technologie qui permet aux cartes à puce et à d'autres périphériques à mémoire limitée de faire fonctionner des applications écrites en langage Java. C'est une carte à puce qui peut charger et exécuter des programmes écrits en Java. Contrairement aux cartes à puce traditionnelles, les programmes exécutés par la carte ne sont pas forcément fournis par l'émetteur de carte. Pour résumer, la technologie Java Card définit une plateforme sécurisée pour cartes à puce, portable et multi-application qui incorpore beaucoup tous les avantages du langage Java. II. Architecture JavaCard : L architecture de JavaCard est illustrée par la figure suivante : Figure 1. Architecture générale JavaCard (Source : javaworld.com) 3
L'architecture JavaCard est composée de plusieurs couches : Méthodes natives : Les méthodes natives (native methods) sont des méthodes de bas niveaux effectuant les opérations d'entrées/sorties, de gestion de la mémoire et de gestion du coprocesseur cryptographique. Machine virtuelle Java : La machine virtuelle Java (JVM ou Java Virtual Machine) est chargée d'exécuter le bytecode obtenu après l édition des liens et la compilation. On retrouve donc la machine virtuelle java (JVM) au dessus du système d'exploitation. L' «interpreter» est le cœur de l'architecture JavaCard sur la carte. C'est le moteur d'exécution des Applets ou Cardlets. Il exécute les programmes en convertissant le code précompilé en appel aux méthodes natives. Comme pour les ordinateurs, chaque carte d'architecture devra avoir sa propre machine virtuelle. La machine virtuelle JavaCard est identique à celle de Java mais est découpée en deux parties : une sur la carte, l'autre hors carte ("Java Card Converter"). Il est donc nécessaire de pré-compiler les applications avant de les charger sur la carte Standard Class Librairies : Les Standard Class Libraries ou encore le Javacard Framework (principalement le package javacard.framework) est un ensemble d'api. L'API contient l'ensemble des classes (les outils de bases) pour créer une Applet telles que : APDU (Application Protocol Data Unit), qui est le format de communication entre la carte et le monde extérieur. Applet, c'est de cette classe que doivent étendre toutes les Applets. AID (Application Identifier), c'est un identifiant qui est associé à une Applet. Les Exceptions, qui permettent d'envoyer des Status Word d erreur. Remarque : Cet ensemble (Native Methods, Interpreter et les Standard Class Libraries) est appelé JCRE (Java Card Runtime Environment). Il est contenu dans le masque des JavaCard et est donc inamovible. 4
Applets : Les applets sont les applications hébergées par la JavaCard. Elles ont été écrites en langage JavaCard puis compilées avant d'être stockées sur la carte. Elles s'exécutent, chacune son tour, en réponse à une demande du lecteur de carte. Installation d'une applet : L'installation d'une applet est réalisée lors de la fabrication de la carte ou lors de sa mise à jour à partir d'un terminal (lecteur de cartes) sécurisé. L'applet est alors soit chargée en ROM (étape de fabrication), soit chargée en EEPROM (étape de mise à jour). Après que l'applet soit chargée, le JCRE va effectuer une phase de reconnaissance en appelant automatiquement la méthode publique install (). Cet appel est réalisé une fois, avant que l'applet ne soit instanciée. L'applet est alors enregistrée auprès du JCRE par le biais de la méthode publique register (). Ce dernier connait donc définitivement l'applet et pourra y faire appel lorsque le lecteur de cartes le lui demandera. Sélection, activation et désactivation d'une applet : Une applet, identifiée par une clé unique, est inactive tant qu'elle n'a pas été sélectionnée pour être exécutée. La sélection de l'applet devant s'exécuter est réalisée par le terminal. Celui-ci envoie un APDU DE COMMANDE contentant l'identifiant de l'applet visée. Le JCRE suspend alors l'exécution de l'applet active à l'aide de la méthode publique deselect () et active l'applet sélectionnée grâce à la méthode publique select (). L'applet est alors prête à recevoir des APDU de commande, le JCRE les lui redirige. Communication avec les applets : Toute applet possède une méthode publique nommée process (). Cette méthode est appelée par le JCRE lorsqu'il reçoit un APDU DE COMMANDE pour l'applet. 5
III. Le langage Java Card Afin d optimiser la technologie Java Card pour les environnements à mémoire limitée, seulement un certain nombre de caractéristiques bien choisies de java ont été spécifiées. Dans le tableau suivant seules les caractéristiques supportées et non supportées importantes ont été inclues : Tab. 1 Caractéristiques Java supportées et non supportées par Java Card III.1 Les concepts de programmation : Une approche traditionnelle du fonctionnement de la carte à puce, d une manière générale, est représentée par la figure ci-dessous : La carte communique avec le terminal via des commandes/réponses APDU traitées directement par le masque de la carte. Ce dernier lit, écrit et met à jour les données contenues dans l'eeprom. L'approche JavaCard est différente : 6
L'application cliente envoie toujours des commandes APDU mais ce sont les applets Java présentes sur la carte qui les traitent. Les applets quand à elles sont exécutées par le JCRE (Java Card Runtime Environment) via l'api JavaCard. Ceci permet donc d'adapter la carte aux applications clientes en lui chargeant l'applet correspondante. III.2 L'Applet carte : L'applet carte est un programme serveur de la JavaCard, une applet est sélectionné par le terminal par un APDU de sélection. Cette sélection est faite en fonction de l'id de l'applet qui doit être unique (représenté par la classe AID signifiant Applet ID). Une applet a les propriétés suivantes : Une fois qu'elle est installée dans la carte, elle est toujours disponible L'applet doit hériter obligatoirement de la classe javacard.framework.applet Elle doit implémenter les méthodes qui interagissent avec le JCRE : - public void install( APDU apdu ) o Appelée (une fois) par le JCRE quand l'applet est chargée dans la carte o Doit s'enregistrer auprès du JCRE (méthode register( )) - public boolean select( ) o Appelée par le JCRE quand un APDU de sélection est reçu et désigne cette applet o Rend l'applet active - public void process (APDU apdu) o Appelée par le JCRE quand un APDU de commande est reçu pour cette applet (doit être active) - public void deselect ( ) o Appelée par le JCRE pour désélectionner l'applet courante Comment une applet gère les APDU? L'unité de traitement de base d'une applet est un objet de type javacard.framework.apdu qui est transmis par le JCRE à la réception d'un APDU de commande par la carte (en provenance du terminal). La méthode process ( ) de l'applet courant est alors appelée. La lecture et l'écriture dans le buffer d'apdu se déroule comme le montre le diagramme de séquence ci dessous : 7
Finalement, le rôle d'une applet est d'une part de maintenir son propre état, gérer ses champs, créer des objets et les référencer pour travailler. D'autre part elle répond à des commandes APDUs (méthode process( )) avec des réponses APDUs. Pour concevoir une applet on doit effectuer les étapes suivantes : Créer les objets de base à l'installation, initialiser les champs o Implémentation de la méthode install ( ) Définir les APDUs traités par la méthode process ( ) o o Implémentation d'un analyseur de commandes Utilisation des champs et objets de l'applet Définir les traitements à la sélection et à la désélection (méthodes select ( ) et deselect( )). III.3 L'application Cliente (Application terminal) L'application cliente se trouve sur le terminal qui dialogue avec la carte : Elle implémente les classes du terminal (avec JDK) Elle communique avec le serveur (applet carte), pour cela elle s'occupe de : 8
o l'établissement de la liaison : envoi d un APDU de sélection avec l AID de l applet (standardisé). o l'invocation de services de l applet, c'est à dire : le codage et l'envoi d APDUs de commande conformes à ceux traités par l applet la réception et décodage des APDUs de réponse retournés par l applet Le diagramme de séquence ci dessous indique les communications entre l'application cliente avec la carte : III.4 Construction d'une application Java Card : Une application carte s'effectue en trois étapes : Ecriture du code dans la carte (application serveur = applet Java Card) : Il implémente les services. Installation de l'applet dans les cartes : Ceci permet d'initialiser les services. Le code dans le terminal (application cliente) : Il invoque les services implémentés dans l'applet. IV. Conclusion : Au fil du temps, la carte à puce a subit des évolutions majeures et qui lui ont permis de gagner la confiance des utilisateurs. L apparition de JavaCard est une étape marquante de cette évolution. 9