ISO (International Organization for Standartization) e IEC (Intenational Eletrotechinical Commission), são os responsáveis pela padronização relacionada aos Smart Cards de contato.
Essa ISO (7816) pode ser divida em quatorze partes sendo ela:
- ISO 7816-1 : Características Físicas.
- ISO 7816-2 : Cartões com Contato - Dimensões e Locais dos Contatos.
- ISO 7816-3 : Cartões com Contato - Interface Elétrica e Protocolos de Transmissão.
- ISO 7816-4 : Organização, Segurança e Comandos para Intercâmbio.
- ISO 7816-5 : Registro dos Provedores de Aplicações.
- ISO 7816-6 : Elementos de Dados para Intercâmbio Interindustriais.
- ISO 7816-7 : Comandos Interindustriais SCQL (Structured Card Query Language).
- ISO 7816-8 : Comandos para Operações de Segurança.
- ISO 7816-9 : Comandos para o Gerenciamento do Cartão.
- ISO 7816-10 : Sinais Eletrônicos e Answer to Reset para Cartões Síncronos.
- ISO 7816-11 : Verificação Pessoal Através de Métodos Biométricos.
- ISO 7816-12 : Cartões de Contato - Interface Elétrica USB e Procedimentos de Operações.
- ISO 7816-13 : Comandos para Gerenciamento da Aplicação em Ambientes de Multi-Aplicação.
- ISO 7816-15 : Informação de Aplicativos Criptograficos.
Embora a lista seja extensa, não se preocupe não é necessário conhecer cada uma das quatorze partes, a não ser que seja um curioso ou queira se tornar um expert, fora que cada um desses documentos é vendida a parte porém existem algumas publicações on-line.
Felizmente para desenvolvimento de Applets Java Card só é necessário conhecer a Parte 4.
ISO 7816 - Parte 4 : Organização, Segurança e Comandos para Intercâmbio:
Essa Parte da ISO/IEC 7816 especifica :
- O conteúdo das mensagens, comandos e respostas através de um dispositivo entre o cartão e a aplicação Host (Ex. um PC, sistemas embarcados, etc).
- A estrutura de conteúdo do "historical bytes" enviados pelo cartão durante o "answer to reset".
- Estrutura de arquivos e dados, visto na interface enquanto processa comandos interindustriais para intercâmbio.
- Métodos de acesso aos arquivos e dados do cartão.
- Métodos para Mensagens Seguras.
- Métodos de acesso aos algoritimos processados pelo cartão.
Antes de continuar é necessário um pré-requisito primordial por parte daqueles que almejam programar para Java Card.
Conhecer o Sistema Binário e Hexadecimal, isso mesmo toda troca de informação entre sua Aplicação e o Cartão se dará via comandos Hexadecimais. Como explicar notações Binárias e Hexadecimais está fora do escopo deste artigo segue dois links para estudo :
Sistema Binário (link)
Sistema Hexadecimal (link)
Modelo de Comunicação do Smart Card.
A comunicação entre o host e o cartão ocorre de forma "half-duplex" ou seja enquanto o host envia dados para o cartão, o mesmo não envia dados para o host e vice-versa.
Por exemplo quando dois computadores se comunicam via rede utilizando o protocolo TCP/IP eles trocam entre sí informações utilizando pequenos pacotes de dados conhecidos como Pacotes IP.
Análogamente enquanto host e cartão se comunicam, eles trocam entre sí pequenos pacotes de dados conhecidos como APDU (Application Protocol Data Unit).
Diferente da comunicação do Protocolo TCP/IP na comunicação ISO 7816-4 via APDU's o cartão se comporta de modo escravo (slave mode) ou seja ele sempre aguarda dados do host, os processa e retorna uma resposta.
![]() | |
Modelo de Comunicação entre Host e Smart Card |
Protocolo APDU.
O Protocolo APDU especificado na ISO 7816 Parte 4 é um protocolo de nível de Aplicação entre Host e Cartão. E compreende dois tipos de Pacotes de dados o "Command APDU" usado para envio de dados para o cartão e o "Response APDU" usado para resposta do cartão para o Host.
Command APDU.
![]() | |
Pacote de Dados Command APDU |
"Mandatory Header" são os dados que devem obrigatóriamente estar presentes no pacote.
"Optional Body" são os dados opcionais no pacote.
"CLA" - Tamanho 1 byte - Class Byte, identifica a categoria do APDU de comando e resposta.
"INS" - Tamanho 1 byte - Instruction Byte, especifica a Instrução do Comando.
"P1" - Tamanho 1 byte - Parameter Byte, paramentro do comando.
"P2" - Tamanho 1 byte - Parameter Byte, paramentro do comando.
"Lc" - Tamanho 1 byte - Length Command, Quantidade em bytes de dados contidos no "Data Field".
"Data Field" - Tamanho de 1 à 256 bytes - Data Field, dados a ser enviado para o Cartão.
"Le" - Tamanho 1 byte - Length Expected, Quantidade de dados esperado em resposta do Cartão.
Response APDU.
![]() | |
Pacote de Dados Response APDU |
"Mandatory Trailer" são os dados que devem obrigatóriamente estar presentes no pacote.
"Optional Body" são os dados opcionais no pacote.
"Data Field" - Tamanho de 1 à 256 bytes - Data Field, dados a ser enviado para o Host, geralmente possue a quantidade especificada no campo "Le" que o Host préviamente envia no Command APDU porém isso não é regra.
"SW1" - Tamanho 1 byte - Status Word 1 - Status do Processamento 1.
"SW2" - Tamanho 1 byte - Status Word 2 - Status do Processamento 2.
Juntas SW1 e SW2 formam uma Word (Palavra), geralmente conhecida pelos programadores Assembler, uma Word tem o tamanho de 2 bytes ou short para os intimos.
Um exemplo de Status Word é 0x9000 que segundo a ISO 7816 significa OK logo você sempre vai adorar 90 00 enquanto programa para Java Cards.
Informações mais detalhadas sobre o APDU aqui. (link)
Answer To Reset (ATR).
Imediatamente após alimentar ou resetar o cartão, o mesmo envia para o Host o ATR.
O ATR consiste de um pacote de até 33 bytes, onde os primeiros bytes indicam o protocolo se T=0 ou T=1, a velocidade de comunicação, tamanho do "historical bytes", etc.
O historical bytes são os ultimos bytes do pacote e são utilizados para identificar um determinado tipo de cartão, alguns podem ser alterados como forma de personalização.
Resumindo com o ATR do cartão geralmente é possivel de se identificar o tipo e fabricante do mesmo.
Nesse Link você encontra uma lista de ATR's mantida pelo Prof. Ludovic Rousseau e está em constante atualização. (link)
Os próximos itens especificado pela ISO 7816 - Parte 4, são estrutura de arquivos e dados, métodos de acessos e algoritimos. Não explicarei essa parte pois ela não é utilizada no desenvolvimento de Aplicativos Java Card.
O responsável por esses detalhes no caso do Java Card é o Global Platform que no caso será o assunto do próximo artigo, aguardem.
Link para Consultas ISO-7816. (link)
Bibliografia : Java Card TM Technology for Smart Cards, Autor : Zhiqun Chen, Editora : Addison-Wesley, ISBN : 0-201-70329-7
Até a próxima, Abraços.
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.