创建 bcrypt 哈希后,将 AES 加密的密码存储在 MySQL 中

创建 bcrypt 哈希后,将 AES 加密的密码存储在 MySQL 中

我正在构建一个应用程序并将用户密码存储在 MySQL 的表中。我已经在使用,bcrypt但想知道在将密码存储到数据库之前对散列密码进行 AES_ENCRYT() 是否有意义?

Example:

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

我应该将 $hash 存储为 varchar(60) 还是调用 MySQLAES_ENCRYPT('crypto_key', $hash)并存储在一blob列中?

答案1

不,具有合理工作因子的 bcrypt 散列密码本身应该足够安全。

答案2

不得不不同意前面的答案:它确实有道理,但并不完全。

此处的 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/

相关内容