Можно ли получить один и тот же хэш из разных данных
Вот такой вопрос неожиданно у меня возник.
(Напомню, что хэш данных это кагбэ символьное имя определённой длины, получаемое из самих данных. Из одинаковых данных получается одинаковое имя, другие свойства хэша нам пока не интересны)
Ну теоретически, конечно, возможно, что один и тот же хэш получится из слова password12345 и из гифки с Риком Эшли и ещё из файла, хранящего жесткий диск моей виртуальной машины. Но насколько вероятно, что два объекта получат один и тот же хэш, если речь идёт, например, о MD5. Попробуем это оценить.
Объём всех данных в интернете на 2024 год неизвестен. Но очень грубо можно предположить цифру между 150 и 250 зеттабайт. Переводя 250Z в биты получим 2 x 10^24 битов. Если предположить, что каждый бит в интернете - уникальный и назначать им хэши подряд, начиная с нуля, - нам понадобится 2 x 10^24 хэшей. Т.е. последний хэш, если использовать количество разрядов как в MD5, будет выглядеть примерно так ->
000000000001a784379d99db41fedcba
Алгоритм хеширования MD5 имеет в своём распоряжении примерно 3.4 x 10^38 хэшей. Вероятность получить заданный конкретный хэш = 1 / ( 3.4 x 10^38),
а вероятность получить хэш занятый одним из битов интернета - в (2 x 10^24) раз больше, т.е.
примерно 0.6 / (10^14). Насколько велика эта вероятность?
Если бросать монету, то вероятность невыбросить решку:
с первого раза = 0.5,
c двух раз = 0.5^2 = 0.25
не буду утомлять вас логарифмами, но:
c 47-ми раз = 0.71 / (10^14)
Другими словами, вероятнее что вы не выбросите решку с 47-ми попыток, нежели то, что новый MD5 совпадёт с каким-то MD5 из числа уникальных для каждого бита интернета.