Download - TCC Projeto Johni Douglas Marangon

Transcript
Page 1: TCC Projeto Johni Douglas Marangon

1

UNIVERSIDADE DO OESTE DE SANTA CATARINA – UNOESCCAMPUS DE SÃO MIGUEL DO OESTE

JOHNI DOUGLAS MARANGON

ESTUDO COMPARATIVO DE FERRAMENTAS PARA DESENVOLVIMENTO DEAPLICATIVOS UTILIZANDO A PLATAFORMA JAVA CARD

São Miguel do Oeste (SC)2009

Page 2: TCC Projeto Johni Douglas Marangon

2

JOHNI DOUGLAS MARANGON

ESTUDO COMPARATIVO DE FERRAMENTAS PARA DESENVOLVIMENTO DEAPLICATIVOS UTILIZANDO A PLATAFORMA JAVA CARD

Projeto de Trabalho de Conclusão de Cursoapresentado à Universidade do Oeste de SantaCatarina – UNOESC, Campus de São Miguel doOeste como requisito parcial à obtenção do graude Bacharel em Sistemas de Informação

Orientador: Prof. Esp. Roberson Junior Fernandes Alves

São Miguel do Oeste (SC)2009

Page 3: TCC Projeto Johni Douglas Marangon

3

LISTAS DE ILUSTRAÇÕES

Desenho 1: Cartão Cidadão de Portugal..............................................................................................09

Desenho 2 : Arquitetura típica de um cartão de memória com contato com lógica de segurança.......15

Desenho 3: Arquitetura típica de um cartão com processador e co-processador................................16

Desenho 4: Pontos de contato do cartão..............................................................................................16

Desenho 5: Estrutura de um comando APDU.....................................................................................19

Desenho 6: Estrutura de uma resposta APDU. ...................................................................................20

Desenho 7: Estrutura Java Card...........................................................................................................26

Desenho 8: Java Card Virtual Machine...............................................................................................29

Page 4: TCC Projeto Johni Douglas Marangon

4

LISTAS DE QUADROS

Quadro 1: Marcos no desenvolvimento da tecnologia de cartão inteligente.....................................13

Quadro 2: Tipos de memória comumente utilizadas em cartões inteligentes....................................14

Quadro 3: Resumo dos protocolos de transmissão de acordo com a norma ISSO/IEC 7816-3........18

Quadro 4: Recursos Java suportados e não suportados.....................................................................26

Quadro 5: Pacotes Java Card.............................................................................................................31

Page 5: TCC Projeto Johni Douglas Marangon

5

LISTA DE ABREVIATURAS E SIGLAS

JCDK Java Card Development Kit

JCVM Java Card Virtual Machine

JCRE Java Card Runtime Environment

CAP Converted Applet

IC Integrated Circuit

ATM Automated Teller Machine

SPOM Self Programmable One-chip Microcom

CAD Card Acceptance Device

HD Hard Disk

ROM Read Only Memory

RAM Random Access Memory

EEPROM Eletrically Erasable Programmable Read Only Memory

ISO International Organization for Standardization

RFID Radio Frequency IDentification

ATR Answer To Resset

IEC International Electrotechnical Commission

EMV Europay, Mastercard, VISA

PC/SC Personal Computer/Smart Card

API Application Programming Interface

GSM Global System for Mobile

SIM Subscriber Identity Module

HTML HyperText Markup Language

LGPL Lesser General Public License

PKCS Public Key Cryptography Standards

MUSCLE Movement for the Use of Smart Cards in a Linux Environment

OCF Open Card Framework

APDU Application Protocol Data Unit

C-APDU Command Application Protocol Data Unit

R-APDU Response Application Protocol Data Unit

POS Point Of Sale

PVC Policloreto de Vinilo

Page 6: TCC Projeto Johni Douglas Marangon

6

SUMÁRIO

1. INTRODUÇÃO........................................................................................................................... 7

1.1. OBJETIVOS............................................................................................................................... 71.1.1. Geral........................................................................................................................................ 81.1.2. Específicos .............................................................................................................................. 81.2. JUSTIFICATIVA/PROBLEMATIZAÇAO............................................................................... 82. REVISÃO DA LITERATURA ................................................................................................ 11

2.1. SMART CARDS ...................................................................................................................... 112.1.1. História dos Smart Card ..................................................................................................... 122.1.2. Estrutura de um Smart Card ............................................................................................. 142.1.2.1. Memórias utilizadas em Smart Card................................................................................. 142.1.2.2. Cartões de memória .......................................................................................................... 142.1.2.3. Cartões com microprocessador:........................................................................................ 152.1.2.4. Cartões com Contato (Contact Card) ............................................................................... 162.1.2.5. Cartões sem Contato (Contactless Card).......................................................................... 172.1.2.6. Cartões Híbridos (Hibrid Card)........................................................................................ 172.1.2.7. Duas Interfaces (Combi Cards) ........................................................................................ 182.1.3. Protocolos de transmissão ................................................................................................... 182.1.4. Protocolo APDU................................................................................................................... 192.1.4.1. Estrutura de um comando APDU ..................................................................................... 192.1.4.2. Estrutura de uma resposta APDU ..................................................................................... 202.1.5. ATR202.1.6. Especificações e normas técnicas ........................................................................................ 212.1.6.1. ISO/IEC 7816 ................................................................................................................... 212.1.6.2. EMV 212.1.6.3. PC/SC - Personal Computer/Smart Card .......................................................................... 222.1.6.4. GlobalPlataform................................................................................................................ 222.1.7. Áreas de aplicação com Smart Card .................................................................................. 222.1.7.1. Identificação física............................................................................................................ 232.1.7.2. Controle de acesso físico .................................................................................................. 232.1.7.3. Serviços financeiros.......................................................................................................... 232.1.7.4. Transporte ......................................................................................................................... 242.2. PLATAFORMA JAVA CARD................................................................................................ 242.2.1. JCRE - Java Card Runtime Environment ....................................................................... 272.2.1.1. JCVN – Java Card Virtual Machine ................................................................................. 292.2.1.2. Java Card API ................................................................................................................... 302.3. FERRAMENTAS E MÉTODOS PARA DESENVOLVIMENTO SMART CARD .............. 312.3.1. Open Card Framework ....................................................................................................... 312.3.2. OpenSC................................................................................................................................. 322.3.3. MUSCLE .............................................................................................................................. 322.3.4. SIM Toolkit .......................................................................................................................... 323. MATERIAIS E MÉTODOS .................................................................................................... 33

REFERÊNCIAS .................................................................................................................................... 36

APENDICE A – Partes que compõem a norma ISO/ICE 7816 ............................................................ 38

APENDICE B - Exemplo de código Java Card .................................................................................... 39

Page 7: TCC Projeto Johni Douglas Marangon

7

1. INTRODUÇÃO

Atualmente com a evolução de dispositivos móveis observa-se uma forte tendência de

migração no processamento e armazenamento de dados que deixam de ser centralizados e

passam a ser distribuídos fazendo com que a informação esteja sempre disponível em

qualquer lugar e a qualquer hora. Um simples cartão pode conter uma quantidade significativa

de informações que por ventura provem os mais variados serviços e ficam a disposição do

usuário sempre que for requisitado de forma prática e acessível.

No presente trabalho será desenvolvido um documento que conterá as principais

informações sobre ferramentas que auxiliam o desenvolvimento de aplicativos para cartões

inteligentes utilizando a tecnologia Java Card visando apoiar a criação de aplicações para os

mesmos.

No documento irão conter informações sobre a estrutura de funcionamento de cartões

inteligentes, áreas que poderão ser exploradas para implantação de sistemas que utilizam

cartões e métodos de instalação e manipulação de aplicativos no cartão de forma genérica.

Para as ferramentas estudas será apresentado um passo a passo de instalação e

utilização visando aproveitar melhor as características de cada uma. Durante o

desenvolvimento do projeto será criado pequenos exemplos da utilização de cada ferramenta

em ambiente de produção com o objetivo de explorar a sua utilização.

Através das informações levantadas e o conhecimento obtido será possível criar

aplicativos para cartões inteligentes de forma rápida e simples diminuindo os custos e

complexidade envolvidos e aumentado a produtividade.

O momento demanda um estudo dessa proporção, pois o potencial uso de cartões

inteligentes é visto pelo acadêmico como uma oportunidade para inúmeros estudantes que

ainda não trabalham na área se prepararem para desenvolver uma profissão alem de agregar

conhecimento ao acadêmico que poderá ser utilizado em projetos futuros.

1.1. OBJETIVOS

Nessa seção serão descritos os objetivos que se pretendem alcançar com

desenvolvimento do presente trabalho.

Page 8: TCC Projeto Johni Douglas Marangon

8

1.1.1. Geral

Pretende-se desenvolver um estudo em relação às ferramentas de desenvolvimento

Java Card a fim de realizar um comparativo entre as ferramentas analisadas produzindo um

