Cartes à puce: une introduction

Les cartes à puce ont fait le buzz ces derniers temps sur le Web, lors de la conférence JavaOne en avril dernier (quatre sessions traitaient de la technologie), sur les grandes chaînes d'information du réseau et sur CNN. Dans cet article, nous allons donner vie à la carte à puce avec un exemple de carte à puce du monde réel. Les techniques présentées ici vous permettront de commencer à créer des applications Java compatibles avec les cartes à puce.

Nous nous concentrerons sur deux types de cartes à puce: les cartes à puce à mémoire , qui peuvent être considérées comme de minuscules disques amovibles de lecture / écriture avec sécurité en option; et des cartes de processeur , qui peuvent être considérées comme des ordinateurs miniatures avec un port d'entrée et de sortie. Les prochains articles traiteront plus en détail des cartes de processeur.

Pour l'essentiel de l'article, nous développerons un prototype simple pour lire et écrire des données sur une carte à puce. Nous discuterons d'une carte de prescription de médicaments , qui conserve une liste de toutes vos ordonnances et suit votre assurance, vos plans de prescription et d'autres informations utiles. Des articles ultérieurs développeront l'idée de la carte de prescription.

Vous remarquerez qu'un thème récurrent qui s'exécute tout au long de cette série sur les cartes à puce est le besoin d'un cadre de sécurité pour empêcher les plug-ins malveillants, les composants ActiveX, etc. d'accéder à vos informations personnelles et / ou d'entreprise. À cette fin, la démonstration de lecture et d'écriture de données sur une carte à puce incluse dans cet article vous fournira un stockage persistant, sécurisé (et portable).

Qu'est-ce qu'une carte à puce?

Vous pouvez considérer la carte à puce comme une "carte de crédit" avec un "cerveau" dessus, le cerveau étant une petite puce informatique intégrée. Cet ordinateur à carte peut être programmé pour effectuer des tâches et stocker des informations, mais notez que le cerveau est petit - ce qui signifie que la puissance de la carte à puce est bien inférieure à celle de votre ordinateur de bureau.

Les cartes à puce sont actuellement utilisées dans les transactions téléphoniques, de transport, bancaires et de soins de santé, et bientôt - grâce à des développeurs comme vous - nous commencerons à les voir utilisées dans les applications Internet. Les cartes à puce sont déjà largement utilisées au Japon et en Europe et gagnent en popularité aux États-Unis.En fait, trois événements importants se sont produits récemment dans l'industrie des cartes à puce dans ce pays:

PC / SC

Microsoft et plusieurs autres sociétés ont lancé PC / SC , une interface d'application de carte à puce permettant de communiquer avec des cartes à puce de plates-formes Win32 pour ordinateurs personnels. PC / SC ne prend actuellement pas en charge les systèmes non Win32 et ne le fera peut-être jamais. Nous en discuterons plus en détail plus tard.

Cadre OpenCard

OpenCard est une norme ouverte qui assure l'interopérabilité des applications de cartes à puce sur les CN, les points de vente, les ordinateurs de bureau, les ordinateurs portables, les décodeurs, etc. OpenCard promet de fournir des applications de cartes à puce Java 100% pures. Les applications de carte à puce ne sont souvent pas pures car elles communiquent avec un périphérique externe et / ou utilisent des bibliothèques sur le client. (En remarque, des applications 100% pures pourraient exister sans OpenCard, mais sans elle, les développeurs utiliseraient des interfaces maison pour les cartes à puce.) OpenCard fournit également aux développeurs une interface avec PC / SC pour l'utilisation de périphériques existants sur Win32 platfroms.

JavaCard

JavaCard a été introduit par Schlumberger et soumis comme standard par JavaSoft récemment. Schlumberger possède actuellement la seule carte Java sur le marché et la société est le premier titulaire de licence JavaCard. Carte à puce ayant le potentiel de définir la norme globale de la carte à puce, JavaCard est composée de classes standard et d'API qui permettent aux applets Java de s'exécuter directement sur une carte conforme à la norme ISO 7816. Les JavaCards permettent une exécution sécurisée et indépendante de la puce de différentes applications.

Remarque:

Bien que cet article se concentre sur les cartes à puce, il est important de noter que vous n'êtes pas limité à ces types d'appareils. Personnellement, je préfère le dispositif "Ibuttons" produit par Dallas Semiconductor. Il est petit et portable comme une carte de crédit, mais tellement plus pratique. Pourquoi? Vous n'avez pas à sortir votre portefeuille à la recherche d'une carte; Ibuttons est juste là, sur votre doigt. Oui, c'est une bague!

Bien qu'il existe des versions sans contact de la carte à puce (voir ci-dessous pour plus d'informations à ce sujet), je pense que les Ibuttons, type d'appareil de type bijoux fonctionnels, pourraient être assez rentables. Pour plus d'informations sur les boutons, consultez la section Ressources. À propos, l'équipe Java Commerce a présenté un "JavaRing" à Java Internet Business Expo (JIBE) à New York en août dernier. Vous pouvez lire à ce sujet dans l'article du magazine Fortune (encore une fois, voir la section Ressources).

