Java-kort

Duke (Java maskot) waving.svg

Java-plattform

Java Card er et smartkort-operativsystem som primært gir et kjøretidsmiljø for en delmengde av Java- språket spesielt for smartkortapplikasjoner . Java-kort muliggjør kjøring av applikasjoner innen smartkort, som tilbyr begrenset minne og prosesseringskapasitet. Flere applikasjoner kan distribueres før og til og med etter at smartkortet er levert til sluttbrukeren. Programmer skrevet på Java-programmeringsspråket kan kjøres trygt på alle typer kort som er tilgjengelige på markedet.

Historisk

I 1996 ønsket ingeniører ved Schlumbergers kortdivisjon i Texas (som senere fusjonerte med Gemplus International for å danne Gemalto ) å forenkle programmering av smartkort og samtidig opprettholde datasikkerhet i samsvar med ISO 7816..

Løsningen som ble tatt i bruk var Java- programmeringsspråket . På grunn av den lave minnekapasiteten som er tilgjengelig på et smartkort, kan bare et delsett av Java brukes. Dermed ble Java Card 1.0 in opprettetNovember 1996, det første objektorienterte språket tilpasset smartkort.

Februar 1997, Schlumberger og Gemplus grunnla Java Card Forum som anbefaler spesifikasjoner til JavaSoft (divisjonen av Sun som eier Java Card) for å oppnå språkstandardisering og fremmer Java Card APIer til å bli plattformapplikasjonsutviklingsstandarden for smartkort .

November 1997, smartkortprodusenter som De La Rue , Bull , Giesecke & Devrient (G&D) blir med på Java Card Forum som publiserer en ny versjon av Java Card 2.0-spesifikasjonene.

Deretter vil Sun deretter publisere fire nye spesifikasjoner: Mars 1999 Java Card 2.1-utgave, i Juni 2002 Java Card 2.2, in Mars 2008 Java Card 3.0 og til slutt det nyeste Java Card 3.0.1 in Mai 2009.

Selskapet Oracle Corporation kjøper oppjanuar 2010 selskapet Sun Microsystems.

Arkitektur

Smartkortet representerer en av de minste databehandlingsplattformene. Den største designutfordringen for Java Card-teknologi er å legge inn grunnleggende Java- programvare på et smartkort mens du sparer minneplassen som trengs for å lagre applikasjoner. Løsningen som ble vedtatt av Sun, som er et resultat av Schlumberger-arbeidet, er å implementere en delmengde av funksjonene til Java- språket og å bruke en redusert modell av JVM ( Java Virtual Machine ) kalt JCVM ( Java Card Virtual Machine ). I tillegg til å tilby Java- språkstøtte , definerer Java Card-teknologi et sanntids kjøretidsmiljø som støtter minne, kommunikasjon, sikkerhet og applikasjonens kjøretidsmodell. Dette miljøet er i samsvar med ISO7816-standarden.

Java Card-plattformen er strukturert rundt:

Det viktigste ved JCRE er at den gir et klart skille mellom systemet og applikasjonene. Java Card-teknologi definerer en plattform der applikasjoner skrevet på Java- programmeringsspråket kan kjøres på smartkort og andre enheter med minne. Java-kortapplikasjoner blir sett på som applets eller servlets .

Fra versjon 3.0, publisert av Sun i Mars 2008, etter utviklingen innen smartkort, er Java Card-plattformen tilgjengelig i to versjoner.

Klassisk versjon Denne versjonen er en utvikling av versjon 2.2 og retter seg mot systemer med begrensede ressurser og som støtter appletbaserte applikasjoner. Det gjør korreksjoner og tilbyr bruk av nye sikkerhetsalgoritmer (Eksempel på støtte for 4096-biters RSA-nøkler). I tillegg er det gjort en justering med de nylige standardene for "kontaktløse" kort. Tilkoblet versjon Denne utgivelsen gir et forbedret kjøretidsmiljø og en ny virtuell maskin. En ny arkitektur er designet for å transformere smartkortet til et sikkert nettverkselement. Smartkortet kan da tilby IP-nettverkstjenester som HTTP-webserver, HTTPS-sikker webserver, identifikasjon, tilgang til nettverksressurser. Denne utgivelsen retter seg mot mindre ressursbegrensede produkter som inkluderer nye nettverksorienterte funksjoner som webapplikasjoner, kalt servlets . Denne versjonen integrerer funksjonene til den klassiske versjonen.

Java Card 2.x og “klassisk” Java Card 3-versjon

Java-kort er derfor tilpasningen av Java- teknologi for smartkort . De appleter er utviklet i Java språket , de er så forvandlet for å tilfredsstille minne begrensninger, så lastes inn i kortet. Når den er installert på plattformen og valgt, kjøres bytekoden til appleten av den virtuelle JCVM-maskinen.

