Являются ли фрагменты хешей устойчивыми к столкновениям? - PullRequest
3 голосов
/ 01 мая 2010

Если вы используете только первые 4 байта хеша MD5, будет ли это теоретически означать только 1 из 255 ^ 4 шансов на столкновение? То есть, хэши спроектированы так, что вам нужно использовать только небольшую часть возвращенного хэша (скажем, хэш файла некоторого размера)?

Ответы [ 5 ]

6 голосов
/ 01 мая 2010

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

2 голосов
/ 03 мая 2010

256, а не 255.

Если предположить, что MD5 является безопасной хеш-функцией (оказывается, она не безопасна, но, ради обсуждения, давайте предположим, что она безопасна), то она должна вести себя как Случайный оракул , мифический объект, который выводит равномерно случайные значения при единственном ограничении, что он «запоминает» свои предыдущие выходные данные и возвращает то же самое значение снова, учитывая тот же самый вход.

Усечение вывода случайного оракула приводит к другому случайному оракулу. Таким образом, если вы сохраняете 32 бита, то вероятность коллизии с двумя различными входными сообщениями равна 1 в 2 ^ 32 (т.е. 1 в 256 ^ 4).

Теперь есть вещь, известная как парадокс дня рождения , который говорит, что, имея около 2 ^ 16 различных входов, есть хорошие шансы, что два из 2 ^ 16 соответствующих выходов столкнутся.

Было показано, что MD5 небезопасен для некоторых целей, в частности для всего, что связано со столкновениями. Текущая рекомендация по умолчанию: SHA-2 (семейство из четырех функций с размерами вывода 224, 256, 384 и 512 бит соответственно). Новый (американский) стандарт в настоящее время определяется в открытом конкурсе под кодовым названием SHA-3 . Это долгий процесс; новая функция должна быть выбрана к середине 2012 года. Некоторые из оставшихся кандидатов (в настоящее время 14 из 51) значительно быстрее, чем SHA-2, некоторые приближаются к производительности MD5, но при этом значительно более безопасны. Но это немного ново, поэтому сейчас вы должны использовать SHA-2 по умолчанию.

1 голос
/ 03 мая 2010

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

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

fdadda221fd71619e6c0139730b012577dd4de90

fdadda221fd71619e6c/0139730b012577dd4de90

fdad/da22/1fd7/1619/e6c0/1397/30b0/1257/7dd4/de90
1 голос
/ 01 мая 2010

Предположим, у нас есть заранее определенное сообщение1. hash1 = md5 (message1)

Теперь выберите сообщение2 случайным образом и установите hash2 = md5 (message2).

Теоретически существует вероятность 1/255 ^ 4 того, что первые четыре символа hash2 соответствуют первым четырем предварительно определенным hash1.

Также предполагается, что злоумышленнику, который знает message1, будет очень трудно найти другое сообщение2 с таким же хешем. Это называется вторым сопротивлением перед изображением. Тем не менее, даже с полной версией MD5 атаки лучше, чем теоретические, перед имиджем.

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

0 голосов
/ 01 мая 2010

Зависит от цели хеширования.

Хеш-функции для использования в хеш-таблицах, как правило, имеют большую «случайность» в младших битах (которые используются для поиска индекса массива), чем в старших битах. Контрольная сумма и криптографические хеш-функции распределены более равномерно.

...