Вероятность дублирования хэша при использовании первых 8 символов SHA1

Если у меня есть индекс URL-адресов и ID их первыми 8 символами хэша SHA1, какова вероятность того, что два разных URL-адреса будут иметь одинаковые идентификаторы?

2 ответов


@Teepeemm правильно ответил на связанный вопрос " учитывая определенную последовательность из 8 шестнадцатеричных цифр, какова вероятность появления другого хэша SHA-1 с же 8 цифр?- Их очень мало.

что поставлено на карту в этом вопросе, однако, является разные вопрос: "учитывая большое количество последовательностей из 8 шестнадцатизначных чисел, какова вероятность того, что любые два из них будут одинаковыми?"Как указывает первый комментарий к вопросу, это связано к парадокс дней рождения, который не ‘каковы шансы, что кто-то в комнате будет иметь тот же день рождения, что и я?но вместо этого: "каковы шансы любой два человека в этой комнате, имеющие один и тот же день рождения?"Как достаточно хорошо известно, вероятность этого составляет 50% только с 23 людьми.

проблема хэш-столкновения по существу та же проблема, но обобщенная из N=365 дней N=16^8 8-байтовые последовательности, о 4.30e9. Это "обобщенная проблема дня рождения". Используя приведенное там выражение (n=sqrt(2*d*ln(1/(1-p))), С d=4.30e9 и p=0.5, мы находим 50% шанс столкновения только с 77000 испытаний. Если вы построите соответствующую функцию, вы увидите, что вероятность увеличивается довольно быстро по мере увеличения числа испытаний.

даже с 16 байтами хэша (so d=16^16) вероятность столкновения 50% после всего лишь 5 миллиардов испытаний.

с Днем рождения!


хэш SHA-1 имеет 40 базовых-16 цифр. Если вы смотрите только на первые 8 из них, то вероятность того, что второй url имеет те же 8 цифр, равна (1/16)^8 ~ 2.32e-10. На самом деле, это не зависит от того, что есть 40 цифр для начала, или даже что это SHA-1. Единственное предположение, которое вам нужно,-это то, что SHA-1 имеет первые 8 цифр, независимых и одинаково распределенных.