Какую хеш-функцию следует использовать для паролей?

Возможный дубликат:
Какой алгоритм хеширования рекомендуется использовать для сохраненных паролей?

Здравствуйте, мне недавно сказали, что обычные хеш-функции, такие как SHA256, небезопасны для использования в качестве хэш-функции паролей, потому что они «разработаны, чтобы быть быстрыми» (кстати, я ранее просил о более быстрых хэш-функциях на programmers.se). Итак, мой вопрос, что следует использовать для веб-сайтов или других общих приложений?

Кроме того, вторичный вопрос: действительно ли SHA256 не лучший выбор для хеширования паролей? Я как бы не верю в это, но я слышал, что правдой являются и более безумные вещи.

(примечание: предположим, что предпринимаются все другие надлежащие действия, такие как уникальные соли)


person Earlz    schedule 21.02.2011    source источник
comment
Дубликат? stackoverflow.com/questions/2549988/   -  person Mark Ransom    schedule 21.02.2011


Ответы (3)


Вам следует использовать bcrypt.

person alex    schedule 21.02.2011
comment
Тогда мой вопрос: почему? Насколько быстрее вы сможете взломать SHA256, чем bcrypt? Особенно, если я сделаю несколько итераций SHA256? - person Earlz; 21.02.2011
comment
@Earlz bcrypt позволяет использовать коэффициент работы. Если он (ради аргумента) SHA256 запускается 30 раз в секунду, а bcrypt запускается один раз, то SHA256 будет в 30 раз быстрее взломать (теоретически, по крайней мере: D) - person alex; 21.02.2011
comment
Приведенная ссылка объясняет, почему: вы определяете рабочий фактор, который будет определять, насколько он быстр / медленен и сколько работы должен будет выполнить злоумышленник. - person payne; 21.02.2011

На момент написания SHA256 подходит для защиты паролем, хотя может и не через год или около того.

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

person deiga    schedule 21.02.2011

Майк Ховард ответ на вопрос, на который указывает ссылка, является правильным передовой опыт.
Простого использования хорошего хеша недостаточно, потому что:

  • он не защищает вас от атак с использованием радужных таблиц. Один и тот же пароль каждый раз будет хешировать один и тот же результат. Злоумышленник может пойти на компромисс между временем и пространством, предварительно вычислить самые популярные пароли и просто найти ответ. Для победы нужно добавить соль. (Майк предлагает идентификатор пользователя)

  • как вы предполагаете, алгоритмы хеширования разработаны так, чтобы быть быстрыми. Иногда это желательно (например, получить хэш файла размером 50 МБ), но в случае паролей - нет. Вместо этого используйте функцию получения ключа на основе пароля. Это значительно замедлит атакующего, но не повлияет на вашу скорость.

person J.J.    schedule 21.02.2011