Могут ли два разных файла прошивки иметь одинаковую сумму md5?

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

6 ответов

Решение

То, на что не могут указать существующие ответы, - это то, почему столкновение в этом случае считается невероятно маловероятным.

MD5, как и любой алгоритм хеширования, был специально разработан таким образом, чтобы не произошло столкновения, если вы просто измените несколько символов. Вы должны изменить большинство, если не все из них, чтобы вернуться к тому же хешу. Это связано с тем, что весь смысл хэша состоит в обнаружении однобитовых (или битовых) ошибок; в этой проблемной области вы хотите, чтобы небольшие изменения определенно вызывали изменение хеша. Хотя мы знаем, что MD5 ошибочен, это свойство сохраняется и по сей день.

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

Конечно. Уязвимость коллизий в MD5 хорошо известна (см. Crypto.SE, Wikipedia). Хотя это все еще маловероятное событие, это может быть сделано. Однако в вашем случае я бы заподозрил ошибку при копировании файлов.

Как правило, два файла могут иметь одинаковые md5 хеш, только если их содержимое точно такое же. Даже один бит вариации будет генерировать совершенно другое значение хеша.

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

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

Примеры старших битовых хэшей включают семейство хэшей SHA-2, особенно sha256, sha384, или же sha512 (который является лучшим.) Номер после sha указывает количество битов, которые генерирует соответствующий алгоритм хеширования.

Как уже говорили другие, конфликт MD5 гипотетически возможен, но крайне неправдоподобен (1 из 2^128 - это только 1 из 340 282 366 920 938 463 463 374 607 431 768 211 456), и вы, скорее всего, столкнетесь с ошибкой копирования файла.

Я бы порекомендовал сделать побитовое сравнение двух файлов, используя один из множества методов, описанных здесь: https://superuser.com/questions/125376/how-do-i-compare-binary-files-in-linux.

Или просто diff file1 file2 - и если вы не получите сообщение "Двоичные файлы file1 и file2 отличаются", файлы совпадают.

Все вышеприведенные ответы игнорируют самые важные детали:

Контрольная сумма MD5 определена так, чтобы иметь 128 бит. Это означает, что существует только 2^128 различных значений MD5. Сколько разных образов прошивок возможно? Ну, это зависит от того, насколько они велики, и от того, какой процент случайных байтовых последовательностей можно считать допустимой прошивкой. Однако есть вероятность, что существует более 2^128 возможных образов прошивок.

Гораздо больше, а это значит, что должны быть дубликаты.

Но вероятность того, что любой образ прошивки совпадет с данной контрольной суммой MD5, составляет всего 1 на 2^128, что очень мало.

ОЧЕНЬ маленький

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

Это случайно. Умышленно другой вопрос. Если вы работаете в АНБ, то 128 битов не будет достаточно, чтобы удовлетворить ваших боссов, а MD5 имеет известные уязвимости, которые делают его слабее 128 бит.

Но если вы работали в АНБ, то, вероятно, вы это уже знали.

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

Другие вопросы по тегам