Рейтинг:3

Будет ли многократное хеширование более, менее безопасным или таким же безопасным, как однократное хеширование

флаг br

Будет ли многократное хеширование более или менее безопасным, чем однократное хеширование?

Сбросив этот вопрос:

  • Я видел это утверждение:
  • Мне кажется, что то, что вы пытаетесь сделать при перефразировании, - это замедлить атаку грубой силы.
  • Хотя проблема дня рождения может относиться к многократному хешированию, кажется, что она в равной степени применима как к первому примеру (который человек пометил как «не делайте этого»), так и ко второму примеру (который человек чувствовал себя более комфортно).
  • В любом примере, как только коллизия обнаружена, повторное хэширование в этой точке является спорным (поскольку оно будет воспроизводить те же результаты между хешем и его коллизией).
  • Конкретный сценарий для этого вопроса таков: является ли пример человека, который я привел в своем вопросе выше, правильным в его утверждении - что пример 2 приведет к тому, что столкновения, говоря о вероятности, будут происходить реже?

Что я ищу в ответе:

  • Это не моя область знаний (поэтому я спрашиваю об этом здесь, где это ваша экспертиза). Пожалуйста, не стесняйтесь исправлять мои недоразумения и проблемные предположения.
  • Меня интересует как подробное техническое объяснение, если оно сопровождается непрофессиональным объяснением шагов, так и, в частности, заключение (с акцентом на непрофессиональное объяснение).
  • Теоретически я спрашиваю обо всех односторонних функциях хеширования (если существуют различия между широкими классами алгоритмов хеширования, пожалуйста, не стесняйтесь указывать их, понимая, что последствия вашего ответа будут практически применены с моей стороны к алгоритму хеширования, подобному в SHA-2, SHA-3 или bcrypt).
  • Я просмотрел 10 различных вопросов и ответов на crypto.stackexchange.com, которые могут показаться очень похожими на этот вопрос, но либо они имеют дело с конкретными вариантами использования, которые сформировали ответ на вариант использования, либо они дали теоретическое доказательство без объяснений на языке непрофессионала. термины, что на самом деле делало их доказательство, и вывод непрофессионала к их ответу.
    • Для целей этого вопроса предположим, что мое исчисление не на должном уровне, и я обычно не читаю о математических переменных, используемых в криптографии, но предположим, что я могу следовать алгебре и могу стряхнуть пыль со своего исчисления, если вы скажете мне, что такое переменные. обозначают (или ссылки на их пояснения).

Заранее благодарю за помощь в этом вопросе.

флаг jp
Это зависит от того, для чего вы используете хэш. Хеширование паролей (и получение ключей из секретов с низкой энтропией) сильно отличается от большинства других приложений и имеет совсем другие соображения безопасности.
kelalaka avatar
флаг in
Какова ваша цель? Чего вы хотите достичь? Какие вопросы и ответы вас не удовлетворяют?
Рейтинг:5
флаг ng

Верен ли пример человека, который я привел в своем вопросе выше, в его утверждении - что пример 2 приведет к тому, что столкновения, вероятно, будут происходить реже?

делается несколько утверждений там:

Одно утверждение состоит в том, что функция 1 из пароль + соль уступающий хэш определяется

хэш = sha512 (пароль + соль); 
для (я = 0; я < 1000; я ++) {
    хэш = sha512 (хэш); // <-- НЕ делайте этого!
}

с большей вероятностью столкнется, чем функция 2 из пароль + соль уступающий хэш определяется

хэш = sha512 (пароль + соль);
для (я = 0; я < 1000; я ++) {
    хэш = sha512 (хэш + пароль + соль);
}

Это правильно в теории и будет наблюдаться на практике для узкого хеша, например. 80-бит.

Один из способов увидеть это

  • выходной набор фиксированной случайной функции $Ч$ повторяющийся $n$ время имеет тенденцию к сужению, поскольку $n$ растет (аргумент: он никогда не может увеличиваться, когда $n$ делает, и некоторое сужение происходит из-за коллизий повторного хэша, здесь SHA-512);
  • вероятность столкновения случайной функции для двух случайных различных входных данных обратно пропорциональна размеру ее выходного набора.

Таким образом, это понятно (хотя повторение случайной функции $n$ раз может не дать случайной функции относительно того, что осталось от выходного набора), что вероятность столкновения $Ч^п(х)$ для двух случайных различных $х$ увеличивается с $n$.

