Quão únicas são as somas de verificação?


10

Eu tenho muitos arquivos que preciso classificar; e, infelizmente, existem muitos arquivos com o mesmo nome, mas com conteúdo diferente, e há o mesmo conteúdo com nomes de arquivos diferentes.

Estou pensando em usar md5sumpara gerar somas de verificação para os arquivos, mas preciso saber - é possível que dois arquivos diferentes (ou seja, conteúdo diferente) gerem a mesma soma de verificação?

Se for, qual a probabilidade de isso acontecer?

Seria possível usar dois programas de soma de verificação diferentes e não relacionados (por exemplo, não na mesma "família") para gerar duas somas de verificação - supondo que enquanto dois arquivos diferentes possam gerar a mesma soma de verificação para qualquer um dos programas de soma de verificação, isso nunca aconteceria aos dois ao mesmo tempo?


2
Lembre-se de que o md5 / sha2 / etc é um HASH de dados, mapeando muitas informações para um espaço de bits menor, portanto, é possível que haja colisões. Um HASH não é uma chave única e, se esse for o seu objetivo ... eu recomendo fortemente que faça outra coisa.
Mdpc

Para classificar arquivos, o MD5 está bom. Em crypto.stackexchange.com/a/18337/49945 , a probabilidade de colisão da soma de verificação de dois conteúdos diferentes é 1 em 2 ^ 128, ou seja, 1 em 10 ^ 43. Isso é muito, muito raro. Se você fizer uma comparação por microssegundo, em média, ocorrerá uma colisão uma vez a cada 10 ^ 20 anos. Faz apenas ~ 10 ^ 9 anos desde o Big Bang, então as chances de uma colisão acontecer MESMO UM ÚNICO TEMPO, em uma comparação por microssegundo do Big Bang até agora, ainda são apenas 1 em 10 ^ 11. Dado cem bilhões de computadores simultâneos, apenas ~ um já teria visto uma colisão.
Home

... embora não esteja claro por que você usaria qualquer algoritmo de hash ao classificar arquivos. Se houver arquivos com o mesmo nome, eles deverão ser identificáveis ​​por outros critérios; por exemplo, deve haver algum caminho exclusivo para o arquivo ou talvez um deslocamento de bytes em algum dispositivo de armazenamento? Qualquer um desses seria uma maneira mais útil de se referir exclusivamente ao arquivo.
Página Inicial>

Respostas:


10

Dois arquivos com o mesmo conteúdo, mas com nomes de arquivos diferentes: ( arquivo1 e arquivo2 ):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2

Dois arquivos com conteúdo diferente, mas os mesmos nomes de arquivo: ( arquivo1 e arquivo1 )

cat file1
this is a simple file
cat file1
this is a simple file with extra contents
md5sum file1 #first file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file1 #second file1
c7c8f3fd9ddd7a926c31416a69063e4e  file1

Na entrada do wiki ,

No entanto, é muito improvável que dois arquivos não idênticos no mundo real tenham o mesmo hash MD5, a menos que tenham sido criados especificamente para ter o mesmo hash.

Mas, o algoritmo MD5 tem suas próprias falhas.

No entanto, agora que é fácil gerar colisões MD5, é possível que a pessoa que criou o arquivo crie um segundo arquivo com a mesma soma de verificação, portanto, essa técnica não pode se proteger contra algumas formas de violação maliciosa. Além disso, em alguns casos, a soma de verificação não é confiável (por exemplo, se foi obtida no mesmo canal que o arquivo baixado); nesse caso, o MD5 pode fornecer apenas a funcionalidade de verificação de erros: reconhecerá um download corrompido ou incompleto, o que se torna mais provável ao baixar arquivos maiores.

Eu recomendaria o uso do sha1 para calcular a soma de verificação, pois a produção de colisões não é tão fácil ao usar os algoritmos sha1 . Produzir a soma de verificação sha1 é bastante fácil, como você pode ver aqui .


NOTA: a pergunta é sobre a classificação de arquivos; a recomendação de uso sha1não é relevante para essa tarefa; só importa quando se preocupa com segurança .
Home
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.