Java Card Virtual Machine

JCVM utfører bytekode , styrer minnetildeling, administrerer objekter og håndhever sikkerhet under kjøretid. Kapasiteten til smartkort er for begrenset til å inneholde all informasjon fra Java-klassefilene, objektkodeverifisereren, og JVCM er derfor implementert i to forskjellige deler (hovedforskjellen mellom JVM og JCVM):

Sammen implementerer de lasting av Java-klassefiler gjennom kontrolløren og omformeren for til slutt å kjøre appleten ved hjelp av tolk.

revisor undersøker en eller flere klassefiler som inneholder bytekoden , for å sikre at den følger syntaksen og reglene til språket, og verifiserer statisk at kontroll og datastrømmer ikke gir feil ved kjøretid. omformeren laster inn klassefiler sjekket av bekrefteren. Den produserer en CAP-fil (som inneholder en kompakt representasjon av en eller flere kompilerte Java-filer) som tilsvarer konverteringen av en applet.

I tillegg til å lage en CAP-fil, produserer omformeren en eksportfil som inneholder offentlig API-informasjon for en eller flere klassefiler. Den definerer tilgangsnivået og navnet på en klasse, samt tilgangsnivået og signaturene til metodene og feltene i klassen. En eksportfil inneholder også informasjon som brukes til å løse referansekryss mellom forskjellige applets på kartet.

Java Card-tolken gir støtte for kjøretid for Java-språket, den utfører følgende oppgaver:

Java Card-tolken laster ikke inn en klassefil eller CAP-fil, den utfører bare koden. I Java Card-teknologi er nedlastings- og installasjonsmekanismer inkludert i en enhet kalt installatøren som er bosatt på smartkortet. Den samarbeider med et installasjonsprogram som ikke er implementert på kortet. Installatøren sender filen (e) til installatøren på kortet gjennom en kortakseptanordning (CAD). Installatøren skriver filen (e) til smartkortminnet for å bli lest sammen med de andre klassene som allerede er lagt på kortet. Den oppretter og initialiserer datastrukturene som brukes av JCRE.

Java Card runtime-miljø

JCRE er ansvarlig for styring av kortressurser, nettverkskommunikasjon, utførelse og sikkerhet for appletter. Den er implementert på smartkortet og brukes hovedsakelig til operativsystemet som er tilstede på kortet. JCRE består av JCVM, API-er, bransjespesifikke utvidelser. og klassesystemer.

JCRE skiller applets fra de tekniske egenskapene til smartkortet. Det gir standardsystemet og API-ene for applets. Disse er derfor lettere å skrive og er derfor lett bærbare på forskjellige smartkortarkitekturer.

Det nedre laget av JCRE inneholder JCVM og native metoder. De gir støtte for JCVM og klassesystemet for neste lag. Klassesystemet rammer driften av JCRE, og dens rolle ligner på et operativsystem. Han er ansvarlig:

transaksjonsstyring mekanisme som tillater å gjengi et sett med atomoperasjoner (f.eks. banktransaksjon). kommunikasjon med CAD-serveren Administrasjonen av applets-kommunikasjon skjer via Application Protocol Data Unit (APDU), hvis struktur er definert av ISO 7816-standarden. livssyklusen til appletter JCRE initialiserer appleten etter installasjonen. Han kan deretter velge appleten for å fortelle den å kjøre, fravelge den eller sende den et APDU-signal.

Klassesystemet påkaller innfødte metoder. De inneholder et sett med funksjoner på lavt nivå som tillater JCRE å administrere de fysiske ressursene på kortet, for eksempel I / O, minneadministrasjon eller den kryptografiske prosessoren. Disse metodene er samlet i kjørbar kode dedikert til prosessoren på kortet.

API-klassestrukturen definerer applikasjonsprogrammeringsgrensesnitt, APIer . Den største fordelen er at det gjør det lettere å lage applets . Applet utviklere kan fokusere sine programmering innsats mot begrensningene i smartkort system infrastruktur med de tilgjengelige API utvidelser. Applets har tilgang til JCRE-tjenester gjennom API-klasser.

Den bransjespesifikke utvidelsesstrukturen gir komplementære biblioteker med tilleggstjenester eller system- og sikkerhetsmodeller (f.eks. Finansnæringer).

Installatøren muliggjør sikker nedlasting av programvare og applets til kortet etter at kortet er produsert og levert til brukeren. Den interne installatøren samarbeider med den eksterne installatøren à la carte. Sammen utfører de oppgaven med å laste inn det binære innholdet i CAP-filen eller klasse (r) -filen. Imidlertid er installasjonsprogrammet en valgfri JCRE-komponent, men uten det må all kortprogramvare, inkludert appletter , skrives til kortminnet under produksjonsprosessen.

API

