O que é uma função criptográfica de hash?
Uma função de hash criptográfica é um algoritmo que pode ser executado em dados como um indivíduo Arquivo ou uma senha para produzir um valor chamado checksum.
O principal uso de uma função hash criptográfica é verificar a autenticidade de um dado. Dois arquivos podem ser considerados idênticos apenas se as somas de verificação geradas a partir de cada arquivo, usando a mesma função hash criptográfica, forem idênticas.
Algumas funções de hash criptográficas comumente usadas incluem MD5 e SHA-1, embora muitos outros também existam.
As funções de hash criptográficas costumam ser chamadas de "funções de hash", mas isso não é tecnicamente correto. Uma função hash é um termo genérico que abrange funções hash criptográficas junto com outros tipos de algoritmos, como verificações de redundância cíclica.
Funções criptográficas de hash: um caso de uso
Digamos que você baixe o versão mais recente do navegador Firefox. Por algum motivo, você precisava baixá-lo de um site diferente do Mozilla. Como ele não está hospedado em um site que você aprendeu a confiar, você gostaria de ter certeza de que o arquivo de instalação que acabou de baixar é exatamente o mesmo que o Mozilla oferece.
Usando uma calculadora de checksum, você calcula um checksum usando uma função de hash criptográfica específica, como SHA-2, e então a compara com aquela publicada no site da Mozilla. Se eles forem iguais, você pode estar razoavelmente certo de que o download que você fez é aquele que a Mozilla pretendia que você tivesse.
As funções criptográficas de hash podem ser revertidas?
As funções de hash criptográficas são projetadas para impedir a capacidade de reverter as somas de verificação que elas criam de volta aos textos originais. No entanto, embora sejam virtualmente impossíveis de reverter, eles não têm 100 por cento de garantia para proteger os dados.
Os hackers podem usar uma tabela de arco-íris para descobrir o texto simples de uma soma de verificação. As tabelas do arco-íris são dicionários que listam milhares, milhões ou até bilhões de somas de verificação ao lado de seu valor de texto simples correspondente.
Embora isso não esteja tecnicamente revertendo o algoritmo de hash criptográfico, pode muito bem ser, visto que é tão simples de fazer. Na realidade, uma vez que nenhuma tabela arco-íris pode listar todas as somas de verificação possíveis, elas geralmente são úteis apenas para frases simples, como senhas fracas.
Esta é uma versão simplificada de uma tabela arco-íris para mostrar como funcionaria ao usar a função hash criptográfica SHA-1:
Exemplo de mesa arco-íris | |
---|---|
Texto simples | SHA-1 Checksum |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
senha1 | e38ad214943daad1d64c102faec29de4afe9da3d |
eu amo meu cachorro | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Um hacker deve saber qual algoritmo de hash criptográfico foi usado para gerar as somas de verificação para descobrir os valores.
Para proteção adicional, alguns sites que armazenam senhas de usuário executa funções adicionais no algoritmo de hash criptográfico depois que o valor é gerado, mas antes de ser armazenado. Esse processo produz um novo valor que apenas o servidor da web entende e que não corresponde à soma de verificação original.
Por exemplo, depois que uma senha é inserida e a soma de verificação gerada, ela pode ser separada em várias partes e reorganizados antes de serem armazenados no banco de dados de senhas, ou certos caracteres podem ser trocados com outros. Ao tentar autenticar na próxima vez que o usuário fizer logon, o servidor da web reverterá isso função adicional, e a soma de verificação original é gerada novamente para verificar se a senha de um usuário é válido.
Seguir essas etapas limita a utilidade de um hack em que todas as somas de verificação são roubadas. A ideia é executar uma função desconhecida, portanto, se o hacker conhece o algoritmo de hash criptográfico, mas não o personalizado, saber as somas de verificação de senha não ajuda.
Senhas e funções criptográficas de hash
Um banco de dados salva as senhas do usuário de maneira semelhante a uma rainbow table. Quando sua senha é inserida, o soma de verificação é gerado e comparado com aquele registrado com seu nome de usuário. Em seguida, você terá acesso se os dois forem idênticos.
Dado que uma função de hash criptográfica produz uma soma de verificação irreversível, é seguro para você tornar sua senha tão simples quanto 12345, ao invés de 12@34$5, simplesmente porque as somas de verificação em si não podem ser compreendidas? Não, e aqui está o porquê.
Essas duas senhas são impossíveis de decifrar apenas olhando apenas para as somas de verificação:
MD5 para 12345:827ccb0eea8a706c4c34a16891f84e7b
MD5 por 12 @ 34 $ 5:a4d3cc004f487b18b2ccd4853053818b
À primeira vista, você pode pensar que não há problema em usar qualquer uma dessas senhas. Isso é verdade se um invasor tentar descobrir sua senha adivinhando a soma de verificação MD5, o que ninguém faz, mas não é verdade se um ataque de força bruta ou de dicionário for executado, o que é uma tática comum.
Um ataque de força bruta ocorre quando várias tentativas aleatórias são feitas para adivinhar uma senha. Nesse caso, seria fácil adivinhar 12345, mas muito difícil descobrir o outro aleatoriamente. Um ataque de dicionário é semelhante no sentido de que o invasor pode tentar cada palavra, número ou frase de uma lista de senhas comuns (e não tão comuns) e 12345 é uma daquelas senhas comuns.
Mesmo que as funções de hash criptográficas produzam somas de verificação difíceis ou impossíveis de adivinhar, você ainda deve use uma senha complexa para todas as suas contas de usuário online e locais.
Mais informações sobre funções criptográficas de hash
Pode parecer que as funções de hash criptográficas estão relacionadas à criptografia, mas as duas funcionam de maneiras diferentes.
A criptografia é um processo bidirecional em que algo é criptografado para se tornar ilegível e, em seguida, descriptografado posteriormente para ser usado normalmente novamente. Você pode criptografar arquivos que você armazenou para que qualquer pessoa que os acesse não possa usá-los, ou você pode usar criptografia de transferência de arquivo para criptografar arquivos que estão se movendo em uma rede, como aqueles que você carrega ou baixa online.
As funções de hash criptográficas funcionam de maneira diferente, pois as somas de verificação não devem ser revertidas com uma senha especial de dehashing. O único propósito das funções hash criptográficas é comparar duas partes de dados, como ao baixar arquivos, armazenar senhas e extrair dados de um banco de dados.
É possível que uma função hash criptográfica produza a mesma soma de verificação para diferentes partes de dados. Quando isso acontece, é chamado de colisão, o que é um grande problema, considerando que todo o objetivo de uma função hash criptográfica é fazer somas de verificação exclusivas para cada entrada de dados.
As colisões podem ocorrer porque cada função hash criptográfica produz um valor de comprimento fixo, independentemente dos dados de entrada. Por exemplo, a função hash criptográfica MD5 gera 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 e e10adc3949ba59abbe56e057f20f883e para três totalmente diferentes blocos de dados.
A primeira soma de verificação é de 12345. O segundo foi gerado a partir de mais de 700 letras e números, e o terceiro é de 123456. Todas as três entradas têm comprimentos diferentes, mas os resultados são sempre de apenas 32 caracteres, pois MD5 checksum foi usado.
Não há limite para o número de somas de verificação que podem ser criadas porque cada pequena alteração na entrada deve produzir uma soma de verificação completamente diferente. Como há um limite para o número de somas de verificação que uma função hash criptográfica pode produzir, sempre há a possibilidade de você encontrar uma colisão.
É por isso que outras funções de hash criptográficas foram criadas. Enquanto MD5 gera um valor de 32 caracteres, SHA-1 gera 40 caracteres e SHA-2 (512) gera 128. Quanto maior o número de caracteres da soma de verificação, menor a probabilidade de ocorrer uma colisão.