Augusto Lange Eduardo Schneider Jeferson Ghisio 1.

24
Augusto Lange Eduardo Schneider Jeferson Ghisio 1

Transcript of Augusto Lange Eduardo Schneider Jeferson Ghisio 1.

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