Det tilgjengelige applikasjonsprogrammeringsgrensesnittet API brukes til å utvikle applikasjoner og tilby tjenester til disse applikasjonene: Disse klassene definerer konvensjonene som en Java Card-applet har tilgang til JCRE og native funksjoner, inkludert systemfunksjonen. / O operasjoner. APIene som brukes av kortet er:

java.io er en delmengde av java.io-pakken i standard Java- programmeringsspråk . Java.lang gir det grunnleggende for utformingen av Java-kort teknologi undergruppe av Java programmeringsspråk . Klassene som er gitt er hentet fra java.lang i standard Java-programmeringsspråk og representerer hovedfunksjonen som kreves av JVCM. Denne hovedfunksjonen er representert av Object-klassen, som er superklassen for alle Java- språkklasser og Exception- klassen , som er superklassen for unntak og unntaksklasser under kjøretid. Java.rmi definerer det eksterne grensesnittet som identifiserer grensesnitt hvis metoder kan påkalles fra kortmottakerenheten (CAD) til klientapplikasjoner. Javacard.framework gir en struktur av klasser og grensesnitt for design og kommunikasjon av applets, inneholder de viktigste funksjonene i operasjonen med Java Card. Javacard.framework.service gir en tjenestestruktur av klasser og grensesnitt som gjør det mulig å utforme et Java Card-applet som en liste over tjenestekomponenter. Javacard. Sikkerhet gir klassene og grensesnittene som inneholder funksjonen som er tilgjengelig for å implementere sikkerhet og kryptografisk struktur på Java-kortet. Klassene i pakken Javacard.security gir definisjoner av algoritmene som utfører denne sikkerheten og de kryptografiske funksjonene.
  1. Implementeringer av forskjellige krypteringsnøkler av KeyBuilder-klassen;
  2. Hashing av data av MessageDigest-klassen;
  3. Tilfeldig datagenerering etter RandomData-klassen;
  4. Signatur av Signatur-klassen;
  5. Sesjonsnøkkel utveksling ved KeyAgreement klassen.
Javacardx.crypto inneholder funksjonen som implementerer sikkerhets- og kryptografistrukturen på Java-kortet. Det er en utvidelse av forrige pakke. Den inneholder Cipher-klassen og KeyEncryption-grensesnittet. Kryptering er en klasse som gir metoder for kryptering og dekryptering av meldinger. KeyEncryption er et grensesnitt som gir funksjonen som gjør at nøklene kan oppdateres kontinuerlig og sikkert.

Java Card 3 "Connected" versjon

Versjon 3 “Connected” av Java Card-plattformspesifikasjonene har store forskjeller med de andre eksisterende versjonene.

For det første, mens tidligere versjoner bare kunne laste spesifikke binære filer (CAP-filer), blir "Connected" Java Card 3-applikasjoner distribuert som konvensjonelt kompilerte java-filer (filer .class) gruppert i enkeltfiler .jar. Det er da ikke lenger nødvendig å bruke kodekonverteringsverktøy.

I tillegg favoriserer Java Card 3 “Connected” internettkommunikasjonsmodus: Internett-protokoller via ISO 7816-4 IP-standarden for grensesnitt “med kontakter”. ISO 14443 brukes til “kontaktløse” grensesnitt. De "Connected" Java Card 3-applikasjonene er faktisk Servlets , det vil si ekte Webtjenester , som som sådan respekterer HTTP- protokollen .

Java Card 3 virtuelle maskin er basert på CLDC mye brukt i verden av mobiltelefoni. Denne plattformen gir tilgang til de rikeste funksjonene i JAVA-språket. CLDC-plattformen har blitt redusert i størrelse, protokoller og sikkerhetssystemer for smartkort er integrert.

Utvikling av enheter som støtter Java Card-teknologi

Tradisjonelt smartkort Nylig smartkort-kompatibel V3
8/16-biters CPU 32-biters CPU
2 kb RAM 24 kb RAM
48 kb - 64 kb ROM > 256 kb ROM
8–32 kb EEPROM > 128 kb EEPROM
Serielt I / O-grensesnitt Høyhastighets grensesnitt
9,6 kb / s - 30 kb / s 1,5 Mb / s - 12 Mb / s
Full dupleks Halv dupleks

Forbedring medført av den tilkoblede versjonen 3 .

  • Skriv applikasjoner servlets .
  • Multithreading ledelse.
  • Verifisering med intern byte-kode (Verifisering av.klasse med intern virtuell maskin).
  • Søppeloppsamler inkludert i den virtuelle maskinen.
  • Lagt til Char, Long og String typer.
  • Flerdimensjonalt utvalg.
  • Klasse som representerer de primitive typene (boolsk, heltall, ...)
  • Klasse for håndtering av karakterstrenger (StringBuilder ...).
  • Klasse for I / O-ledelse (Reader, Writer og Stream).
  • Klasse for nettverksadministrasjon.
  • Klasse for administrasjon av samlinger (Vector, hashtable ...).
  • Klasse for datostyring.
  • Klasse for lokalisering og internasjonalisering.
  • Programmeringsspråket er forbedret med spesifikke funksjoner fra Java SE:
