augusto lange eduardo schneider jeferson ghisio 1

24
Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Upload: internet

Post on 17-Apr-2015

109 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Augusto LangeEduardo Schneider

Jeferson Ghisio

1

Page 2: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

O que é um Smart Card?

Cartão com chip embutido que transmite, armazena e processa

dados; Característicasdefinidas na ISO 7816

2

Page 3: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Aplicações:

- CPF- Controle de acessos- ID- TRI- Celular

3

Page 4: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Mercado dos Smart Cards:Quantidade de Smart Cards no Brasil (milhões):

4

Page 5: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Porque investir em Smart Cards?

99% dos POS Visanet aceitam smart cards 25% ATMs aceitam smart cards

• POS - Máquinas que lêem cartões de crédito e de débito utilizadas em restaurantes, etc..

• ATM – Máquinas que se retira dinheiro do banco.

5

Page 6: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Tipos de Smart Card:

Contato Físico Radio Frequência Sem contato físico (contactless)

6

Page 7: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

7

Page 8: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

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)

8

Page 9: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

• Cartão é introduzido no leitor

• Leitor verifica que o cartão está devidamente posicionado

• Leitor aplica energia aos contactos

• Leitor activa o sinal de Reset

• Cartão responde com ATR (Answer To Reset)

9

Page 10: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

ATR (Answer To Reset)

Seqüência de inicialização de leitura de um smart card Cadeia de caracteres com informações do próprio smart

card Obtido quando o smart card é conectado Define várias características da comunicaçãoque se seguirá (ritmo, protocolo, etc)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)

10

Page 11: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Análise de um ATR

3B A7 00 40 18 80 65 A2 08 01 01 52

TS = 3B Direct Convention (bit menos significativo)

T0 = A7 00 (Historical bytes) TD = 40 Protocol T = 0 + Historical bytes: 18 80 65 A2 08 01 01 52 Gemplus GPK8000

11

Page 12: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Estrutura APDU (Aplication Protocol Data Unit)

- CLA (1-byte) - define a classe da instrução – INS (1-byte) - define a instrução específica de entre o conjunto de

instruções definido por CLA. – P1 (1-byte) - especifica o modo de endereçamento usado pela

instrução [CLA, INS]. – P2 (1-byte) - também especifica o modo de endereçamento usado

pela instrução [CLA, INS]. - Lc - Número de bytes do campo “Data field” - Le - Número de bytes a enviar para o cartão

12

Page 13: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Resposta-APDU

- ACK (1-byte) - Indica recepção de dados. (igual INS) – NULL (1-byte) – Manda mensagem para leitora não enviar

nenhum dado para o cartão pois este está a trabalhar ainda em um comando.

– SW1 (1-byte) – Campo utilizado pelo cartão para mandar uma resposta sobre o Status da transmissão de volta para o leitor.

– SW2 (1-byte) - (opcional) Campo que pode ser incluído nos bytes de processos, devolve um status para o leitor.

13

Obrigatório Corpo Opcional Obrigatório

ACK NULL Data Field SW1 SW2

Page 14: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

É utilizada paridade par para testar os dados transmitidos.

14

Page 15: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Aplicacao

15

Page 16: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Limitações da Linguagem

• Tipos primitivos “grandes”: long, double, float ;

• Caracteres e strings• Arrays multidimensionais• Carga dinâmica de classes• Security manager• Serialização e clone de objetos

16

Page 17: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Java Card Applets Pequenos aplicativos que executam em

Java Cards (“Cardlets”)

17

Page 18: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Frameworks• javacard.framework– Abstrações de Applet, PIN, APDU, System e

Util

• javacardx.framework– Implementação de rotinas ISO 7816- 4 (filesystem)

• javacardx.crypto– Suporte a criptografia

18

Page 19: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Ferramentas para 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

19

Page 20: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Exemplo do Hello World

public class HelloWorldJC extends javacard.framework.Applet{ // CLA Byte final - PROCESS static byte HELLO_CLA = (byte) 0xB0;

// Verifica PIN final static byte INS_HELLO = (byte) 0x20;

public static void install (byte[] bArray, short bOffset, byte bLength) { (new HelloWorldJC()).register( bArray, (short) (bOffset + 1),

Array[bOffset]); }

20

Page 21: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

// processa o comando APDU public void process(APDU apdu) {

byte[] buffer = apdu.getBuffer();

if ((buffer[ISO7816.OFFSET_CLA] == 0) && (buffer[ISO7816.OFFSET_INS] == (byte) (0xA4))) return;

// Valida o CLA byte if (buffer[ISO7816.OFFSET_CLA] != HELLO_CLA) ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);

21

Page 22: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

// Seleciona a instrução apropriada (Byte INS) switch (buffer[ISO7816.OFFSET_INS]) {

case INS_HELLO : getHello(apdu); return;

default :

ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED); }

}

22

Page 23: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

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 short le = apdu.setOutgoing(); short totalBytes = (short) hello.length;

// informa ao JCRE o tamanho da mensagem em bytes apdu.setOutgoingLength(totalBytes);

// envia a mensagem para o host apdu.sendBytesLong(hello, (short) 0, (short) hello.length); }

}

23

Page 24: Augusto Lange Eduardo Schneider Jeferson Ghisio 1

• Java Card (site oficial)http://java.sun.com/products/javacard• JSR 268http://jcp.org/aboutJava/communityprocess/edr/jsr268/

index.html• Portal Java Card Brasilhttp://www.javacard.com.br• OpenCard Frameworkhttp://www.opencard.org• Wikipediahttp://pt.wikipedia.org/

24