Algoritmos De Hash

Algoritmos De Hash

Funções de hash e para que servem.

Hashing é o nome que damos ao processo de passar um texto plano ou arquivo por um algoritmo de hash assim retornando um número fixo de strings aleatórias, esse valor retornado pode ser chamado de digest ou simplesmente hash value.

Há muitas formas de realizar hash em uma string mas para que um algoritmo de hash seja considerado util e seguro precisa seguir alguns princípios.

  • Cada hash value deve ser único, deve ser impossível que um input diferente acabe se tornando o mesmo hash, e mesmos inputs devem obrigatoriamente retornar Hash values iguais.

  • Um algoritmo de hash deve ser rápido ou ser construído para ser lento propositalmente quando necessário a fim de evitar um ataque de força bruta.

  • Deve ser seguro, irreversível não deve ser possível determinar um input a partir do seu hash.

  • O algoritmo de hash não deve gerar colisão ( quando o inputs diferentes geram o mesmo valor ) pois isso pode gerar problemas de segurança.

Por que utilizar Hash ?

Hash é um tipo de criptografia que não pode ser descriptografada, por isso suas utilidades são diferentes de um criptografia comum, as duas principais utilidades de um hash são, verificação de integridade e autenticação ( comparação / armazenamento de senhas )

O hash de um arquivo pode garantir sua integridade no momento por exemplo do envio deste mesmo arquivo através da rede para outro computador.

Sobre o armazenamento de senhas ele pode ser utilizado para comparação já que você pode enviar sua senha para criar um mesmo hash, mas quem tem acesso ao banco de dados não sabe a senha que o usuário possui, abaixo deixarei um vídeo sobre os diversos meios seguro de armazenar uma senha no banco de dados.

Password Storage

Algoritmos de Hash

MD5 ( Message-Digest 5 )

Criando em 1991 esse algoritmo de hash já não se faz mais util nos dias de hoje, pelo fato de que computadores hoje em dia podem gerar esses hashs em velocidade exorbitante, diminuindo assim sua segurança. ( Por isso não devemos usá-lo )

  • É um algoritmo muito fácil de ser criado, em consequência pode ser quebrado mais facilmente com força bruta.

  • Algoritmo antigo e já possui uma boa quantidade de hashs em raibow tables.

  • Ataque por colisão, existem muitos casos de colisões e esses inputs diferentes podem ser considerados chaves para falsificar senhas ou arquivos.

SHA-Family ( Secure-Hash Algorithm )

SHA são uma família de funções hash criptográficas publicadas pelo instituto nacional de padrões e tecnologia como padrão federal de processamento de informação dos EUA.

SHA-1

  • criado em 1995
  • valor de hash de 160bits e número hexadecimal de 40 dígitos.

  • SHA-1 foi deixado de lado e não é mais utilizado como padrão por diversas empresas, até mesmo o NIST que o criou sugere a utilização do SHA-2, isso após diversos estudos apresentarem algumas possibilidades de ataque.

  • Em 2017 um grupo da Google produziu diversos PDF's e assim foi feita a prova do conceito, uma colisão entre os arquivos, pois arquivos diferentes possuíam o mesmo HASH.

SHA-2

  • Criando em 2001, usado no TLS/SSL, SSH, IPSEC e etc...

  • Resistência a colisões, não é possível que dois inputs diferentes produzam o mesmo hash value.

  • A família SHA-2 é composta por seis funções hash
    SHA-224, SHA-256, SHA-384, SHA-512

os mais conhecidos são SHA-256 | SHA-512

Categoria : Slow Hashing

Algoritmos de hash que foram construídos propositalmente para serem lentos, assim evitando ataques de força bruta e alguns tipos de mineração.

  • scrypt
  • bcrypt

Bcrypt

  • Desenvolvido em 1999

O bcrypt possui dois critérios importantes

O salt é uma das vantagens do bcrypt pois acrescenta aleatoriamente sequências de caracteres na senha, projetando resultados criptográficos complexos e aumentando a segurança contra ataques de força bruta, como as rainbow tables, ou seja um hash sempre será um valor diferente mesmo que o texto seja igual.

A outra vantagem do Bcrypt é a possibilidade de alterar valores do salt rounds ( relacionado a custos ), onde quanto maior o número fornecido, mais lento será o processamento para calcular o hash associado a senha. por padrão o valor utilizado é 10, mas é importante informar que um valor mais alto demandará mais tempo para encontrar as possíveis senhas nos casos de ataque de força bruta então esse valor deve ser pequeno suficiente para não demorar na verificação de login do usuário.

Scrypt

Criado em 2008 por colin percival
Colin desenvolveu este algoritmo em cima de alguns critérios

  • Criar um algoritmo de hash eficiente e seguro para evitar o esgotamento de muita energia dos computadores que executam o software.

  • Oferecer um nível de segurança superior a muitos algoritmos conhecidos como o bcrypt incluindo ataques de força bruta

  • Seja de software livre, multiplataforma e portátil.

Recursos da Função Hash Scrypt

  • É um algoritmo eficiente, o recurso scrypt tem uma carga de trabalho mínima em comparação com a complexidade do trabalho que executa.

  • Oferece altos níveis de segurança, scrypt é um algoritmo com alto nível de segurança, de fato, o nível de segurança é ajustável. o algoritmo é projetado para que o programador possa aumentar ou diminuir várias variáveis que tem um impacto a este respeito, mas além disso o algoritmo oferece alta resistência a ataque de força bruta, o que o torna perfeito para sistemas distribuídos onde a segurança é essencial.

  • Resistência a ASICs e FPGAs um dos motivos pelos quais moedas como Litecoin se estabeleceram no scrypt foi sua capacidade de impedir implementações, isso significa que o scrypt torna mais difícil e menos eficiente em termos de potência computacional desenvolver mineradores como ASIC e FGPA