Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 10

155

UTILIZAO DE JAVA CARD COMO PLATAFORMA PARA O DESENVOLVIMENTO DE APLICAES EM SMART CARD.
Lucas Plis Dolce, Francisco Assis da Silva, Silvio Antonio Carro
Faculdade de Informtica (FIPP) Universidade do Oeste Paulista (UNOESTE) Presidente Prudente SP. E-mail: silvio@unoeste.br

RESUMO Com o crescimento da tecnologia Java Card e o aumento do uso de Smart Cards no mercado, aumentaram-se a demanda pelo desenvolvimento de aplicaes que so executadas nos cartes. Essas aplicaes necessitam oferecer alm de portabilidade, comodidade e segurana, servios com qualidade e alta disponibilidade para os usurios. Nesse artigo so abordados os conceitos principais da tecnologia Smart Card bem como o uso destas para desenvolver pequenas aplicaes usando a linguagem Java Card focando o uso para sistemas de controle nas quais o carto serviria de repositrio de alguns dados e instrumento de consulta de sistemas maiores. Palavras-chave: cartes inteligentes - Java Card - Applets

USING JAVA CARD AS A PLATFORM FOR DEVELOPING APPLICATIONS IN SMART CARD.

ABSTRACT With the growth of Java Card technology and the increased use of smart cards in the market, demand for the development of applications that run on the cards has risen. These applications need to offer besides portability, convenience and safety, service quality and high availability for users. This article examines the main concepts of Smart Card technology and use these to develop small applications using the Java Card focusing on the use for control systems where the card would serve as a repository of some data and query tool for larger systems. Keywords: Smart card - Java Card - Applets

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

156

INTRODUO O rapidamente advento a da Internet das alterou se

um ou mais terminais de captura off-line (que so os leitores de carto), por um ou mais cartes comerciante (usados para armazenar as

maneira

pessoas

comunicarem umas com as outras, o mundo se tornou conectado e os negcios evoluram do modelo tradicional frente a frente para o modelo virtual onde atravs de poucos cliques as pessoas fazem compras sem sair de suas casas ou escritrios. Esse grande crescimento do comrcio eletrnico no abriu novos caminhos apenas para os comerciantes, mas tambm trouxe vrias oportunidades para as indstrias alcanarem novos clientes e objetivos. Outro grande responsvel no pelo crescimento a rea da de

informaes dos abastecimentos), por um ou mais cartes consumidor (pertencentes ao dono da frota) e possui um software de gesto via web que proporciona um relacionamento transparente e confivel entre o posto e o frotista, elimina discordncias entre relatrios de consumo e possibilita a reduo de despesas administrativas com coleta e digitao de dados das bombas de combustvel, preparao e emisso de relatrios. Este trabalho tem como objetivo o

desenvolvido de uma aplicao em dois mdulos, o primeiro uma aplicao host que tem as funes de acessar, gravar e consultar

tecnologia

mercado

telecomunicao mvel, com os chips GSM, no qual a maior parte deles utiliza a tecnologia Java Card. Os Smart Cards oferecem uma maneira segura, confivel, conveniente e eficaz para garantir a segurana de comrcio eletrnico e permitir uma ampla gama de novas aplicaes [Chen 2000]. Como exemplos de aplicaes que usam Java Card e trazem benefcios para a populao e para o comrcio em geral tem-se o Projeto RIC Registro de Identidade Civil [Projeto RIC 2009] que tem como objetivo substituir o RG, CPF, Ttulo de Eleitor, CNH, Passaporte e Carteira de Trabalho por um nico carto que contenha todos essas informaes como forma de tentar acabar com as fraudes e duplicidades em servios pblicos e facilitar a vida dos cidados. J na rea comercial existe o sistema nomeado

informaes no Smart Card e o segundo so as applets Java Card que devem ser instaladas nos Smart Cards. Foram investigadas algumas tecnologias e recursos como: Java Card, que foi a linguagem de programao utilizada para o desenvolvimento do projeto; o Smart Card responsvel por armazenar as aplicaes desenvolvidas; o

Protocolo de Comunicao APDU responsvel pela comunicao entre o carto e a leitora e o ambiente de desenvolvimento Eclipse com

integrao da biblioteca JCOP TOOLS.

SMART CARD Parecido com os cartes de crdito de tarja magntica, os Smart Cards possuem

capacidade de armazenamento e processamento de informaes de maneira segura e confivel. O Smart Card independente de sistema