Это ограничивает устойчивость к коллизиям функции 1, которая за цикл повторяется $H: h\mapsto\имя_оператора{SHA-512}(h)$. Принимая во внимание, что в 2 итерируемая функция изменяется, когда вход пароль + соль изменяется, поэтому выходные наборы сокращаются с $n$ зависят от этого ввода. В модели хэша как случайной функции 2 также является случайной функцией, которая потенциально может достигать полного набора, и это вероятность столкновения для разных входных данных. пароль + соль не увеличивается, как $n$ делает.


Также утверждается, что по этой причине на практике следует использовать 2, а не 1, что неверно по ряду причин:

  • По крайней мере, для любого хэша, устойчивого к коллизиям, как SHA-512, нам вообще не нужно беспокоиться о коллизиях или циклах.
  • В контексте (приложение для хеширования паролей) устойчивость к столкновениям общей итерируемой функции не является проблемой. Сопротивление прообразу является. И даже для SHA-1, которая не является коллизионно-стойкой, и любой реалистичной $n$, нам не нужно беспокоиться о том, что для взлома 1 потребуется значительно меньше вычислений хэша, чем для взлома 2, в том числе с реалистичным предварительным вычислением.

Преимущество 2 заключается в том, что его немного сложнее реализовать на оборудовании, потому что аппаратное обеспечение должно использовать пароль и соль на каждой итерации, которые, следовательно, должны храниться. Таким образом, ASIC для ускорения 2 будет сложнее, чем для 1. Это единственная причина, по которой я вижу, что 2 менее плох, чем 1 на практике. Это все еще плохо, потому что $n=1000$ итерации недостаточно медленны для ASIC или GPU, выполняющих поиск паролей; и потому что все это не использует память, таким образом теряя дополнительную защиту от перебора паролей методом грубой силы, которую современные хэши паролей с жесткой памятью (например, скрипт или же Аргон2) дайте.


Будет ли многократное хеширование более безопасным, чем однократное хеширование?

Это зависит в первую очередь от цели, которая диктует использование хеша.

  • Если мы хешируем с целью растяжка ключей, то есть обычно при хешировании пароля или фразы-пароля, да: защита от перебора методом грубой силы растет примерно линейно с количеством раундов. Но опять же, мы должны использовать жесткий хеш пароля.За равное время потрачено даже устаревшее bcrypt даст больше безопасности, чем конструкции, просто итерирующие хэш, например ПБКДФ2 или функции 1 и 2, которые явно не рекомендуются в эпоху ASIC, FPGA и GPU для взлом пароля.
  • Если мы хэшируем более одного раза, чтобы усилить некоторую криптографическую хеш-функцию с дефектом (например, ее устойчивость к коллизиям нарушена), возможно, да. Например. функция 2 (с пароль + соль заменено сообщением в хэш) исправит все известные дефекты безопасности MD5 или же ША-1 помимо их выходной ширины, даже если мы сделаем только один дополнительный раунд, а не 1000. Однако это приводит к огромной цене производительности и удобства использования, потому что нам нужно дважды хешировать сообщение, поэтому в некоторых случаях сохранить его.
  • Для других криптографических целей, включая получение подписи и ключа из широкого ключа с использованием современного хэша, нет. Для этих целей мы можем использовать SHA-2 или SHA-3 (чтобы назвать тех, кто в вопросе). Повторное хеширование не требуется и может даже немного снизить устойчивость к коллизиям (если выполняется, как в 1), за одним исключением: если хэш имеет свойство удлинения длины (как у SHA-2, но не у SHA-3), и если это нежелательно, разумно повторно хешировать один раз вывод хэша (что не требует сохранения сообщения дважды).
Рейтинг:1
флаг us

Вот интуитивное (в отличие от строгого) объяснение:

Хеш-функция выглядит случайной, но на самом деле она не добавляет энтропии к результату. Фактически, он устраняет энтропию благодаря тому свойству, что многие входные данные могут привести к одному и тому же результату.(Только взаимно-однозначная и on-функция может сохранить энтропию.) Следовательно, каждое применение хэша к своему собственному выходу удаляет энтропию до тех пор, пока она не сойдется к повторяющемуся циклу (конечная группа) порядка, возможно, намного меньше, чем размер поля. Мне неизвестно какое-либо доказательство границ порядка такой группы для хэшей LSR.

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

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

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

И еще одно, потому что я смешивал понятия циклов и потери энтропии. LSR имеет ограниченную способность к энтропии и теряет часть избытка в каждом раунде. Это означает, что объединение всех наборов циклов, в которые могут попасть любые входные данные, составляет гораздо меньшее поле, чем сами входные данные. Соединяя эти концепции воедино, повторное применение медленно разбивает все входные данные на небольшое количество небольших циклов, а это означает, что вы значительно увеличиваете вероятность столкновения.

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

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

Ответить или комментировать

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