Spesifikasjoner
Generiske
Metadata
Autoboksing
Forbedret for løkke
Assert ( enhetstest )
Oppregning
Bruke metoder med et variabelargument
Statisk import

Begrensning av Java-kort V3 servletmotor

Liste over hovedfunksjonene i Java Serlet 2.4-spesifikasjonene som ikke støttes av Java Card V3-plattformen.

  • APIer støttes ikke (java.io.File, java.net.URL, java.util.Map, java.util.Set, java.security.cert.X509Certificate ...). For eksempel kan du ikke slette en fil med slettemetoden til klassen java.io.File, kan ikke bruke hashmap-strukturen, kan ikke bruke X509-sertifikatadministrasjon ( RFC  2459).
  • Flytende nummer (flyte). Det er ikke mulig å utføre operasjoner på desimaltall.
  • Serialisering og kloning av objekter (java.io.Serializable, java.lang.Cloneable). Det er ikke mulig å konvertere objekter til binær strøm for å håndtere utholdenhet. Det er ikke mulig å opprette nye forekomster fra en objektreferanse (klone).
  • Støtte for Java Server Pages V2.0. JSP-koder gjenkjennes ikke, derfor er forpliktelse til å skrive servlets i Java.
  • Java Naming and Directory Interface . Ingen tilgang til kataloghåndteringsklasser.

Java Card Application Security

Sikkerhetsadministrasjonen utviklet for smartkort er implementert av JCVM som gir følgende sikkerhetsregler:

  • Hver JCVM inneholder en verifiseringsfunksjon hvis rolle er å verifisere de kompilerte Java-filene (.class) utstedt av en Java-kompilator. På Java Card versjon 3-plattformen er det imidlertid mulig å laste klassefiler direkte uten å gå gjennom verifisereren og omformeren.
  • JCREs sikkerhetsfunksjon tvinger brannmurer til å isolere hver applet eller servlet, og forhindrer uautorisert tilgang til objekter opprettet av en annen applet.
  • All tilgang til metoder og variabler i en klassefil er av accessors. Disse aksessorer definerer en primitiv type konsistensjekk for hver metode. Det er mulig å erklære en metode "offentlig", "beskyttet" (tilgjengelig med metoder i samme underklasse eller "pakke") eller "privat" (ingen tilgang fra andre klasser). Hvis det ikke gis noen erklæring, kan metoden nås av hvilken som helst klasse i samme pakke.

Utover objektkodeverifiseringen implementert av JCVM, implementerer Java Card 3-plattformen sikkerhetsmekanismer som gir applikasjonsnivå og sikkerhet for kommunikasjon.

Java Card-plattformen støtter en kodeisoleringsmekanisme. Kodeisolering sørger for at den lastede koden til et program ikke kolliderer med koden til andre applikasjoner.

Java Card-plattformen støtter kontekst- og applikasjonsisolering. Kontekstisolering sikrer at objektene som er opprettet, og som derfor er i besittelse av applikasjoner som opererer i samme kontekst, ikke får tilgang til applikasjoner fra en annen kontekst med mindre disse applikasjonene som har disse objektene eksplisitt gir grensesnitt for tilgang. Slike grensesnitt kalles vanlige grensesnitt og objekter som implementerer disse grensesnittene, kalt vanlige grensesnittobjekter , utgjør lovlige inngangspunkter for disse applikasjonene.

Rollebasert sikkerhet tillater applikasjonens sikkerhetspolicy å begrense tilgangen til programmets beskyttede ressurser. Restriksjonene er basert på egenskapene til applikasjonen som ber om tilgang, for eksempel dens identitet og identiteten til brukeren som tilgangsforsvaret blir bedt om.

Brukerautentisering er prosessen der en bruker beviser sin identitet à la carte. Denne autentiserte identiteten brukes deretter av plattformen til å utføre autorisasjonsbeslutninger, for eksempel de som kreves av rollebasert sikkerhet, for å få tilgang til beskyttede ressurser.

Autentisering av klientapplikasjon er prosessen der en klientapplikasjon beviser sin identitet til en serverapplikasjon. Denne autentiserte identiteten brukes deretter av serverapplikasjonen til å utføre autorisasjonsbeslutninger for å få tilgang til beskyttede ressurser.

Med Java Card-plattformen kan applikasjoner samhandle med eksterne applikasjoner gjennom sikker nettverkskommunikasjon (TLS, SSL).

