Это может быть огромной проблемой в вашем случае, так как существует идентичная коллизия префиксов в MD5;
|идентичный префикс | свободная часть файла A | идентичный суффикс |
|идентичный префикс | свободная часть файла B | идентичный суффикс |
^
у них есть столкновение здесь | остальное то же самое
Хотя сегодня обнаружение коллизии для MD5 очень просто, когда злоумышленник может контролировать средний блок MD5, вероятность этого может уменьшиться, если файлы не являются произвольными, поскольку это даст атаке меньше возможных кандидатов для коллизии.
В вашем случае злоумышленника нет, и вы ищете неконтролируемое столкновение. В системах контроля версий файлы с большим количеством правок могут попадать в пул возможных сценариев коллизий, с одинаковым префиксом, некоторыми измененными частями и идентичным суффиксом. Ваша главная проблема будет заключаться в том, чтобы определить, какую часть тестировать; только второй блок (MD5 имеет 512-битные блоки) или только третий блок или второй и третий блок...
Зачем возиться с MD5 и проводить вторичную проверку, если у нас есть лучшие и более быстрые альтернативы.
- БЛЕЙК2 был самым быстрым сейчас БЛЕЙК3 что еще быстрее. BLAKE2 ~ в 2 раза и BLAKE3 ~ в 9 раз быстрее, чем MD5. Используйте BLAKE2/3 с 512-битным выходом и $2^{256}$-временная устойчивость к столкновениям; поэтому создание столкновения вычислительно невозможно.
- ША-512 который имеет почти ту же скорость, что и MD5, и может гарантировать гораздо лучшую устойчивость к столкновениям, с которой MD5 никоим образом не может сравниться.
заключение Корками;
Убить MD5!
Не используйте MD5, если вы активно не проверяете файлы на наличие дефектов или коллизий!
Это не криптографический хеш, это игрушечная функция!