Java Card & Java 6. Agenda Smart cards Leitoras de smart cards Arquitetura de software Controle de Comunicação. Arquiteturas. Igor Medeiros APDU PC/SC



Documentos relacionados
Copyright, Igor Medeiros Todos os Direitos Reservados - All Rights Reserved.

UTILIZAÇÃO DE JAVA CARD COMO PLATAFORMA PARA O DESENVOLVIMENTO DE APLICAÇÕES EM SMART CARD.

DOCUMENTOS E DINHEIRO ELETRÔNICO COM SMART CARDS UTILIZANDO A TECNOLOGIA JAVA CARD. Cleber Giovanni Suavi Orientador: Marcel Hugo

Orientado por Marcel Hugo. Eduardo Paniz Mallmann

UNIVERSIDADE ANHEMBI MORUMBI DAVI PEREIRA DO CARMO JULIANO ASSUNÇÃO MEDEIROS DE SOUZA RODRIGO LOVAGLIO BEZERRA TIAGO GODOI

SMART INTERFACE: FERRAMENTA DE AUXÍLIO AO DESENVOLVIMENTO DE APLICAÇÕES JAVA CARD

CARDS / 2001 SMART CARDS & O DESAFIO DO DESENVOLVIMENTO DE APLICAÇÕES PARA A SAÚDE PROTEA INFORMÁTICA ISABEL PELLEGRINO

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Java Card Next Generation

Cartão de Cidadão Portuguese Electronic Identity Card (PTeID) André Zúquete, João Paulo Barraca SEGURANÇA INFORMÁTICA E NAS ORGANIZAÇÕES

JCML - Java Card Modeling Language: Definição e Implementação

UNI *CARD: Protótipo em tecnologia Java Card para unificar o acesso a serviços universitários básicos

CURSO DE PROGRAMAÇÃO EM JAVA

Criptografia e Segurança das Comunicações. Cartões inteligentes

Desenvolvimento Web TCC Turma A-1

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

Programação de Computadores II TCC Turma A-1

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Sintaxe Básica de Java Parte 1

Introdução à Linguagem Java

Um pouco do Java. Prof. Eduardo

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Bruno Emerson Gurgel Gomes. BSmart: Desenvolvimento Rigoroso de Aplicações Java Card com base no Método Formal B

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

PROGRAMAÇÃO JAVA. Parte 1

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Programação Orientada a Objetos

Objetivos do Curso. Você será capaz de:

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagens de. Aula 02. Profa Cristiane Koehler

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Programação de Computadores - I. Profª Beatriz Profº Israel

P n o t n ifíci c a a Un U i n ve v r e si s da d d a e d e C a C t a ól ó ica c a d o d o R i R o o d e d e J a J n a e n i e ro o PU P C U -Ri R o

Acesso a Bancos de Dados em Java (JDBC)

TECLADO PAINEL OPERADOR USB COM DISPLAY GRÁFICO. Código : FT 023/09 REV: 02

Aula 03-04: Modelos de Sistemas Distribuídos

Características técnicas Baseado no ATMega da empresa AVR, fabricante de micro-controladores em plena ascensão e concorrente do PIC Pode usar ATMega

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Cartões multimídia externos

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Capítulo 1. Introdução ao Java. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

Uma Introdução ao. Computação Móvel (MAC5743/MAC330) Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro

e-stf WebServices Processo Eletrônico Smart Client Documentação

Capítulo 8. Software de Sistema

JADE Java Agent DEvelopment Framework

Programação online em Java

Orientação a Objetos com Java

Programação de Computadores - I. Profª Beatriz Profº Israel

Linguagem de Programação Orientada a Objeto. Introdução a Orientação a Objetos Professora Sheila Cáceres

Guia Rápido LINKER SAT REV. 2.1 MAI / 2015

Computação II Orientação a Objetos

Instituto Superior de Engenharia de Lisboa

Programação por Objectos. Java

1. Apresentação Objetivos

Manual HDBS Revisão 1.1

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ INSTALAÇÃO DE CERTIFICADO DIGITAL EM APLICAÇÃO WEB JBOSS.

Redes de Computadores

Fundamentos de Java. Prof. Marcelo Cohen. 1. Histórico

Universidade Federal de Uberlândia

Sistemas Operacionais e Introdução à Programação. Módulo 1 Sistemas Operacionais

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010