Pourquoi utiliser une carte à puce?

Quels sont les avantages d'utiliser une carte à puce? Eh bien, une carte à puce:

  • est plus fiable qu'une carte à bande magnétique
  • peut actuellement stocker cent fois plus d'informations qu'une carte à bande magnétique
  • est plus difficile à manipuler que les bandes magnétiques
  • peut être jetable ou réutilisable
  • peut exécuter plusieurs fonctions dans un large éventail d'industries
  • est compatible avec les appareils électroniques portables tels que les téléphones, les assistants numériques personnels (PDA) et les PC
  • est en constante évolution (après tout, il intègre une puce informatique)

Types de cartes à puce

Comme mentionné ci-dessus, cet article se concentrera sur deux types de cartes à puce: la mémoire et le processus. En tout, il existe cinq types de cartes à puce:

  1. Cartes mémoire
  2. cartes processeur
  3. cartes porte-monnaie électroniques
  4. cartes de sécurité
  5. JavaCard

Les cartes à puce sont un élément matériel personnel qui doit communiquer avec un autre périphérique pour accéder à un périphérique d'affichage ou à un réseau. Les cartes peuvent être branchées sur un lecteur, communément appelé

terminal de carte

, ou ils peuvent fonctionner en utilisant des fréquences radio RF.

Les cartes à puce peuvent communiquer avec un lecteur ou un récepteur (voir la section sur les lecteurs ci-dessous pour plus d'informations sur ces deux termes) sous l'une des deux formes suivantes:

Cartes à puce à contact - La connexion est établie lorsque le lecteur entre en contact avec une petite puce dorée à l'avant de la carte.

Cartes à puce sans contact - Celles-ci peuvent communiquer via une antenne, éliminant ainsi le besoin d'insérer et de retirer la carte à la main. Avec une carte sans contact, tout ce que vous avez à faire est de vous rapprocher d'un récepteur et la carte commencera à communiquer avec lui. Les cartes sans contact peuvent être utilisées dans des applications dans lesquelles l'insertion / retrait de la carte peut être impossible ou dans lesquelles la vitesse est importante.

Certains fabricants fabriquent des cartes qui fonctionnent à la fois en mode avec et sans contact.

Créer un environnement de développement pour créer des applications de cartes à puce

Afin de développer des applications de carte à puce, vous avez besoin de quelques éléments, à savoir: un lecteur de carte à puce; un logiciel pour communiquer avec le lecteur ainsi que certains logiciels pour communiquer avec la carte qui a été branchée sur le lecteur; et, bien sûr, les cartes à puce et le matériel de carte à puce.

Lecteur de carte à puce

Pour communiquer avec une carte à puce ou développer une application compatible avec une carte à puce, vous devez disposer d'un lecteur . Le lecteur fournit un chemin à votre application pour envoyer et recevoir des commandes de la carte. Il existe de nombreux types de lecteurs sur le marché, les plus répandus étant les modèles série , PCCard et clavier . (Les modèles de clavier apparaissent ici et là; attendez-vous à ce qu'ils soient directement disponibles auprès des grands fabricants de PC d'ici juin 1998.)

Cet article utilise des lecteurs série pour prendre en charge les périphériques. Un lecteur série se connecte au port série d'un ordinateur. Notez que le code fourni prend également en charge un lecteur PCCard; la plupart des ordinateurs portables sont équipés de fentes PCCard intégrées.

Chaque fabricant propose un protocole différent pour parler à un lecteur. Une fois que vous pouvez communiquer avec le lecteur, il existe un protocole pour communiquer avec une carte à puce: la communication avec une carte à puce est basée sur le format APDU. (Le format APDU est décrit ci-dessous.) Pour plus d'informations sur l'achat de votre propre lecteur, consultez la rubrique «Lecteurs de cartes à puce Gemplus» dans la section Ressources.

Logiciel de communication avec le lecteur

Un certain nombre de classes orientées objet sont nécessaires pour l'exemple de carte à puce inclus dans cet article. Ceux-ci sont:

  • Classes de commande ISO pour communiquer avec le protocole 7816
  • Classes pour communiquer avec le lecteur
  • Classes de conversion de données dans un format spécifique au fabricant
  • Une application pour tester et utiliser les cartes dans le but pour lequel l'application a été conçue

Cartes à puce et matériel de carte à puce

Comme indiqué au début de l'article, pour développer l'application de carte à puce ici, vous avez besoin de matériel de carte à puce et de certaines cartes à puce. Vous pouvez acheter des kits de développement de cartes à puce auprès d'un certain nombre d'entreprises, dont Gemplus et Schlumberger.

Pour ceux d'entre vous qui ont déjà des lecteurs, vous devriez pouvoir utiliser votre lecteur en fournissant une implémentation d'une classe d'interface dont nous parlerons plus tard. Comme mentionné ci-dessus, avant de pouvoir communiquer avec la carte, nous devons être capables de communiquer avec le lecteur, et tout comme il existe de nombreuses cartes différentes, il existe de nombreux lecteurs différents.

Normes importantes relatives aux cartes à puce

Les protocoles standard constituent une pièce importante du puzzle du développement d'applications de cartes à puce. Fondamentalement, l'application communique avec le lecteur, qui à son tour communique avec la carte à puce en utilisant un protocole de normes - dans notre cas, le protocole de l'Organisation internationale de normalisation (ISO) 7816.

Comme pour toute nouvelle technologie, il existe tellement de normes pour les cartes à puce que vous risquez de vous sentir découragé et dépassé. Acquérir une compréhension de base des normes suivantes vous permettra de développer des applications avec l'assurance que vous n'ignorez pas quelque chose de basique à l'utilisation de cartes à puce. Pour certains systèmes, cependant, des normes spéciales entrent en jeu. J'ai divisé l'ensemble des normes en normes «horizontales» et «verticales»: les normes horizontales peuvent être utilisées par toutes les applications, tandis que les normes verticales sont spécifiques à un système.

Normes horizontales

  • ISO 7816 - décrit l'interface de niveau le plus bas vers une carte à puce. C'est à ce niveau que les octets de données sont transférés entre le lecteur de carte et la carte.

  • PC / SC - la norme de communication avec les cartes à puce connectées aux machines Win3.1 / Win95 / NT.

  • OCF - une interface entièrement Java pour communiquer avec des cartes à puce à partir d'un environnement Java. (Bientôt, OCF permettra aux développeurs d'écrire dans OCF et d'effectuer la traduction, il ne sera donc pas nécessaire d'écrire sur PC / SC.)

  • JavaCard - décrit la JavaCard et ce qu'elle prend en charge.

