Каковы шансы, что два сообщения имеют один и тот же дайджест MD5 и один и тот же дайджест SHA1?

Учитывая два разных сообщения, A и B (возможно, 20-80 символов текста, если размер вообще имеет значение), какова вероятность того, что дайджест MD5 для A совпадает с дайджестом MD5 для B и дайджест SHA1 для A совпадает с дайджестом SHA1 для B? Это:

(MD5(A) == MD5(B)) && (SHA1(A) == SHA1(B))

Предполагать отсутствие злого умысла, т.е. что сообщения не выбираются с целью обнаружения конфликта. Я просто хочу знать шансы, что это произойдет естественным образом.

Я думаю, что шансы «астрономически низки», но я не знаю, как это проверить.

Подробнее: размер пула возможных сообщений ограничен, но велик (несколько сотен миллионов). Парадокс в днях рождения - вот что меня беспокоит.


person John Siracusa    schedule 24.08.2009    source источник
comment
вопрос действительно не имеет смысла. SHA-1 сильнее, чем MD5, поэтому вероятность любого конфликта для SHA-1 в любом случае ниже ....   -  person Mitch Wheat    schedule 24.08.2009
comment
@Mitch, и вероятность того, что оба будут конфликтовать для данного сообщения, меньше, чем вероятность того, что любое из них столкнется.   -  person Sinan Ünür    schedule 24.08.2009
comment
@Sinan Ünür: Очевидно, и ваша точка зрения была?   -  person Mitch Wheat    schedule 24.08.2009
comment
Я думаю, что его точка зрения заключается в том, что причина, по которой OP использует оба, состоит в том, чтобы еще больше снизить вероятность столкновения - если есть столкновение в MD5, есть надежда, что не будет столкновения с другим алгоритмом SHA-1. Не нужно быть придирчивым.   -  person ceejayoz    schedule 24.08.2009
comment
Ага! Почему вы так меняете характер вопроса?   -  person Welbog    schedule 24.08.2009
comment
См. Правку в моем ответе для анализа с использованием парадокса дня рождения в качестве руководства.   -  person Welbog    schedule 24.08.2009
comment
Если цель состоит в том, чтобы уменьшить вероятность столкновения, просто используйте систему хеширования, которая генерирует больший дайджест. Как SHA-256, SHA-384 или SHA-512.   -  person Fantius    schedule 24.08.2009
comment
@fantius Проблема МОЖЕТ быть (в зависимости от приложения) в том, что SHA-256, SHA-384, SHA-512 1) занимает больше времени для вычисления, 2) результирующие хэши занимают больше места, чем объединение MD5 и SHA-1, и / или 3) В развернутой системе есть оборудование для MD5 и SHA-1, но нет других. Это очень актуальный вопрос.   -  person H. Green    schedule 12.02.2010
comment
Хороший способ дальнейшего улучшения дайджеста - вы можете рассмотреть возможность использования одной относительно дорогой контрольной суммы (SHA!) И размера файла. Вероятность конфликта хэша SHA может возникнуть в 2 файлах одинакового размера, но разное содержимое минимально.   -  person Daniel Farrell    schedule 31.12.2013


Ответы (5)


Предполагая равномерное распространение в диапазоне хэшей MD5 и SHA-1 для случайных строк (что не так), и предполагая, что мы говорим только о двух строках, а не о пуле строк (поэтому мы избегаем парадокса дня рождения -типные сложности):

Хэш MD5 имеет ширину 128 бит, а SHA-1 - 160. С приведенными выше предположениями две строки A и B имеют вероятность столкновения P, если оба хэша конфликтуют. Так

P(both collide) = P(MD5 collides) * P(SHA-1 collides)

И

P(MD5 collides) = 1/(2^128)
P(SHA-1 collides) = 1/(2^160)

So

P(both) = 2^-128 * 2^-160 = 2^-288 ~= 2.01 x 10^-87

Опять же, если у вас есть пул строк и вы пытаетесь определить вероятности столкновений с пулом, вы находитесь в домене парадокс дня рождения, и эта вероятность, которую я рассчитал здесь, неприменима. Это и хэши не так единообразны, как должны быть. На самом деле у вас будет гораздо более высокая частота столкновений, но она все равно будет крошечной.