documento de referência para desenvolvedores que utilizam essa tecnologia.

1.1.2. Específicos

Os objetivos específicos que se espera alcançar com o projeto são:

Estudar as principais características dos cartões inteligentes.

Compreender o funcionamento e utilização de um cartão inteligente.

Estudar a tecnologia Java Card e suas principais especificações a fim de

orientar a sua utilização para uma determina área de aplicação.

Identificar as principais vantagens no uso de Java Card em relação a soluções

semelhantes já existentes.

Demonstrar o uso de Java Card no desenvolvimento de aplicativos para

cartões inteligentes.

Apresentar algumas das ferramentas disponíveis que auxiliam os

desenvolvedores Java Card.

Desenvolver pequenos protótipos demonstrando o uso com as ferramentas.

Analisar e apresentar os resultados obtidos na pesquisa como forma de

contribuição para o meio acadêmico.

1.2. JUSTIFICATIVA/PROBLEMATIZAÇAO

Os Smart Cards ou cartões inteligentes são muito populares na Europa e o seu uso é

impulsionado principalmente pela capacidade de armazenar e processar as informações

contidas no cartão. Essa característica faz com que o cartão inteligente seja um grande aliado

na segurança de informação preservando todas as informações contidas nele, pois toda a

informação é criptografada num circuito eletrônico e fica disponível para ser utilizada

somente pelas partes autorizadas evitando assim fraudes (CUNHA, 2009).

Page 9: TCC Projeto Johni Douglas Marangon

9

A evolução por parte de grupos industriais fez com que o emprego de cartões

inteligentes fosse estendido para outras áreas sendo hoje uma tecnologias em constante

evolução, segundo Sargento (2009) “o investimento das empresas em Smart Cards tem vindo

a crescer progressivamente num mercado que vai se agitando com diferentes projetos que

surgem quer do lado da administração pública quer do lado do setor privado”.

Hoje o uso dos cartões inteligentes se estende a inúmeras áreas de aplicação, dentre

elas podemos destacar a telefonia, identificação pessoal, sistema de segurança por

computador, controle de acesso, vale transporte, vale alimentação, convênios, sistemas de

fidelidade e TV via satélite (HSBC, 2009).

No âmbito mundial existe em Portugal o uso do Cartão Cidadão que é um cartão de

identificação utilizado no país. Esse cartão oferece identificação visual e eletrônica do

usuário, alem de permitir acesso aos principais serviços públicos e privados unindo

praticamente todos os documentos em um. Esse projeto e um grande fator de modernização da

administração pública e traz muitas vantagens para os seus usuários.

Desenho 1: Cartão Cidadão de PortugalFonte: Zetes ([200-]).

No Brasil os trabalhos de maior expressão a nível governamental é o uso de cartões

inteligentes para certificação digital com os projetos e-CPF e e-CNPJ, esse projetos são

mantidos pelo Governo Federal e são utilizados para garantir a identidade de destinatários e

remetentes na autenticação de documentos eletrônicos através de chaves públicas e privadas

(ITI, [200-]). Outra área de aplicação que está ganhando destaque são os Sistemas de

Bilhetagem Eletrônicas com destaque para o cartão de transporte utilizado na cidade de

Curitiba, Paraná. O novo sistema substituiu as fichas de metal e os vales de papel que estavam

sendo falsificados e utilizados como moedas paralelas causando prejuízos para as empresas,

Page 10: TCC Projeto Johni Douglas Marangon

10

alem do seu uso evitar filas na compra de bilhetes e evitar a necessidade de transportar

dinheiro (URBS, c2008).

A grande evolução no uso dos cartões inteligentes ocorreu principalmente pelo seu

poder de processamento e de armazenamento de dados, isso fez com que surgisse e

amadurecesse tecnologias que pudessem ser empregadas no desenvolvimento de aplicações

para cartões inteligentes. A tecnologia Java Card permite que desenvolvedores executem todo

o ciclo de desenvolvimento de uma aplicação Java comum reduzindo os custos no

desenvolvimento de uma aplicação e garantindo interoperabilidade entre diferentes

fabricantes de cartões.

Os desenvolvedores possuem vantagens nativas da linguagem Java adaptadas para

executar em dispositivos com recursos limitados e maior modularidade e reutilização de

código com o paradigma orientado a objeto. O JCDK oferece as principais ferramentas para o

desenvolvimento e implementação de aplicativos escritos em Java, incluindo a JCVM e

diversas ferramentas de gestão e testes. Hoje se observa uma grande dificuldade para iniciar

os estudos sobre a tecnologia Java Card. É uma tecnologia que está em ascensão e cada vez

mais sendo adotada pelo mercado da tecnologia de informação.

Entre as maiores dificuldades encontradas estão falta de bibliografia em português

sobre técnicas e meios de desenvolvimento de aplicativos para cartões utilizando Java Card,

falta de orientação para escolha de dispositivos que podem ser usados com Java Card,

preparação de ambiente para desenvolvimento, simulação e testes, materiais que contribuem

para o desenvolvimento de aplicativos e ferramentas que auxiliam o desenvolvedor Java Card.

Portanto devido a esses fatores foi observado uma grande oportunidade de contribuir

com o meio acadêmico e desenvolver um documento que possa ser utilizado para minimizar

essas dificuldades.

Page 11: TCC Projeto Johni Douglas Marangon

11

2. REVISÃO DA LITERATURA

Nesse tópico serão apresentados os principais conceitos literários envolvidos no

desenvolvimento de aplicativos para cartões inteligentes utilizando a plataforma Java Card.

Esses conceitos literários são fortemente apoiados pelos mais conceituados autores da área.

Será apresentada a história e a estrutura de um cartão inteligente na seqüência será

apresentada a tecnologia Java Card como principal ferramenta utilizada no desenvolvimento

de aplicativos para cartões inteligentes, e por fim serão apresentadas algumas ferramentas que

poderão ser utilizadas no desenvolvimento do presente trabalho.

2.1. SMART CARDS

Segundo Mayes e Markantonakis (2008, p. ix) “A idéia de inserir um chip em um

cartão de plástico é quase tão antiga quanto criptografia de chave pública”. Há trinta anos

começaram a surgir os primeiros cartões com circuíto integrado, esses cartões possuíam

inúmeras limitações de processamento e armazenamento, hoje a indústria evoluiu e surgem

novas gerações de cartões com mais capacidade de processamento e armazenamento. Por

conta disso ocorrem aberturas de novos mercados para o uso de cartões. Segundo (RANKEL,

2007, p. xi) “a tendência atual é a utilização de cartões inteligentes por conta de suas

características positivas, em vez de simplesmente porque eles existem”.

Os cartões inteligentes desempenham um papel importante na área de tecnologia de

informação são considerados meios portáveis de armazenamento de dados, suas maiores

preocupações são segurança e integridade de dados o que garante uma maior a eficiência no

uso dessa tecnologia.

De acordo com Jurgensen e Guthery (2002, p. 1):

Um cartão inteligente é um computador. Ele não inclui o teclado e visor comopossuem nossos computadores pessoais, mas tem todos os elementos de umaplataforma de computação de propósito geral. De longe parece um cartão de créditocom uma pequena placa de metal na sua face. Essa placa é a interface elétrica paraum computador muito pequeno e altamente integrado sob o plástico. Estecomputador inclui um processador e vários tipos de memória, por vezes, até mesmoinclui um processador auxiliar que ajudá-lo em cálculos intensos. Assim, enquantoele é menor do que o PC em sua mesa e é também uma plataforma de computaçãorazoavelmente segura.

Os cartões inteligentes possuem mais capacidade de armazenamento de informação

em relação aos cartões magnéticos alem de possuírem alta durabilidade podem trabalhar off-

line dispensando o acesso e interação com outras fontes de informação, como servidores por

Page 12: TCC Projeto Johni Douglas Marangon

12

exemplo. O cartão inteligente pode ser considerado inviolável e possui armazenamento de

dados que pode chegar a 32 MB, possuem comumente modestos processadores de 8 bits e 16

bits a sofisticados processadores de 32 bits já sendo utilizados em alguns cartões. Seu poder

de processamento pode ser comparado a computadores de inicio da década de 80

(JURGENSEN; GUTHERY, 2002).

2.1.1. História dos Smart Card

O uso dos cartões de plástico iniciou nos Estados Unidos na década de 50 onde a

Dinners Club começou a emitir cartões para serem aceitos como forma de pagamento em

alguns restaurantes e hotéis. Esses cartões eram feitos de PVC o que garantia uma vida útil

maior do que os feitos de papel. A partir daí empresas como VISA e MasterCard iniciaram a

sua participação no mercado de cartões de plástico onde iniciou um grande avanço

tecnológico e passou-se a utilizar cartões com tarja magnética e impressão em alto relevo que

permitia a leitura de dados adicionais no cartão porem não garantia total segurança já que

qualquer equipamento adequado podia ler excluir e apagar os dados na tarja magnética.

