Каковы шансы столкновения?
точная вероятность того, что n хэшей столкнутся с S общим количеством различных возможных хэшей:
(идеальное поведение хеш-функции, парадокс дня рождения, бла-бла-бла ...)
Вы не сможете вычислить это напрямую, поскольку это огромные числа, поэтому мы используем ограничения и делаем 2 предположения:
С этими двумя предположениями вероятность столкновения может быть вычислена с помощью:
Теперь вы можете вычислить вероятность столкновения для некоторого количества n записей. Это очень и очень точно для всего, что меньше 2 ^ 70 записей для sha1 (S = 2 ^ 160), чем хуже приближение, тем больше n подхода 2 ^ 80.
Пример
Например, если вы хотите сохранить огромное количество пользователей, в частности столько же, сколько человек в мире (~ 8 миллиардов), и вы используете sha1 (S = 2 ^ 160), вероятность столкновения будет 2,5e-29 (обратите внимание, что выполняются 2 предположения). Для справки: вероятность выиграть джекпот Euromillion составляет 7e-9 приблизительно.
Любопытство: что делать с большими (большими ?!) числами?
Вычислите предел напрямую без второго предположения.
Например, первое столкновение ожидается около квадратного корня из S (в случае sha1 n = 2 ^ 80). При этом значении второе условие не выполняется, но мы можем вычислить предел напрямую с помощью:
что составляет 40% ок. вероятности столкновения.
person
MrIo
schedule
06.11.2020