ИЗМЕНИТЬ

Поскольку вы имеете дело с парадоксом дня рождения, примените ту же логику, что и решение парадокса дня рождения. Давайте посмотрим на это с точки зрения всего одной хеш-функции:

N := the number of hashes in your pool (several hundred million)
S := the size of your hash space (2^288)
Therefore,
P(There are no collisions) = (S!)/(S^N * (S - N)!)

Давайте представим, что у нас есть хорошее четное количество хешей, например 2 ^ 29 (примерно 530 миллионов).

P = (2^288!)/(2^288^(2^29) * (2^288 - 2^29)!)

Короче, я даже не хочу думать о вычислении этого числа. Я даже не знаю, как это можно оценить. Вам, по крайней мере, понадобится калькулятор произвольной точности, который может обрабатывать огромные факториалы, не умирая.

Обратите внимание, что вероятности будут следовать кривой, которая начинается почти с 0, когда N = 1 or 2, и достигает 1, когда N >= 2^288, по форме похожая на ту, что на странице Википедии для парадокса дня рождения.

Парадокс дня рождения достигает P = .5, когда N = 23. Другими словами, вероятность столкновения составляет 50%, когда N равно 6% от S. Если это масштабируется (я не уверен, что это так), это означает, что вероятность столкновения будет 50%, когда 6% от 2 ^ 288 хешей. 6% от 2 ^ 288 составляет около 2 ^ 284. Ваше значение N (несколько сотен миллионов) и близко не к этому. Это практически несущественно по сравнению с вашим S, поэтому не думаю, что вам есть о чем беспокоиться. Столкновения маловероятны.

person Welbog    schedule 24.08.2009
comment
Есть еще одно предположение: коллизии в MD5 и SHA1 независимы. То есть, эти два алгоритма ведут себя достаточно по-разному, чтобы пара строк, которые сталкиваются в MD5, не более вероятно, чем обычно, столкнутся в SHA1. Я думаю, что это безопасное предположение, даже несмотря на то, что два алгоритма имеют схожий дизайн. - person Beta; 24.08.2009
comment
Просто чтобы расширить заявление Беты. Анализ Велбога следует рассматривать как теоретический нижний предел, фактическая вероятность гарантированно будет больше или равна этому пределу. Найти реальную истинную вероятность криптографически сложно, вам фактически придется полностью взломать MD5 и SHA-1, чтобы доказать реальную вероятность. - person Greg Miller; 25.08.2009
comment
re: последний абзац: он не масштабируется линейно. Парадокс дня рождения P = .5 выглядит примерно как sqrt (S), хотя я не могу найти авторитетную ссылку, в которой говорится об этом. - person Jason S; 25.08.2009
comment
Даже если это sqrt (S), 2 ^ 29 все равно несущественно по сравнению с 2 ^ 144. Но я согласен с тем, что это, вероятно, не линейно. - person Welbog; 25.08.2009
comment
@Beta не только не более, но и не менее вероятно. - person chacham15; 07.11.2012
comment
Я думаю, что в приведенной выше ссылке на Wolfram Alpha отсутствуют некоторые круглые скобки. Сложив их, кажется, что даже Wolfram Alpha не может вычислить: wolframalpha.com/input/ * +% 282% 5E288 + - + 2% 5E29% 29!% 29 за исключением того, что я не могу выяснить, как закодировать эту ссылку для SO. - person ScottJ; 03.01.2013
comment
Вероятности здесь кажутся ошибочными. Согласно [1], вероятность SHA1 равна 2. ^ -69 для столкновения через дневную атаку. Точно так же вероятность коллизии для MD5 для двух блоков составляет 2 ^ -18 согласно [2 ]. Эти числа сильно отличаются от того, что было использовано в ответе Велбога. Наконец, следует отметить, что это другой вопрос, но, возможно, отчасти связанный с вопросом о силе комбинированного хэша MD5 + SHA1 (подсказка: = ~ SHA1). - person Greg Slepak; 11.04.2014
comment
Это, конечно, с более чем двумя сообщениями (для атаки bday). Исходя из математики Велбога (если она верна), нам нужно вычислить количество сообщений, необходимых для 50% вероятности столкновения. Мы берем S = 2^(69*2+18*2) = 2^174, тогда 6% из них составляют 2 ^ 169 сообщений (в отличие от 2 ^ 284) или 1.4e51 сообщений. При 1 КБ / сообщение это ~ 10 ^ 42 ТБ. Это все равно больше данных, чем у нас есть на жестких дисках (я думаю). - person Greg Slepak; 11.04.2014
comment
Еще немного поиграя с этим, давайте проигнорируем дисковое пространство. Начиная с 2 ^ 169 сообщений для просмотра, давайте применим к этому хешрейту текущей сети биткойн 46626,93 TH / sec проблема. Биткойн использует SHA256, давайте приблизим это и предположим, что скорость была бы вдвое выше, если бы они использовали SHA1. Тогда через wolframalpha у нас есть (2 ^ 169 / (2 * 46626.93 * 10 ^ 12)) секунд в годах ~ = 2,5e26 лет, чтобы найти коллизию. Так что все еще в безопасности (если я не напортачил). - person Greg Slepak; 11.04.2014
comment
Теперь это было использование 6% S. Если мы используем sqrt S, это 2 ^ 87 сообщений, это на несколько порядков отличается. Джейсон С. попросил справку, здесь один. Допустим, это точное приближение, и повторим вычисления: (2 ^ 87 / (2 * 46626.93 * 10 ^ 12)) секунд в годах ~ = 52 года для атаки в день рождения ( 50% коллизий с 2 ​​^ 87 сообщениями). - person Greg Slepak; 11.04.2014
comment
Учитывая вышеизложенное, ясно, что коллизии могут быть обнаружены очень быстро (намного быстрее, чем за 52 года, показанные выше) с помощью суперкомпьютера, который производит коллизии как в SHA1, так и в MD5 из множества сообщений. Однако найти конфликт для конкретного сообщения на порядки труднее. - person Greg Slepak; 11.04.2014
comment
Похоже, это на самом деле 2 ^ 61 для SHA1. Так что на самом деле это 2 ^ 61 * 2 ^ 18 = 2 ^ 79 сообщений. Это помещает фактический ответ (для атак в день рождения) в очень разумные сроки (пара месяцев и сокращается каждый год) для суперкомпьютеров. - person Greg Slepak; 12.04.2014

