Объяснение функциональности bcrypt

Я изучаю хэш и солевые пароли, используя bcrypt в PHP. Может ли кто-нибудь объяснить мне, почему использование brcypt "work"/"rounds" предотвращает атаки?

Я уже прочитал "Как вы используете bcrypt для хеширование паролей в PHP?", но мне трудно понять, что делает его таким особенным, если кто-то завладел вашей базой данных и может взломать ее в автономном режиме?

Может ли соль и хеш вместе защитить базу данных от радужных таблиц? Или bcrypt делает что-то особенное для предотвращения подобных атак?


person Lil' Bits    schedule 20.06.2012    source источник


Ответы (2)


Проще говоря, bcrypt «лучше», чем некоторые другие хэш-алгоритмы, такие как семейство sha, потому что он преднамеренно медленный и может быть намеренно медленнее, используя большое количество итераций. Кроме того, требуется использование соли, которая защищает от использования предварительно рассчитанных хеш-значений (радужные таблицы). Солт-значение должно генерироваться/сохраняться вместе с каждым выводом bcrypt, чтобы не допустить сравнения между значениями разных пользователей (в случае, если они используют один и тот же пароль).

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

person Explosion Pills    schedule 20.06.2012
comment
Я внес несколько важных изменений в этот ответ: алгоритм известен/статичен. Используемое оборудование не меняет результат bcrypt. bcrypt полагается только на количество итераций для скорости; Расчеты bcrypt, вероятно, будут намного быстрее на специализированных аппаратно-программных платформах. Пожалуйста, имейте в виду, что, хотя суть ответа была правильной, более подробная информация определенно не была. - person Maarten Bodewes; 24.06.2012

В двух словах, bcrypt и другие алгоритмы растяжения паролей предназначены для усиления работы. Злоумышленник должен сделать гораздо больше работы, чтобы взломать пароль, чем вы (поскольку вы обычно получаете только действительные запросы на вход или ошибочные пароли с гораздо меньшей скоростью); таким образом, за каждую миллисекунду, которую вы добавляете к времени хэширования пароля, ваш злоумышленник должен платить миллион или миллиард раз. Bcrypt и другие алгоритмы просто намеренно замедляют работу, заставляя злоумышленника тратить гораздо больше времени на взлом паролей.

person Nick Johnson    schedule 22.06.2012