Algoritmos e Programação 2. Introdução à Programação Orientada a Objetos. Orientação a Objetos. O que é um paradigma de programação?

TREINAMENTO. Novo processo de emissão de certificados via applet.

Fundamentos de Programação II. Introdução à linguagem de programação C++

Programação Orientada a Objetos (DPADF 0063)

Aula 1 Acesso a Banco de Dados

CARTÃO MAGIC CONTROL CARTÃO GEMALTO

O Valor do Browser no POS Soluções e Cases

SISTEMAS DISTRIBUÍDOS

ROTEIRO PARA CONFIGURAÇÃO DO AMBIENTE PARA ACESSO AO PERSUS MÓDULO DE GESTÃO DE CONTAS E PROTOCOLO DE IMPUGNAÇÕES E RECURSOS ANS Agência Nacional de

UNIVERSIDADE FEDERAL DO PARANÁ

Integração dos Leitores RFID no autómato programável

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Programação de Periféricos

JAVA. Introdução. Marcio de Carvalho Victorino. Page 1 1/40 2/40

Guia de Instalação do D-Link DWM-157

Java ME e suas principais tecnologias de conectividade. Gracieli Begia Mateus

Sistemas Distribuídos

NETALARM GATEWAY Manual Usuário

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Sistemas Distribuídos

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Manual do Usuário -TED1000 versão TC100 Ethernet

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

OSGi Um Sistema Dinâmico de Módulos para Java

Um Driver NDIS Para Interceptação de Datagramas IP

Smart Cards. Uma tecnologia abrindo o seu caminho

A Linguagem Java. Apresentação. Java. A Linguagem da Internet

Sistemas Operacionais

Transcrição:

Java Card & Java 6 Igor Medeiros www.igormedeiros.com.br Agenda Smart cards Leitoras de smart cards Arquitetura de software Controle de Comunicação APDU Arquiteturas PC/SC Nova API Smartcard IO exemplo de implementação Java Card 1

Palestrante Bacharel em ciência da computação (UNISA) Trabalha cerca de 4 anos com Java Pioneiro na produção de literatura Java Card no Brasil Igor Medeiros Escreve para a revista MundoJava Colunista do PortalJava.com Mantenedor do Portal Java Card Motivação Pouca mão-de-obra Muitos smart cards na praça Java Card facilita muito o desenvolvimento para smart cards Brasil está investindo em certificação digital (e-cpf, e-cnpj certificados digitais ICP Brasil) com iniciativas do ITI (www.iti.gov.br) Diversos padrões bem estabelecidos Java Card: mais de 1 bilhão¹ Fonte: Sun Microsystems 2

Evolução dos cartões Além da tarja magnética... Cartão com relevo Primeira técnica usada em cartões de identificação Características físicas definias pela norma ISO 7811-3 Região 1 Região 2 3

Cartão com tarja magnética Armazena informações, eliminando uso de papel Tarja magnética com três trilhas de dados Problema: Pode ser clonado Trilha 1 Trilha 2 Trilha 3 ISO 7811 Cartão inteligente Circuito integrado embutido Transmite, armazena e processa dados Interface com ou sem contatos Níveis de acesso a informação Processamento de criptografia Características definidas na ISO 7816 4

Aplicações Telecomunicações 1984: primeiro cartão inteligente incorporado a um telefone público pela francesa PTT 1988: Primeiro telefone móvel analógico com cartão inteligente 1991: Surge o GSM na Europa Financeiro Transporte público Controle de acesso, etc... Tipos de cartões inteligentes Diferenças entre funcionalidades e preço Contato físico Rádio frequência 5

Arquitetura (smart card de contato) Processador JCRE (Java Card Runtine Environment) RAM 256-4096 bytes CPU 8/16/32 bits ROM 6-64 KBytes EEPROM 4-128 KBytes I/O CLK RST Vcc GND Java Card Applets Arquitetura de software Multi-application Arquitetura com suporte a mais de um aplicativo (applet) Java Card MULTOS Smart Card for Windows Applets API Serviços nativos 6

Controle de comunicação - APDU Application Protocol Data Units Comunicação half-duplex T=0 (envio byte-a-byte) T=1 (envio de blocos de bytes) Estrutura APDU Comando-APDU Cabeçalho obrigatório opcional CLA INS P1 P2 Lc Data Field Le Resposta-APDU Corpo opcional Data Field SW1 obrigatório SW2 7

