FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://fr.wikipedia.org/wiki/Java_Card

Java Card — Wikipédia

Contents
Architecture
Glossaire
Notes et références
    Notes

Février 1997, Schlumberger et Gemplus fondent Java Card Forum qui recommande des spécifications à JavaSoft (la division de Sun à qui appartient Java Card) en vue d'obtenir une standardisation du langage et promeut les APIs de Java Card pour qu'elle devienne la plate-forme standard de développement des applications pour les cartes à puce.

juin 2002 Java Card 2.2, en janvier 2010 l'entreprise Sun Microsystems.

Architecture

modifiermodifier le code

La carte à puce représente une des plates-formes informatiques les plus réduites. Le plus grand défi de conception de la technologie de Java Card est d'embarquer le logiciel de base Java dans une carte à puce en conservant l'espace mémoire nécessaire pour stocker des applications. La solution retenue par Sun, issue des travaux de Schlumberger, est d’implémenter un sous-ensemble des fonctionnalités du langage Java et d’appliquer un modèle réduit de la JVM (Java Virtual Machine) appelé JCVM (Java Card Virtual Machine). En plus de fournir le support de langage Java, la technologie de Java Card définit un environnement d'exécution en temps réel qui supporte la mémoire, la communication, la sécurité et le modèle d'exécution de l’application. Cet environnement respecte la norme standard ISO7816.

présentation architecture

La plate-forme Java Card est articulée autour :

  • d’une machine virtuelle Java Card appelée JCVM dont les spécifications définissent les fonctionnalités mises en œuvre par la technologie Java Card. Elles incluent le jeu d'instruction de la Machine Virtuelle Java Card, un sous-ensemble du langage Java et les formats de fichier utilisés pour installer des applets et des bibliothèques dans des cartes à puce ou autres périphériques qui hébergent la technologie de Java Card.
  • d’un environnement d’exécution Java Card appelé JCRE constitué de composants systèmes. La JCRE est responsable de la gestion des ressources des cartes à puces, des communications réseaux, de l'exécution ainsi que la sécurité des Applets. La JCRE sert de système d'exploitation de la carte à puce, celui-ci s'appuie sur la couche matérielle de carte à puce et du système natif.
  • d’un ensemble de librairies accessibles APIs, un sous ensemble du JCRE, contenant les définitions de classe requises pour supporter la JVCM et la JCRE. Il décrit les fonctions de bases utiles pour programmer des applications de cartes à puce.

La caractéristique la plus significative du JCRE est qu'il fournit une séparation claire entre le système et les applications. La technologie de Java Card définit une plate-forme sur laquelle les applications écrites dans le langage de programmation Java peuvent fonctionner sur carte à puce et autres périphériques avec mémoire. Les applications Java Card sont vues comme des applets ou des servlets.

À partir de la version 3.0, éditée par Sun en

Principe de programmation d'une Appletmodifiermodifier le code

Un Applet Java Card respecte la norme ISO 7816. C’est-à-dire qu’elle répond à des requêtes de la même manière qu’elle les reçoit sous la forme de commandes en byte codes. Ceci simplifie considérablement le développement d’une application, car il n’y a plus besoin de coder en bas niveau l’envoi et la réception des commandes. En effet cette partie est maintenant encapsulée dans un framework java.

Les commandes en byte code sont appelées des APDU (Application Protocol Data Unit). Celles-ci sont codées différemment en fonction de l’envoi et de la réception.

Une commande APDU telle qu'elle est envoyée depuis le lecteur à la carte Java est une série de cinq octets éventuellement suivis d'un nombre variable d'octets, formatés comme suit :

Format d'une commande APDU.
CLA
CLA est le nom du premier octet, dit octet de classe, défini par la norme ISO 7816, indiquant le numéro de commande.
INS
INS est le nom du second octet, dit octet d’instruction.
P1
P1 est le nom du troisième octet, dit octet de paramètre 1.
P2
P2 est le nom du quatrième octet, dit octet de paramètre 2.
Ln
Ln est le nom du cinquième octet, il indique le nombre d'octets de données qui vont suivre (qu'elles soient envoyées ou reçues, 0x00 indiquant qu'aucune donnée additionnelle ne suivra).
Données
Ce sont les données, au nombre de Ln, qui sont transmises par le lecteur à la carte. Si l'application embarquée prévoit seulement une transmission en sens inverse, aucune donnée n'est transmise ici.
Le
Le est le dernier octet après les données indiquant la taille maximale des données pour la réponse.