Normes verticales

  • Mondex - argent numérique utilisant uniquement des cartes à puce. L'approche Mondex ne permet pas aux espèces d'exister en dehors de la carte.

  • VisaCash - carte de débit qui garde la trace des cartes sur le serveur.

  • Proton - une autre forme de monnaie électronique.

  • MPCOS-EMV - carte à usage général qui vous permet d'implémenter votre propre type de devise ou de jeton.

Je suis toujours étonné qu'un si petit morceau de plastique puisse nécessiter autant de lecture de documentation et exiger autant de connaissances de la part du développeur!

Parce qu'un tel niveau d'expertise est nécessaire avec les cartes à puce, il existe un marché pour que les développeurs fournissent des produits compatibles Beans qui mettent en œuvre une norme verticale en utilisant la norme horizontale pour le marché auquel vous souhaitez vendre. Cela signifie que vous pouvez développer des beans qui utilisent diverses combinaisons de normes horizontales, comme OpenCard, pour implémenter une application spécifique en utilisant une autre norme industrielle pour le commerce ou toute autre application.

Communiquez avec des cartes à puce à partir d'une applet ou d'une application Java

Vous savez ce dont vous avez besoin pour connecter tout le matériel. Nous devons maintenant comprendre comment utiliser certaines API qui nous permettront d'envoyer des commandes d'une application à un lecteur. (Le lecteur, à son tour, communique avec la carte, agissant ainsi comme intermédiaire avant d'envoyer les données à la carte.) Le lecteur de carte à puce agite les points de contact en or et transfère les données. La carte fera quelque chose avec les données et les renverra au lecteur, qui renverra ensuite les données à l'application. Alors, où sont tous ces octets lorsqu'ils passent de votre application à la carte?

Comme mentionné ci-dessus, l'application communique avec le lecteur, qui à son tour communique avec la carte à puce en utilisant les normes décrites ci-dessus. Fondamentalement, à mesure que la technologie des cartes à puce se développait, une norme de carte à puce a été proposée par l'ISO. La norme définit les caractéristiques mécaniques et électriques ainsi que le protocole de communication avec la carte. Des pointeurs vers les documents ISO pertinents sont répertoriés dans la section Ressources. Malheureusement, le groupe ISO n'a pas été en mesure de fournir une norme pour communiquer avec le lecteur. Ainsi, pour envoyer une commande à une carte, vous devez d'abord trouver la commande prise en charge par la carte, envelopper cette commande dans un paquet de commandes ISO, puis envelopper cette nouvelle commande dans le wrapper requis pour le lecteur en question. L'exemple d'application fourni ici effectue toutes ces couches pour vous.

Unités de données de protocole d'application (APDU)

L'unité d'échange de base avec une carte à puce est le paquet APDU. Le message de commande envoyé depuis la couche application et le message de réponse renvoyé par la carte à la couche application sont appelés unités de données de protocole d'application (APDU). La communication avec la carte et le lecteur s'effectue avec des APDU. Une APDU peut être considérée comme un paquet de données contenant une instruction complète ou une réponse complète d'une carte. Pour fournir cette fonctionnalité, les APDU ont une structure bien définie qui est définie dans un certain nombre de documents ISO appartenant à la famille de spécifications 7816.

Les APDU se composent des champs suivants:

Format APDU de commande

CLA INS P1 P2 Lc Les données Le

Format APDU de réponse

Les données SW1 SW2

Voici quelques-unes des classes fournies pour le transport des APDU et des fonctions des classes: