domingo, 19 de dezembro de 2010

Hello World Java Card! (Parte 1 - Configurando o Ambiente)

Bom, chegou a hora de escrever-mos nossa primeira aplicação Java Card, de inicio utilizaremos o JCWDE (Java Card Workstation Development Environment) ou o CREF( C Reference Implementation of Java Card), mais conhecidos como Simuladores Java Card.
O Simulador não é ruim porém não é completo como um Java Card físico, possui diversas limitações como  ausência ou implementação parcial de alguns motores criptograficos, vários esquemas de *padding estão ausentes, o tamanho máximo de uma chave RSA é de 512 bits, sendo que a maioria dos Java Cards suportam 2048 bits alguns até 4096 bits, implementação parcial do GlobalPlatform e somente o CREF pode salvar o estado do Applet porém não aceita debugging.
Então se puder consiga um cartão Java Card que será muito mais proveitoso e divertido também. 

*padding - Algoritimos Criptograficos cifram blocos de dados com tamanhos fixos ou múltiplos, por exemplo o TripleDES somente cifra blocos múltiplos de 8 bytes, caso o bloco de dados não seja múltiplo é necessário complementar o bloco para torna-lo múltiplo de 8.
Por exemplo imagine que precisamos cifrar o seguinte bloco de dados :
[0x01 0x02 0x03 0x04] - 4 bytes, se enviar-mos para o motor 3DES receberemos uma exceção, logo seguindo a especificação ISO9797-1 aplicaremos o seguinte padding:
[0x01 0x02 0x03 0x04 0x80 0x00 0x00 0x00] - 8 bytes. 

Ferramentas Necessárias :

Observação, baixe o JCDK versão 2.2.2 se está se perguntando porque veja aqui o porque focinho de porco não é tomada. 

Configurando o Ambiente de Desenvolvimento.
Instale o JDK com as configurações padrões.
Descompacte o arquivo "java_card_kit-2_2_2-windows.zip" em um local temporário, descompacte o conteúdo do arquivo "java_card_kit-2_2_2-rr-bin-windows-do.zip" que está localizado dentro da pasta "java_card_kit-2_2_2", para uma pasta com o nome de "JCDK222" na raiz C: do seu HD.
Deixe a estrutura de Diretórios exatamente como na figura abaixo, isso facilitará bastante sua vida no decorrer dos tutoriais :

Estrutura de Diretório do JCDK.
Agora iremos configurar as variáveis de Ambiente do Windows.
Clique em "Iniciar->Painel de Controle -> Sistema" e acesse a seguinte janela :


Vá até a Aba "Avançado" e clique no botão "Variáveis de Ambiente".

Verifique na Lista "Variáveis do Sistema" na coluna "Variável" se não existe uma entrada chamada "JAVA_HOME", se não existir clique no botão "Novo...".

Crie a seguinte entrada seguindo a imagem acima, vai uma dica valiosa aqui, notaram que coloquei "C:\Arquiv~1\..." isso porque em alguns prompt de comando do windows o espaço contido em "Arquivo de Programas" gera um Erro na hora de localizar os executáveis do JDK. Quem usou Windows 95 deve saber do que estou falando. No Windows 7 ou Windows Vista isso pode mudar por exemplo no meu Windows 7 64bits o JDK se instalou em "C:\Program Files (x86)\Java\jdk1.6.0_20", porem o path no prompt de comando correto é "C:\Progra~2\Java\jdk1.6.0_20". Aqui você terá que dar seus pulinhos para configurar corretamente seu ambiente. 
Algumas pessoas dirão : Ahh! mas é só colocar entre aspas dupas! "C:\Arquivo de Programas\Java\jdk1.6.0_20".
O que posso dizer para essas pessoas é "sim pode"... Mas se não conseguirem compilar depois seus Applets tentem usando a dica do Arquiv~1.
Caso você não tenha o Classpath na lista de variáveis crie uma entrada para ele também conforme a figura acima.
Por ultimo crie a entrada do JCDK conforme a figura acima.
Agora abra um prompt de comando e teste se o ambiente foi configurado corretamente digitando:
%JAVA_HOME%\bin\javac -version
%JC_HOME%\bin\verifycap -version
O resultado deve ser similar a imagem acima, se for parabéns você configurou seu ambiente para desenvolvimento Java Card com sucesso!
Agora descompacte o Eclipse em um local de sua escolha no meu caso eu o coloquei na raiz C: do HD, aliás é onde o pessoal do Eclipse recomenda colocar para evitar problemas.
Descompacte o Plug-In Java Card e copie a pasta "plugins" para a raiz do seu Eclipse, no meu caso "C:\Eclipse".
Execute o Eclipse e se tudo estiver correto você verá três itens de menu novo, "CREF", "Java Card"e "JCWDE", conforme a figura abaixo : 
Finalmente clique em "Java Card -> Preferences" e configure o local do JCDK, conforme a figura abaixo:
Bem felizmente essa foi de longe a parte mais difícil de todo processo, agora vem a parte mais fácil de todas que é programar em Java Card.

Particularmente eu prefiro utilizar o Netbeans para desenvolvimento Java, inclusive para Java Card porém  como o Netbeans traz nativamente o Java Card Dev Kit 3.0(Dependendo da Distro que você baixar), e esses cartões ainda são raros no mercado, resolvi utilizar o Eclipse pois utiliza o JCDK 2.2.2 e esses cartões são facilmente encontrados no mercado inclusive brasileiro, as chances de você conseguir um é infinitamente maior do que conseguir um JC 3 e relembrando o JC 3 é a evolução direta do JC2.2.2.


Bom, na Parte do 2 do Artigo finalmente vocês Desenvolverão um Applet Java Card e o executará no Simulador JCWDE.


Até a Próxima, Abraços a Todos!

8 comentários:

  1. Bom dia, Ricardo. Tudo bem contigo? Estamos precisando desenvolver um Sistema WEB de recarga de Cartões pré-pagos, similar ao Sistema da SODEXO. Você tem disponibilidade de se envolver com isso, e em caso negativo, poderia nos indicar algum Colega seu? Desde já agradeço pela atenção dispensada. Maurício.

    ResponderExcluir
  2. ola chara ricardo estou tentando configurar uma gravadora de smart card acr38 estou fazendo e seguindo seu tutorial sera que vai foncionar comigo

    ResponderExcluir
    Respostas
    1. Boa Tarde,

      Rick tudo bem,deixa eu te falar,você conseguiu configurar o leitor e gravador ACR38?
      Será que poderiamos conversar sobre isso,vou deixar meu email,assim poderiamos conversar melhor.

      Obrigado
      caio_cantagallo@outlook.com

      Excluir
  3. ola ricardo bom dia sera que eu consigo ler os dados de qualquer cartao e gravar em outro virgem com esse tutorial que vc ensinou

    ResponderExcluir
    Respostas
    1. Este comentário foi removido por um administrador do blog.

      Excluir
    2. Este comentário foi removido por um administrador do blog.

      Excluir
    3. Este comentário foi removido por um administrador do blog.

      Excluir
  4. Este comentário foi removido por um administrador do blog.

    ResponderExcluir

Observação: somente um membro deste blog pode postar um comentário.