При создании хэша SHA256 / 512 существует ли минимальный «безопасный» объем данных для хэширования? - PullRequest
22 голосов
/ 13 января 2011

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

Я думаю, вопрос также можно сформулировать так:самый маленький объем данных, который можно безопасно и надежно хэшировать?

Ответы [ 5 ]

88 голосов
/ 13 января 2011

Хеш-функция принимает входные данные произвольной (или, по крайней мере, очень большой) длины и выдает выходные данные фиксированной длины.Есть больше возможных входов, чем возможных выходов, поэтому должны существовать коллизии.Весь смысл безопасной хеш-функции заключается в том, что она «устойчива к коллизиям», что означает, что, хотя коллизии должны существовать математически, на самом деле очень трудно ее вычислить.Таким образом, для SHA-256 и SHA-512 не существует известных коллизий, а наиболее известные методы для их вычисления (делая это с целью ) настолько нелепо дороги, что скоро их не применят (весь федеральный бюджет США за столетие купит только смехотворно небольшую часть задачи).

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

Более того, если вы ограничиваете себя очень короткими входами, есть вероятность, что столкновения не будет вообще .Например, если вы рассматриваете 12-байтовые входы: есть 2 96 возможных последовательностей по 12 байтов.Это огромно (больше, чем можно перечислить в современных технологиях).Тем не менее, SHA-256 отобразит каждый вход в 256-битное значение, то есть значения в гораздо более широком пространстве (размером 2 256 ).Мы не можем доказать это формально, но есть вероятность, что все эти 2 96 хеш-значения отличаются друг от друга.Обратите внимание, что это не имеет практического значения: нет никакой измеримой разницы между не обнаружением столкновения, потому что его нет, и не обнаружением столкновения, потому что крайне маловероятно попасть в него.

Просто чтобы показать, насколько низки рискистолкновение с SHA-256: подумайте о том, рискуете ли вы получить травму от гориллы, сбежавшей из местного зоопарка или частного владельца.Навряд ли?Да, но это все еще может произойти: кажется, что горилла сбежала из зоопарка Далласа в 2004 году и получила ранения четырех человек;другая горилла сбежала из того же зоопарка в 2010 .Если предположить, что каждые 6 лет на всей Земле есть только одна неистовая горилла (не только в районе Далласа), и вы оказались несчастливым парнем, который находится на его пути из 6,5 миллиардов человек, а затем рискует стать печальным- телесный вред от гориллы может быть оценен примерно в 1 к 2 43,7 в день.Теперь возьмите 10 тысяч ПК и попросите их найти коллизию для SHA-256.Вероятность попадания в столкновение близка к 1 в 2 75 в день - более чем на млрд. менее вероятно, чем у злой обезьяны.Вывод таков: если вы боитесь столкновений SHA-256, но не держите при себе заряженный дробовик, то вы ошибаетесь в своих приоритетах.Кроме того, не связывайтесь с Техасом.

1 голос
/ 13 января 2011

Нет, длина сообщения не влияет на вероятность столкновения.

Если бы это было так, алгоритм не работает.

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

0 голосов
/ 17 ноября 2016

- хеш длиной 256 битов, есть конфликты для чего-то длиннее 256 битов.

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

0 голосов
/ 02 октября 2011

Нет минимального размера ввода.Алгоритм SHA-256 по сути является случайным отображением, и вероятность столкновения не зависит от длины входного сигнала.Даже 1-битный вход является «безопасным».

Обратите внимание, что вход дополняется кратным 512 битам (64 байта) для SHA-256 (кратному 1024 для SHA-512).Взяв 12-байтовый ввод (как Томас использовал в своем примере), при использовании SHA-256 существует 2 ^ 96 возможных последовательностей длиной 64 байта.

Например, 12-байтовый ввод HelloТам! (0x48656c6c6f20546865726521) будет дополнен одним битом, за которым следует 351 нулевой бит, за которым следует 64-битное представление длины входа в битах, равное 0x000000000000006060, для формирования 512-битного дополненного сообщения.Это 512-битное сообщение используется в качестве входных данных для вычисления хэша.

Более подробную информацию можно найти в RFC: 4634 "Алгоритмы безопасного хэша США (SHA и HMAC-SHA)", http://www.ietf.org/rfc/rfc4634.txt

0 голосов
/ 13 января 2011

Очень сильно зависит от вашего приложения: если вы просто хэшируете строки «ДА» и «НЕТ» для отправки по сети, чтобы указать, должны ли вы дать мне кредит на 100 000 долларов, это было бы довольно большой ошибкой - доменответов не может быть такого размера , чтобы кто-то мог легко проверить наблюдаемые хэши на проводе по базе данных хеш-выводов "small input".

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

Но яне знаю ни одного исследования, которое могло бы указать на вас, кроме моих инстинктов.К сожалению.

...