Casos de APDU APDU T=0 /T=1 host Comando Resposta Device Cabeçalho SW Cabeçalho Le Data SW Cabeçalho Lc Data SW Cabeçalho Lc Data Le Data SW Exemplos APDU Get Challenge >> 00 84 00 00 08 << 05 7F 16 4E E5 7E 37 F9 90 00 Delete Master File >> 80 E4 00 00 02 3F 00 (FORMAT C:) << 90 00 8

ATR (Answer To Reset) É uma cadeia de caracteres com informações do próprio smart card Obtido quando o smart card é conectado Exemplos 3B 23 00 35 13 FF (Schlumberger MicroPayflex) 3B 1F 11 00 67 80 42 46 49 53 45 10 52 66 FF 81 90 00 (Nokia branded SC) 3B 1F 94 00 6A 01 38 46 49 53 45 10 8C 02 FF 07 90 00 (GSM-SIM Saunalahti) Análise de um ATR 3B A7 00 40 18 80 65 A2 08 01 01 52 ATR_analysis '3B A7 00 40 18 80 65 A2 08 01 01 52' ATR: 3B A7 00 40 18 80 65 A2 08 01 01 52 + TS = 3B --> Direct Convention + T0 = A7, Y(1): 1010, K: 7 (historical bytes) TB(1) = 00 --> Programming Param P: 0, I: 0 TD(1) = 40 --> Y(i+1) = 0100, Protocol T = 0 TC(2) = 18 --> Work waiting time: 960 x 24 x (Fi/F) + Historical bytes: 80 65 A2 08 01 01 52 Possibly identified card: 3B A7 00 40 18 80 65 A2 08 01 01 52 Gemplus GPK8000 9

Java Card Plataforma Java Card 10

Aplicação com smart card Subset Tipos primitivos grandes : long, double, float; Caracteres e strings Arrays multidimensionais Carga dinâmica de classes Security manager Garbage collector Serialização e clone de objetos 11

Java Card Applets Pequenos aplicativos que executam em Java Cards ( Cardlets ) Applet AID 0xA00000B0 Todo applet deve conter um AID (Application Identifier) RID (5 bytes) Resource Identifier AID PIX (0-11 bytes) Proprietary Identifier Extension Todo applet deve estender javacard.framework.applet Framework javacard.framework Abstrações de Applet, PIN, APDU, System e Util javacardx.framework Implementação de rotinas ISO 7816-4 (file system) javacardx.crypto Suporte a criptografia 12

Ferramentas de desenvolvimento Sun Java Card Development Kit (gratuito) http://java.sun.com/products/javacard/dev_kit.html Axalto VIEWS (evaluation) http://www.simagine.org (requer login) JCOP (Plug eclipse) http://www.zurich.ibm.com/jcop/news/news.html JCardExpress (Projeto opensource brasileiro) http://jcardexpress.dev.java.net Outras http://www.igormedeiros.com.br/sdk Desenvolvendo um applet HelloWorld 1/4 Definição do CLA e das INStruções // CLA Byte final static byte HELLO_CLA = (byte) 0xB0; // Verify PIN final static byte INS_HELLO = (byte) 0x20; 13

Desenvolvendo um applet HelloWorld 2/4 Implementação do método install public static void install(byte[] barray, short boffset, byte blength) { } (new HelloWorldJC()).register( barray, (short) (boffset + 1), barray[boffset]); Desenvolvendo um applet HelloWorld Implementação do método process 3/4 // processa o comando APDU public void process(apdu apdu) { byte[] buffer = apdu.getbuffer(); // Select the apropriate instruction (Byte INS) switch (buffer[iso7816.offset_ins]) { case INS_HELLO : gethello(apdu); return; default : ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); } } 14

