Почему в некоторых случаях вместо первых используются только первые x символов хэша md5? - PullRequest
1 голос
/ 02 декабря 2011

Например, список коммитов на GitHub показывает только первые 10, или эту строку из tornadoweb, которая использует только 5

return static_url_prefix + path + "?v=" + hashes[abs_path][:5]

Достаточно ли только первых 5 символов, чтобы убедиться, что 2 разных хеша для 2 разных файлов не будут конфликтовать?

LE: В приведенном выше примере от tornadoweb хеш md5 используется для генерации строки запроса для статического кеширования файлов.

1 Ответ

4 голосов
/ 02 декабря 2011

В общем, нет.

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

Но иногда вы можете сойти с рук.

Я не совсем уверен, каков контекстконкретный пример, который вы предоставили.Однако, чтобы ответить на ваш более общий вопрос, если нет плохих парней, активно пытающихся вызвать коллизии, то, вероятно, можно использовать часть хэша.В частности, учитывая 5 шестнадцатеричных символов (20 бит), вы не будете ожидать коллизий, пока не будет хэшировано около 2 ^ (20/2) = 2 ^ 10 ~ тысячи значений.Это является следствием парадокса дня рождения .

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

...