En webapplikasjonsutvikler kan erklære integritet og konfidensialitet forutsetninger når du distribuerer en webapplikasjon. Applikasjonsutvikleren eller leverandøren kan også kreve at applikasjonen vert på en dedikert sikker port med åpne HTTPS-tilkoblinger.

Java Card-plattformen støtter en kryptografisk struktur. En applikasjonsutvikler eller leverandør kan velge kryptografialgoritmen som best oppfyller behovene til applikasjonen deres.

Programmeringskonsept

Prinsipp for programmering av en applet

En Java Card-applet er i samsvar med ISO 7816-standarden, med andre ord, den svarer på forespørsler på samme måte som den mottar dem i form av byte-kodekommandoer. Dette forenkler utviklingen av en applikasjon betraktelig, siden det ikke lenger er behov for koding på lavt nivå for sending og mottak av kommandoer. Denne delen er faktisk innkapslet i et Java-rammeverk.

Byte-kodekommandoer kalles APDUer (Application Protocol Data Unit). Disse er kodet forskjellig avhengig av sending og mottak.

En APDU-kommando som sendes fra leseren til Java-kortet er en serie på fem byte, eventuelt etterfulgt av et varierende antall byte, formatert som følger:

CLA CLA er navnet på den første byten, kalt klasse-byte, definert av ISO 7816-standarden, som indikerer ordrenummeret. INS INS er navnet på den andre byten, kjent som instruksjonsbyte. P1 P1 er navnet på den tredje byten, kalt parameterbyte 1. P2 P2 er navnet på den fjerde byten, kalt parameterbyte 2. Ln Ln er navnet på den femte byten, det indikerer antall byte med data som vil følge (enten sendt eller mottatt, 0x00, noe som indikerer at ingen tilleggsdata vil følge). Data Dette er dataene, Ln i antall, som overføres av leseren til kortet. Hvis den innebygde applikasjonen bare sørger for overføring i motsatt retning, overføres ingen data her. De Det er den siste byten etter dataene som indikerer den maksimale datastørrelsen for svaret.

Et APDU-svar som sendes fra Java-kortet til leseren, er en serie byte, returnert som svar på en kommando og formatert som følger:

Data Dette er dataene, Le in number, som sendes av kortet til leseren. Status status returnert av kortet, kodet på to navngitte byte: SW1 og SW2. SW1 den første byten, kalt SW1, angir typen respons. Den heksadesimale verdien mellom 0x90og 0x9Findikerer at kommandoen ble utført. En verdi mellom 0x60og 0x6Findikerer at kommandoen ikke kunne utføres av programmet som er plassert i kortet. SW2 den andre byten, kalt SW2, rapporterer muligens tilleggsinformasjon om svaret.

Når kommandoen på appletnivå kjøres normalt, er den returnerte statusverdien 90 00 .

Hvis en INS-instruksjon sørger for både sending og mottak av data, standardiserer Java Card et tofaset APDU-system. Først sendes APDU med for <Ln> et antall byte å sende, deretter når kortet svarer 0x91 <Le> (indikerer at <Le> byte er klare til å bli returnert av kortet, som svar når du bestiller) a Get Svar APDU sendes for å utløse mottak av disse utgående <Le> -byte.

Oppsummert er datafeltet (e) valgfritt i begge tilfeller, kontroll APDU og respons APDU. Derfor er det fire mulige tilfeller av kommunikasjon mellom klienten og Java Card Platform, versjon 2.2.2 (eller versjon 3.0.1 klassisk utgave):

Sak 1 Kommando APDU uten data Ingen datasvar APDU
Sak 2 Kommando APDU med data Ingen datasvar APDU
Sak 3 Kommando APDU uten data Svar APDU med data (er)
Sak 4 Kommando APDU med data Svar APDU med data (er)

Før du kan overføre en kommando til en applet distribuert i et Java-kort, er det nødvendig å velge den ved å sende en spesifikk APDU-kommando som angir identifikatoren til AID- applikasjonen . Søknadsidentifikatoren består av to deler. Den første på 5 byte, RID , er tildelt av ISO-standarden. Dette tilsvarer identifikatoren som er spesifikk for selskapet. Den andre, PIX, er sammensatt mellom 0 og 11 byte. Oppdraget av dette forblir ansvaret for selskapet som utvikler Java Card-applikasjonen.

For å programmere et Java-kort er det fem viktige trinn:

  • Skrive av Java-kildekoden;
  • Kodesammensetning;
  • Konverter filer .classtil .cap ;
  • Filbekreftelse .cap(valgfritt);
  • Installasjon av filen .cappå Java-kortet.

Det sterke punktet med Java Card-utvikling er at de to første trinnene kan gjøres med et klassisk JAVA-utviklingsmiljø.

Her er et eksempel på kode som ganske enkelt returnerer tegnstrengen 'Hello World' på forespørselen som er koblet til 0x10- instruksjonen . I dette eksemplet består AID av verdiene RID = DA8EF6DD26 og PIX = 86E899.

