Насколько вероятны ошибочные положительные контрольные суммы md5? - PullRequest
8 голосов
/ 08 февраля 2011

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

Однако они утверждают, что "часто" они сталкиваются с повреждением в файлах, где md5 все еще находитсяговоря, что файл хороший.

Все, что я прочитал, говорит о том, что это крайне маловероятно.

Это звучит правдоподобно?Будет ли другой алгоритм хеширования обеспечить лучшие результаты?Должен ли я на самом деле смотреть на проблемы с процессами, например, они утверждают, что проверяют контрольную сумму, но на самом деле не делают этого?

NB, я еще не знаю, что означает «часто» в этом контексте.Они обрабатывают сотни файлов в день.Я не знаю, происходит ли это ежедневно, ежемесячно или ежегодно.

Ответы [ 5 ]

10 голосов
/ 08 февраля 2011

MD5 - это 128-битная криптографическая хеш-функция, поэтому различные сообщения должны распределяться довольно хорошо по 128-битному пространству. Это будет означать, что два файла (исключая файлы, специально созданные для поражения MD5) должны иметь вероятность столкновения 1 к 2 ^ 128. Другими словами, если бы пара файлов сравнивалась каждую наносекунду, этого бы еще не произошло.

5 голосов
/ 08 февраля 2011

Звучит как ошибка в использовании MD5 (возможно, они используют MD5 для неверных файлов) или ошибка в используемой ими библиотеке. Например, старая программа MD5, которую я использовал однажды, не обрабатывает файлы размером более 2 ГБ.

Этот вопрос предполагает, что в среднем каждые 100 лет вы сталкиваетесь с коллизиями, если генерируете 6 миллиардов файлов в секунду, так что это маловероятно.

5 голосов
/ 08 февраля 2011

Если файл поврежден, то вероятность того, что поврежденный файл имеет такую ​​же контрольную сумму md5, что и не поврежденный файл, составляет 1: 2 ^ 128.Другими словами, это произойдет почти так же часто, как никогда.Астрономически более вероятно, что ваш клиент неверно сообщает о том, что действительно произошло (как будто он вычисляет неправильный хеш)

4 голосов
/ 08 февраля 2011

Вероятно ли это звучит?

Нет, вероятность случайного повреждения, вызвавшего такую ​​же контрольную сумму, составляет 1 в 2 128 или 3,40 × 10 38 .Это число ставит 1 в миллиардный (10 9 ) шанс позора.

Может ли другой алгоритм хеширования обеспечить лучшие результаты?

Наверное, нет.В то время как MD5 был сломан для защиты от столкновений против атаки, он отлично подходит для случайного повреждения и популярного стандарта для использования.

Должен ли я на самом деле смотреть на проблемы процесса, такие как утверждение о проверке контрольной суммыно на самом деле это не так?

Возможно, но рассмотрим все возможные проблемы:

  1. Файл поврежден до генерации MD5
  2. Файл поврежден после верификации MD5.
  3. В программе MD5 или в поддерживаемой платформе есть ошибка
  4. Злоупотребление оператором (непреднамеренное, например, запуск программы MD5 в неправильном файле)
  5. Злоупотребление оператором (преднамеренное, например, пропуск шага проверки)

ЕСЛИ это последний, то последняя мысль состоит в том, чтобы распространять файлы в формате обертки, который вынуждает оператора развернуть файл, но развертывание выполняет проверку во время извлечения.Я думаю о чем-то вроде Gzip или 7-Zip, который поддерживает большие файлы и, возможно, отключает сжатие (я не знаю, что они делают).

0 голосов
/ 25 июня 2013

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

...