Насколько уникальны контрольные суммы?


11

У меня много файлов, которые мне нужно отсортировать; и, к сожалению, есть много файлов с одним и тем же именем, но разным содержимым, и есть один и тот же контент с разными именами файлов.

Я думаю об использовании md5sumдля генерации контрольных сумм для файлов, но мне нужно знать - возможно ли, что два разных файла (т.е. разное содержимое) будут генерировать одну и ту же контрольную сумму?

Если это так, то насколько вероятно, что это произойдет?

Можно ли использовать две разные несвязанные (т.е. не принадлежащие к одной и той же «семье») программы контрольных сумм для генерации двух контрольных сумм - при условии, что два разных файла могут генерировать одинаковую контрольную сумму для любой из программ контрольных сумм, это никогда не случится с обоими сразу?


2
Помните, что md5 / sha2 / etc - это HASH данных, который отображает много битов информации на меньшее битовое пространство, поэтому, возможно, могут возникнуть коллизии. Хэш не является уникальным ключом, и если это ваша цель ... Я настоятельно рекомендую сделать что-то еще.
MDPC

Для сортировки файлов хорошо подходит MD5. С сайта crypto.stackexchange.com/a/18337/49945 вероятность коллизии контрольной суммы двух разных содержимого составляет 1 на 2 ^ 128, что составляет примерно 1 на 10 ^ 43. Это действительно очень редко. Если вы проводите одно сравнение в микросекунду, в среднем вы будете получать столкновение один раз в 10 ^ 20 лет. Со времени Большого взрыва прошло всего ~ 10 ^ 9 лет, поэтому вероятность столкновения, которое произошло ДАЖЕ ОДИН РАЗ, за одну микросекунду от Большого взрыва до сих пор составляет всего 1 к 10 ^ 11. При наличии ста миллиардов одновременных компьютеров только один мог бы столкнуться.
ToolmakerSteve

... хотя не ясно, почему вы используете любой алгоритм хеширования при сортировке файлов. Если есть файлы с одинаковым именем, они должны быть идентифицируемы по некоторым другим критериям; например, должен быть какой-то уникальный путь к файлу или, возможно, смещение в байтах в некотором устройстве хранения? Любой из них был бы более полезным способом уникальной ссылки на файл.
ToolmakerSteve

Ответы:


11

Два файла с одинаковым содержимым, но разными именами файлов: ( file1 и file2 ):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2

Два файла с различным содержанием, но одинаковыми именами файлов: ( file1 и file1 )

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

Из вики ,

Однако очень маловероятно, что любые два неидентичных файла в реальном мире будут иметь одинаковый хэш MD5, если только они не были специально созданы для того, чтобы иметь одинаковый хеш.

Но алгоритм MD5 имеет свои недостатки.

Однако теперь, когда генерировать коллизии MD5 легко, пользователь, создавший файл, может создать второй файл с той же контрольной суммой, поэтому этот метод не может защитить от некоторых форм злонамеренного вмешательства. Кроме того, в некоторых случаях контрольной сумме нельзя доверять (например, если она была получена по тому же каналу, что и загруженный файл), и в этом случае MD5 может предоставлять только функции проверки ошибок: он распознает поврежденную или неполную загрузку, что становится более вероятным при загрузке больших файлов.

Я бы порекомендовал использовать sha1 для вычисления контрольной суммы, поскольку создание коллизий не так просто при использовании алгоритмов sha1 . Создание контрольной суммы sha1 довольно просто, как вы можете видеть здесь .


ПРИМЕЧАНИЕ: речь идет о сортировке файлов; рекомендация использовать sha1не относится к этой задаче; это имеет значение только тогда, когда дело касается безопасности .
ToolmakerSteve
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.