Рейтинг:0

Использование bcrypt для создания всегда одного и того же хэша, например SHA, MD

флаг tr

Я хочу воспользоваться медленным свойством bcrypt для хеширования ввода, но также хочу каждый раз получать одно и то же хеш-значение для одного и того же ввода, как SHA, MD и т. д.

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

В основном Учитывая ввод m, bcrypt(cost, m, m) -> ctext, без конкатенации в конце.

Таким образом, вопрос заключается в том, делает ли использование ввода в качестве соли и пароля менее безопасным шаг вывода ключа на основе свойства bcrypt?

флаг et
Почему статическая соль не дает такой же хэш?
флаг tr
@ user93353 не говорю, что этого не произойдет, просто он менее безопасен, если вы его потеряете, вам может потребоваться обновить каждый хэш в вашей системе.
флаг et
Соли на пароль. то есть 1 соль на пароль. Это статично для этого экземпляра этого пароля. Это не распространено среди паролей.
флаг tr
@user93353 user93353 может быть, я не совсем понимаю, или вы упускаете смысл этого вопроса. Если вы генерируете соль для каждого пароля, вы каждый раз получаете разный хэш. Если у вас есть статическая соль для определенного пароля, то есть у вас есть `f(m)->s` для данного сообщения, что совпадает с моим вопросом, просто мой `f(m)->m` идентичная функция.
флаг et
«Если вы генерируете соль для каждого пароля, вы каждый раз получаете разный хэш». Нет, для одного пароля вы генерируете только 1 соль. т. е. когда пользователь1 создает pwd1, вы используете salt1 при создании учетной записи. А затем, проверяя его пароль, вы используете ту же соль1, поэтому вы получите тот же хэш. Каждый раз, когда вы используете одну и ту же комбинацию pwd1 и salt1, вы будете получать один и тот же хеш ((если вы каждый раз используете одно и то же количество раундов, что и должно быть).
флаг tr
@ user93353 вы все еще упускаете суть вопроса. Здесь нет упоминания о проверке пароля. Сценарий таков: у вас есть значение, которое вы хотите хешировать (используя этот вариант bcrypt), вы его хешируете, получаете хэш-значение, счастливых дней. На следующий день у вас есть то же значение, которое вы хотите хэшировать, вы хешируете его и ожидаете, что будет получено то же значение хеш-функции.
SAI Peregrinus avatar
флаг si
bcrypt — функция хеширования паролей. Это НЕ обычная криптографическая хэш-функция, и часто использовать ее как таковую небезопасно (возможны DoS-атаки).
SAI Peregrinus avatar
флаг si
Также соли для пары (пользователь, пароль): пока пользователь сохраняет один и тот же пароль, они сохраняют одну и ту же соль. Если пароль изменится, соль должна измениться. Если пользователь другой, он ДОЛЖЕН иметь другую соль.
Рейтинг:1
флаг cn

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

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

Использование его в качестве общей хэш-функции приводит к совершенно другому набору проблем, худшей из которых являются коллизии. bcrypt имеет 72-байтовый предел ввода для входного текста, если вы хэшируете большие фрагменты данных, он будет иметь тот же хэш, что и его 72-байтовый префикс. bcrypt также повторяет короткие входные данные, пока не заполнит 72-байтовый массив состояния, поэтому 18-символьный пароль будет иметь тот же вывод, что и этот пароль, повторенный 4 раза. Реализации могут предварительно хешировать ввод с помощью чего-то вроде SHA-512, прежде чем он попадет в bcrypt, что предотвращает эти проблемы. Хотя в этом случае, несмотря на то, что он медленный, его выход по-прежнему имеет длину всего 192 бита, что существенно ограничивает его устойчивость к коллизиям для использования в таких вещах, как цифровые подписи.

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

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

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