Предположим, что хеш-функция производит дайджесты из 160 бит. Сколько сообщений нам нужно хэшировать, чтобы получить коллизию с вероятностью примерно 75%?
Спасибо за помощь :)
Предположим, что хеш-функция производит дайджесты из 160 бит. Сколько сообщений нам нужно хэшировать, чтобы получить коллизию с вероятностью примерно 75%?
Спасибо за помощь :)
Эмпирическое правило заключается в том, что вероятность столкновения составляет 50 % после того, как выпадет sqrt(n)
число. Число немного больше, чем это, но квадратный корень является хорошим ориентиром. Таким образом, в вашем случае у вас есть 50% вероятность столкновения после 2 ^ 80 попыток.
Другое эмпирическое правило заключается в том, что после 4*sqrt(n)
ваша вероятность получить дубликат почти не вызывает сомнений.
Согласно https://en.wikipedia.org/wiki/Birthday_problem#Cast_as_a_collision_problem, вы можете вычислить количество, n
значений, которые вам нужно нарисовать, чтобы получить вероятность p
дубликата:
n = sqrt(2 * d * ln(1/(1-p)))
Где ln
— натуральный логарифм, а p
— вероятность от 0 до 1,0.
Итак, в вашем случае:
n = sqrt(2 * 2^160 * ln(1/.25))
n = sqrt(2^161 * 1.38629)
Что-то меньше, чем 2 ^ 81.
Где-то в диапазоне 2 septillion
. Это 2 000 000 000 000 000 000 000 000 сообщений. Вот уравнение.
chance of collision = 1 - e^(-n^2 / (2 * d))
Где n
— количество сообщений, d
— количество возможностей. Итак, если d
равно 2^160
, то n
будет рядом с 2^80.7
.