Безопасно ли игнорировать возможность столкновений SHA на практике?


210

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

  • количество файлов
  • размер одного файла

Как далеко мы можем пойти, игнорируя эту возможность, предполагая, что она равна нулю?


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

Да, в этом случае, если вы сравниваете размеры файлов, вероятность резко уменьшается. Вы также можете использовать два алгоритма хеширования и объединить результаты. Тогда вероятность столкновения обоих одновременно уменьшается еще больше. Но вопрос в том, насколько «достаточно» безопасно? Может быть, нам нужны формула и цифры.
— Христо Христов

2
@ Христо Христов: если мы предположим, что хеш-ключ является псевдослучайным числом (что теоретически правильно), то один миллиард 128-битных ключей дает вероятность коллизии 2,9 * 10 ^ -30. Вы даже не можете назвать это «миниатюрным», это меньше, чем это;)
— Моджуба

3
@mojuba: еще лучше, он спрашивает о 256-битном хэше.
— Майкл Боргвардт

FWIW: система контроля версий GIT идентифицирует файлы по их содержанию SHA.
— snemarch

Ответы:


385

Обычный ответ звучит так: какова вероятность того, что астероид-изгой упадет на Землю в следующую секунду, уничтожив цивилизацию, как мы знаем, и убив несколько миллиардов человек? Можно утверждать, что любое несчастливое событие с вероятностью ниже, чем на самом деле, не очень важно.

Если у нас есть «идеальная» хэш - функция с выходными размером п , и мы имеем р сообщения в хэш (индивидуальная длина сообщения не имеет значения), то вероятность столкновения составляет около р 2 /2 п + 1 (это приближение , которое действителен для «малого» р , то есть существенно меньше, чем 2 н / 2 ). Например, с SHA-256 ( n = 256 ) и одного миллиарда сообщений ( p = 10 9 ) вероятность составляет около 4,3 * 10 -60. .

Космическая скала массового убийцы случается в среднем каждые 30 миллионов лет. Это приводит к вероятности того, что такое событие произойдет в следующую секунду, примерно до 10 -15 . Это 45 порядков более вероятно, чем столкновение SHA-256. Вкратце, если вы находите столкновения SHA-256 страшными, тогда ваши приоритеты неверны.

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

Конечно, все вышеперечисленное предполагает, что SHA-256 является «идеальной» хэш-функцией, что далеко не доказано. Тем не менее, SHA-256 кажется довольно надежным.


12
Это очень хороший ответ, спасибо! Но если в случае столкновения атомная электростанция взорвется, и это зависит от вас, рискнете ли вы? Если вы абсолютно правы, тогда мы можем пойти на риск, потому что вероятность гибели цивилизации на 45 порядков больше. Правильно?
— Христо Христов

46
@ Христо, я думаю, да, можно пойти на такой риск. Атомная электростанция уже имеет гораздо большую вероятность взрыва из-за других факторов, таких как механическая неисправность, человеческая ошибка при ее создании или ошибка оператора во время ее эксплуатации, и мы уже используем эти шансы. Если бы столкновения SHA-256 были единственными причинами ядерных инцидентов, мы бы почти наверняка имели бы их ровно ноль.
— Роман Старков

27
foxnews.com/science/2013/02/11/… Я бы начал думать о SHA512.
— Дастин Опря

37
Теперь я могу быть спокойным, зная, что, скорее всего, астероид уничтожит меня задолго до того, как я переживу столкновение SHA-256.
— AaronLS

10
Извините, вам не хватает так называемого «парадокса дня рождения». Лучше взгляните на «красивый стол», он не работает так, как вы думаете. Для цифр, которые я привожу в этой таблице, это будет значение «10 ^ 9» в столбце с надписью «4.3 * 10 ^ -60» и строке «128 бит» (но таблица не опускается ниже 10 ^ -18 ).
— Томас Порнин

47

Возможность коллизии зависит не от размера файлов, а только от их количества.

Это пример дня рождения парадокса . Страница Википедии дает оценку вероятности столкновения. Если вы запустите числа, вы увидите, что все жесткие диски, когда-либо созданные на Земле, не могут содержать достаточно файлов размером 1 МБ, чтобы получить вероятность столкновения даже 0,01% для SHA-256.

В принципе, вы можете просто игнорировать возможность.


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

11
@sharptooth: нет, я не искажаю ситуацию. Вероятность того, что вы и все, кого вы знаете, погибнут в результате дорожно-транспортного происшествия в один и тот же день, очень мала, но это все же может произойти (и намного выше, чем при столкновении SHA-256). И все же вы игнорируете эту возможность.
— Майкл Боргвардт

11
@sharptooth: я говорил об отдельных , одновременных дорожно-транспортных происшествиях нескольких сотен конкретных людей. Вы не можете сделать какие-либо шаги, чтобы сделать это ниже. Это было бы бессмысленно, так как это уже странно низко. Но все же гораздо более вероятно, чем столкновение SHA-256, что вы даже не представляете, сколько. Это тот же аргумент, что и Томас.
— Майкл Боргвардт

12
@sharptooth: Нет, шансы не увеличиваются значительно, потому что число все еще абсолютно невелико из-за размера хеш-пространства SHA-256. Это единственное, что вы не учитываете должным образом - все факторы должны быть взвешены по их фактической величине, а не в равной степени. Если бы вы генерировали один миллиард хешей в секунду для каждого человека на Земле и делали это в течение тысячи лет, у вас все равно будет меньше 1% вероятности столкновения.
— Майкл Боргвардт

3
Если вы не проверяете возможность не исправленной ошибки при каждом извлечении из памяти или чтении с диска (которые имеют гораздо более высокую вероятность, чем коллизия SHA-256), вы можете не полностью понять вероятности.
— Кристоф

17

Прежде всего, это не ноль, а очень близко к нулю .

Ключевой вопрос: что произойдет, если столкновение действительно произойдет? ? Если ответ «атомная электростанция взорвется», то вы, вероятно, не должны игнорировать возможность столкновения. В большинстве случаев последствия не такие страшные, поэтому вы можете игнорировать возможность столкновения.

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


... не по количеству копий, а по количеству наборов данных.
— Андреас Шпиндлер

1
Это неправильно, количество копий запущенного программного обеспечения не имеет значения. Единственное, что имеет значение, - это количество уникальных файлов, которые обрабатываются, и парадокс дня рождения - это математика для расчета.
— Дирк Бестер

1
Я слышал, как кто-то еще упоминал, что вероятность аппаратного сбоя - то есть некоторого переворота где-то из-за излучения и т. Д. - более вероятна, чем коллизия хешей, и, следовательно, беспокоиться о коллизии хешей глупо. Лично я бы постарался охватить оба случая, чтобы быть безопасным (чем больше безопасности на атомной электростанции, тем лучше), но коллизии хешей, вероятно, будут очень низкими в списке потенциальных опасностей (при условии, что хеш-пространство достаточно велико) , Однако все это предполагает, что в хэш-функции нет скрытого поведения, которое чаще вызывает конфликты.
— Крис Миддлтон


@GreenTree То, на что вы ссылались, - это умышленное создание столкновений.
— Sharp
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.