Назад | Перейти на главную страницу

Хранить пароль AES, зашифрованный в MySQL после создания хэша bcrypt

Я создаю приложение и храню пароли пользователей в таблице в MySQL. Я уже использую bcrypt но интересно, имеет ли он какое-либо значение для AES_ENCRYT () хешированного пароля перед сохранением в базе данных?

Example:

$bcrypt = new Bcrypt();
$hash = $bcrypt->hash('some-password-here');

Должен ли я просто сохранить $ hash как varchar (60) или вместо этого вызвать MySQL AES_ENCRYPT('crypto_key', $hash) и хранить в blob столбец?

Нет, хешированный пароль bcrypt с разумным рабочим фактором сам по себе должен быть достаточно безопасным.

Приходится не соглашаться с предыдущим ответом: это действительно имеет смысл, но не полностью.

Шифрование AES здесь добавит дополнительный уровень к безопасности паролей, основанный на информации, не хранящейся в базе данных (я предполагаю, что вы не поместите ключ AES в ту же базу данных с паролями). Существует несколько сценариев, в которых база паролей может быть взломана без получения доступа к конфигурации приложения. (SQL-инъекции, база данных на другом сервере, доступ к резервным копиям базы данных и т. Д.)

Даже при использовании специфической для пользователя соли bcrypt слабые пароли по-прежнему относительно легко взломать. И в любой базе паролей будет много слабых паролей.

Не имеет смысла: зачем симметричное шифрование, если вы просто можете добавить секретный ключ к паролю перед запуском BCrypt? Таким образом, такой же уровень безопасности получают:

$hash = $bcrypt->hash('some-password-here' . 'crypto_key');

Читать далее: http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/