domingo, 19 de dezembro de 2010

Acessando SmartCards usando Jaccal

O que é Jaccal?
Jaccal (Java Card Communication Access Layer) é uma antiga API de comunicação Smart Card para aplicações Java e desde de 2006 não recebe atualizações, provavelmente por conta da introdução da API Java Smart Card I/O no Java 6.

Porque Jaccal?
Ele é uma ótima ferramenta para se testar rapidamente aplicações Smart Card de maneira fácil e descomplicada, graças a uma poderosa e simples Interface Gráfica de Scripts. Porém você não utilizará a API Jaccal para desenvolver suas aplicações Java, considere nesse caso utilizar a API Java Smart Card I/O.

O Material Necessário:
  • Cartão Java Card de Desenvolvimento com o Applet Hello World instalado.
  • Leitor / Gravador padrão PC/SC ISO7816.
  • Jaccal Instalado na máquina.
O Jaccal pode ser baixado gratuitamente no seguinte endereço: 

http://jaccal.sourceforge.net/ 

Após baixar o Jaccal, instale-o no lugar de sua preferência, eu aconselho ser na raiz C: para ser de fácil acesso.
Por ser desenvolvido em Java, o Jaccal necessita de ao menos uma JRE instalada na máquina.
Após instalado, vá ao diretório de instalação e você verá dois executáveis o "jaccal.exe" e "anubis.exe", execute então a aplicação anubis.exe.

Editor de Scripts Anubis
Ok, não parece ser grande coisa a primeira vista, mas ele é exatamente do jeito que eu gosto, simples, rústico, fácil de usar e por consequencia eficiente.
O Programa possui apenas quatro botões com as seguintes funções (da esquerda para a direita), Open (Carrega um Script), Save (Salva um Script), Run (Executa um Script) e Reset (Reseta a camada PC/SC).

Escrevendo o Script :
atr = open();
prints(atr);

prints("Select Application");
cmd = new ApduCmd("00A404000B0102030405060708090000");
prints(cmd);
card_response = execute(cmd);
prints(card_response);

prints("Teste Bytes");
cmd = new ApduCmd("00000000060A0B0C0D0E0F");
prints(cmd);
card_response = execute(cmd);
prints(card_response);

close();
Como pode ter notado é um script extremamente simples, vamos então analisar algumas linhas chaves neste script:
Na linha 1, o comando open() realiza toda a função de se conectar ao cartão na leitora, esse comando retorna o atr do cartão que na linha 2 é impresso pelo comando prints(atr).
Na linha 5, o comando new ApduCmd("00A4...") cria um cmd que nada mais é que um APDU de envio para o cartão que é também impresso pelo comando da linha 6 prints(cmd).
Na linha 7 o APDU cmd criado na linha 5 é transferido para o cartão através do comando execute(cmd) que retorna a resposta do cartão em card_response, impresso na linha 8 pelo comando prints(card_response). No caso card_response pode ou não conter dados mas ele sempre conterá o Status Word SW1 e SW2.
Por fim na Linha 16 o comando close() finaliza a comunicação com o cartão, é sempre importante que seus scripts contenham o comando close() no final pois se não o canal de comunicação ficará aberto e futuras tentativas de comunicação com o cartão terminará em erros. Caso esqueça do close() você poderá forçar esse comando através do botão Reset do Anubis.

Execute o Script clicando no botão Run.


Uma segunda aba é criada e preenchida com os testes do script.


Para interpretar o resultado dos testes é igualmente simples, como pode ver existe uma Tag seguido pelos bytes de teste onde [ATR] é o Answer To Reset do cartão, [S] indica um APDU de envio (Send), [R] indica um APDU de resposta (Receive) e [SW] o Status Word (SW1 e SW2).
O Jaccal possui alguns módulos internos como GSM, serviços de criptografia SAM (Security Authentication Module), Global Platform e funções para cartões MULTOS.
Porém esses módulos são muito mau documentados e pode acabar sendo um bom desafio coloca-los para funcionar.
Espero que tenha gostado de aprender sobre esse excelente e simples software para Smart Cards.

Um Abraço, e até a Próxima!

4 comentários:

  1. Excelente Tutorial me abriu a mente sobre SMART CARD. PARABENS

    ResponderExcluir
  2. como eu gravo outras coisas no smart card

    ResponderExcluir
  3. Depende do que você quer gravar, existe diversos tipos de tecnologias com diversas capacidades de armazenamento e segurança.

    ResponderExcluir
  4. Boa Tarde,

    Ricardo estou lendo todos os tópicos do seu blog achei muito ,mais muito mesmo interessante, porém devido a falta de conhecimento estou meio perdido e gostaria do seu auxílio:
    1 - o programa GPSHELL é o responsável pela leitura e a gravação dos smart cards ( gostaria de saber se com esse programa eu consigo gravar em 1 smart card jcop 2.1 de 36 k)
    Tenho diversas duvidas mais por enquanto vou ficar somente com esse pergunta.
    Desde já agradeço a atenção.
    Muito Obrigado.

    Aguardo o seu contato
    caio_cantagallo@outlook.com

    ResponderExcluir

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