Eksempel på Hello World-appleten .

import javacard.framework.*; public class HelloWorld extends Applet { // Initialisation de la variable avec ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ' ', 'W', 'o', 'r', 'l', 'd'. private final static byte[] message = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64 }; public static void install(byte[] bArray, short bOffset, byte bLength) { new HelloWorld(); } protected HelloWorld() { register(); } public void process(APDU apdu) { if (selectingApplet()) { // Retourne le status à OK return; } byte[] buffer = apdu.getBuffer() ; if ( buffer[ISO7816.OFFSET_CLA] != (byte)(0x80) ) ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED); // Retourne le status word CLA NOT SUPPORTED switch(buffer[ISO7816.OFFSET_INS]) { case 0x10 : // Copie du contenu du message dans le buffer de la reponse Util.arrayCopy(message, (byte)0, buffer, ISO7816.OFFSET_CDATA, (byte)message.length); // Envoi de la réponse apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, (byte)message.length); break; default: // Retourne le status à la valeur INS NOT SUPPORTED ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } } }

For dette eksemplet er det nødvendig med to utvekslinger av APDUer mellom klienten og Java-kortet: Den første sendingen tilsvarer valget av applikasjonen ved å spesifisere AID:

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

Svar: 90 00

Den andre samtalen, send instruksjonskoden 0x10 som tilsvarer funksjonen 'char * hallo ()' uten ytterligere data

Kommando: 0x80 0x10 0x00 0x00 0x00

Svar: 48 65 6C 6C 6F 20 77 6F 72 6C 64 90 00

Innholdet i svaret APDU inneholder dataene som sendes av appleten etterfulgt av returkoden som har verdien 90 00. Dette indikerer at funksjonen har blitt utført uten problemer. Dataene består av en serie bytes som inneholder de 11 tegnene i tegnstrengen 'Hello World'.

Prinsipp for programmering av en Servlet

Her er et eksempel på kode som returnerer tegnstrengen 'Hello World from Java Card' når du ringer til Servlet.

Eksempel på en 'Hello World' Servlet

Innholdet i .java-filen

package org.carte.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldWeb extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = 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(); } } }

Innholdet i web.xml-filen

<web-app xmlns="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>The web application deployment descriptor conveys web application model elements and configuration information of an application between application developers, application assemblers, and deployers. </description> <display-name>Hello World Web</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>

Servlet blir hentet via en nettleser ved å spesifisere følgende URL:

http://adresse_de_la_carte/helloworldweb

Bruken av Servlets på et Java-kort gjøres på nøyaktig samme måte som på en JAVA EE-plattform.

Interesser

Smartkortprodusenter (som Gemalto , Idemia ...) implementerer følgende Java- kortfunksjoner :

  • Interoperabilitet: Applets utviklet med Java Card-teknologi fungerer på alle typer smartkort (og uavhengig av den underliggende maskinvaren).
  • Sikkerhet: Java Card-teknologi er avhengig av sikkerheten til Java-programmeringsspråket for å gi et sikkert kjøretidsmiljø.
  • Mulighet for flere applikasjoner: Java Card-teknologi gjør at flere applikasjoner kan eksistere sikkert på et enkelt smartkort.
  • Dynamisk: Nye applikasjoner kan trygt installeres etter at kortet er gitt til brukeren, slik at kortprodusenter kan svare dynamisk på kundens skiftende behov.
  • Kompatibel med eksisterende standarder: Java Card API er kompatibelt med internasjonale standarder for smartkort som ISO7816 eller Europay Mastercard Visa  :

Bruken av Java-programmeringsspråket gir fordeler for applikasjonsutviklere:

  • Objektorientert programmering gir større kodemodularitet og gjenbruk, noe som øker produktiviteten til programmereren.
  • Beskyttelsen i Java-programmeringsspråkfunksjonene gjelder Java-kort-applikasjoner, og håndhever sterke skrive- og beskyttelsesegenskaper.

Marked

Mange typer smartkort kan dra nytte av Java Card-teknologi:

  • Subcriber Identity Module ( SIM) -kort som brukes i mobiltelefoner på trådløse nettverk.
  • Bankkort.
  • ID-kort.
  • Helsekort.
  • Kort som gir logisk og fysisk tilgang til bedriftens ressurser.

På de fleste mobiltelefonnettverk bruker en abonnent et smartkort som vanligvis kalles et SIM-kort for å aktivere telefonen. Kortet autentiserer brukeren og gir krypteringsnøkler for digital taletransport. det SIM-kortet implementert Java-kort teknologi kan også gi banktransaksjonstjenester eksternt. Hundrevis av millioner SIM-kort basert på Java Card-teknologi jobber allerede med innovative tjenester på mobiltelefoner .

