terça-feira, 7 de dezembro de 2010

ISO/IEC 7816

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.