Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Java Card

Un article de Wikipédia, l'encyclopédie libre.

Pour un article plus général, voirSystème d'exploitation pour carte à puce.

Java Card est unsystème d'exploitation pour carte à puce qui fournit essentiellement unenvironnement d'exécution pour un sous-ensemble du langageJava spécifiquement destiné aux applications pourcarte à puce. Java Card permet l'exécution d'applications au sein des cartes à puce, qui offrent des capacités de mémoire et de traitement limitées. De multiples applications peuvent être déployées avant et même après que lacarte à puce a été fournie à l'utilisateur final. Les applications écrites dans lelangage de programmation Java peuvent être exécutées en toute sécurité sur l’ensemble des types de cartes disponibles sur le marché.

Historique

[modifier |modifier le code]

En 1996, les ingénieurs de la division carte deSchlumberger[1] auTexas (qui a fusionné plus tard avecGemplus international pour formerGemalto) ont souhaité simplifier la programmation des cartes à puces tout en préservant lasécurité des données dans le respect de la norme ISO 7816.

La solution retenue fut le langage de programmationJava. En raison de la faible capacité mémoire disponible sur uneCarte à puce seulement un sous-ensemble deJava pouvait être utilisé. Ainsi fut créé Java Card 1.0 en, le premier langage orienté objet adapté aux cartes à puce.

,Schlumberger etGemplus 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 lescartes à puce[1].

, les producteurs de Cartes à puce commeDe La Rue,Bull,Giesecke & Devrient(G&D) rejoignent Java Card Forum qui édite une nouvelle version de spécifications Java Card 2.0[1].

Par la suite, Sun éditera alors quatre nouvelles spécifications : en édition de Java Card 2.1[1], en Java Card 2.2, en Java Card 3.0 et enfin la plus récente Java Card 3.0.1 en[2].

La sociétéOracle Corporation acquiert en l'entrepriseSun Microsystems.

Architecture

[modifier |modifier le code]

La carte à puce représente une des plates-formes informatiques les plus réduites[3]. Le plus grand défi de conception de la technologie de Java Card est d'embarquer le logiciel de baseJava dans unecarte à puce en conservant l'espace mémoire nécessaire pour stocker des applications. La solution retenue par Sun, issue des travaux de Schlumberger[1], est d’implémenter un sous-ensemble des fonctionnalités du langageJava et d’appliquer un modèle réduit de la JVM (Java Virtual Machine) appelé JCVM (Java Card Virtual Machine)[3].En plus de fournir le support de langageJava, 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[4].

présentation architecture

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

  • d’unemachine virtuelle Java Card appelée JCVM[note 1] 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 langageJava 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[6].
  • d’un environnement d’exécution Java Card appelé JCRE[note 2] 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[6].
  • d’un ensemble de librairies accessibles APIs[note 3], 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[6].

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

À partir de la version 3.0, éditée par Sun en, à la suite des évolutions des cartes à puces, la plate-forme Java Card se décline en 2 versions[8].

Version Classique[9]
Cette version est une évolution de la version 2.2 et cible les systèmes limités en ressources et qui supportent les applications basées sur les Applets. Elle apporte des correctifs et offre l’exploitation de nouveaux algorithmes de sécurité (Exemple support des clés RSA 4096 bits). De plus, un ajustement avec les récents standards des cartes «sans contact» a été réalisé.
Version Connectée[9]
Cette version apporte un environnement amélioré d’exécution et une nouvelle machine virtuelle. Une nouvelle architecture a été conçue pour transformer la carte à puce en élément sécurisé de réseau. La carte à puce peut alors fournir des services réseaux IP tels queserveur web HTTP, serveur web sécurisé HTTPS, identification, accès aux ressources d'un réseau. Cette version cible des produits moins limités en ressources incluant de nouvelles fonctionnalités orientées réseau telles que lesapplications web, appeléesservlet. Cette version intègre les fonctionnalités de la version classique.
Schéma de l'architecture

Version Java Card 2.x et Java Card 3 « classique »

[modifier |modifier le code]

