много итераций на хэше: разве это не уменьшает энтропию?

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

2 ответов


поскольку вы отметили md5, я буду использовать это в качестве примера. От Википедия:

Если можно построить два префикса с одинаковым хэшем, к обоим можно добавить общий суффикс, чтобы сделать столкновение более вероятным для принятия в качестве допустимых данных приложением, использующим его. Кроме того, современные методы поиска столкновений позволяют указать произвольный префикс: злоумышленник может создать два файла столкновения, которые начинаются с одного и того же содержимого. Все злоумышленник должен для создания двух сталкивающихся файлов используется файл шаблона со 128-байтовым блоком данных, выровненным по 64-байтовой границе, которая может быть свободно изменена алгоритмом поиска столкновений. Пример столкновения MD5 с двумя сообщениями, различающимися в 6 битах:

и тогда пример plaintexts они дают 256 байт. Поскольку атака столкновения зависит от 128 байт блок данных, а хэш-дайджест-всего 128 bits, там действительно нет повышенный риск столкновения атаки после первой итерации-то есть вы не можете реально повлиять на вероятность столкновения за пределами первого хэша.

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

  • любые два произвольных входа имеют шанс столкновения x%.
  • выходы первого хэша сами по себе являются двумя такими входами.
  • таким образом, каждая итерация увеличивает вероятность столкновения на x%.

Это может быть опровергнуто контрпример довольно легко. Рассмотрим еще раз MD5:

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

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

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

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

У меня нет точных чисел для других хэш-алгоритмов, но я думаю, что все точки, которые у меня есть сделано обобщение на другие хэш-функции и односторонние / картографические функции.


Это уменьшает энтропию.

в статье под названием Статистика Случайного Отображения Flajolet и Odlyzko, теорема (Теорема 2) показывает, что:

"Если n-немного случайная функция повторяется k раз, ожидаемое количество точек изображения (1 - t_k) * 2^n (для больших n), где t_k удовлетворяет рекуррентному отношению t_0 = 0 и t_{k+1} = e^{-1 + t_k}. Из этого, можно показать, что ожидаемое количество точек изображения составляет 2^{n-i+1} при итерации случайной функции k = 2^i раза."

дальнейшие ссылки являются следующими:

  • Gligoroski, D. and Klima, V., 2010, September. Практические последствия аберрации узкополосных хэш-конструкций от идеальных случайных функций. На международной конференции по инновациям в области ИКТ (стр. 81-93). Springer Berlin Heidelberg.

  • Bhaumik, Р. Дутта А., Гуо, Ж., Ж., Ж., Mouha, Н. Николич, И., 2015. Больше Патронов, Меньше Безопасности?

  • Dinur, I. and Leurent, G., 2014, Август. Улучшенные общие атаки против хэш-компьютеров Mac и HAIFA. В международной конференции по криптологии (стр. 149-168). Springer Berlin Heidelberg.

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