Une réponse APDU telle qu'elle est envoyée depuis la carte Java au lecteur, est une série d'octets, retournée en réponse à une commande et formatée comme suit :

Format d'une réponse APDU.
Données
Ce sont les données, au nombre de Le, qui sont envoyées par la carte au lecteur.
Statut
statut renvoyé par la carte, codé sur deux octets nommés : SW1 et SW2.
SW1
le premier octet, appelé SW1 indique le type de réponse. La valeur hexadécimale une valeur entre 0x90 et 0x9F indique que la commande a été correctement exécutée. Une valeur entre 0x60 et 0x6F indique que la commande n'a pas pu être exécutée par le programme placé dans la carte.
SW2
le second octet, appelé SW2 rapporte éventuellement des informations supplémentaires concernant la réponse.

Lorsque la commande au niveau de l’applet s’exécute normalement, la valeur du statut renvoyé correspond à 90 00.

Si une instruction INS prévoit à la fois d'envoyer et de recevoir des données, Java Card normalise un système d'APDU en deux phases. Dans un premier temps, l'APDU est envoyée avec pour <Ln> un nombre d'octets à envoyer, puis lorsque la carte répond 0x91 <Le> (indiquant que <Le> octets sont prêts à être retournés par la carte, en réponse à la commande) une APDU Get Response est transmise pour déclencher la réception de ces <Le> octets sortants.

En résumé, le champ de donnée(s) est optionnel dans les deux cas, APDU de commande et APDU de réponse. Par conséquent, il y a quatre cas possibles de communication entre le client et la plateforme Java Card Platform, Version 2.2.2 (ou Version 3.0.1 Classic Edition) :

Cas 1APDU de commande sans donnéeAPDU de réponse sans donnée
Cas 2APDU de commande avec donnée(s)APDU de réponse sans donnée
Cas 3APDU de commande sans donnéeAPDU de réponse avec donnée(s)
Cas 4APDU de commande avec donnée(s)APDU de réponse avec donnée(s)
Format de l'identifiant d'application.

Avant de pouvoir transmettre une commande à une Applet déployée dans une Java Card, il est nécessaire de la sélectionner par l’envoi d’une commande APDU spécifique en précisant l’identifiant de l’application AID. L’identifiant d’application est composé de deux parties. La première sur 5 octets, le RID, est assigné par la norme ISO. Celui-ci correspond à l’identifiant propre à l’entreprise. Le second, PIX est quant à lui composé entre 0 et 11 octets. L’assignation de celui-ci reste à la charge de l’entreprise qui développe l'application Java Card.

Pour la programmation d’une Java Card, il y a cinq étapes importantes :

  • Écriture du code Java source ;
  • Compilation du code ;
  • Conversion des fichiers .class en .cap ;
  • Vérification du fichier .cap (optionnel) ;
  • Installation du fichier .cap dans la Java Card.

Le point fort du développement Java Card est que les deux premières étapes peuvent être réalisées avec un environnement de développement JAVA classique.

Voici un exemple de code renvoyant tout simplement la chaine de caractères ‘Hello World’ sur la demande liée à l’instruction 0x10. Dans cet exemple le AID est composé des valeurs de RID = DA8EF6DD26 et de PIX = 86E899.

Exemple d’applet ‘Hello World’.

<head><title>HelloWorldWeb</title></head>\");\n out.println(\"<body><h1>HelloWorldWeb</h1>\");\n out.println(\"Hello World from Java Card</body></html>\");\n } finally {\n out.close();\n }\n }\n}\n"}}'>packageorg.carte.web; importjava.io.IOException; importjava.io.PrintWriter; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; publicclass HelloWorldWebextendsHttpServlet{ @Override publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException{ response.setContentType("text/html"); PrintWriterout=response.getWriter(); try{ out.println("<html><head><title>HelloWorldWeb</title></head>"); out.println("<body><h1>HelloWorldWeb</h1>"); out.println("Hello World from Java Card</body></html>"); }finally{ out.close(); } } }

Contenu du fichier web.xml