WhiteCard [Comsoft 2006] que um sistema que atende a necessidade de controle de informaes sobre abastecimentos de frotas em postos de combustveis, garantindo agilidade no

corporativo e de banco de dados, o seu funcionamento de forma isolada. Sistemas convencionais tm seu funcionamento

atendimento por no depender de nenhum sistema on-line em funcionamento no momento do abastecimento. Com base na mais avanada tecnologia disponvel, o sistema composto por

prejudicado caso ocorra uma falha na rede de comunicao devido ao no acesso s

informaes no banco de dados, esses sistemas

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

157

podem ser desenvolvidos para funcionar de maneira off-line usando Smart Cards para

Existem dois tipos de Smart Card (carto inteligente): com contato e sem contato. Smart Cards com contato necessitam de contato fsico para se comunicar e trocar informaes com o exterior, so aqueles que necessitam de um leitor de carto, como exemplo os cartes de crdito atuais que precisam ser inseridos em um leitor no caixa eletrnico para realizar determinado

armazenar as informaes sem a necessidade de consultar constantemente o banco de dados. Ao contrrio das prticas de tecnologia da informao no mbito do PC, o desenvolvimento das funcionalidades dos Smart por Cards

fortemente

influenciado

padres

internacionais como, por exemplo, ISO/IEC. A razo para isso que a interoperabilidade um fator muito importante para o Smart Card, portanto todas as suas caractersticas fsicas e eltricas so guiadas por normas e padres [Rankl 2007]. A Figura 1 representa um Smart Card.

servio. J Smart Cards sem contato so aqueles que no precisam de contato fsico para se comunicar e trocar informao com o exterior, eles possuem uma antena embutida em seu interior e se comunicam por meio de rdio frequncia, como exemplo os cartes de

transporte coletivo o qual ao se aproximar de um equipamento transmissor de rdio frequncia faz a comunicao e a troca das informaes necessrias [Rankl 2007]. Todo Smart Card contm alguns

elementos de hardware que so obrigatrios (EEPROM ou Flash, RAM, ROM e CPU) como a Figura 2, mas tambm podem conter vrios outros elementos que so opcionais e servem para determinados tipos de servios e aplicaes Figura 1. Smart Card como, por exemplo: Timer, USB, Co-processador para trabalhar com criptografia e outros.

Figura 2. Diagrama de blocos de um microcontrolador de um carto inteligente com uma interface de contato

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

158

No projeto foi utilizado o Smart Card JCOP - SmartMX JCOP21 V2.3.1 on Secure PKI com 36 KB de capacidade de armazenamento, com um Co-Processador auxiliar para trabalhar com funes criptogrficas RSA e ECC podendo gerar chaves RSA com comprimento de at 2432 bits, habilitado para executar algoritmos como SHA-1, MD5 e CRC e com suporte s interfaces de contato do tipo T=0 e T=1 definidas pela ISO/IEC 7816-3 [Scm 2006]. Em um Smart Card pode ser instalado qualquer tipo de aplicao de pequeno porte que seja possvel de ser executado com as limitaes do hardware existentes e que necessitem de portabilidade, comodidade e segurana como, por exemplo, aplicaes para TV a cabo ou satlite, telecomunicaes autenticao, em geral, eletrnica, identificao, controle de

O cdigo do programa armazenado na memria no-voltil do carto inteligente,

memria EEPROM ou flash. Devido a limitao de hardware existente em um Smart Card a especificao Java Card suporta algumas funcionalidades da linguagem Java enquanto outras no so suportadas. A Tabela 1 relaciona algumas das funcionalidades suportadas e no suportadas.

Tabela 1. Funcionalidades suportadas e no suportadas

Funcionalidades suportadas Tipos primitivos: boolean, byte, short Suporte ao tipo int opcional Arrays unidimensionais

Funcionalidades no suportadas Tipos primitivos: long, double, float Caracteres e string

moeda

acessos, programas de fidelidade, controle em universidades e controle em hospitais [Chen 2000].

Arrays multidimensionais

Pacotes, classes, JAVA CARD A idia da tecnologia Java Card colocar um software Java em um sistema de carto inteligente, preservando o espao suficiente para as aplicaes, no entanto, o hardware de um microcontrolador de um carto inteligente tem poder de processamento significativamente interfaces e excees Herana

Threads

Clone de objetos