Posteriormente surgiram os cartões com circuito integrado que tinham um nível maior de

segurança (RANKEL; EFFING, 2003) e (PETRI, 1999).

Na década de 70 com inicio dos avanços na microeletrônica foi possível produzir

chips em quantidade e com qualidade a preços acessíveis. Em 1968 o primeiro pedido de

patente de um cartão com circuito integrado foi solicitado pelos engenheiros alemães Jürgen

Dethloff e Helmut Gröttrup e tiveram na seqüência em 1970 o pedido de patente semelhante

feito no Japão por Kunitaka Arimura. “As maiores contribuições na área foram realizadas por

Ronald Moreno um jornalista Frances que entre 1974 e 1979 solicitou 47 pedidos de patentes

relacionadas com cartões inteligentes em 11 países”. (JURGENSEN; GUTHERY, 2002)

Em 1977 tem inicio a produção em massa de cartões inteligentes lideradas pelas

fabricantes Bull CP8, SGS Thomson, Schlumberger, em 1978 a BULL registra a patente do

SPOM (Self Programmable One Chip Microcomputador), que define a estrutura de um chip

que integra todos os elementos em um micro controlador. Em 1980 a Motorola desenvolve o

primeiro chip baseado nas especificações do SPOM. O grande avanço no uso de cartões

inteligentes teve inicio no ano de 1984 quando Serviço Postal e de Telecomunicações da

Franca (French PTT) iniciou os testes em cartões telefônicos com chips em ATMs. No

mesmo ano tem inicio na Franca e na Alemanha testes com o uso de cartões inteligentes em

operações bancarias. Segundo (PETRI, 1999) “em 1986, muitos milhões de cartões

Page 13: TCC Projeto Johni Douglas Marangon

13

inteligentes em telefones estavam em circulação na França. Seu número chegou a quase 60

milhões em 1990, e 150 milhões foram projetadas para 1996”. Três anos mais tarde em 1989

iniciam na Alemanha testes com o uso de cartões telefônicos com diversas tecnologias entre

elas banda magnética e armazenamento óptico (RANKEL; EFFING, 2003). Dentro de dois

anos mais tarde em 1986 o uso dos cartões inteligentes se expandiu em todo o mundo. No

Quadro 1 é apresentado um histórico da evolução dos cartões inteligentes.

Data Descrição1970 Dr. Kunitaka Arimura do Japão registrou a primeira patente sobre o conceito de Smart Card.1974 Roland Moreno da França registrou a patente original para o cartão IC, posteriormente

apelidado de "smart card".1977 Três fabricantes comerciais, Bull CP8, SGS Thomson e Schlumberger começaram a

desenvolver o cartão IC.1979 Motorola desenvolveu o primeiro chip micro controlador para utilização no setor bancário

francês.1982 Testes com cartões de memória são iniciados na França, é o primeiro teste do mundo com

cartão IC.1984 Teste com cartões bancários em ATM com chips foram realizados com sucesso.1986 14.000 cartões equipados com o CP8 Bull foram distribuídos aos clientes do Banco da

Virgínia e de Maryland National Bank. 50.000 cartões Casio foram distribuídos aos clientesdo First National Palm Beach e do Banco Mall.

1993 Testes com cartões multi-aplicação em Rennes na França onde a função Telecarte (paratelefones públicos) foi ativado em um Banco de Smart Card.

1994 Europay, MasterCard e Visa (EMV) publicam especificações comuns para o microchipbaseada em cartões bancários (cartões inteligentes).Na Alemanha começa a emissão de 80 milhões de cartões de memória em série com chips decartões de saúde do cidadão.

1995 Mais de 3 milhões de assinantes de telefonia móvel digital no mundo inteiro começam fazerchamadas com cartões inteligentes.Os primeiros 40.000 cartões multifuncionais com chips de tecnologia MARC foram emitidospara Marinha Americana no Havaí.

1996 Mais de 1,5 milhões cartões VISA Cash de valor armazenado foram emitidos nos JogosOlímpicos de Atlanta.MasterCard e Visa começam o patrocínio de consórcios para trabalhar na resolução dosproblemas de interoperabilidade de cartões inteligentes. Duas soluções de cartões diferentesforam desenvolvidas, o JavaCard apoiado pela Visa, e o Multi-application Operating System(MULTOS) apoiado pela MasterCard.

1999 O Governo dos EUA junto com o Serviço de Administração (GSA) inicia o projeto Smart ID,Smart Access Comum ID Card, o programa estabeleceu um contrato de veículos parautilização por todas as agências federais para adquirir um padrão de interoperabilidade docartão de identificação do empregado, a partir de um ou mais fornecedores, capazes defornecer tanto acesso físico como lógico (sistema / rede) e o acesso a todos os empregados doGoverno.O Governo Americano (General Services Administration) começou uma aplicação pilotoutilizando Java Card em Washington na região metropolitana.

Quadro 1: Marcos no desenvolvimento da tecnologia de cartão inteligenteFonte: Adaptado de Cardwerk (2008).

Na atualidade o uso de cartões inteligentes é fortemente impulsionado por questões de

segurança onde por natureza os cartões não são clonados facilmente e com os expressivos

Page 14: TCC Projeto Johni Douglas Marangon

14

avanços tecnológicos está cada vez mais intenso o uso de cartões inteligentes (MAYES;

MARKANTONAKIS, 2008).

2.1.2. Estrutura de um Smart Card

Nessa seção será apresentado as principais características físicas dos cartões

inteligentes visando um melhor entendimento sobre o seu funcionamento.

2.1.2.1. Memórias utilizadas em Smart Card

Por se tratar de dispositivos que realizam armazenamento e processamento de

informações os cartões possuem alguns tipos de memória que são utilizados para armazenar

programas e dados. Basicamente existem três tipos de memórias comumente utilizados em

cartões inteligentes. O Quadro 2 apresenta a definição dos tipos de memória usados em

cartões inteligentes.

Tipo DescriçãoROM (Read Only Memory) Tipo de memória somente leitura, quando usada em cartões

inteligentes armazena informações do sistema operacional ealgumas outras rotinas, esses dados são gravados pelo fabricante docartão durante o processo de fabricação do mesmo, possui baixocusto e ocupa pouco espaço no chip.

EEPROM (Electrically ErasableProgrammable Read-Only Memory)

E a memória não volátil em cartões inteligentes, funciona de formasemelhante a um HD de um computador pessoal armazenandodados no cartão quando o mesmo não é alimentado por energia.

RAM (Random Access Memory) Memória de acesso rápido e utilizada pelos aplicativos durante ainteração entre o CAD e o cartão.

Quadro 2: Tipos de memória comumente utilizadas em cartões inteligentesFonte: Adaptado de Rankel (2007, p. 6-9).

Os recursos de memória são controlados pelo sistema operacional do cartão,

assegurando que a aplicação somente pode acessar os recursos alocados em seu espaço de

memória evitando assim acesso não autorizados.

2.1.2.2. Cartões de memória

Os cartões de memória não realizam nenhum tipo de processamento e possuem apenas

a capacidade de armazenar dados em sua memória para posterior utilização. Os dados podem

ser alterados, apagados e incluídos. Esses cartões possuem memória ROM que contém

Page 15: TCC Projeto Johni Douglas Marangon

15

algumas informações do chip e os dados são controlados por uma lógica de segurança contra

exclusão e gravação de dados, em outros casos existem cartões com lógicas de segurança mais

complexas que utilizam esquemas simples de criptografia (RANKEL; EFFING, 2003).

Desenho 2: Arquitetura típica de um cartão de memória com contato e lógica de segurançaFonte: Rankel e Effing (2003, p. 19).

Os cartões de memórias são de baixo custo e utilizados geralmente em sistemas de

estacionamentos, transporte público, cartões pré-pagos de telefones, cartões de seguro de

saúde entre outras áreas que demandam um custo menor (RANKEL; EFFING, 2003).

2.1.2.3. Cartões com microprocessador:

Esses cartões possuem um chip com microcontrolador que realiza operações

aritméticas. O chip é composto por um sistema operacional que controla o acesso aos dados

do cartão onde fica impossível alterar informações sem as devidas permissões. Existem

sistemas operacionais que suportam múltiplas aplicações em um mesmo cartão e não permite

que os dados sejam diretamente acessados por aplicações externas. Esses cartões possuem

esquema de segurança em nível de hardware e software dificultando a sua violação. Os

cartões podem possuir também co-processadores que servem para auxiliar o processador

principal na realização de cálculos. Os cartões com co-processador são muito utilizados para

realizar processamento criptográfico que exige maior capacidade de processamento (MAYES;

MARKANTONAKIS, 2007).

Page 16: TCC Projeto Johni Douglas Marangon

16

Desenho 3: Arquitetura típica de um cartão com processador e co-processadorFonte: Rankel e Effing, (2003, p. 20).

Os principais sistemas operacionais Java Card são IBM JCOP licenciado para os

