Na prática, sim, um hash criptográfico idêntico significa que os arquivos são os mesmos, desde que os arquivos não tenham sido criados por um invasor ou outra entidade maliciosa. As chances de colisões aleatórias com qualquer função hash criptográfica bem projetada são tão pequenas que são desprezíveis na prática e na ausência de um atacante ativo.
Em geral, no entanto, não, não podemos dizer que dois arquivos arbitrários com o mesmo hash definitivamente significam que eles são idênticos.
A maneira como uma função hash criptográfica funciona é obter uma entrada de comprimento arbitrário e gerar um valor de comprimento fixo calculado a partir da entrada. Algumas funções de hash têm vários comprimentos de saída para escolher, mas a saída ainda é, até certo ponto, um valor de comprimento fixo. Esse valor terá até algumas dezenas de bytes; os algoritmos de hash com o maior valor de saída em uso comum hoje têm uma saída de 512 bits e uma saída de 512 bits é de 64 bytes.
Se uma entrada para uma função hash for maior que a saída da função hash, alguma fidelidade deve ser removida para que a entrada caiba na saída. Conseqüentemente, deve haver várias entradas de comprimentos maiores que o comprimento da saída, que geram a mesma saída.
Vamos tomar o cavalo de batalha atual, SHA-256, como exemplo. Ele gera um hash de 256 bits ou 32 bytes. Se você tiver dois arquivos com exatamente 32 bytes de comprimento, mas diferentes, eles devem (assumindo que não há falha no algoritmo) hash para valores diferentes, independentemente do conteúdo dos arquivos; em termos matemáticos, o hash é uma função que mapeia um espaço de 2 256 entradas para um espaço de 2 256 saídas, o que deve ser possível sem colisões. No entanto, se você tiver dois arquivos com 33 bytes de comprimento, deve existir alguma combinação de entradas que forneça o mesmo valor de hash de saída de 32 bytes para os dois arquivos, porque agora estamos mapeando um espaço de entrada de 2 264 em um 2 256espaço de saída; aqui, podemos ver prontamente que deve haver, em média, 2 8 entradas para cada saída. Vá além e, com arquivos de 64 bytes, devem existir 2 256 entradas para cada saída!
As funções de hash criptográfico são projetadas de forma que seja computacionalmente difícil compor uma entrada que fornece uma saída específica ou compor duas entradas que fornecem a mesma saída. Isso é conhecido como resistência ao ataque de pré-imagem ou resistência ao ataque de colisão . Não é impossível encontrar essas colisões; apenas pretende ser muito, muito, muito, muito difícil. (Um caso especial de ataque de colisão é um ataque de aniversário .)
Alguns algoritmos são melhores que outros para resistir a invasores. O MD5 é geralmente considerado completamente quebrado nos dias de hoje, mas, pela última vez que olhei, ele ainda exibia uma boa resistência à pré-imagem . O SHA-1 também é efetivamente quebrado; ataques de pré-imagem foram demonstrados, mas exigem condições específicas, embora não haja motivo para acreditar que esse será o caso indefinidamente; como diz o ditado, os ataques sempre melhoram, nunca pioram. Atualmente, o SHA-256/384/512 ainda é considerado seguro para a maioria dos propósitos. No entanto , se você estiver interessado apenas em ver se dois códigos não maliciosos, válidosComo os arquivos são iguais, qualquer um desses itens deve ser suficiente, porque o espaço de entrada já está suficientemente restrito para que você se interesse principalmente por colisões aleatórias. Se você tiver algum motivo para acreditar que os arquivos foram criados com intuito malicioso, use pelo menos uma função de hash criptográfico que atualmente é considerada segura, o que coloca a barra inferior no SHA-256.
A primeira pré-imagem é encontrar uma entrada que produza um valor de hash de saída específico; a segunda pré-imagem é encontrar uma entrada que produza a mesma saída que outra entrada especificada; colisão é encontrar duas entradas que produzem a mesma saída, sem levar em consideração o que é isso e, às vezes, sem levar em conta o que são as entradas.
Tudo isso dito, é importante ter em mente que os arquivos podem ter representações de dados muito diferentes e ainda exibir exatamente o mesmo. Portanto, eles podem parecer iguais, mesmo que seus hashes criptográficos não correspondam, mas se os hashes corresponderem, é extremamente provável que pareçam iguais.
cmp
Unix oufc
(comparação de arquivos) no Windows.