A mquina virtual Java Card presente no carto dividida em duas partes: uma que executada off-card e outra que executada oncard. A parte on-card da mquina virtual responsvel por executar os arquivos CAP (Converted Applet) independente do hardware envolvido (arquivos CAP possuem uma

menor do que o hardware de um PC, ento apenas um subconjunto da linguagem Java definida pelas especificaes da linguagem Java Card. Para desenvolver aplicaes Java Card aconselhado levar em conta todos os aspectos da especificao desde o incio do processo de desenvolvimento, pois caso contrrio ser

representao binria do aplicativo desenvolvido) e a parte off-card responsvel por realizar a converso dos arquivos de classe em arquivos CAP. Essa diviso necessria devido as

bastante difcil aumentar a velocidade ou diminuir o tamanho de um programa caso necessrio [Rankl 2007].

limitaes de recursos nos dispositivos envolvidos [Chen 2000]. A Figura 3 mostra os componentes da mquina virtual.

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

159

Figura 3. JCVM (Mquina Virtual Java Card)

JCRE

(Java

Card

Runtime

comunicao ser possvel inserir, consultar e excluir dados do carto. 2 Criar as applets: escrever o cdigo Java Card da aplicao. 3 Gerar os arquivos .class: atravs do ambiente de desenvolvimento, realiza a

Environment) o ambiente de execuo no carto inteligente, responsvel por executar os aplicativos, gerenciar os recursos do carto, comunicao e segurana. inicializado apenas uma vez e isso ocorre durante o perodo de fabricao do carto no qual so inicializados a mquina virtual e os objetos que prestam servios para o ambiente de execuo. Quando a energia removida, o JCRE suspenso e mantm seu estado, objetos e dados em memria persistente. Quando o carto re-energizado o JCRE reiniciado e carrega os dados que esto na memria persistente retomando o seu

compilao da aplicao e automaticamente so criados os arquivos .class. 4 Definir o AID: um array de bytes em hexadecimal que permite que a aplicao seja selecionada, toda vez que for necessrio utilizar uma aplicao a primeira coisa a ser feita selecionar a aplicao atravs desse AID para depois realizar a troca de informaes com o carto. 5 Gerar o arquivo .cap: todas os arquivos .class devem ser convertidos em um nico arquivo .cap como se fosse um pacote no qual todas as classes foram convertidas em um nico arquivo. 6 Instalar a applet no carto: atravs do ambiente de desenvolvimento possvel instala a aplicao no Smart Card. 7 Envio e recebimento de comandos APDUs: aps as etapas anteriores a aplicao j est pronta para ser utilizada, para se comunicar com a aplicao Java Card deve-se enviar

funcionamento no estado exato em que tinha sido deixado, a partir desse momento o JCRE fica aguardando algum comando enviado pelo

aplicativo host. O JCRE se mantm em estado de execuo durante uma sesso entre o carto e o leitor (uma sesso o tempo em que um carto permanece conectado e energizado pelo leitor) [Chen 2000]. Na sequncia so mostradas as etapas passo a passo desde a criao de uma applet Java Card at a sua instalao e execuo no Smart Card. 1 Definir as APDUs de comando e resposta: atravs desse protocolo de

comandos APDUs definidos na primeira etapa.

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

160

A Figura 4 ilustra todos os passos citados anteriormente para o desenvolvimento de uma

aplicao Java Card.

Figura 4. Etapas para o desenvolvimento de uma aplicao Java Card CLA: identifica a categoria dos comandos PROTOCOLO DE COMUNICAO APDU (Application Protocol Data Unit) um protocolo em nvel de aplicao e foi utilizado nesse projeto para realizar a comunicao e a troca de informaes entre o Smart Card e a aplicao host. Ele trabalha atravs de mensagens que podem ser divididas em duas estruturas: a primeira que utilizada pela aplicao host para enviar comandos para o carto e a segunda que utilizada pelo carto para enviar respostas para a aplicao host. Toda mensagem de comando APDU combinada com uma mensagem de resposta APDU [Chen 2000]. As Figuras 5 e 6 representam o formato de um comando e de uma resposta APDU respectivamente. Data field: dados enviados pelo carto como resposta ao comando APDU, com o Cabealho obrigatrio CLA INS P1 P2 Corpo opcional Lc Data field Figura 5. Formato de um comando APDU Le tamanho igual ao especificado no campo Le do comando APDU (Figura 5) . SW1 e SW2: so chamados de palavras de status, retornam cdigos hexadecimais, por exemplo, 0x9000 que indicam se o comado foi Corpo Opcional Data field Cabealho obrigatrio SW1 SW2 e respostas APDU. INS: especifica qual o comando. P1 e P2: usados quando necessrio para fornecer mais informaes para a instruo. Lc: especifica o tamanho em bytes do campo Data field. Data field: contm os dados que so enviados instruo. Le: especifica o numero de bytes para o carto executar alguma