principais fabricantes de cartões e o Prisma desenvolvido pela Proton World International e

que atualmente faz parte da ST Microelectronics. Esses sistemas operacionais operam com as

principais características e especificações do ambiente Java Card (HENDRY, 2007).

2.1.2.4. Cartões com Contato (Contact Card)

A troca de informações é feita através de contato físico do cartão com o CAD. São

utilizados em inúmeras áreas de aplicação e possibilitam o processamento de um grande

número de informação. O cartão possui 8 contatos conforme norma ISO 7816-2 porém apenas

6 são usados (MAYES; MARKANTONAKIS, 2008).

Desenho 4: Pontos do cartão com chipFonte: Mayes e Markantonakis (2008, p. 5).

Page 17: TCC Projeto Johni Douglas Marangon

17

Conforme exibido no Desenho 3 os contatos possuem as seguintes funções:

VCC: Fornece energia para o cartão, geralmente 3 ou 5 volts.

RST: Sinal usado para indicar o estado do circuito integrado.

CLK: É a velocidade usada como referência na comunicação com o terminal e o

cartão.

RFU: Contato auxiliar não usado e reservado para uso futuro.

GND: Tensão de terra de referencia entre o cartão de o terminal.

VPP: Fornecesse uma fonte de energia separada.

I/O: Entrada e saída de dados, fornece o canal de comunicação entre o terminal e

o cartão.

RFU: Contato auxiliar não usado e reservado para uso futuro.

2.1.2.5. Cartões sem Contato (Contactless Card)

É um cartão que possui um pequena antena incorporada ao chip e se comunica com

CAD através de radiofreqüência utilizando a tecnologia RFID. Esses cartões dispensam

qualquer contato físico como CAD e a energia nesse caso e fornecida pelo CAD através de

campos eletromagnéticos. Esses cartões podem ser cartões com microprocessador ou cartões

com memória (RANKEL, 2007).

É recomendável que cartões sem contato sejam utilizados em ambiente com pouco

ruído elétrico o que garante um bom desempenho e confiabilidade. Os cartões sem contato são

mais caros que cartões com contato e exigem equipamentos e infra-estrutura mais sofisticada

aumentando o custo de implementação (RANKEL, 2007).

2.1.2.6. Cartões Híbridos (Hibrid Card)

Possui dois chips em um mesmo cartão sendo que um é acessado através de seus

contatos físicos e outro acessado através de radiofreqüência (ID EDGE, 2009).

Page 18: TCC Projeto Johni Douglas Marangon

18

2.1.2.7. Duas Interfaces (Combi Cards)

O cartão tem duas interfaces, onde um mesmo microcontrolador pode ser acessado

através de contato físico ou através de radiofreqüência (ID EDGE, 2009).

2.1.3. Protocolos de transmissão

Para Rankel (2007, p. 24) “Os protocolos de transmissão definem os processos de

comunicação entre o terminal e o cartão inteligente no caso de operações bem sucedidas e

mecanismos a serem utilizados para lidar com erros de transmissão quando detectados”. A

comunicação e feita no principio de mestre-escravo onde o terminal atua como mestre e o

cartão como escravo onde a comunicaçao é half-duplex (RANKEL, 2007). Segundo Rankel e

Effing (2003) existe um total de 15 protocolos de comunicação, estes são apresentados no

Quadro 3.

Protocolo Significado

T = 0 Assíncrona, half-duplex, orientado a byte, especificado na norma ISO / IEC 7816-3T = 1 Assíncrona, half-duplex, orientado a bloco, especificados na norma ISO / IEC 7816-3T = 2 Assíncrona, full-duplex, orientado a bloco, especificados na norma ISO / IEC 10536-4T = 3 Full-duplex, ainda não especificadoT = 4 Assíncrona, half-duplex, orientado a byte, extensão de T = 0, ainda não especificadoT =5 ... T = 13 Reservado para uso futuro, ainda não especificadoT = 14 Para uso nacional ainda não padronizados pela ISSOT = 15 Reservado para uso futuro e ainda não especificado

Quadro 3: Resumo dos protocolos de transmissão de acordo com a norma ISO / IEC 7816-3Fonte: Rankel e Effing (2003, p. 396).

Apenas dois protocolos de transmissão são utilizados atualmente por normas e padrões

internacionais.

O T=0 foi o primeiro a ser utilizados e parte do princípio de envio byte a byte, tem a

vantagem de consumir menos memória, é muito utilizado em cartões para comunicação móvel

é definido pela norma ISO / IEC 7816-3. Já o protocolo T=1 que envia blocos de bytes

também é definido pela norma ISO / IEC 7816-3. Por ser orientado a bloco toda a vez que um

bloco e enviado do terminal para o cartão a resposta do mesmo é devolvida pelo cartão

mantendo uma alternância de envio e retorno de informação. É um protocolo mais robusto e

possui mecanismos de detecção e reenvio de blocos que contem erros, é utilizado em sistemas

de cartões de pagamento e identificação pelo fato de exigirem uma um trafego maior de

informações (RANKEL, 2007).

Page 19: TCC Projeto Johni Douglas Marangon

19

Existem ainda os protocolos T=2 que esta e fase de definição e é baseado no T=1 e o

protocolo USB que possui uma taxa de transmissão maior que o T=0 e T=1 podendo chegar a

1,5 Mbps. O protocolo USB possui a vantagem de ser altamente compatível com ambiente PC

(RANKEL, 2007).

2.1.4. Protocolo APDU

O protocolo APDU (Application Protocol Data Unit) é um pacote de dados utilizado

para realizar a comunicação entro o host e o cartão. Para Wolfgang e Wolfgang (2003, p.

421) “O APDU é uma unidade de dados padronizado internacionalmente para a camada de

aplicação que é a camada 7 do modelo OSI ”. O protocolo APDU pode ser divido em dois

formatos. C-APDU que é o pacote de comando e R-APDU que é o pacote de resposta. Para

cada APDU de comando existe um APDU de resposta. Segundo Rankel e Effing (2003, p.

422) “o protocolo APDU cumpre as especificações da norma ISO/IEC 7816-4 e é

independente do protocolo de transmissão.

2.1.4.1. Estrutura de um comando APDU

Para Rankel e Effing (2003) o comando APDU é composto por um corpo e um

cabeçalho.

Desenho 5: Estrutura de um comando APDUFonte: Ranekl e Effing (2003, p. 422).

O byte CLA é o byte de classe e é usado para identificar a aplicação. E obrigatório o

preenchimento desse campo, porem não precisa representar nenhum valor.

O byte INS é o byte de instrução que identifica o comando envidado para o cartão.

Esse byte sempre deve ter valor e é tratado como um código pré-definido que identifica uma

solicitação de comando realizada pela aplicação. É obrigatório o preenchimento desse campo.

Os byte P1 e P2 são bytes de parâmetros e podem ser utilizados para prover

informações sobre o comando enviado. O preenchimento desse campo é obrigatório

Page 20: TCC Projeto Johni Douglas Marangon

20

O byte LC Field identifica o comprimento do corpo opcional de dados, o Data Field.

É opcional o preenchimento desse campo.

O Data Field e o campo de dados que será enviado para o cartão para executar a

operação solicitada no cabeçalho do comando. E um campo opcional.

O byte LE Field identifica tamanho de resposta esperado pelo host em relação ao

comando enviado. É opcional o preenchimento desse campo.

2.1.4.2. Estrutura de uma resposta APDU

Segundo Rankel e Effing (2003) a resposta APDU deve ser envaida pelo cartão

sempre que for recebido um comando APDU.

Desenho 6: Estrutura de uma resposta APDUFonte: Rankel e Effing (2003, p. 424).

Data Field e o campo de dados que contém informações sobre a resposta, seu tamanho

é defino pelo LE da estrutura de comando. É um campo opcional

Os bytes SW1 e SW2 são bytes que identificam o código de retorno, esses códigos são

predefinidos por algumas especificações e também podem ser pré-definidos pela aplicação.

Por exemplo, o código 90 00 identifica que o comando foi completado com sucesso. É

obrigatório do preenchimento desses campos.

2.1.5. ATR

O Answer to Reset é uma string de caracteres que é enviado pelo cartão, esses

caracteres contêm informações sobre o protocolo de transmissão e dados do cartão, é enviado

depois que o cartão foi alimentado com tensão elétrica no momento do contato como terminal,

caso o comando não seja enviado corretamente o terminal irá rejeitar o cartão. A estrutura do

comando ATR é definida pela norma ISSO/IEC 7816-3 e possui cerca de 33 bytes de

tamanho. Conforme Rankel e Effing (2003, p. 378) “É muito raro um ATR ter o comprimento

máximo permitido. Na maioria das vezes consiste de apenas alguns bytes”, isso se deve

Page 21: TCC Projeto Johni Douglas Marangon

21

principalmente ao fato de que as aplicações são executadas rapidamente sendo que se tornaria

inviável processar todos os campos do ATR (RANKEL; EFFING, 2003).

