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