Рейтинг:1

Предотвращение коллизии MD5 с вторичными частичными хэшами

флаг cn

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

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

Какие проблемы с этим подходом уже можно предвидеть?

bk2204 avatar
флаг fr
Пожалуйста, не используйте MD5 или даже SHA-1 для этой цели (или любой другой цели). Git недавно добавил поддержку SHA-256 именно потому, что два других ужасны, и, как предложил kelalaka, BLAKE2, BLAKE3 или SHA-2 — отличный выбор.
Рейтинг:3
флаг in

Это может быть огромной проблемой в вашем случае, так как существует идентичная коллизия префиксов в 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, если вы активно не проверяете файлы на наличие дефектов или коллизий!

Это не криптографический хеш, это игрушечная функция!

kelalaka avatar
флаг in
Что ж, [Git использовал SHA-1] (https://www.zdnet.com/article/linus-torvalds-on-sha-1-and-git-the-sky-isnt-falling/), а теперь [ они улучшают его] (https://github.blog/2021-09-01-improving-git-protocol-security-github/)
Morrolan avatar
флаг ng
Имейте в виду, что Git по умолчанию, и на самом деле единственное, что поддерживается основными хостами Git, такими как Github, — это *до сих пор* SHA1. См., например. [этот ответ] (https://stackoverflow.com/a/65874596). Эта вторая ваша ссылка о том, что Github отказывается от поддержки SHA1 в сочетании с SSH. То есть речь идет об одном виде транспорта, с помощью которого можно получить доступ к Git, а не о git как способе адресации контента.

Ответить или комментировать

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