2.1.6. Especificações e normas técnicas

Os cartões são fortemente acompanhados por normas internacionais e especificações

técnicas que garantem a interoperabilidades dos cartões e sua aplicabilidade numa variedade

de infra-estruturas. As normas e especificações são utilizadas pelos fabricantes de cartões,

desenvolvedores de sistemas operacionais e desenvolvedores de aplicações e são publicadas

por organismos de padronização e órgãos governamentais. As normas estão sempre

evoluindo, devido à complexidade envolvida no uso de cartões inteligentes (RANKEL, 2007).

2.1.6.1. ISO/IEC 7816

A norma ISSO/IEC 7816 define as características dos cartões para utilização com

dispositivos externos. Essas características visam manter a interoperabilidade entre cartões de

diferentes fabricantes padronizando propriedades físicas e elétricas, características de

comunicação, identificação de chip e dados nele contidos. Essa norma é amplamente utilizada

e é considera como uma referência para a utilização de cartões inteligentes, alem de ser uma

padronização contínua. A norma ISO/IEC 7816 possui 15 partes e as mesmas podem ser

vistas em detalhes no Apêndice A (SMARTCARD BASICS, c2009).

2.1.6.2. EMV

É um padrão de interoperabilidade de cartões inteligentes usados em terminais como

POS e ATMs utilizando cartões de crédito e débito. Segundo (EMVCO, 2008) “No 1 º

trimestre de 2008 existiam mais de 730 milhões de cartões de pagamento em uso no mundo

compatível com o padrão EMV”. Inicialmente a especificação foi formada pela bandeiras

VISA, MarterCard, e Europay. Em 2004 a JCB (Japan Credit Bureau) se juntou as

especificações e em 2009 foi a vez da American Express. A especificação estão atualmente na

versão 4.2 e consiste em quatro livros (EMVCO, 2008).

Page 22: TCC Projeto Johni Douglas Marangon

22

2.1.6.3. PC/SC - Personal Computer/Smart Card

O PC/SC é uma especificação que define a integração de cartões inteligentes em

ambiente computacional. Define uma interface de baixo nível de dispositivos e API de

aplicativos independentes permitindo que vários aplicativos compartilham recursos de cartão.

É baseada nas normas ISO/IEC 7816 e EMV e foi desenvolvida para facilitar o uso de cartões

inteligentes em ambientes computacionais, atualmente esta na versão 2.01.7 que foi lançada

em Julho de 2009, e esta divida em 10 partes (PC/SC WORKGRUP, 2009).

2.1.6.4. GlobalPlataform

É uma organização sem fins lucrativos que define especificações técnicas utilizada em

cartões inteligentes. É formada pelas principais fabricantes e desenvolvedoras de cartões

inteligentes, sua missão é definir especificações técnicas que garantem interoperabilidade de

cartões inteligentes, dispositivos e sistemas (GLOBAL PLATAFORM, 2008).

As especificações do GlobalPlataform definem algumas regras para desenvolvimento

de Apples Java Card.

2.1.7. Áreas de aplicação com Smart Card

Os cartões inteligentes são usados em todo o mundo em uma grande variedade de

aplicações. Vários fatores determinam e são levados em consideração para determinar qual

tipo de cartão pode ser utilizado em determinada solução de mercado. Segundo Jurgensen e

Guthery (2002, p. 88)

Os cartões inteligentes fornecem um componente pessoal de aplicação. Seja qualforem os efeitos da aplicação o cartão inteligente é transportado por um indivíduo e éperiodicamente utilizados em configurações de equipamentos diversos para alcançaros resultados ou obter os serviços prestados por essas configurações. A característicamais comum dos cartões inteligentes em um aplicativo é estabelecer ou autenticar aidentidade do titular e o direito do titular do cartão (permissão) para acessar e usar oaplicativo em questão. Em outros casos, além de autenticação de identidade o cartãointeligente pode prover informações adicionais necessárias para o aplicativo. Porexemplo, em débito financeiro e pedidos de crédito, o cartão inteligente podearmazenar um número de conta (ou números), que são utilizados em servidores back-end envolvidos no pedido.

Algumas áreas de aplicação obedecem rigorosamente alguns padrões e especificações

estabelecidos por órgãos competentes. Geralmente os cartões inteligentes são usados em

aplicações que necessitam de uma quantidade pequena de informações armazenadas e que a

Page 23: TCC Projeto Johni Douglas Marangon

23

segurança é um fator notável. Algumas das aplicações mais notáveis serão apresentadas nessa

seção.

2.1.7.1. Identificação física

Há uma grande necessidade dos crachás serem confiáveis e a prova de adulterações, os

cartões oferecem meios confiáveis de identificação e possuem dentro dele informações sobre

o titular. Geralmente os cartões utilizados para esse fim apresentam a foto do titular do cartão

o que permite uma identificação prévia, utilizam também uma tarja magnética para leitura de

informações em equipamentos não compatíveis. Um exemplo de seu uso seria para carteiras

de motorista, passaportes eletrônicos e identidades civis (JURGENSEN; GUTHERY, 2002).

2.1.7.2. Controle de acesso físico

São cartões utilizados para identificação do titular e fornecem o direito de acesso a

locais como edifícios e salas com acesso restrito. Geralmente possuem uma foto do titular e

dentro do cartão possuem informações que podem ser extraídas para garantir a identidade dos

usuários. Podem ser usados em conjunto com a biometria para garantir com eficácia a

identidade dos usuários. Um exemplo do uso de biometria em conjunto com o cartão é a

identificação através do uso de impressão digital. Um exemplo pratico de uso seria um

funcionário com acesso a determinadas salas, no cartão ele possui um documento assinado

digitalmente que lhe permite esse acesso (JURGENSEN; GUTHERY, 2002).

2.1.7.3. Serviços financeiros

Um dos serviços precursores no uso de cartões inteligentes e um dos serviços mais

beneficiados com seu uso é a área financeira. O uso de cartões aparece de três maneiras,

crédito, débito e dinheiro. Em operações de crédito e débito o cartão é usado somente para

identificação já em aplicações de dinheiro o cartão armazena pequenas quantidades

monetárias que ficam a disposição de seus usuários (JURGENSEN; GUTHERY, 2002).

Page 24: TCC Projeto Johni Douglas Marangon

24

2.1.7.4. Transporte

O uso de cartões inteligentes no transporte está se tornando uma das areas que mais

cresce, pois oferece flexibilidade, agilidade e redução no número de fraudes em bilhetes, alem

de evitar a necessidade de levar dinheiro diminuir o número de filas em bilheterias e de ser

possível disponibilizar outros serviços agregados ao cartão (MAYES; MARKANTONAKIS,

2008).

2.2. PLATAFORMA JAVA CARD

A linguagem Java surgiu da necessidade de se desenvolver software para rodarem em

processadores de eletrodomésticos, e que fossem independentes da plataforma ao qual os

equipamentos eram desenvolvidos. Em 1990 uma equipe da Sun inicia a especificação de uma

nova linguagem de programação para pequenos dispositivos eletrônicos, em 1991 é

apresentada a linguagem Oak. O primeiro projeto desenvolvido utilizando a linguagem Oak

foi iniciado em 1993 e foi chamado de Green Project o seu objetivo era desenvolver uma

interface para controle de aparelhos eletrônicos em uma residência. O desenvolvimento de

equipamentos eletrônicos não cresceu conforme esperava a Sun e a linguagem desenvolvida

se tronavam inviável para utilização. Com o advento da World Wide Web a Sun decidiu

desenvolver uma linguagem independente da plataforma, segura e robusta, a linguagem teve o

nome mudado de Oak para Java e começou a ser desenvolvida com o propósito de rodar em

programas em browser (DEITEL; DEITEL, 2003).

A Sun desenvolve um browser chamado de HotJava que rodava programa escritos em

Java dentro de pagina HTML. O navegador HotJava não atingiu as expectativas comercias,

porém a linguagem abriu uma nova porta para os desenvolvedores que podiam criar paginas

HTML dinâmicas. O grande boom do Java começou com o lançamento de uma versão do

Netsacpe Navigator que dava suporte a programas escritos em Java embutidos em

documentos HTML, conseqüentemente a Microsoft fez o mesmo com o seu browser o

Internet Explorer e o Java se tornou popular. De lá para cá a linguagem sofre inúmeras

alterações e hoje é muito popular sendo utilizada em diversas plataformas e para inúmeros

fins. (DEITEL; DEITEL, 2003).

A plataforma Java Card surgiu da necessidade de desenvolver aplicações para cartões

inteligentes que não dependesse de hardware. Em 1996 Schlumberger anunciou que estava

utilizando Java para desenvolver aplicativos para cartões inteligentes, até o momento a única

Page 25: TCC Projeto Johni Douglas Marangon

25

forma de escrever programa em cartões inteligentes era através do fabricante do cartão que

carregava o software no momento da fabricação. No mesmo ano a Sun apresenta a primeira