добавление к сообщению Велбога:

Отношения больших факториалов можно вычислить без использования арифметики произвольной точности с помощью приближения Стирлинга :

п! sqrt (2n) * (н / д) н

Итак (S!) / (S ^ N * (S - N)!) Sqrt (2S) / sqrt (2 (SN)) * (S / e) S / ((SN) / д) SN / S N

= sqrt (S / (S-N)) * (S / (S-N)) S-N * e -N

= sqrt (1 +) * (1 +) S-N * e -N, где = N / (S-N) мало.

Приближение (1 + a / n) nx e ax выполняется как n (или, по крайней мере, становится очень большим)

** так что это означает (1+ (N / (S-N))) S-N e N для S-N >> N.

Так что я ожидал, что

(S!) / (S ^ N * (S - N)!) Sqrt (1 + N / (SN)) * e N * e -N = sqrt (1 + N / (SN)) для SN >> N ....

за исключением того, что это больше 1 ... поэтому одного из приближений недостаточно. :п

(** предостережение: значение N / S должно быть небольшим: для N = 22, S = 365 это значение вдвое меньше)

person Jason S    schedule 24.08.2009
comment
черт возьми, вы все время голосуете за меня, когда я делаю опечатки! - person Jason S; 25.08.2009

Если размер сообщения не ограничен, вероятность асимптотически приближается к 100%, поскольку существует бесконечное количество возможных сообщений и конечное количество возможных хэшей.

(примечание: редактирование вопроса делает этот вопрос менее актуальным)