Desenvolvendo um applet HelloWorld Implementação do método process 4/4 private void gethello(apdu apdu) { // cadeia de bytes com a mensagem: "hello world" byte[] hello = {'h','e','l','l','o',' ','w','o','r','l','d'}; } // informa ao JCRE que será enviado uma resposta apdu.setoutgoing(); short totalbytes = (short) hello.length; // informa ao JCRE o tamanho da mensagem em bytes apdu.setoutgoinglength(totalbytes); // envia a mensgem para o host apdu.sendbyteslong(hello, (short) 0, (short) hello.length); Processo de desenvolvimento JAVA JAVA JAVA JDK Emulador javac JAVA JAVA CLASS CAP Off-card installation JAR converter EXP EXP EXP JCDK EXP On-card installation Dispositivo 15

Ciclo de vida create INATIVO select (AID) ATIVO processa o comando deselect Envio de APDU para Applets Comando Comando APDU JCRE APDU Host Resposta Resposta Dispositivo 16

PC/SC Arquitetura para conectar um PC (desktop, laptop, etc) a um Smart Card Inclui um Resource Manager controle da leitora e smart card para o nível de aplicação Trata eventos como cartão inserido, cartão removido Obtém status da leitora e do cartão Transmissão e recebimento de APDU PC/SC 17

Mustang: Novo Smart Card I/O Mustang : Java 6! JSR 268: Smart Card I/O JCE Provider (Wrapper JNI) API que provê funcionalidades PC/SC e APDU em aplicativos Java: javax.smartcardio Mustang: Novo Smart Card I/O Funcionalidades Estabelecer conexão com o smart card Listar leitoras instaladas no S.O. Obter status da leitora (ex.: presença do cartão) Transmitir APDUs e receber resultado 18

Mustang: Novo Smart Card I/O Camadas Aplicativo Java Provider JCE (Wrapper JNI) Binário -> j2pcsc.dll PC/SC Mustang: Novo Smart Card I/O lib\security\java.security # # List of providers and their preference orders (see above): # security.provider.1=sun.security.provider.sun security.provider.2=sun.security.rsa.sunrsasign security.provider.3=com.sun.net.ssl.internal.ssl.provider security.provider.4=com.sun.crypto.provider.sunjce security.provider.5=sun.security.jgss.sunprovider security.provider.6=com.sun.security.sasl.provider security.provider.7=org.jcp.xml.dsig.internal.dom.xmldsigri security.provider.8=sun.security.smartcardio.sunpcsc security.provider.9=sun.security.mscapi.sunmscapi 19

Exemplo 1/2 public class TesteSmarCardIO { public static void main(string[] args) { // show the list of available terminals TerminalFactory factory = TerminalFactory.getDefault(); List<CardTerminal> terminals = factory.terminals(); System.out.println("Terminals: " + terminals); // get the first terminal CardTerminal terminal = terminals.get(0); Exemplo 2/2 try { // establish a connection with the card Card card = terminal.connect("t=0"); System.out.println("card: " + card); CardChannel channel = card.getbasicchannel(); byte[] comando = {(byte) 0x00, (byte) 0x84, (byte) 0x00, (byte) 0x00, (byte) 0x08}; ResponseAPDU r = channel.transmit(new CommandAPDU(comando)); } } System.out.println("ATR: " + card.getatr()); System.out.println("Protocolo: " + card.getprotocol()); System.out.println("response: " + r.tostring()); // disconnect card.disconnect(false); } catch (CardException e) { e.printstacktrace(); } 20

Aplicativo Java 6 PC/SC Frameworks off card complexos OCF (OpenCard Framework) Java Card RMI Aplicativo J2SE Proxy A Proxy B Proxy C Encapsulamento APDU appletc.setvalor( 2 ) Applet A Applet B Applet C 21

Futuro próximo Java Card 3.0 Smart cards com limitações menores de hardware Perguntas 22

Conclusões Java Card promove uma série de benefícios que atraem industria e desenvolvedores PC/SC é a arquitetura mais sólida e utilizada para conectar PCs à Smart Cards Um framework para host deve incluir conceitos de inteoperabilidade, segurança, serviços específicos para cada cartão, etc A nova API Smart Card I/O: Simplicidade (API leve) e Versatilidade (Provider de serviços JCE) Referências Java Card (site oficial) http://java.sun.com/products/javacard JSR 268 http://jcp.org/aboutjava/communityprocess/edr/jsr268/index.html Portal Java Card Brasil http://www.javacard.com.br PC/SC WorkGroup http://www.pcscworkgroup.com JPC/SC PC/SC Litte http://www.musclecard.com/middle.html ITI Brasil http://www.iti.gov.br OpenCard Framework http://www.opencard.org 23

Bibliografia ISBN: 0201703297 ISBN: 3540658297 ISBN: 0-470-85668-8 OBRIGADO! Igor Medeiros igor@igormedeiros.com.br www.igormedeiros.com.br MSN: javacardman 24