Password “hash” – o que é e como funciona?

A função Hash (Resumo) é qualquer algoritmo que mapeie dados grandes e de tamanho variável para pequenos dados de tamanho fixo. Por esse motivo, as funções Hash são conhecidas por resumirem o dado. A principal aplicação dessas funções é a comparação de dados grandes ou secretos.

Dito isso, para que saiba, a maior parte das palavras passe em qualquer website ou aplicação online costuma ser armazenada em uma base de dados com um mecanismo de hash. Assim, caso haja vazamento dos dados diretamente a partir de um servidor, aqueles que subtraíram os dados em tese não serão capazes de aceder à password diretamente, exceto quando possuírem a palavra-chave que decifra o algoritmo de hash.

As funções hash criptográficas são usadas para segurança de dados, em resumo. Sistemas de CMS amplamente utilizados, como é o caso do WordPress, possuem sistemas de hashing para passwords de usuários. No caso do WordPress, usa-se ainda um sistema de hashing relativamente antiquado, o MD5. As versões mais modernas do PHP, entretanto, incluíram um mecanismo de criptografia e hashing mais poderoso – o Bcrypt. O uso do Bcrypt, em comparação a sistemas como o MD5, é capaz de reduzir significativamente as probabilidades de quebra de palavras-passe por meio de ataques de “brute force“.

Hash – verificação e comparação

Essa é a função do hash – é uma função criptográfica, mas não configura “criptografia” de facto. A encriptação é uma tarefa de mão dupla que você usa sempre que precisa armazenar com segurança uma informação, mas precisa recuperá-la mais tarde através de uma chave simétrica ou privada. Já o hash, é comumente utilizado quando você necessita comparar informações. Em um sistema de login, como o do WordPress, a função hash é aplicada sobre a palavra-passe digitada pelo usuário e o resultado é então comparado ao valor hash já armazenado na base de dados. As funções hash mais popularmente utilizadas incluem:

  • MD5. Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, uma hash md5 não pode ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida). O MD5 também é usado para verificar a integridade de um arquivo através, por exemplo, do programa md5sum, que cria a hash de um arquivo. Isto pode-se tornar muito útil para downloads de arquivos grandes, para programas P2P que constroem o arquivo através de pedaços e estão sujeitos a corrupção dos mesmos. Como autenticação de login é utilizada em vários sistemas operacionais unix e em muitos sites com autenticação.
  • Bcrypt. O Bcrypt foi criado em 1999. Este método apresenta uma segurança maior em relação à maioria dos outros métodos criptográficos que é a implementação da variável “custo” que é proporcional à quantidade de processamento necessária para criptografar a senha. O método é conhecido como hash adaptativo às melhorias futuras de hardware por ter esta característica, pois pode permanecer resistente à ataques do tipo “força-bruta” com o tempo usando custos maiores de processamento. Sua maior segurança fez com que fosse, gradativamente, sendo adicionado a diversas linguagens de programação, como Perl, Python, Java e, mais recentemente, ao PHP.
  • SHA-256 e SHA-512. A família SHA-2 é um conjunto de funções hash criptográficas projetadas pela NSA (Agência de Segurança Nacional dos EUA). SHA significa secure hash algorithm (algoritmo de hash seguro). SHA-256 e SHA-512 são funções hash inovadoras computadas com palavras de 32 bytes e 64 bytes, respectivamente. Eles usam quantidades de deslocamento e constantes aditivas diferentes, mas as suas estruturas são praticamente idênticas, diferindo apenas no número de rodadas.