tentativa de utilizar Java em cartões inteligentes lançando a versão 1.0 da especificação Java

Card . No final 1997 é lançada a versão 2.0 da especificação Java Card que continha novos

recursos e funcionalidades. A versão 2.1 foi lançada no início de 1999 e continha

melhoramentos da versão 2.0. Na seqüência teve o lançamento a versão 2.2.1 com novas

funcionalidades implementadas principalmente em métodos RMI e o lançamento da versão

2.2.2 da plataforma Java Card onde foram melhorados os algoritmos de criptografia, suporte

a biometria e interoperabilidade de cartões (JURGENSEN; GUTHERY, 2002 ).

Atualmente a versão da especificação Java Card esta na 3.0.1 e apresenta uma nova

arquitetura. Para SUM MICROSYSTEMS(c1994-2009) a versão está separada em duas

partes.

Classic Edition: Baseada na versão 2.2.2 da API Java Card, foram

acrescentados novos algoritmos de segurança, mantendo compatibilidade

com versões antigas já em uso da especificação.

Connected Edition: Apresenta um novo ambiente para execução, foi

criado uma nova máquina virtual, e incluído novas funcionalidades

como recursos para execução em ambientes de rede e para aplicativos

que exigem mais robustez.

Java Card é um subconjunto da linguagem Java com limitações devido às

características e recursos disponíveis em seu ambiente de execução. Uma aplicação Java Card

nada mais é que um applet armazenado em um cartão que quando utilizado e carregado em

memória e executa bibliotecas de classes que são geralmente armazenadas em memória ROM.

Uma das características mais interessante da plataforma Java Card é a sua capacidade de ser

multiplicação, permitindo que em um mesmo cartão possa ser instalado e executado (não ao

mesmo tempo) mais de um applet, alem da instalação de novos applets ser feita durante o

ciclo de vida do cartão. (MAYES; MARKANTONAKIS, 2008).

Java Card oferece simplicidade e rapidez no desenvolvimento de aplicativos para

cartão inteligente alem disso oferece um ambiente seguro contra acessos não autorizado de

informações. No Quadro 4 é apresentado alguns recursos não suportados pela plataforma Java

Card.

Page 26: TCC Projeto Johni Douglas Marangon

26

Características Java suportadas Características Java não suportadas

Tipos de dados primitivos pequenos:boolean, byte, short.

Arrays unidimensionais. Java packages, classes, interfaces, e

exceptions.. Características Java orientado a objeto:

herança, métodos virtuais, sobrecarga ecriação de métodos dinâmicos, regrasobrigatórias.

A palavra-chave int e inteiro de 32 bits eapoio a tipo de dados opcionais.

Tipos de dados primitivos longos: long,Double, float.

Caracteres e strings. Arrays multidimensionais. Carregamento dinâmico de classes. Security manager. Coleta de lixo(Garbage collection) e

finalização. Threads. Serialização de objetos. Clonagem de objetos.

Quando 4 : Recursos Java suportados e não suportadosFonte: Chen (2000, p. 31).

Java Card herda a característica Java de que “escrever uma vez, rode em qualquer

lugar” isso significa que ao escrever um applet em Java Card o mesmo pode ser utilizado em

diversos outros cartões de diferentes fabricantes, porém isso depende do fabricante do cartão

que deve dar suporte a as especificações Java Card para que a máquina virtual possa rodar

sobre o sistema operacional. Essa característica mantém a portabilidade de programas

desenvolvidos em Java Card. A tecnologia Java Card separa o ambiente de execução do

programa do acesso aos dados do sistema operacional (RANKEL; EFFING, 2003). No

Apêndice B é apresentado um exemplo de código Java Card.

Desenho 7: Estrutura Java CardFonte: Hendry (2007, p. 77)

O applet Java Card é armazenado na memória EEPROM e executado pela máquina

virtual, os applets são carregados no cartão sobre a forma de packages Java onde cada pacote

contem um applet (RANKEL; EFFING, 2003).

Page 27: TCC Projeto Johni Douglas Marangon

27

Segundo Mayes e Markantonakis (2008) os passos para criação e download de um

applet Java Card são:

Primeiramente a aplicação será desenvolvida utilizando editor de

código-fonte Java (IDE de desenvolvimento).

O processo de compilação será realizado e terá como base o arquivo

Java. Como saída será gerado um arquivo de classes que contem o

bytecodes e um arquivo de importação que contem algumas

informações complementares.

Na seqüencia o conversor e o verificador Java Card serão executados a

fim de transformar os arquivos de classes em arquivos CAP (que é o

formato utilizado na plataforma Java Card) e o arquivo de exportação.

O conversor é executado fora do cartão e tem como objetivo verificar se

a aplicação esta em conformidade com a API Java Card.

Por fim o arquivo CAP será instalado no cartão e ficara disponível para

ser utilizado pelo aplicativo host.

Um dos principais meios de segurança em Java Card é o seu mecanismo de firewall. O

firewall isola as aplicações dentro do cartão evitando qualquer comunicação entre elas. A

comunicação entre applets caso necessário é feita através de mecanismos de partilha que com

as devidas permissões possibilitam o compartilhamento de serviços e dados (MAYES;

MARKNTONAKIS 2008).

2.2.1. JCRE - Java Card Runtime Environment

O JCRE define ambiente de execução Java Card é e responsável pela alocação de

memória, gerenciamento de memória e execução de bytecodes, as classes definidas no

ambiente são responsáveis por interagir com o sistema operacional através dos métodos

nativos. A instalação do ambiente é realizada no momento do da fabricação do cartão e

permanecesse ate o final da vida útil do cartão. O JCRE consiste na Maquina Virtual Java

Card que responsável por interpretar os bytecodes e o Java Card API responsável por

implementar especificações e classes do sistema. O ambiente Java Card fornece uma interface

Page 28: TCC Projeto Johni Douglas Marangon

28

simples para execução de applets que são executados independentemente do sistema (CHEN,

2001).

Segundo Chen (2001, 37) “O JCRE é inicializado apenas uma vez durante a vida do

cartão”, o que difere do ambiente de execução de Java tradicional realizado em um

computador pessoal onde o ambiente de execução é encerrado junto com o sistema

operacional, nesse momento o JCRE inicializa a máquina virtual e os serviços. Os objetos do

cartão e os dados quando utilizados são criados e mantidos em memória persistente o que faz

com que quando o cartão fica sem energia as informações são preservadas e a máquina virtual

é desativa e os objetos e dados são manntidos em memória não volátil. Quando o cartão

recebe energia novamente o JCRE reinicia e carrega os dados persistidos, no retorno o JCRE

inicia no momento em que ele tinha sido encerrado preservando o applet que tinha sido

criado. No processo de comunicação com o CAD segundo Chen (2001, 39) “o JCRE entra em

um loop, esperando que comando APDU”. Após o JCRE identificar o comando APDU o

applet é selecionado, processa o comando recebido, monta a resposta e envia de volta para o

CAD.

Para Chen (2001) Java Card suporta três características adicionais em tempo de

execução.

Objetos persistentes e transitórios.

Java Card mantém objetos em memória persistente, porém podem ser usados

também objetos transientes que são manipulados em memória RAM (motivos

de velocidade e segurança).

Operações atômicas e transações

Define a gravação de um campo como sendo atômica, ou seja, a cada gravação

garante que o novo valor seja gravado ou o valor anterior é restaurado. O

ambiente Java Card oferece também mecanismos de controle de transação onde

uma operação em um applet pode ser controla, caso ocorra alguma falha na

transação ela pode ser cancelada.

Applet firewall e mecanismos de compartilhamento

O firewall isola os applets, onde o funcionamento de um applet não interfere

no funcionamento de outro. A troca de dados e serviços entre applets é feito

através de mecanismos de compartilhamento.

Page 29: TCC Projeto Johni Douglas Marangon

29

2.2.1.1. JCVN – Java Card Virtual Machine

A máquina virtual é um componente essencial para executar programas escritos em

Java ela fornece recursos suficientes para executar esses programas independentemente do

hardware envolvido.

Conforme Chen (2001) a maquina virtual Java Card está dividida em duas partes

separadas, o interpretador e o conversor. Essas partes são responsáveis por prover as

principais funcionalidades para executar um applet.

Conversor: o processo de conversão trabalha com base em um package, onde a

ferramenta converter pega um arquivo class gerados pelo compilador Java e

transforma em um arquivo CAP, que é a unidade binária utilizadas pelo

interpretador. O processo de conversão é executado fora do cartão e realiza

uma série de checagem como verificação de violação da sublinguagem,

inicialização de variáveis estáticas que garantem a integridade das classes e

otimização de bytecodes.

Interpretador: o interpretador Java Card garante a independência de hardware e

executa os apples Java Card dentro do cartão. As principais funções do

interpretador são executar os bytecodes dos apples, criar objetos, alocar

memória e garantir a segurança durante a execução de applets.