\n <description>The web application deployment descriptor conveys web application model\nelements and configuration information of an application between application\ndevelopers, application assemblers, and deployers.\n </description>\n <display-name>Hello World Web</display-name>\n <servlet>\n <servlet-name>HelloWorldWeb</servlet-name>\n <servlet-class>org.carte.web.HelloWorldWeb</servlet-class>\n </servlet>\n <servlet-mapping>\n <servlet-name>HelloWorldWeb</servlet-name>\n <url-pattern>/helloworldweb</url-pattern>\n </servlet-mapping>\n</web-app>\n"}}'><web-appxmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/javacard/jcweb-app_3_0.xsd"> <description>Thewebapplicationdeploymentdescriptorconveyswebapplicationmodel elementsandconfigurationinformationofanapplicationbetweenapplication developers,applicationassemblers,anddeployers. </description> <display-name>HelloWorldWeb</display-name> <servlet> <servlet-name>HelloWorldWeb</servlet-name> <servlet-class>org.carte.web.HelloWorldWeb</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldWeb</servlet-name> <url-pattern>/helloworldweb</url-pattern> </servlet-mapping> </web-app>

L'appel de la Servlet se fait par l’intermédiaire d'un navigateur web en précisant l'URL suivante :

5 milliards d'unités. (Source Nodal).

Glossaire

modifiermodifier le code
  • AID (Application IDentifier) : une chaine de caractères utilisée comme identifiant unique des Applets de la carte à puce selon la norme ISO 7816
  • APDU : Abréviation pour Application Protocol Data Units défini selon la norme ISO 7816-4.
  • APPLET : un composant simple d'une application Java Card qui s'exécute dans l’environnement APDU.
  • APPLET ETENDU: Dans le contexte Java Card, Une Applet étendu possède les fonctionnalités de la version connectée. (Exemple : Manipulation de Chaine de caractère).
  • Conteneur d'Applet : Mécanisme qui manage le cycle de vie des Applets. Dans le contexte Java Card, le conteneur fournit les services de communication sur lesquels les commandes d'APDU et des réponses sont envoyés.
  • Ramasse Miette automatique (Garbage collector) : Mécanisme qui libère automatiquement la mémoire utilisé par des objets qui ne sont plus utilisés par l'application. (Uniquement disponible dans la version 3 connectée).
  • SERVLET : Un composant générant dynamiquement du contenu web s’exécutant au sein d'une application web.

Notes et références

modifiermodifier le code

Notes

modifiermodifier le code
    (en) P.H. Hartel et L. Moreau, « Formalizing the safety of Java, the Java virtual machine, and Java card », ACM Computing Surveys (CSUR), vol. 33, n 4,‎ 2001, p. 517-558 (ISSN 0360-0300, e-ISSN 1557-7341, DOI 10.1145/503112.503115)
  1. (en) Java Card™ 2.2 Application Programming Interface : Revision 1.1 for the 2.2_01 Release, 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc, 2002, 2.2_01 éd., 278 p. (lire en ligne)
  2. (en) Oracle, Java Card 2.2 Off-Card Verifier : version 2.2, 901 San Antonio Road Palo Alto, CA 94303 USA, 2002, 24 p. (lire en ligne)
  3. (en) « Oracle Javacard Overview »
  4. (en) « Oracle Java Card Spécifications »
  5. (en) « Oracle Java Card Industries »
  6. (en) « Type utilisé dans la programmation Java »
  7. (en) « Autoboxing en Java »
  8. (en) « Import statique du langage Java »
Principaux systèmes d’exploitation
Apple
Mac OS Classic
Dérivés de NeXTSTEP
Dérivés de BeOS
DOS
IBM
Microsoft Windows
Fondés sur MS-DOS
Branche NT
ReactOS Foundation
Branche NT (GPL/LGPL/AGPL) non-Microsoft
POSIX / Unix
AT&T / Laboratoires Bell
BSD
GNU Hurd
Linux (liste)
Autres dérivés
Dérivés d'AmigaOS
Dérivés du TOS
D’importance historique
Mobile
Noyau Linux
Autres noyaux
Embarqués
Pour capteur en réseau
Pour carte à puce
Temps réel
Autres systèmes
Pour une liste complète, voir la liste des systèmes d’exploitation et la catégorie « Système d’exploitation ».

View original on Wikipedia | Back | FazBrowse Home