I banksektoren gir smartkort brukere sikker tilgang til et bredt spekter av finansielle tjenester, inkludert minibanker, betaling av regninger og bompenger. Java Card-teknologi gjør det mulig for et enkelt smartkort å være vert for flere økonomiske applikasjoner og levere tredjeparts tjenester eller sikker online-handel .

Mange applikasjoner er tilgjengelige i områder der sikkerhet og autentisering er viktig, for eksempel sikker tilgang til fasiliteter, medisinske journaler.

Java Card-teknologi forbedrer forbrukernes tilgang til nye e- handelstjenester gjennom tilkoblede enheter. Faktisk er mobiltelefoner og betal-TV-utstyr eksempler på markeder der de fleste produktene som allerede er tilgjengelige, allerede inkluderer smartkortlesere .

Markedsaktører .

Maker Produkt linje
STMicroelectronics, Atmel, Infineon, Samsung, NXP, Inside Contactless Halvleder og mikroprosessor
Gemalto, IDEMIA, Safran Morpho, Giesecke & Devrient Kort
Ingenico, Verifone, Hypercom, Nokia Terminaler og lesere
Oransje, RATP, Véolia, BNP Paribas Tjenesteutøver og e-forvaltning
Trusted Logic, Prism, Multos Innebygd programvare OS og applikasjoner
Cesti, Fime Vurdering og testing
Experian, Atos Worldline, First Data, Sopra Integrasjon og systemer

Tall

I følge regjeringsrapporten "Økonomisk og industriell dimensjon av smartkort" av november 2009, har det globale smartkortmarkedet overgått 5 milliarder enheter. (Kilde Nodal).

Ordliste

  • AID (Application IDentifier)  : en tegnstreng brukt som en unik identifikator for smartkortapplettene i henhold til ISO 7816- standarden
  • APDU  : Forkortelse for Application Protocol Data Units definert i henhold til ISO 7816-4-standarden.
  • APPLET  : En enkel komponent i et Java Card-program som kjører i APDU-miljøet.
  • UTVIDET APPEL : I Java-kort-sammenheng har en utvidet applet funksjonaliteten til den tilkoblede versjonen. (Eksempel: Manipulering av tegnstrenger).
  • Applet Container  : Mekanisme som styrer livssyklusen til Applets. I Java Card-sammenheng gir containeren kommunikasjonstjenester som APDU-kommandoer og svar sendes over.
  • Søppeloppsamler  : Mekanisme som automatisk frigjør minnet som brukes av objekter som ikke lenger brukes av applikasjonen. (Bare tilgjengelig i tilkoblet versjon 3).
  • SERVLET  : En komponent som genererer webinnhold som dynamisk kjører i en webapplikasjon.

Merknader og referanser

Merknader

  1. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Java Card Virtual Machine
  2. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Java Card Runtime Environment
  3. som er navngitt i den angelsaksiske vitenskapelige litteraturen Application Programmer Interface
  4. bytecode eller mellomliggende binær kode på fransk inkludert i klassefiler (.class-utvidelse).
  5. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Off-Card
  6. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Private Computer , "Personal computer" på fransk.
  7. som er oppkalt i den angelsaksiske vitenskapelige litteraturen On-Card
  8. som er oppkalt i den angelsaksiske vitenskapelige litteraturen CAP-fil ( C onverted AP plet )
  9. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Export File
  10. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Card Acceptance Device
  11. som er oppkalt i de angelsaksiske vitenskapelige litteraturindustriens spesifikke utvidelser
  12. metoder som er navngitt i den angelsaksiske innfødte vitenskapelige litteraturmetoden
  13. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Connected Limited Device Configuration
  14. . En accessor er en metode som brukes til å hente innholdet til et beskyttet datamedlem
  15. kontekst: En navnetjeneste knytter navn til objekter. En tilknytning mellom et navn og et objekt kalles et slips, og sett med bånd kalles en sammenheng. Et navn i en sammenheng kan nødvendigvis ha en annen kontekst som bruker de samme navnekonvensjonene; den vedlagte konteksten kalles en underkontekst.
  16. Application IDentifier Application ID på fransk
  17. Resource IDentifier Identifier av ressursen på fransk
  18. Utvidelse av proprietær IDentifier- utvidelse av den proprietære identifikatoren på fransk
  19. som er oppkalt i den angelsaksiske vitenskapelige litteraturen Application multi capability .

