Páginas

domingo, 22 de agosto de 2010

Criptografia em aplicações J2ME

Sei que por vezes alguns sentem necessidade de imprimir em suas aplicações, esforços maiores para garantir a segurança das informações que são armazenadas no celular ou transmitidas para um servidor Web. É neste momento que percebemos que a plataforma J2ME carece de suporte para isto, mas graças a algumas iniciativas, temos opções para serem usadas em nossas aplicações móveis. Vou me concentrar então em falar um pouquinho sobre os algoritimos mais usados no dia-a-dia ou que podem vir a ser úteis.

MD5
O que é:
Um algoritimo para geração de um hash, ou seja, dada uma sequência de bytes na entrada, ele gera outra sequência na saída, baseando numa fórmula que procura garantir que nenhuma outra sequência parecida com esta vai gerar o mesmo valor de hash.

Onde é usado ?
Muitas desenvolvedores se descuidam, e desenham seus sistemas e não se preocupam em proteger a senha dos usuários contra acessos diretos a tabela que contém os usuários e suas senhas. Uma boa prática é implementar o hashing na aplicação, fazendo com que ao invés da senha ser gravada no banco, a sua respectiva hash seja, evitando assim olhares curiosos por desenvolvedores e porquê não, DBAs descuidados. Então uma vez o hash gravado no campo, quando for validar se o usuário pode acessar o sistema basta comparar o valor do hash calculado na hora, versus o armazenado. Sendo iguais, o acesso pode ser liberado. Este tipo de técnica, dificulta ataques de Man-in-the-Middle.
O MD5 e outras funções de hashing procuram garantir não a confidencialidade mas sim a integridade da informação, pois que seja 1 bit que se altere na mensagem de entrada, na saída isto será refletido com outro valor de hash.

Onde encontrar ?

SHA
O que é:
Um algoritimo de hash igual ao MD5, e é considerado o sucessor do mesmo.
Gera um hash maior que o MD5, evidentente, para ser mais seguro.

Onde é usado ?
Você pode usar nos mesmos cenários onde usuária o MD5, com a vantagem de poder ter mais opções, por exemplo, usando um SHA com senha (HMAC), onde além dos bytes de entrada, você alimenta o gerador de hash com uma semente criptográfica que ajudará na criação do hash. Para um exemplo prático, consulte meu post aqui.

Onde encontrar ?

TEA
O que é:
Tal qual a versão do SHA que utiliza uma semente criptográfica, o TEA também é um cifrador.

Onde é usado ?
Quando você precisa de privacidade na comunicação celular<->servidor, não querendo que entendem o protocolo de intercâmbio destas informações, um cifrador pode ser uma boa opção.
Imagine que você tem uma lista de clientes com telefones, endereços e tudo mais. Como a informação passa por várias infraestruturas antes de chegar no celular, cifrar este conteúdo pode garantir que além da privacidade, você dificultará a vida de qualquer espertinho que tente analisar a comunicação e a partir daí atacar o sistema ou explorar alguma brecha de segurança.

Onde encontrar ?

Embora existam muitos outros algorítimos, encontrar estes portes destes para a plataforma J2ME é algo difícel. Mesmo encontrando o fonte de algum código para desktop, portar para J2ME é uma situação que pode embutir um erro na lógica do algorítimo,fazendo com que dê um resultado diferente do correto. Aconselho a sempre o desenvolvedor buscar implementações já prontas, e depois aplicar testes para comparar se as implementações estão dando o resultado correto contra uma implementação conhecida de funcionar. Por exemplo, você pode desenvolver uma aplicação para desktop, usar a criptografia embutida no J2SE e encontrar alguma implementação do mesmo algoritimo para J2ME. Após implementar no celular, verifique se o que está sendo fornecido é igual ao que é confiável, que é o que está sendo gerado no desktop.

Bons códigos !

Editado: Em um post futuro abordarei outros algoritimos que podem ser usados em nossas aplicações J2ME com pouco overhead em nossas aplicações, ou seja, nada de bibliotecas complicadas ou pesadas.

TokenME – Gerador de Senhas descartáveis com validador web

Estou compartilhando no SourceForge, um software em J2ME que desenvolvi para um trabalho acadêmico ano passado (2009), e que pode lançar luz para muitos que gostariam de implementar um gerador de senha baseado em tempo (TOTP – Time-base One-time Password), mas não sabem por onde iniciar.Tá certo que já deveria ter postado por lá, mas sabe como é…algumas coisas vão aparecendo aqui e ali e a gente acaba deixando isto de lado.2010 começou tumultuado pra mim mas agora as coisas estão entrando no eixo.
TokenME é um protótipo que funciona relativamente bem e pode ser um ponto de partida para suas próprias descobertas e melhorias. É um sistema constituído da parte mobile (token) e da parte web (validador de senha).
Em linhas gerais, um gerador de senhas baseado em tempo, funciona gerando senhas que tem curto tempo de válidade e por isto são senhas descartáveis, as quais uma vez expirado o prazo, você não consegue utilizá-la no sistema. São dispositivos que são confiados a pessoas chaves em organizações, para fazer a autorização de certas operações, onde não basta ter uma senha no sistemas, mas sim comprovar com algo mais que você é quem diz ser na hora de efetuar aquela operação.
A vantagem de se usar um celular como token é:
  1. Aumento da segurança: No processo de identificação junto ao site, pois usa-se algo que ele tem (token), além do que ele sabe (PIN).
  2. Economia de hardware: Quem fornecer o aplicativo não precisara investir em hardware dedicado (um token real, por exemplo) e não fica preciso a um único fornecedor de token, podendo aproveitar o próprio celular do usuário.
  3. Aumento da confiança do usuário no sistema, pois entende que os seus dados estarão mais protegidos com mais esta tecnologia.
  4. O uso do celular permite que novas versões da aplicação sejam lançadas contendo novas funcionalidades. Por exemplo: o token pode passar a falar a senha. Isto seria interessante para pessoas com deficiência visual.
  5. O celular oferece uma interface com o usuário mais rica em relação a um token comum.
Este trabalho se baseia em uma implementação do Vincent Bouillet para DoJa (um dialeto do J2ME no Japão),a qual fiz algumas modificações para rodar J2ME puro e melhorar algumas coisas. Então, como a licença é GPLv3, também estou usando a mesma licença. Fique a vontade para usar o software contanto que respeite os termos da licença, que estão no arquivo ZIP lá no SourceForge.

Até mais !!!