Я создаю приложение и храню пароли пользователей в таблице в 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/