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.