Java Card est donc l'adaptation de la technologieJava pour lescartes à puce. Lesapplets sont développées dans le langageJava, elles sont ensuite transformées afin de satisfaire les contraintes de mémoire, puis sont chargées dans la carte[3]. Une fois installé sur la plate-forme et sélectionné, lebytecode[note 4], de l'applet est exécuté par la machine virtuelle embarquée JCVM[10].

Machine Virtuelle Java Card

[modifier |modifier le code]

La JCVM exécute lebytecode, contrôle l'attribution de la mémoire, gère les objets et met en application la sécurité pendant l'exécution. La capacité des cartes à puces étant trop limité pour contenir toutes les informations des fichiers de classe Java, vérificateur decode objet, la JVCM est donc implémentée en deux parties distinctes (principale différence entre la JVM et la JCVM)[11] :

Java Card Virtual Machine

Ensemble, ils implémentent le chargement des fichiers de classe Java par l’intermédiaire du vérificateur et convertisseur pour enfin exécuter l'applet à l'aide de l’interpréteur.

le vérificateur[12]
examine un ou plusieurs fichiers de classe contenant lebytecode, pour assurer qu'il respecte la syntaxe et les règles du langage et vérifie statiquement que les flux de contrôle et de données ne produiront pas d'erreur lors de l’exécution[13].
le convertisseur
charge les fichiers de classe vérifiés par le vérificateur. Il produit un fichier CAP[note 8], (contenant une représentation compacte d'un ou plusieurs fichiers Java compilés) correspondant à la conversion d’une applet[14].

En plus de la création d'un fichier CAP, le convertisseur produit un fichier d'exportation[note 9] contenant des informations API publiques pour un ou plusieurs fichiers de classe[15].Il définit le niveau d'accès et le nom d'une classe ainsi que le niveau d'accès et les signatures des méthodes et champs de la classe. Un fichier d'exportation contient aussi des informations utilisées pour résoudre des jonctions de référence entre différentes applets sur la carte[10].

L’interpréteur de Java Card fournit le support d'exécution du langage Java, il exécute les tâches suivantes[16] :

  • exécute des instructions de code desapplets ;
  • contrôle la création d'objet et l'attribution de mémoire ;
  • joue un rôle crucial dans l'assurance de la sécurité pendant l'exécution.
gestion transfert fichier(s)

L’interpréteur de Java Card ne charge pas de fichier de classe ou fichier CAP, il en exécute seulement le code[16]. Dans la technologie de Java Card, les mécanismes de téléchargement et d'installation sont inclus dans une unité appelée l'installateur résidant dans la carte à puce[16]. Il coopère avec un programme d'installation non-implémenté sur la carte. Le programme d'installation transmet le(s) fichier(s) à l'installateur sur la carte via un dispositif d'acceptation de carte (CAD[note 10]). L'installateur écrit le(s) fichier(s) dans la mémoire de carte à puce pour être lu avec les autres classes qui sont déjà embarquées sur la carte. Il crée et initialise les structures de données qui sont utilisées par la JCRE.

Environnement d'exécution Java Card

[modifier |modifier le code]

Le JCRE est responsable de la gestion des ressources de la carte, des communications réseaux, de l'exécution et la sécurité des applets[17]. Il est implémenté sur la carte à puce et sert essentiellement au système d'exploitation présent sur la carte[17].Le JCRE est composé de la JCVM, des APIs, d'extensions spécifiques à une industrie[note 11]. et des systèmes de classes[17].

JCRE Architecture

Le JCRE distingue les applets des propriétés techniques de la carte à puce. Il fournit le système standard et les APIs pour les applets. Celles-ci sont donc plus simples à écrire et sont donc facilement portables sur différentes architectures de cartes à puce[17].

La couche inférieure du JCRE contient la JCVM et les méthodes natives[note 12]. Elles fournissent le support à la JCVM et le système de classes pour la couche suivante.Le système de classes cadre le fonctionnement du JCRE[18] et son rôle est similaire à un système d'exploitation. Il est responsable :

de la gestion des transactions
mécanisme permettant de rendre un ensemble d’opérations atomiques (ex : transaction bancaire)[19].
des communications avec le serveur CAD
La gestion des communications d'Applets, se fait via l’Application Protocol Data Unit (APDU)s dont la structure est définie par la norme ISO 7816[19].
du cycle de vie des applets
Le JCRE initialise l'applet après son installation. Il peut sélectionner alors l'applet pour lui signifier de s’exécuter, la dé sélectionner ou lui transmettre un signal APDU[19].

Le système de classes invoque les méthodes natives[20]. Elles contiennent un ensemble de fonctions bas niveau qui permettent au JCRE de gérer les ressources physiques de la carte telles que lesentrées-sorties, la gestion de la mémoire ou le coprocesseur cryptographique. Ces méthodes sont compilées en code exécutable dédié au processeur de la carte[17].

La structure de classes API définit les interfaces de programmation d'application,API[18]. L'avantage majeur est qu'elle rend plus facile la création d'applet. Les développeurs d'applet peuvent concentrer leurs efforts sur la programmation vis-à-vis des contraintes de l'infrastructure de système de carte à puce grâce aux extensions d'API disponibles[20]. Les applets ont accès aux services JCRE par des classes API.

La structure extension spécifique à une industrie fournit les bibliothèques complémentaires de services supplémentaires ou des modèles de système et de sécurité (ex : industries financières)[18].

L'installateur permet le téléchargement sécurisé de logiciels et d’applets sur la carte après que la carte a été produite et fournie à l'utilisateur[18]. L'installateur interne coopère avec l'installateur externe à la carte. Ensemble, ils accomplissent la tâche de charger le contenu binaire du fichier CAP ou fichier de(s) classe(s). Cependant, l'installateur est un composant JCRE facultatif, mais sans lui tous logiciels de carte, y compris lesapplets, devraient être écrits dans la mémoire de la carte pendant le procédé de fabrication[17].

API

[modifier |modifier le code]

L’interface de programmation d'applicationAPI disponible permet de développer des applications et fournir des services à ces applications[21] :Ces classes définissent les conventions selon lesquelles une Applet Java Card a accès au JCRE et aux fonctions natales, y compris la fonction de système d'exploitation, l'accès à la mémoire et les opérations d'entrée-sortie. Les API utilisées par la carte sont :

java.io
est un sous-ensemble du paquet java.io dans le langage de programmationJava standard.
Java.lang
fournit les fondamentaux pour la conception du sous-ensemble de technologie de Java Card du langage de programmationJava. Les classes fournies sont tirées de java.lang dans le langage de programmation Java standard et représentent la fonction principale requise par la JVCM. Cette fonction principale est représentée par la classe d'Objet, qui est la super-classe pour toutes les classes de langageJava et la classeException, qui est la super-classe pour l'exception et les classes d'exception pendant l'exécution.
Java.rmi
définit l'interface à distance qui identifie les interfaces dont les méthodes peuvent être invoquées du périphérique de réception de carte (CAD) des applications client.
Javacard.framework
fournit une structure de classes et des interfaces pour la conception et la communication des applets, contient les fonctionnalités essentielles de fonctionnement avec Java Card.
Javacard.framework.service
fournit une structure de services de classes et d’interfaces qui permettent à une Applet de Java Card d'être conçue comme une liste de composants de services.
Javacard.security
fournit les classes et les interfaces qui contiennent la fonction disponible pour implémenter une sécurité et une structure decryptographie sur la Java Card. Les classes du paquet Javacard.security fournissent les définitions des algorithmes qui exécutent cette sécurité et les fonctions de cryptographie[22]
  1. Mises en œuvre de clés de chiffrement différentes par la classe KeyBuilder ;
  2. Hachage des données par la classe MessageDigest ;
  3. Génération de données aléatoires par la classe RandomData ;
  4. Signature par la classe Signature ;
  5. Échanges declé de session par la classe KeyAgreement.
Javacardx.crypto
contient la fonction qui implémente la sécurité et la structure de cryptographie sur la Java Card. C'est une extension du paquet précédent. Il contient la classe Cipher et l'interface KeyEncryption. Cipher est une classe qui fournit des méthodes pour chiffrer et déchiffrer des messages[23]. KeyEncryption est une interface qui fournit la fonction qui permet aux clés d'être mises à jour d'une façon continue sécurisée.

Version Java Card 3 « Connectée »

[modifier |modifier le code]

La version 3 « Connectée » des spécifications de la plateforme Java Card présente des différences profondes avec les autres versions existantes.

Tout d'abord, alors que les versions antérieures ne pouvaient charger que desfichiers binaires spécifiques (les fichiers CAP), les applications Java Card 3 « Connectées » sont déployées sous forme de fichiers java compilés de façon conventionnelle (des fichiers.class) regroupés dans des fichiers.jar, à l'instar des machines virtuelles java conventionnelles[24]. Il n'est alors plus nécessaire d'avoir recours à des outils de conversions de code.

Par ailleurs Java Card 3 « Connectée » privilégie le mode de communication de l'internet : lesprotocoles internet via norme IP ISO 7816-4 pour les interfaces « avec contacts ». La norme ISO 14443 est elle utilisée pour les interfaces «sans contact»[9]. Les applications Java Card 3 « Connectées » sont en fait, desServlets, c'est-à-dire de véritablesServices Web, qui respectent, à ce titre, le protocoleHTTP.

La machine virtuelle Java Card 3 est basée sur le CLDC[note 13] largement utilisé dans le monde de la téléphonie mobile[25]. Cette plate-forme donne accès aux fonctionnalités les plus riches du langage JAVA[9]. La plate-forme CLDC a été réduite en taille, les protocoles et les systèmes sécurités de cartes à puce ont été intégrés[9].

Évolution des périphériques supportant la technologie Java Card[26]

Diagramme appel mode connecté (utilisation Http)
Carte à puce traditionnelleCarte à puce récente compatible V3
8/16-bit CPU32-bit CPU
2 kb RAM24 kb RAM
48 kb - 64 kb ROM>256 kb ROM
8–32 kb EEPROM>128 kb EEPROM
Serial I/O interfaceHigh-speed interfaces
9,6 kb/s - 30 kb/s1,5 Mb/s - 12 Mb/s
Full duplexHalf duplex

Amélioration apportée par la version 3 connectée[24].

  • Applications de typeservlets[24].
  • Gestion de multitâches (Multithreading)[24].
  • Vérification par byte code interne[24](Vérification de.class par la machine virtuelle interne).
  • Ramasse Miette automatique (Garbage collector) inclut dans la machine virtuelle[24].
  • Ajout des types Char, Long et String[24].
  • Tableau multidimensionnel[27].
  • Classe représentant les types primitifs (Boolean, Integer,…)[27],[28]
  • Classe de la manipulation de Chaines de caractères (StringBuilder…)[27],[29].
  • Classe pour la gestion des Entrées/Sorties (Reader, Writer et Stream)[27].
  • Classe pour la gestion du réseau[27].
  • Classe pour la gestion des collections (Vector, hashtable…)[27].
  • Classe pour la gestion des dates[27].
  • Classe pour la gestion de la localisation et de l’internationalisation[27].
  • Le langage de programmation a été étoffé de spécificités issues de Java SE[27] :
Spécificités
Générics[30]
Métadonnées
Autoboxing[31]
Amélioration de la boucle for
Assert (test unitaire)
Énumération[32]
Utilisation de méthodes à argument Variables[31]
Import static[33]

Limitation du moteur de servlet de java card V3[34]

Liste des principales caractéristiques présentes dans les spécifications Java Serlet 2.4[35] qui ne sont pas supportées par la plate-forme Java Card V3.

  • API non supportées (java.io.File, java.net.URL, java.util.Map, java.util.Set, java.security.cert.X509Certificate...). Par exemple, il est impossible d'effacer un fichier avec la méthode delete de la classe java.io.File, impossible d’utiliser la structure hashmap, impossible d'utiliser la gestion des certificats X509 (RFC 2459[36]).
  • Nombre flottant (float). Il est impossible de réaliser des opérations sur des nombres à virgules.
  • Sérialisation et clonage d'objets (java.io.Serializable, java.lang.Cloneable). Il impossible de convertir les objets en flux binaire pour gérer persistance. Il est impossible de créer de nouvelles instances à partir d'une référence d'objet (clone).
  • Support des Java Server Pages V2.0. Les balises JSP ne sont pas reconnues, donc obligation d'écrire des servlets en Java.
  • Java Naming and Directory Interface. Pas d’accès aux classes de gestion d'annuaires.

Sécurité des applications Java Card

[modifier |modifier le code]

La gestion de la sécurité développée pour les cartes à puce est implémentée par la JCVM qui fournit les règles de sécurité suivantes[37] :

  • Chaque JCVM contient une fonction vérificateur dont le rôle est de vérifier les fichiers Java compilés (.class) issue d'un compilateur java. Cependant sur la plate-forme Java Card version 3, il est possible de charger directement des fichiers de classes sans passer par le vérificateur et le convertisseur.
  • La fonction sécurité de la JCRE met en application des pare-feu pour isoler chaque applet ou servlet, ce qui empêche l'accès non autorisé d'objets créés par une autre applet.
  • Tous les accès aux méthodes et variables dans un fichier de classe se font par accesseurs[note 14]. Ces accesseurs définissent un contrôle de cohérence du type primitif pour chaque méthode. Il est possible de déclarer une méthode « public », « protected » (accessibles par des méthodes dans la même sous-classe ou « package ») ou « private » (aucun accès par d'autres classes). Si aucune déclaration n'est faite, la méthode peut être accessible par n'importe quelle classe dans le même paquet.

Au-delà de la vérification de code objet implémentée par la JCVM, la plate-forme de Java Card 3 implémente des mécanismes de sécurité qui fournissent le niveau d'application et la sécurité des communications[38].

La plate-forme de Java Card supporte un mécanisme d'isolement de code. L'isolement de code assure que le code chargé d'une application ne se heurte pas au code d'autres applications[39].

La plate-forme de Java Card supporte l'isolement de contexte[note 15] et d’applications. L'isolement de contexte assure que les objets créés, donc en possession d’applications fonctionnant dans un même contexte, ne peuvent pas être accédés par des applications d'un autre contexte à moins que ces applications possédant ces objets ne fournissent explicitement des interfaces pour l'accès. De telles interfaces sont appelées des interfaces en commun et des objets implémentant ces interfaces, appeléscommun interface objets, constituent des points d'entrée légaux à ces applications[39].

La sécurité à base de rôles permet à la politique de sécurité d'une application de limiter l'accès aux ressources protégées de l’application. Les restrictions sont basées sur les caractéristiques de l'application demandant l'accès, comme son identité et l'identité de l'utilisateur sur lequel la défense d’accès est demandée[39].

L'authentification de l'utilisateur est le processus par lequel un utilisateur prouve son identité à la carte. Cette identité authentifiée est alors utilisée par la plate-forme pour exécuter des décisions d'autorisation, comme celles requises par la sécurité à base de rôles, pour avoir accès aux ressources protégées[40].

L'authentification d'application client est le processus par lequel une application cliente prouve son identité à une application serveuse. Cette identité authentifiée est alors utilisée par l'application serveuse pour exécuter des décisions d'autorisation dans le but d'avoir accès aux ressources protégées[40].

Avec la plate-forme java Card, les applications peuvent interagir avec des applications à distance par des communications de réseaux sécurisées (TLS, SSL)[41].

Un développeur d'application Web peut déclarer des prérequis pour l'intégrité et la confidentialité lors du déploiement d'une application Web. Le développeur d'application ou le fournisseur peut aussi exiger que l'on héberge l'application sur un port sécurisé dédié avec des connexions HTTPS ouvertes[41].

La plate-forme Java Card supporte une structure de cryptographie. Un développeur d'application ou un fournisseur peut choisir l'algorithme de cryptographie qui répond le mieux aux besoins de son application[42].

Concept de programmation

[modifier |modifier le code]

Principe de programmation d'une Applet

[modifier |modifier 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 unframework 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[43].

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[43].
INS
INS est le nom du second octet, dit octet d’instruction[43].
P1
P1 est le nom du troisième octet, dit octet de paramètre 1[43].
P2
P2 est le nom du quatrième octet, dit octet de paramètre 2[43].
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)[43].
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[43].
Le
Le est le dernier octet après les données indiquant la taille maximale des données pour la réponse[43].

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[43].
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 entre0x90 et0x9F indique que la commande a été correctement exécutée. Une valeur entre0x60 et0x6F indique que la commande n'a pas pu être exécutée par le programme placé dans la carte[43].
SW2
le second octet, appelé SW2 rapporte éventuellement des informations supplémentaires concernant la réponse[43].

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 APDUGet Response est transmise pour déclencher la réception de ces <Le> octets sortants[43].

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.1Classic 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’applicationAID[note 16]. L’identifiant d’application est composé de deux parties. La première sur 5 octets, leRID[note 17], est assigné par la norme ISO. Celui-ci correspond à l’identifiant propre à l’entreprise. Le second,PIX[note 18] 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[44].

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’instruction0x10. Dans cet exemple le AID est composé des valeurs de RID = DA8EF6DD26 et de PIX = 86E899.

Exemple d’applet ‘Hello World’[45].

importjavacard.framework.*;publicclassHelloWorldextendsApplet{// Initialisation de la variable avec ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ' ', 'W', 'o', 'r', 'l', 'd'.privatefinalstaticbyte[]message={0x48,0x65,0x6c,0x6c,0x6f,0x20,0x77,0x6f,0x72,0x6c,0x64};publicstaticvoidinstall(byte[]bArray,shortbOffset,bytebLength){newHelloWorld();}protectedHelloWorld(){register();}publicvoidprocess(APDUapdu){if(selectingApplet()){// Retourne le statut à OKreturn;}byte[]buffer=apdu.getBuffer();if(buffer[ISO7816.OFFSET_CLA]!=(byte)(0x80))ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);// Retourne le status word CLA NOT SUPPORTEDswitch(buffer[ISO7816.OFFSET_INS]){case0x10:// Copie du contenu du message dans le buffer de la reponseUtil.arrayCopy(message,(byte)0,buffer,ISO7816.OFFSET_CDATA,(byte)message.length);// Envoi de la réponseapdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA,(byte)message.length);break;default:// Retourne le statut à la valeur INS NOT SUPPORTEDISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);}}}
Diagramme d'appel de l'exemple

Pour cet exemple, deux échanges d'APDU sont nécessaires entre le client et la Java Card :Le premier envoi correspond à la sélection de l'application en précisant l'AID :

Commande : 0x00 0xA4 0x04 0x00 0X08 0XDA 0X8E 0XF6 0XDD 0X26 0X86 0XE8 0X9A

Réponse : 90 00

Le second appel, envoi le code instruction 0x10 correspondant à la fonction 'char* hello()' sans données supplémentaires

Commande : 0x80 0x10 0x00 0x00 0x00

Réponse : 48 65 6C 6C 6F 20 77 6F 72 6C 64 90 00

Le contenu de l'APDU de réponse contient les données envoyées par l'Applet suivies du code de retour qui a pour valeur 90 00. Celle-ci nous indique que la fonction a été exécutée sans problème. Les données sont composées d'une série d'octets contenant les 11 caractères de lachaîne de caractères 'Hello World'.

Principe de programmation d'une Servlet

[modifier |modifier le code]

Voici un exemple de code renvoyant la chaine de caractères ‘Hello World from Java Card’ lors de l'appel à la Servlet.

Exemple de Servlet ‘Hello World’

Contenu du fichier .java

packageorg.carte.web;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloWorldWebextendsHttpServlet{@OverridepublicvoiddoGet(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

<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>Thewebapplicationdeploymentdescriptorconveyswebapplicationmodelelementsandconfigurationinformationofanapplicationbetweenapplicationdevelopers,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 :

http://adresse_de_la_carte/helloworldweb

L'utilisation des Servlets sur une Java card se fait exactement de la même manière que sur une plate-forme JAVA EE.

Intérêts

[modifier |modifier le code]

Les producteurs de cartes à puces (tel queGemalto,Idemia...) implémentent les fonctionnalités de Java Card suivantes[46] :

  • Interopérabilité : les Applets développées avec la technologie Java Card fonctionnent sur n'importe quel type de cartes à puce (et indépendamment du matériel sous-jacent).
  • Sécurité : la technologie de Java Card repose sur la sécurité du langage de programmation Java pour fournir un environnement d'exécution sécurisé.
  • Possibilité d'applications multiples[note 19] : la technologie de Java Card permet à de multiples applications de cohabiter en sécurité sur une seule carte à puce.
  • Dynamique : de nouvelles applications peuvent être installées en toute sécurité après qu'une carte a été fournie à l'utilisateur, permettant aux producteurs de carte de répondre dynamiquement aux besoins de changement de leur client.
  • Compatible avec les normes existantes : l'API de Carte Java est compatible avec les standards internationaux pourCarte à puce comme ISO7816 ouEuropay Mastercard Visa :

L'utilisation du langage de programmation Java apporte un gain pour les développeurs d'applications[46] :

  • Laprogrammation orientée objet apporte une plus grande modularité du code et sa réutilisation, augmentant la productivité du programmeur.
  • La protection figurant dans les caractéristiques du langage de programmation Java s'applique aux applets de Java Card, mettant en application des attributs de protection et de typage fort.

Marché

[modifier |modifier le code]

De nombreux types decartes à puce peuvent profiter de la technologie de Java Card[47]:

  • Carte SIM (Subcriber Identity Module) utilisée dans les téléphones cellulaire sur les réseaux sans fil.
  • Carte bancaire.
  • Carte d'identité.
  • Carte santé.
  • Les cartes qui fournissent l'accès logique et physique aux ressources d'entreprises.

Sur la majorité de réseaux téléphoniques cellulaires, un abonné utilise unecarte à puce généralement appelée unecarte SIM pour activer le téléphone. La carte authentifie l'utilisateur et fournit desclés de chiffrement pour le transport de la voix numérique. lescartes SIM implémentées de la technologie de Java Card peuvent aussi fournir des services transactionnels bancaires à distance. Des centaines de millions decartes SIM basées sur la technologie de Java Card fonctionnent déjà avec des services innovants sur lestéléphones cellulaires.

Dans le secteur bancaire, lescartes à puce donnent l'accès sécurisé aux utilisateurs à une large gamme de services financiers incluant les distributeurs automatiques de billets, le paiement de factures et de péages. La technologie de Java Card permet à une seulecarte à puce d'héberger de multiples applications financières et de livrer des services tiers ou de sécuriser sur lecommerce en ligne.

De nombreuses applications sont disponibles dans les domaines où la sécurité et l'authentification sont importantes tel que l'accès sécurisé à des installations, dossiers médicaux.

La technologie de Java Card améliore l'accès grand public aux nouveaux services decommerce en ligne par l’intermédiaire d'appareils connectés. En effet, lestéléphones cellulaires et les équipements de télévision pour chaînes payantes sont les exemples de marchés où la majorité de produits, déjà disponibles, incluent déjà des lecteurs decarte à puce.

Acteurs du marché[48].

FabricantGamme de Produits
STMicroelectronics, Atmel, Infineon, Samsung, NXP, Inside ContactlessSemi-Conducteur et Micro-Processeur
Thales, IDEMIA, Safran Morpho, Giesecke & DevrientCartes
Ingenico, Verifone, Hypercom, NokiaTerminaux et lecteurs
Orange, RATP, Véolia, BNP ParibasOpérateur de services et e-Gouvernement
Trusted Logic, Prism, MultosLogiciel embarqués OS et Applications
Cesti, FimeÉvaluation et Test
Experian, Atos Worldline, First Data, SopraIntégration et systèmes

Chiffres

Selon le rapport gouvernemental «Dimension économique et industrielle des cartes à puces» de, le marché mondial des cartes à puces a dépassé les 5 milliards d'unités. (Source Nodal)[49].

Glossaire

[modifier |modifier le code]
  • AID (Application IDentifier) : une chaine de caractères utilisée comme identifiant unique des Applets de la carte à puce selon la normeISO 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

[modifier |modifier le code]

Notes

[modifier |modifier le code]
  1. qui est nommée dans la littérature scientifique anglo-saxonneJava Card Virtual Machine
  2. qui est nommé dans la littérature scientifique anglo-saxonneJava Card Runtime Environment
  3. qui sont nommées dans la littérature scientifique anglo-saxonneApplication Programmer Interface
  4. bytecode ou code binaire intermédiaire en français inclus dans les fichiers de classe (extension .class ).
  5. qui est nommé dans la littérature scientifique anglo-saxonneOff-Card
  6. qui est nommé dans la littérature scientifique anglo-saxonnePrivate Computer, «Ordinateur personnel» en français.
  7. qui est nommé dans la littérature scientifique anglo-saxonneOn-Card
  8. qui est nommé dans la littérature scientifique anglo-saxonneCAP file (ConvertedAPplet)
  9. qui est nommé dans la littérature scientifique anglo-saxonneExport File
  10. qui est nommé dans la littérature scientifique anglo-saxonneCard AcceptanceDevice
  11. qui est nommée dans la littérature scientifique anglo-saxonneindustry-specific extensions
  12. méthodes de bases qui sont nommées dans la littérature scientifique anglo-saxonnenatives method
  13. qui est nommée dans la littérature scientifique anglo-saxonneConnected Limited Device Configuration
  14. . Un accesseur est une méthode permettant de récupérer le contenu d'une donnée membre protégée
  15. contexte : Un service de nom associe des noms avec des objets. Une association entre un nom et un objet est appelée une attache et des jeux d'attaches sont appelés un contexte. Un nom dans un contexte peut devoir nécessairement un autre contexte qui utilise les mêmes conventions de nommage ; le contexte attaché est appelé un sous-contexte.
  16. Application IDentifiant Identifiant d'application en français
  17. Ressource IDentifier Identifiant de la ressource en français
  18. Proprietary IDentifier extension extension de l'identifiant propriétaire en français
  19. qui est nommé dans la littérature scientifique anglo-saxonneApplication multi capability.

Références

[modifier |modifier le code]
  1. abcd eteBaentsch 1999,p. 37
  2. Oracle : Spécifications des versions
  3. ab etcZhiqun 2000,p. 29
  4. ISO7816
  5. Oracle : Chapitre Composants
  6. abcde etfZhiqun 2000,p. 30
  7. Sun 2008,p. 7
  8. Sun 2008,p. 1
  9. abcd eteSun 2008,p. 2
  10. a etbZhiqun 2000,p. 34
  11. ab etcZhiqun 2000,p. 31
  12. Oracle 2002,p. 1
  13. Casset 2002,p. 209
  14. Zhiqun 2000,p. 32
  15. Zhiqun 2000,p. 33
  16. ab etcZhiqun 2000,p. 35
  17. abcde etfZhiqun 2000,p. 36
  18. abc etdZhiqun 2000,p. 37
  19. ab etcDufay,2003, p.28
  20. a etbZhiqun 2000,p. 38
  21. Gemalto : Chapitre APIs
  22. Sun 2002,p. 147
  23. Ghindici 2006,p. 6
  24. abcdef etgSun 2008,p. 5
  25. Sun CLDC : Introduction
  26. Sun 2008,p. 4
  27. abcdefgh etiSun 2008,p. 6
  28. Type utilisé dans la programmation Java
  29. Classe StringBuilder
  30. Types génériques du langage Java
  31. a etbAutoboxing en Java
  32. Énumération du langage Java
  33. Import statique du langage Java
  34. Java Servlet Specification : Java Card Platform, Version 3.0.1 Connected Edition,p. 3-1
  35. Java Servlet V2.4
  36. (en) « Internet X.509 Public Key Infrastructure / Certificate and CRL Profile »,Request for commentsno 2459,
  37. Gemalto : Chapitre sécurité
  38. Sun 2008,p. 13
  39. ab etcSun 2008,p. 14
  40. a etbSun 2008,p. 16
  41. a etbSun 2008,p. 17
  42. Sun 2008,p. 19
  43. abcdefghijk etlISO : norme ISO7816-4
  44. ISO : norme ISO7816-5
  45. Gemalto 2009,p. 19
  46. a etbOracle : Chapitre bénéfices
  47. Oracle : Chapitre Industries
  48. Dimension économique et industrielle des cartes à puces,p. 29
  49. Dimension économique et industrielle des cartes à puces,p. 19

Bibliographie

[modifier |modifier le code]

Voir aussi

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]
v ·m
Apple
Mac OSClassic
Dérivés de NeXTSTEP
Dérivés deBeOS
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 duTOS
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 laliste des systèmes d’exploitation et lacatégorie « Système d’exploitation ».
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Java_Card&oldid=228216629 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2026 Movatter.jp