No Desenho 8 é apresentado a estrutura da JCVM.

Desenho 8: Java Card Virtual MachineFonte: Chen (2001, p. 31).

Page 30: TCC Projeto Johni Douglas Marangon

30

2.2.1.2. Java Card API

Originalmente os cartões inteligentes não permitiam que sistemas de terceiros fossem

carregados no cartão e não possuíam interfaces que permitiam o desenvolvimento de

aplicações independentes. Com o tempo surgiram sistemas operacionais como o MULTOS e

os sistemas operacionais que suportassem Java Card que passaram a permitir que os

desenvolvedores independentes carregassem seus próprios programas no cartão. Esses

sistemas operacionais são fortemente apoiados por rotinas que fazem parte de APIs que dão

acesso a funções nativas do sistema operacional. Segundo Rankel e Effing (2003, p. 249) “

praticamente todos os sistemas operacionais têm suas próprias APIs internas, mas essas APIs

não são projetados para uso externo e geralmente são confidenciais” (RANKEL; EFFING,

2003).

Atualmente existem os padrões industriais de APIs Java Card e MULTOS que são

predominantes no mercado, elas oferecem dentro de suas características especificas funções

de acesso a gerenciamento de arquivos, funções de criptografia e envio e recebimento de

dados.

Segundo Chen (2001, p. 40) “as APIs Java Card consistem de um conjunto de classes

personalizadas para programação de aplicações para o cartão inteligente de acordo com a

norma ISO/IEC 7816”, ela é uma extensão da API Java e foi otimizada para as necessidades

do cartão inteligente, possui alguns recursos que não são suportados devido as limitações de

um cartão inteligente, entre os recursos não suportados estão suporte a formulários e

interfaces GUI devido aos cartões não possuírem visor, recursos de rede e algumas classes

que não são suportadas devido a requisitos de memória (CHEN, 2001).

A API Java Card oferece basicamente quatro pacotes que simplificam a programação

Java Card. Três desses pacotes são obrigatórios para qualquer cartão Java e um é opcional

sendo que é uma extensão. Existem também pacotes de aplicações específicas que fornecem

funções para o desenvolvimento para SIM Cards e outros componentes. O Quadro 5 descreve

os principais pacotes Java Card.

Page 31: TCC Projeto Johni Douglas Marangon

31

Pacote Descriçãojava.lang É um subconjunto do pacote java.lang da linguagem Java, fornecesse

suporta as classes Object que define a hierarquia Java Card e Throwableque fornecesse suporte a classes de exceções.

javacard.framework E um pacote que fornece estrutura para a execução de applets. Oferecemsuporte as principais especificações da norma ISO/IEC 7816

javacard.security Baseado no java.security esse pacote oferece uma variedade de funções desuporte a criptografia.

javacardx.crypto Esse pacote de extensão e é opcional, e contem classes de apoio acriptografia. Normalmente o JCRE oferece classe que programam asprincipais interfaces de criptografia como Signature, MessageDigest eCipher, nesses casos é utilizado um co-processador para o auxilio decálculos criptográficos.

Quadro 5: Pacotes Java CardFonte: Adaptado de (CHEN, 2001)

Usar métodos da API Java Card no desenvolvimento de aplicações garante uma

melhor utilização de recursos e portabilidade entre cartões de diversos fabricantes alem de

aperfeiçoar a utilização da memória e melhorar a segurança através de métodos de verificação

de autenticação (RANKÈL, 2007).

2.3. FERRAMENTAS E MÉTODOS PARA DESENVOLVIMENTO SMART CARD

Nessa seção serão apresentadas algumas ferramentas que poder ser utilizadas para

apoiar o desenvolvimento de aplicativos Java Card. Esse ferramentas podem ser utilizadas no

desenvolvimento do trabalho.

2.3.1. Open Card Framework

Criado em 1997 pelo Consorcio OpenCard formado pela IBM e Gemplus o OCF

fornece um conjunto de API Java para terminais. No conteste de aplicações host o OCF

oferece funcionalidade e uma interface de alto nível para desenvolvedores criem serviços que

se comuniquem com o cartão. A implementação do OCF foi interrompida em fevereiro de

2000 (JURGENSEN; GUTHERY 2002). O OCF oferece principalmente recursos para

manipular comandos APDU conforme definido na norma ISSO/IEC 7816-4. Atualmente esta

sendo mantido pela empresa CardContact Software & System Consulting da Alemanha onde

formam implementados poucos recursos novos e algumas correções de bugs. O projeto é

Open Source (CARDCONTACT, c2008).

Page 32: TCC Projeto Johni Douglas Marangon

32

2.3.2. OpenSC

É um projeto Open Source que fornece bibliotecas para acesso a cartões inteligentes,

seu principal objetivo e fornecer recursos de criptografia de informação para poder oferecer

segurança no acesso a recursos do cartão. Pode ser utilizada em aplicações de correio

eletrônico, assinatura digital e autenticação. O projeto é desenvolvido por uma equipe

internacional e esta licenciado sob a licença LGPL. O projeto possui uma lista de

equipamentos e sistemas operacionais compatíveis com as suas especificações. As

ferramentas OpenSC fornecessem recursos para implementar PKCS #15 que em uma norma

que define o uso de tecnologias para utilização de criptografia em tokens (OPENSC, 2009).

2.3.3. MUSCLE

Movimento para o Uso dos Cartões Inteligentes em um Ambiente Linux, é um projeto

que tem como objetivo desenvolver drivers, APIs para uso em cartões inteligentes e leitores

em ambiente Linux com o objetivo de implemetar recuros de criptografia se chaves de

segurança, O MUSCLE oforece compatibilidade com diversos fabricante de tokens

criptográficos alem de oferecer portabilidade com as plataformas Unix, Machintox e

Windows, suas especificações estão baseadas na plataforma PC/SC e é um projeto Open

Source (MUSCLE [200-]).

2.3.4. SIM Toolkit

SIM Tookit é um conjunto de comandos para cartões SIM Card utilizados em

telefones GSM, esses comandos são utilizados independentemente da rede ou aparelho

utilizado. Basicamente os aplicativos são usados para autenticar o usuário do aparelho na rede

e serviços de Mobile Bank permitindo, por exemplo, que seja realizado pagamentos com

valores pequenos, sendo que em alguns casos pode ate ser utilizado para exibir menus e

permitir entrada de dados. Atualmente o SIM Toolkit está especificado na norma GSM 11.14

Page 33: TCC Projeto Johni Douglas Marangon

33

3. MATERIAIS E MÉTODOS

Nessa seção serão apresentados os matérias e métodos utilizados para que os objetivos

sejam alcançados.

Em um primeiro momento serão investigados em revistas, sites, livros, artigos e

qualquer meio de informação similar as principais ferramentas que auxiliam o

desenvolvimento de aplicativos para cartões inteligentes utilizando a plataforma Java Card.

No contexto de ferramentas o acadêmico irá explorar bibliotecas, extenções, plug-ins, IDEs,

APIs e qualquer outro mecanismo computacional que auxílio o desenvolvedor Java Card.

Após o levantamento inicial, os resultados encontrados serão refinados a fim de que

seja selecionado apenas as ferramentas que sejam definidas com importantes para o

desenvolvimento do trabalho. No momento não foram definidos critérios de eliminação ou

seleção de ferramentas. Esses critérios serão estudas e definidos pelo acadêmico no decorrer

do desenvolvimento do trabalho. Isso é necessário devido à pequena quantidade de

ferramentas existentes e a complexidade das mesmas.

As ferramentas selecionadas serão estudadas e será desenvolvido pequenos protótipos

que demonstrarão o uso de cada uma. Devido a pequena quantidade de cartões existentes e as

suas particularidades o acadêmico ira na medida do possível utilizar ferramentas que

possibilitem a criação de protótipos e que seja Opem Source. A prototipação de alguma

ferramentas pode se tornar inviável devido a custos e disponibilidade de equipamentos, nesses

casos será utilizado simuladores e para as que não disponibilizarem simuladores e ferramentas

será fundamentalizada.

Será criado um documento de referência que será utilizado pelo acadêmico para sua

avaliação final. Esse documento terá as principais características da ferramenta estudada e sua

potencial área de utilização. Isso será utilizado para cada ferramenta avaliada, pois as mesmas

serão estudadas de forma independente e depois comparadas.

A aquisição de equipamentos está sendo estudada e já foram levantados alguns

modelos de leitores e gravadores que serão usados. Os levantamentos iniciais indicam que o

leitor e gravador de cartões hoje esta sendo comercializado por valores que variam de R$

100,00 a R$ 200,00, já os cartões foram encontrados por valores que variam entre R$ 20,00 e

R$ 100,00 dependendo do modelo escolhido. É importante ressaltar que o acadêmico irá se

responsabilizar por quaisquer custos que porventura surgirem no decorrer do projeto.

Page 34: TCC Projeto Johni Douglas Marangon

34