person ceejayoz    schedule 24.08.2009
comment
Нет. Независимо от размера сообщения, оно все равно хешируется в один хэш MD5 + SHA1. - person Captain Segfault; 24.08.2009
comment
Вы упускаете суть. Существует ограниченное количество возможных хешей, так как они имеют конечную длину. Количество сообщений неограниченное. Бесконечные сообщения плюс конечные хэши означают бесконечные конфликты. - person ceejayoz; 24.08.2009
comment
На самом деле, я думаю, что Сиджайоз упускает из виду суть. В вопросе говорится: Дополнительная информация: размер пула возможных сообщений ограничен, но велик (несколько сотен миллионов). Это не то же самое, что бесконечность. - person Fantius; 24.08.2009
comment
@fantius Вопрос отредактирован. Я даже сделал пометку в этом ответе, указав на это за 19 минут до того, как вы прокомментировали. - person ceejayoz; 24.08.2009
comment
Окей, прости. Я собирался, основываясь на времени вашего последнего комментария, которое было после времени редактирования вопроса. - person Fantius; 24.08.2009
comment
ceejayoz, я думаю, эта путаница возникла из-за того, что вы указали размер сообщения, когда имели в виду количество сообщений. - person Beta; 24.08.2009
comment
Если размер сообщения не ограничен, количество сообщений в результате не ограничено, так как я могу делать сообщения, сообщения, сообщения, сообщения и т. Д. Бесконечный размер сообщения логически ведет к бесконечному количеству сообщений. - person ceejayoz; 24.08.2009

Обычно, когда выбирают N элементов случайным образом, легче вычислить ожидаемое количество столкновений, чем вероятность столкновения. Поскольку ожидаемое количество столкновений не может быть меньше вероятности столкновения, его часто можно использовать в качестве подходящей верхней границы.

Предположим, что p - это вероятность столкновения двух случайно выбранных элементов. Если мы выберем N случайных элементов, то будет N * (N-1) / 2 пары элементов, и, следовательно, ожидаемое количество столкновений будет

p * N * (N-1)/2.

Например, если мы предположим, что вероятность коллизии для MD5 и SHA1 равна p = 2 -288, то даже после случайного выбора 2 100 элементов мы все равно ожидаем только около 2 -89 коллизий.

Другой пример: если мы выберем 2 30 случайных элементов и вычислим только MD5. Предполагая, что коллизия между двумя хешами MD5 равна p = 2 -128, это дает ожидаемое число 2 -59 для количества коллизий. Следовательно, даже вероятность того, что хэш MD5 столкнется для двух входов, уже очень мала.

person Accipitridae    schedule 26.08.2009

Выбранный ответ неверен, потому что он использует неверные вероятности. Я потратил значительную часть сегодняшнего дня, исследуя это (вы можете увидеть мой мыслительный процесс в комментариях к этому ответу), и считаю, что фактический ответ следующий (для атаки на день рождения, состоящей из сообщений немного большего размера, чем те, о которых вы говорите) :

2 ^ -61 * 2 ^ -18 = столкновение один раз из 2 ^ 79.

И это, если можно просто умножить эти вероятности (я в этом не уверен).

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

Обратите внимание, что это основано на достаточно больших пулах сообщений (чтобы сделать парадокс дня рождения значимым). Это также тот сценарий, который, как вы сказали, вас беспокоит.

Теперь другая ситуация - обнаружение коллизии для пары хэшей (SHA1 и MD5) определенного сообщения. Это выводит вас за пределы территории дневного парадокса, и это на порядки труднее. Я не уверен, что это 2 ^ (- 61 * 2) * 2 ^ (- 18 * 2) или что-то еще. Если кто-нибудь знает, что это такое, оставьте комментарий к этому ответу (мы будем очень признательны!)

Теперь вы спросите:

Учитывая два разных сообщения, A и B (возможно, 20-80 символов текста, если размер вообще имеет значение)

Да, размер имеет значение. Щелкните ссылку на цифру 2 ^ -18, и вы увидите, что это значение для двух входных блоков. В MD5 входной блок составляет 512 байт. 20-80 символов текста для этого слишком мало, а значение одного блока составляет 2 ^ 41.

Таким образом, для этого количества данных вы получите 2 ^ -61 (я думаю) * 2 ^ -41 = 2 ^ -102.

Так что для этого размера это кажется безопасным (ссылка содержит показатель удвоенного текущего хешрейта биткойна SHA256: 46626,93 TH / sec).

person Greg Slepak    schedule 12.04.2014