Em meu artigo anterior, " Segurança da informação para desenvolvedores", expliquei a vocês a base de segurança da informação e os pilares que a sustentam. A ideia dos próximos artigos é a implementação dos controles lógicos que citei, a saber, Criptografia, Assinatura Digital, HASH e Autenticação.



Para a implementação de hoje vou explicar o funcionamento dos dois principais algoritmos de HASH usados em linguagens modernas, SHA-1 e MD5, como implementar em C# e JAVA e demonstrarei o uso prático deles.



Conforme já citei de forma bem resumida no artigo anterior, funções HASH são algoritmos matemáticos que permitem transformar uma grande quantidade de dados em um identificador único, menor (bem menor), que não apresente colisão, ou seja, para determinado dado só há um único identificador e cuja entropia permita que não seja possível reverter o dado digerido (DIGEST) de volta ao dado em claro.



A geração de um HASH está intimamente ligada com PRNGs, do inglês, “Pseudo Random Number Generation” ou Geração de números pseudorrandômicos.



Acredito ser uma das maiores dores de cabeça da computação mundial a geração de números aleatórios fortes, ou seja, número cuja aleatoriedade espelhem ao máximo o acaso, fenômeno este só observado no mundo físico, real. Esta geração de números aleatórios permite, no caso das funções HASH, a não existência ou baixa probabilidade de colisões.



Infelizmente, como para tudo em termos de segurança, não existe uma função HASH perfeita e sem colisões. O que existem são funções cujas colisões podem ser improváveis em determinada situação ou com determinado dado. O fato é que se persegue, numa função HASH, a menor taxa de colisão possível.

...
Quer ler esse conteúdo completo? Tenha acesso completo