Усечение хеша md5, Как я вычисляю разногласия появления коллизии?

Я хочу усечь хеш md5 приблизительно к половине размера. Насколько это увеличивает разногласия коллизий? если я имею дело приблизительно с 500 000 поколений, я должен быть взволнован по поводу коллизии? что относительно поколений на 1 м.

18
задан Cœur 16 April 2017 в 08:43
поделиться

2 ответа

Также

вместо .faseIn () можно .animate ({непрозрачность: 1})
и вместо .feyOut () можно .animate ({непрозрачность:0})

-121--952079-

Я предлагаю разрешить PostGreSQL возвращать набор в любом произвольном порядке (тем более, что с помощью интерфейса Django сложно осуществлять детализированное управление SQL-уровнем), затем отсортировать его в нужном пути в Python -- theresultset.sort(key = yourlistofids.index) должно быть хорошо (когда theresultset - список произвольного порядка, полученный из базы данных, и yurlistofids - список, порядок которого вы хотите сохранить).

-121--4950566-

Существует интересная математическая задача, называемая проблемой дня рождения , которая касается такого рода ситуации. Дело в том, что чем больше записей вы вталкиваете, тем выше шансы на столкновение.

Следуя таблице, размещенной на вышеуказанной ссылке, предполагая, что ваши дайджесты составляют 64 бит каждый (так как один хеш MD5 равен 128 битам) и что MD5 имеют равномерное распределение, существует очень низкая вероятность того, что два хеша столкнутся. Это становится значительным (1% вероятность или более) при 610 000 000 записей.

1
ответ дан 30 November 2019 в 09:14
поделиться

Математика, которую вы ищете, находится на странице атаки на день рождения в Википедии.

Рассмотрим следующий эксперимент. Из набора значений H мы выбираем n значений равномерно и случайным образом, что позволяет повторять их. Пусть p (n; H) будет вероятностью того, что во время этого эксперимента хотя бы одно значение будет выбрано более одного раза. Эта вероятность может быть приблизительно равна

p(n;H) ~= 1-e^(-n^2/(2H))

При 128 битах вероятность конфликта между 500 000 хеш-значений составляет около 10 -28 . Если вы уменьшите вдвое размер пространства столкновений, то вероятность столкновения составит около 10 -9 . То есть, даже несмотря на то, что шанс значительно выше, он все еще очень и очень низок. Это зависит от того, насколько критично отсутствие столкновений. 10 -9 составляет порядка одного на миллиард, поэтому, хотя и крайне маловероятно, это вполне возможно.

Для справки:

10 28 = 10 октиллионов = 10 миллиардов миллиардов миллиардов
10 9 = 1 миллиард

{{1 }}
15
ответ дан 30 November 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: