Как безопасно хранить пароль?

Используйте bcrypt.

Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt.

Почему не {MD5, SHA1, SHA256, SHA512, SHA-3, другие}?

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

Современный сервер может вычислять MD5 хеш приблизительно размером 330 MB каждую секунду. Если у ваших пользователей пароли, которые в нижнем регистре, буквенно-циферные и до 6 символов, вы можете перебрать каждый пароль такого вида приблизительно за 40 секунд. И это без всякого напряга! Если вы готовы потратить около 2000 долларов и одну-две недели для сборки CUDA, вы можете собрать собственный маленький кластер, который позволит вам подбирать около 700000000 паролей в секунду. С таким показателем вы будете раскалывать пароли чуть больше, чем за одну секунду.

Соль(salt) вам не поможет

Важно еще то, что salt(соль) бесполезны для предотвращения атаки по словарю или брутфорса. Вы можете использовать большого размера salt или несколько salt или даже Гималайскую розовую солью. Это не влияет на скорость подбора пароля для атакующего, если у него есть хеш(hash) и salt с вашей базы данных.

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

Bcrypt решает эти проблемы

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

На сколько bcrypt медленнее, чем, скажем, MD5? Зависит от фактора работы. При использовании фактора работы 12, bcrypt сгенерил хэши паролей «Yaa» примерно за 0,3 секунды на моем ноутбуке. MD5, с тем же паролем,  занимает менее одной микросекунды.

НО! При использовании bcrypt сложность увеличивается в 5 или больше порядков. И вместо того, что бы взламывать пароль каждые 40 секунд, я бы занимался их подбором каждые 12 лет или около того. Возможно вашему паролю может не понадобиться такая безопасности и вы, возможно, потребуете более быстрый алгоритм сравнения, но bcrypt позволяет выбирать между скоростью и безопасностью. Используйте его.

05. февраля 2010 by Alexey Vasiliev
Categories: защита и безопасность информации, интересно, Новости, проектирование, разработка | Tags: , , , | 3 комментария

Comments (3)

  1. А может все таки ключ в том чтоб не сливать базу с хешами паролей? :)