esperado como resposta a esse comando.

Figura 6. Formato de uma resposta APDU

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

161

executado com sucesso ou no e o que aconteceu caso tenha ocorrido algum problema.

Os possveis casos de combinao de comando e resposta APDU so mostrados na Figura 7.

Figura 7. Combinaes de comandos e repostas APDUs AMBIENTE DE DESENVOLVIMENTO Para desenvolver o mdulo on-card foi utilizada a verso do plugin JCOP Tools 3.1.1b acompanhado das verses JDK 1.5, Eclipse Galileu 3.5.0, Java Card 2.2.1 e Global Platform 2.1.1, as bibliotecas Java Card e Global Platform j acompanham o plugin dispensando a sua instalao e tambm um kit de desenvolvimento com dois cartes JCOP21 36k e uma leitora de cartes ACR38. O mdulo off-card foi desenvolvido por meio da IDE NetBeans 6.8 acompanhado da biblioteca Java Card 2.2.1 e da API SmartcardIO. Com todas essas ferramentas e Mdulo on-card Seguindo as etapas de como desenvolver uma applet Java Card a primeira coisa realizada foi a definio dos comandos e respostas APDUs, pelos quais o mdulo on-card se comunica com o mdulo off-card. A tabela 2 mostra todos os comandos APDUs definidos: DESENVOLVIMENTO DE APLICAES Para demonstrar o processo de trecho da comunicao entre os mdulos internos ao carto. A aplicao foi dividida em dois mdulos: o primeiro um mdulo on-card, ou seja, um mdulo que trata todas as classes, funes e servios que foram inseridos no carto e o segundo um mdulo off-card, ou seja, um mdulo que trata toda a parte da interface grfica da aplicao host e de como o usurio interage, se comunica e troca informaes com o carto.

bibliotecas instaladas tem-se o ambiente grfico que automatizou o uso das ferramentas

disponveis para o desenvolvimento do projeto.

desenvolvimento de uma aplicao Java Card, este artigo traz um exemplo de uma aplicao como trechos de cdigo para enviar e receber comandos APDUs no mdulo off-card e um

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

162

Tabela 2. Definio dos comandos APDUs Varivel CLA_INFOESTE

INS_SET_CURSOPALESTRA

INS_DEL_CURSOPALESTRA

INS_GET_NTOTALCURSOPALESTRA

INS_GET_LISTATODOSCURSOPALESTRA

Funo Define a classe de comando e resposta para essa aplicao Realiza a inscrio de cursos e (ou) palestras passados por parmetro. Realiza o cancelamento da inscrio dos cursos e (ou) palestras passados por parmetro. Retorna o numero total de inscries de cursos e palestras. Retorna o cdigo de todos os cursos e palestras que esto inscritos no carto.

Valor (byte) 0xB0

(byte) 0x10

(byte) 0x20

(byte) 0x30

(byte) 0x40

applet alguns

principal mtodos

reescreve devido ao

quem tem a responsabilidade de criar uma nova instncia da applet executando o seu construtor. O mtodo process quem recebe os comandos APDUs, verifica se eles so vlidos e direciona a aplicao para executar o comando APDU. Outros dois mtodos de extrema

obrigatoriamente

relacionamento de herana que possui com a classe Applet (javacard.framework.Applet) como: Seletc, deSelect, install e process. O mtodo Select responsvel por selecionar a aplicao e retorna um valor true caso a aplicao seja selecionada. O mtodo deSelect pelo contrrio retira a seleo da aplicao, ou seja, deixa o carto liberado para utilizar outra applet. J o mtodo install o primeiro a ser acessado dentro da applet toda vez que ela for selecionada esse mtodo pode ser comparado ao mtodo main de uma aplicao Java e ele

importncia para a aplicao so os mtodos que enviam (Figura 8) e recebem (Figura 9) dados do mdulo off-card.

1 private void enviarDados(APDU apdu, byte[] dados) { 2 3 short dataLen = (short) dados.length; 4 byte[] buffer = apdu.getBuffer(); 5 Util.arrayCopyNonAtomic(dados, (short) 0, buffer, (short) 0, dataLen); 6 apdu.setOutgoingAndSend((short) 0, dataLen); 8 } Figura 8. Mtodo que envia dados para a aplicao host

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

163