Referanser

  1. Baentsch 1999 , s.  37
  2. Oracle: Versjonsspesifikasjoner
  3. Zhiqun 2000 , s.  29
  4. ISO7816
  5. Oracle: Components Chapter
  6. Zhiqun 2000 , s.  30
  7. søn 2008 , s.  7
  8. søn 2008 , s.  1
  9. Sun 2008 , s.  2
  10. Zhiqun 2000 , s.  34
  11. Zhiqun 2000 , s.  31
  12. Oracle 2002 , s.  1
  13. Casset 2002 , s.  209
  14. Zhiqun 2000 , s.  32
  15. Zhiqun 2000 , s.  33
  16. Zhiqun 2000 , s.  35
  17. Zhiqun 2000 , s.  36
  18. Zhiqun 2000 , s.  37
  19. Dufay, 2003 , s.28
  20. Zhiqun 2000 , s.  38
  21. Gemalto: APIs Chapter
  22. Søn 2002 , s.  147
  23. Ghindici 2006 , s.  6
  24. Sun 2008 , s.  5
  25. Sun CLDC: Introduksjon
  26. søn 2008 , s.  4
  27. Sun 2008 , s.  6
  28. Type brukt i Java-programmering
  29. StringBuilder-klasse
  30. Generiske typer Java-språk
  31. Autoboksing i Java
  32. Oppregning av Java-språk
  33. Statisk import av Java-språket
  34. Java Servlet-spesifikasjon: Java Card Platform, versjon 3.0.1 Connected Edition , s.  3-1
  35. Java Servlet V2.4
  36. (in) "  Internet X.509 Public Key Infrastructure / Certificate and CRL Profile  " Forespørsel om kommentarer nr .  2459Januar 1999.
  37. Gemalto: Sikkerhetskapittel
  38. søn 2008 , s.  1. 3
  39. søn 2008 , s.  14
  40. søn 2008 , s.  16
  41. søn 2008 , s.  17
  42. søn 2008 , s.  19
  43. ISO: standard ISO7816-4
  44. ISO: ISO7816-5 standard
  45. Gemalto 2009 , s.  19
  46. Oracle: kapittel fordeler
  47. Oracle: Industries Chapter
  48. Økonomisk og industriell dimensjon av smartkort , s.  29
  49. Økonomisk og industriell dimensjon av smartkort , s.  19

Bibliografi

  • (no) Zhiqun Chen , Java Card Technology for Smart Cards: Architecture and Programmer's Guide , Addison Wesley ,18. september 2000( les online )
  • (en) M. Baentsch , P. Buhler , T. Eirich , F. Horing og M. Oestreiche , “  JavaCard-from hype to reality  ” , IEEE Concurrency , vol.  7, n o  4,Oktober-desember 1999, s.  36-43 ( ISSN  1092-3063 , DOI  10.1109 / 4434.806977 )Sikre Syst. Group, IBM Res. Div. Zürich
  • (en) L. Casset og JL. Lanet , "  Økende pålitelighet for smartkort  " , ACM ,2002, s.  209 - 212 ( DOI  10.1145 / 1133373.1133416 )EW 10 Proceedings of the 10. workshop on ACM SIGOPS European workshop
  • (en) PH Hartel og L. Moreau , “  Formalisering av sikkerheten til Java, den virtuelle Java-maskinen og Java-kortet  ” , ACM Computing Surveys (CSUR) , vol.  33, n o  4,2001, s.  517-558 ( ISSN  0360-0300 , e-ISSN  1557-7341 , DOI  10.1145 / 503112.503115 )
  • (no) Dorina Ghindici , Gilles Grimaud og Isabelle Simplot-Ryl , "  Embedding verifiable information flow analysis  " , ACM Computing Surveys (CSUR) ,2006, s.  1-9 ( ISBN  1-59593-604-1 , DOI  10.1145 / 1501434.1501481 )
  • Guillaume Dufay , formell bekreftelse av Java Card-plattformen ,2003( les online )
  • (no) Java Card ™ 2.2 Application Programming Interface: Revision 1.1 for 2.2_01 Release , 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc,2002, 2.2_01  utg. , 278  s. ( les online )
  • (no) THE JAVA CARD ™ 3 PLATFORM , 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc,2008, 34  s. ( les online )
  • (no) Retningslinjer for utvikling av appletprogram for Gemalto , Java Card ™ og STK: versjon 2 ,2009, WG.GGS.4.0042  utg. , 53  s. ( les online )
  • (en) Oracle , Java Card 2.2 Off-Card Verifier: versjon 2.2 , 901 San Antonio Road Palo Alto, CA 94303 USA,2002, 24  s. ( les online )
  • (no) Java ™ Servlet-spesifikasjon: Java Card ™ -plattform, versjon 3.0.1 Connected Edition , 901 San Antonio Road Palo Alto, CA 94303 USA, Sun Microsystems, Inc,2009, 162  s.
  • (no) ISO7816-4 Identifikasjonskort - Integrerte kretskort: Del 4: Organisasjon, sikkerhet og kontroller for sentraler ,2005, 2 nd  ed.
  • Økonomisk og industriell dimensjon av smartkort , www.industrie.gouv.fr,2009, 1 st  ed. ( les online ) , s.  74

Se også

Eksterne linker