Java Card – Wikipédia, a enciclopédia livre

Este artigo é um esboço. Você pode ajudar a Wikipédia expandindo-o. Editor: considere marcar com um esboço mais específico.

Java Card é uma tecnologia que permite que pequenos aplicativos (applets) baseados na plataforma Java sejam executados com segurança em smart cards e dispositivos similares com limitações de processamento e armazenamento.

O Java Card é voltado a cartões SIM e a cartões para caixas eletrônicos. O primeiro Java Card foi apresentado em 1997 por várias empresas. Os produtos Java Card são baseados nas especificações da Plataforma Java Card desenvolvidas pela Oracle Corporation, e suas principais características são portabilidade e segurança.

Principais características

[editar | editar código-fonte]

O objetivo do Java Card é definir um ambiente de computação padrão para smart cards, permitindo que o mesmo miniaplicativo Java Card seja executado em diferentes tipos de cartão, da mesma forma que um miniaplicativo Java é executado em diferentes computadores. Como em Java, isso é feito usando a combinação de uma máquina virtual (a Java Card Virtual Machine, ou JCVM) e uma biblioteca de tempo de execução bem definida, que mira abstrair as diferenças entre diferentes plataformas. A portabilidade permanece mitigada por problemas de tamanho de memória, desempenho e tempo de execução (por exemplo, para protocolos de comunicação ou algoritmos criptográficos).

Em motivo de manter a compatibilidade entre o maior número de plataformas possível, muitos recursos da linguagem Java não são suportados pelo Java Card (os tipos char, double, float e long; o qualificador transient; enums; matrizes de mais de uma dimensão; finalização; clonagem de objeto e threads). Além disso, alguns recursos comuns do Java não são fornecidos no tempo de execução por muitos cartões inteligentes reais (em particular o tipo int e coleta de lixo de objetos).

Processo de desenvolvimento

[editar | editar código-fonte]

O desenvolvimento na plataforma é feito por meio do Java Card Development Kit (JCDK) e do Java Card Runtime Environment (JCRE), por meio de um conversor e simulador.

"Hello World" no Java Card

[editar | editar código-fonte]
 /*  * Package:  org.wikipedia  * Filename: HelloWorld.java  * Class:    HelloWorld  * Date:     [[13 de Dezembro]] de [[2021]]  *  */    package org.wikipedia;    import javacard.framework.*;    public class HelloWorld extends javacard.framework.Applet {    // Byte CLA    final static byte HELLO_CLA = (byte) 0xB0;    // Verificar PIN    final static byte INS_HELLO = (byte) 0x20;    public static void install(byte[] bArray, short bOffset, byte bLength) {     (new HelloWorld()).register(      bArray,      (short) (bOffset + 1),      bArray[bOffset]);    }    // Processa o comando APDU    public void process(APDU apdu) {     byte[] buffer = apdu.getBuffer();     if ((buffer[ISO7816.OFFSET_CLA] == 0)      && (buffer[ISO7816.OFFSET_INS] == (byte) (0xA4)))      return;     // Valida o byte CLA     if (buffer[ISO7816.OFFSET_CLA] != HELLO_CLA)      ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);     // Seleciona a instrução apropriada (Byte INS)     switch (buffer[ISO7816.OFFSET_INS]) {      case INS_HELLO :       getHello(apdu);       return;      default :       ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);     }    }    /**     * @param apdu     * @author Wikipedia     * Get user id attribute     */    private void getHello(APDU apdu) {     // Cadeia de bytes com a mensagem: "hello world Java Card"     byte[] hello =      {       'h',       'e',       'l',       'l',       'o',       ' ',       'w',       'o',       'r',       'l',       'd',       ' ',       'J',       'a',       'v',       'a',       ' ',       'C',       'a',       'r',       'd' };     // Informa ao JCRE que será enviado uma resposta     short le = apdu.setOutgoing();     short totalBytes = (short) hello.length;     // Informa ao JCRE o tamanho da mensagem em bytes     apdu.setOutgoingLength(totalBytes);     // Envia a mensgem para o host     apdu.sendBytesLong(hello, (short) 0, (short) hello.length);     }    } 

Testando

Após enviar comando "select", envie o seguinte comando: B0 20 00 00

A saída será: 68 65 6C 6C 6F 20 77 6F 72 6C 64 20 4A 61 76 61 20 43 61 72 64 90 00

Ligações externas

[editar | editar código-fonte]