Могут ли два разных файла прошивки иметь одинаковую сумму md5?
Могут ли два разных бинарных файла иметь одинаковую сумму md5? Один двоичный файл прошивки имеет другой номер версии и помечен как исправленный, исправлена небольшая ошибка. Но оба файла имеют одинаковую сумму md5, я предполагаю, что пересмотренный файл не может иметь одинаковую сумму md5 - может ли это быть ошибкой?
6 ответов
То, на что не могут указать существующие ответы, - это то, почему столкновение в этом случае считается невероятно маловероятным.
MD5, как и любой алгоритм хеширования, был специально разработан таким образом, чтобы не произошло столкновения, если вы просто измените несколько символов. Вы должны изменить большинство, если не все из них, чтобы вернуться к тому же хешу. Это связано с тем, что весь смысл хэша состоит в обнаружении однобитовых (или битовых) ошибок; в этой проблемной области вы хотите, чтобы небольшие изменения определенно вызывали изменение хеша. Хотя мы знаем, что MD5 ошибочен, это свойство сохраняется и по сей день.
Таким образом, если новая версия прошивки не будет полностью другой, и если вы просто не стали свидетелем явления раз в миллион, велики шансы, что вы просто снова получили старую версию. Поздравляем, потому что это процесс проверки хеша, работающий точно так, как задумано.:)
Как правило, два файла могут иметь одинаковые 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 бит.
Но если вы работали в АНБ, то, вероятно, вы это уже знали.
Очень маловероятно, но возможно. Проверьте размер файла и даты для получения дополнительной информации. Если файлы различаются, было бы еще менее вероятно, что они будут иметь одинаковый размер и хэш.