Я использую bcrypt для php и хочу, чтобы потенциальный хакер занял много времени для входа

Я ссылаюсь на этот ответ: /questions/14493667/optimalnyij-koeffitsient-rabotyi-bcrypt/14493672#14493672

Мы повторно хэшируем пароль, но затем мы ничего не делаем с хэшем (мы используем POST-пароль в открытом виде в функции CheckPassword для аутентификации). Разве хакер не может обойти часть повторного хэширования?

Вот мой псевдокод внизу.

если пароль / имя пользователя отправлено POST, а $row['password'] является хешированным словом в sql.

$t_hasher = new PasswordHash(13, FALSE);
$hash = $t_hasher->HashPassword($_POST['password']);
$check = $t_hasher->CheckPassword($_POST['password'], $row['password']);
if($check) Great success else Wrong credentials`

Примечание. Я обнаружил, что рабочий фактор не влияет на время, необходимое для запуска CheckPassword. Это только увеличивает время для HashPassword.

2 ответа

Решение

Ну, есть два типа атак на пароли:

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

В случае 1 он уже обошел вашу форму входа, ему все равно, сколько времени потребуется для одного входа в вашу систему. Но его волнует, сколько времени потребуется, чтобы перебор пароля в его системах. Таким образом, фактор работы только усложняет взлом пароля, пробуя каждую комбинацию и хешируя ее по тому же алгоритму, что и ваша система. "повторное хеширование" пароля для увеличения продолжительности процесса входа в этом случае не поможет.

В случае 2, однако, ему все равно, сколько времени нужно для попытки пароля в вашей системе, потому что он должен сделать это много, чтобы получить правильный логин (плюс он, вероятно, должен угадать имя пользователя, если он не может это выяснить). Атакующий должен быть очень тупым, потому что он оставит следы и потратит время. Вы можете сделать его жизнь более несчастной, заблокировав его IP после определенного количества неудачных входов в систему. Плюс вы можете добавить sleep после каждого неверного входа в систему (для режима сна не требуется столько ресурсов, как для интенсивной операции хэширования процессора).

Ни один алгоритм хеширования не является безопасным для IMO, однако есть несколько таких, которые замедляют работу хакеров, и мы надеемся, что им это удастся.

Увеличить стоимость:

Пример кода в php:

$ hash = "Привет"

$ hash = password_hash ($ password, PASSWORD_DEFAULT, массив ('стоимость' => 15));

echo $ hash;

var_dump (password_verify ($ password, $ hash));

Таким образом, стоимость 15 занимает много времени для хеширования и взлома

В приведенном выше примере показан процесс хеширования, а также способ проверки вашего хэша в целях аутентификации, поскольку

"BCRYPT СОЗДАЕТ НОВЫЙ ХЕШ ВСЕГДА, ЭТО БЕГ!!!!

Поместите этот код в файл.php, а затем запустите его, проверьте ваш код работает

Не забудьте

Другие вопросы по тегам