Целесообразно ли хранить хешированный пароль Bcrypt непосредственно в БД?

Поскольку формат хэш-строки ($2y$10$salt....) сам по себе дает подсказки хакеру (т. е. тому, кто взломал БД), что шифрование выполняется с использованием алгоритма Bcrypt, и поэтому он может легко взломать, используя password_verify() в php, передав параметры в качестве угадываемых паролей.


person user3767551    schedule 23.06.2014    source источник
comment
Я бы не сказал «легко»: перебор Bcrypt займет очень и очень много времени.   -  person Jim    schedule 23.06.2014
comment
Да, это нормально. Атаки грубой силы на bcrypt — не очень эффективный метод, особенно когда вы увеличиваете стоимость.   -  person Brett Santore    schedule 23.06.2014


Ответы (1)


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

Если бы эти параметры каким-то образом были скрыты, злоумышленнику пришлось бы их угадывать. Но существует не так много возможных значений, например, фактор стоимости. имеет смысл только между 9-13. Если вы действительно хотите добавить такой секрет на стороне сервера, есть гораздо лучшие способы сделать это. Вы можете зашифровать (двусторонне) уже хэшированные значения с помощью надежного ключа, тогда злоумышленник должен «угадать» этот ключ, что невозможно.

person martinstoeckli    schedule 24.06.2014
comment
Где-то в Интернете я видел, что bcrypt основан на шифре Blowfish. Но похоже, что реализация Blowfish также имеет как шифрование, так и дешифрование. значит, можно ли расшифровать зашифрованные хеш-значения? - person user3767551; 11.07.2014
comment
@ user3767551 — Это правда, что BCrypt основан на Blowfish, но хотя Blowfish — это алгоритм шифрования (двусторонний), BCrypt — настоящий алгоритм хеширования (односторонний). - person martinstoeckli; 12.07.2014