Algumas ferramentas que poderão ser utilizas para realizar o trabalho.

JCOP Plugin Eclipse

Open Card Framework

EclipseJCDE

BSmart Plugin Eclipse

Java Card PKI

Java OpenPGPCard

Jaccal

MUSCLE

OpenSC

SIM Toolkit

Java Card 3 Plataform NetBeans

As ferramentas serão selecionadas a partir dos critérios definidos durante a execução

do trabalho.

O acadêmico irá utilizar um blog como forma de captar informação e de compartilhar

o conhecimento que o mesmo irá adquirir no decorrer do trabalho.

Page 35: TCC Projeto Johni Douglas Marangon

35

4. CRONOGRAMA E EXECUÇÃO

Atividades

Meses2009 2010Dez Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2

Pesquisa de ferramentasdisponíveis e aquisição deequipamentos necessáriosEstudos de viabilidade dasferramentas encontradasDefinição de critérios e seleçãode ferramentasImplementação dos protótipos etestes nas ferramentasAvaliação e comparação dasferramentas analisadasArtigo TCC IIMonografiaTCC III

Page 36: TCC Projeto Johni Douglas Marangon

36

REFERÊNCIAS

CARDWERK. History of Smart Cards. 2008. Disponível em:<http://www.cardwerk.com/smartcards/smartcard_history.aspx>. Acesso em: 20 out. 2009.

CARDCONTACT, OpenCard Framework. Disponível em:<http://www.openscdp.org/ocf>. Acesso em: 02 nov. 2009.

CHEN, Zhiqun. Java Card Technology for Smart Cards: Architecture and programmer´sGuid. California: Ed. Prentice Hall, 2000. 400 p.

CUNHA, Ricardo Marquino. Smart Card e e-TAG. 2004. Disponível em:<http://www.gta.ufrj.br/grad/04_2/smartcard>. Acesso em: 21 ago. 2009.

DEITEL, H.M.; DEITEL, P. J.. Java: como programar. 4.ed. Porto Alegre: Bookman, 2003.1386p.

EMVCO. Specifications. 2008. Disponível em:<http://www.emvco.com/specifications.aspx?id=155>. Acesso em: 20 out. 2009.

GLOBAL PLATAFORM. About GlobalPlataform. c2008. Disponível em: <http://www.globalplatform.org/aboutus.asp>. Acesso em: 25 out. 2009.

HENDRY, Mike Multi-application Smart Cards: Technology and Applications, Ed.Cambridge University Press 2007. 266p.

HSBC, Smart card, inovação tecnologia, 2009. Disponível em:<http://www1.hsbc.com.br/common/seguranca/artigos-seguranca-smart-card-inovacao-tecnologica.shtml>. Acesso em: 30 ago. 2009.

ID EDGE. Hybrid Cards. 2009. Disponível em: <http://www.idedge.com/index.cfm/fuseaction/category.display/category_id/93/hybrid_smart_cards.htm>. Acesso em: 20 out. 2009.

ID EDGE. Combi Cards. 2009. Disponível em: <http://www.idedge.com/index.cfm/fuseaction/category.display/category_id/93/hybrid_smart_cards.htm>. Acesso em: 20 out. 2009.

ITI, Saiba como obter um Certificado Digital e quais os benefícios para sua vida, [200-]Disponível em: <http://www.iti.gov.br/twiki/bin/view/Certificacao/CertificadoObterUsar>.Acesso em 19 out. 2009.

JURGENSEN Timothy M. GUTHERY Scott B. Smart Card: The Developer’s Toolkit. EdPrentice Hall, 2002. 432p.

MAYES, Keith.; MARKANTONAKIS, Konstantinos. Smart Cards, Tokens, Security andApplications, Ed. Springer, 2008. 392p.

MUSCLE, Movement for the Use of Smart Cards in a Linux Environment, [200-].Disponível em: <http://www.linuxnet.com/info.html>. Acesso em: 02 nov. 2009.

Page 37: TCC Projeto Johni Douglas Marangon

37

OPENSC, OpenSC Project. Disponível em: < http://www.opensc-project.org/opensc>.Acesso em: 02 nov. 2009.

OPENSC, OpenSC Project, 2009. Disponível em: <http://www.opensc-project.org/opensc>.Acesso em: 23 out. 2009.

PC/SC WORKGROUP. PC/SC Workgroup Specifications Overview, 2009. Disponível em:<http://www.pcscworkgroup.com/specifications/overview.php>. Acesso em: 25 out 2009.

PETRI, Steve. An Introducion To Smart Card. 1999. Disponível em:<http://www.opengroup.org/comm/the_message/magazine/mmv5n5/SmartCards.htm>.Acesso em: 12 out. 2009.

RANKEL, Wolfgang. Smart card applications: Design Models for Using and ProgrammingSmart Cards. Ed. John Wiley & Sons, 2007. 217p.

RANKL, Wolfgang; EFFING Wolfgang. Smart Card Handbook. 3. ed: Ed. John Wiley &Sons, 2003. 1088p.

SARGENTO, Claudia. Smart Cards em franca ascensão, 2007. Disponível em:<http://www.semanainformatica.xl.pt/839/est/100.shtml>. Acesso em: 30 ago. 2009.

SMARTCARD BASICS, Smart Card Standards, c2009. Disponível em:<http://www.smartcardbasics.com/standards.html>. Acesso em: 02 nov. 2009.

SUN MICROSYSTEMS, Java Card Technology Overview, c1994-2009. Disponível em:<http://java.sun.com/javacard/overview.jsp>. Acesso em: 02 nov. 2009.

SUM MICROSYSTEMS. Java Card Technology APIs & Documentation, c1994-2009Disponível em: <http://java.sun.com/javacard/3.0/>. Acesso em: 02 nov. 2009.

URBS, Cartão Transporte, c2008, Disponível em:<http://www.urbs.curitiba.pr.gov.br/PORTAL/cartao_transporte/index.php?pagina=faq >.Acesso em: 02 nov. 2009.

ZETES. Cartão do Cidadão, [200-]. Disponível<http://www.zetes.pt/pt/articles/portugal/solutions-services/people-id/cartao-de-cidadao.cfm>.Acesso em: 02 nov. 2009.

Page 38: TCC Projeto Johni Douglas Marangon

38

APENDICE A – Partes que compõem a norma ISO/ICE 7816

Abaixo é apresentado as partes que compões a norma ISSO/ICE 7816. As informações

contidas na tabela formam colhidas em site e matériais técnicos.

ISO – Parte Descrição7816 – 1 Define as características físicas do cartão como dimensão e posição do cihp

no cartão de plástico.7816 – 2 Define as dimensões, localização e características elétricas dos contatos do

cartão.7816 – 3 Define os sinais elétricos, os protocolos de transmissão e os requisitos de

tensão e corrente dos contatos do cartão7816 – 4 Define o padrão entre a troca de comandos do cartão, padrão básico de

comunicação entre o cartão e o host7816 – 5 Define as normas para o protocolo de numeração7816 – 6 Define o meio de transferência de dados, nessa parte estão definidos os

protocolos de transmissão T=0 e T=17816 – 7 Define o padrão de comandos Structured Query Language Card (SCQL)

para consultas em base de dados.7816 – 8 Definem um padrão de segurança em comandos internos, técnicas de

criptografia7816 – 9 Especificam comandos para gerenciamento de arquivos no cartão, arquivos

de inclusão e exclusão, cobrem o ciclo de vida do cartão.7816 – 10 Define os sinais eletrônicos e ATR para cartões7816 – 11 Especifica padrão para uso em identificação pessoal através de métodos

biométricos7816 – 12 Define a condições de funcionamento utilizando comunicação USB7816 – 13 Documento que esta em desenvolvimento e integra métodos do

GlobalPlataforn7816 – 15 Contem informações sobre a funcionalidade de criptografia no cartão

Page 39: TCC Projeto Johni Douglas Marangon

39

APENDICE B - Exemplo de código Java Card

Exemplo de código Java Card que envia para o terminal um Hello Word. Para maiores

informações consulta http://forums.sun.com/thread.jspa?threadID=5391233.

package hello;

import javacard.framework.APDU;

public class HelloWorld extends javacard.framework.Applet {

static byte[] hello = {'H','e','l','l','o',' ','W','o','r','l','d'};

protected HelloWorld(byte[] baBuffer, short sOffset, byte bLength) {register(baBuffer, (short) (sOffset + 1), (byte) baBuffer[sOffset]);

}

public static void install(byte[] baBuffer, short sOffset, byte bLength) {new HelloWorld(baBuffer, sOffset, bLength);

}

public void process(APDU apdu) {

if(selectingApplet())return;

sendResponse(apdu, hello, (short)0, (short)hello.length);}

private void sendResponse(APDU apdu, byte[] sendBuffer, short offset, short len) {apdu.setOutgoing();apdu.setOutgoingLength(len);apdu.sendBytesLong(sendBuffer, offset, len);

}

}