1 private byte[] receberDados(APDU apdu) { 2 3 byte[] dados = new byte[127]; 4 byte[] buffer = apdu.getBuffer(); 5 short lengthDados = (short) (buffer[ISO7816.OFFSET_CDATA] & 0x00FF); 6 if (lengthDados == 0) 7 ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); 8 Util.arrayCopy(buffer, (short) ((ISO7816.OFFSET_CDATA) & 0x00FF), 9 dados, (short) 0, (short) 100); 10 return dados; 12 } Figura 9. Mtodo que recebe dados da aplicao host

Mdulo off-card Para o desenvolvimento desse mdulo foi utilizada a API SmartcardIO que d suporte para trabalhar com a leitora de carto e com o carto. A API prev funes que listam as leitoras disponveis, as leitoras conectadas e tambm

funes que ajudam a identificar se existem cartes ou no conectados s leitoras. A Figura 10 mostra a tela principal do mdulo off-card por onde o usurio realiza a interao com o mdulo on-card.

Figura 10. Interface grfica do mdulo off-card O mdulo off-card faz toda a troca de informaes com o mdulo on-card atravs de envios e recebimentos de comandos APDUs, a Figura 11 mostra um trecho de cdigo que realiza essa operao.

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

164

1 if (c.getTerminal().isCardPresent()) { 2 c.iniciaComunicacao(); 3 4 byte[] select = {(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00, (byte) 0x08, (byte) 0x43, (byte) 0x6f, 5 (byte) 0x6e, (byte) 0x74, (byte) 0x72, (byte) 0x6f, (byte) 0x6c, (byte) 0x61}; 6 byte[] apdu = {(byte) 0xB0, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x00}; 7 8 ResponseAPDU r_select = c.getCanal().transmit(new CommandAPDU(select)); 9 ResponseAPDU r = c.getCanal().transmit(new CommandAPDU(apdu)); 10 11 Informacao.append(r + "\n\n"); 12 JOptionPane.showMessageDialog(null, Host.paraStringHexa(r.getData())); 13 } else { 14 JOptionPane.showMessageDialog(null, "Carto no conectado!"); 15 } Figura 11. Acessando o mdulo on-card por meio da aplicao host No trecho de cdigo da Figura 11 podese observar a criao dos comandos APDUs (linhas 4 e 8), o comando select (linhas 4 e 5) montado agregando o AID da aplicao (43 6f 6e 74 72 6f 6c 61) em hexadecimal. Na linha 6 a aplicao selecionada e fica pronta para uso, aps isso enviado (linha 9) um comando APDU montado na linha 8 na classe de comandos e respostas APDU 0xB0 e a instruo 0x30. Feito isso a aplicao on-card retorna o nmero total de cursos e palestras inscritas no carto e uma palavra de status (SW) com valor igual a 9000 que significa que o comando foi executado com sucesso. COMSOFT. (2006). Disponvel em <http://www.comsoft.com.br/?q=produtos/whitecar d>. Acessado em: 12 dez 2010. Projeto RIC. (2009) Disponvel em: <http://jus.uol.com.br/revista/texto/17931/a-novacarteira-de-identidade-e-o-projeto-ric>. Acessado em: 10 dez. 2010. RANKL, W. (2007) Smart Card Applications: Design models for using and programming in smart cards, Edited by Kenneth Cox, John Wiley & Sons ltd., England. Scm. (2006). Disponvel em: <http://www.scmmicro.ru/upload/catalog/items/doc s/JCOP21_SPI.pdf> Acessado em: 10 dez 2010 REFERNCIAS CHEN, Z. (2000) Java Card Technology for Smart Cards: Architecture and Programmers Guide, Edited by Addison Wesley, U.S.A. citadas nesse artigo para desenvolver pequenas aplicaes de controle que venham servir de base para desenvolver outros tipos de aplicaes futuramente.

CONSIDERAES FINAIS Este trabalho foi desenvolvido com o intuito de demonstrar que os Smart Cards esto evoluindo tecnologicamente, e uso destes est cada vez mais amplo, no se concentrando apenas nas suas caractersticas e

funcionalidades originais. Cada vez mais esto sendo agregadas novas funcionalidades,

podendo ser utilizadas no apenas para efetuar transaes bancrias, mas para uma grande quantidade de aplicaes e solues. No tratado nesse artigo a parte de segurana, que envolve os cartes e o acesso s informaes armazenadas nele, pois o principal objetivo do projeto foi utilizar-se das tecnologias
Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

Você também pode gostar