# Java Card

Java Card és una tecnologia que permet executar de manera segura petites aplicacions Java (applets) al targetes intel·ligents i similars dispositius encastats.
Java Card dona a l'usuari la capacitat de programar aplicacions que s'executen a la targeta de manera que aquesta tingui una funcionalitat pràctica en un domini d'aplicació específic (pe. identificació, pagament, etc.). Aquesta tecnologia s'utilitza àmpliament en la targeta SIM (utilitzades a telèfons mòbils GSM) i en targetes moneder electrònic.
La primera targeta Java va ser presentada a 1997 per diverses empreses entre les que estaven Axalto (divisió de targetes de Schlumberger) i Gemplus. Els productes Java Card estan basats en la Plataforma Java Card les especificacions han estat desenvolupades per Sun Microsystems. L'última versió de la plataforma JavaCard és l'especificació 2.1.1, alliberada per Sun el 2000.
Les principals característiques d'aquesta tecnologia són la portabilitat i la seguretat.

## Portabilitat

Java Card té per objecte la definició d'un estàndard de targeta intel·ligent que permet a la mateixa applet funcionar en diferents targetes intel·ligents, de forma molt semblant a com un applet de Java s'executa en diferents ordinadors. Igual que en Java, això s'aconsegueix utilitzant la combinació d'una màquina virtual (la Màquina virtual de Java Card), i unes llibreries l'API està especificada. La portabilitat, en tot cas, segueix sent obviada en molts casos per qüestions de mida de la memòria, el rendiment i temps d'execució (per exemple per als protocols de comunicació o algoritmes criptogràfics).

## Seguretat

La tecnologia Java Card va ser desenvolupada originalment amb el propòsit d'assegurar la informació confidencial emmagatzemada a les targetes intel·ligents. La seguretat està determinada per diversos aspectes d'aquesta tecnologia:
* ' Applet '. L'applet és una màquina d'estats que només processa les comandes rebudes a través del dispositiu lector enviant i responent amb codis d'estat i dades.
* ' Separació d'applets '. Les diferents aplicacions estan, a més, separades unes de les altres per un tallafocs que limita l'accés i control dels elements de dades d'un subprograma a un altre.
* ' Encapsulació de dades '. Les dades s'emmagatzemen en l'aplicació i les aplicacions Java Card s'executen en un entorn aïllat (la targeta de Java VM), separada de la sistema operatiu i de l'equip en què es llegeix la targeta.
* ' Criptografia '. En aquesta plataforma estan implementats els algorismes criptogràfics més comunament utilitzats com a DES, 3DES, AES, RSA (incloent l'ús de criptografia de corba el·líptica). Altres serveis com la signatura electrònica o la generació de claus d'intercanvi també estan suportats.

## Java Card davant de Java
### Llenguatge

A nivell de llenguatge, Java Card és un subconjunt de Java: totes les construccions del llenguatge Java Card existeixen en Java i es comporten de la mateixa manera. Això va fins al punt que, com a part d'un cicle estàndard de desenvolupament, un applet Java Card es compila en un arxiu de classe Java (. Class) per un compilador Java normal, sense cap tipus d'opció especial (encara que el fitxer compilat serà processat posteriorment per eines específiques per a la plataforma Java Card).
No obstant això, moltes característiques del llenguatge Java no són compatibles amb Java Card (en particular alguns tipus bàsics (char, double ', float i long), els enums, els arrays de més d'una dimensió, els fils (threads);... i algunes característiques són opcionals i estan absents en la majoria de les targetes intel·ligents (pe. el tipus int, en particular, que és el valor per defecte d'un tipus d'expressió de Java, la recollida d'escombraries).

### Bytecode

El bytecode de Java Card gestionat per la màquina virtual de Java Card és un subconjunt funcional de Java (Java 2 Standard Edition) encara que utilitza una codificació diferent optimitzada per ocupar menys espai.

### Llibreries d'execució

Les llibreries estàndard de Java Card difereixen en molt de les de Java, i el subconjunt comú és mínim. Per exemple, la classe del Java Security Manager no és compatible amb Java Card, on les polítiques de seguretat són executades per la màquina virtual de la targeta.

### Desenvolupament

Les tècniques de codificació utilitzades en la programació de Java Cards difereixen significativament de les que s'utilitzen en un programa Java. Tot i així, en utilitzar Java Card un subconjunt del llenguatge Java s'accelera la corba d'aprenentatge, i permet utilitzar un entorn Java per desenvolupar i depurar un programa Java Card.

## Enllaços externs

* Plataforma Java Card Specification (Sun Microsystems)
* Especificacions (GlobalPlatform)