Não, uma senha criptografada com um fator de trabalho razoável deve ser segura por conta própria.
Estou construindo uma aplicação e armazenando senhas de usuários em uma tabela no MySQL. Eu já estou usando bcrypt
, mas pensando, isso faz algum sentido para AES_ENCRYT () a senha com hash antes de armazenar no banco de dados?
Example:
$bcrypt = new Bcrypt();
$hash = $bcrypt->hash('some-password-here');
Devo apenas armazenar o $ hash como um varchar (60) ou, em vez disso, chamar o MySQL AES_ENCRYPT('crypto_key', $hash)
e armazenar em uma coluna blob
?
Tem que discordar da resposta anterior: na verdade faz sentido, mas não completamente.
A criptografia AES aqui adicionaria uma camada adicional à segurança de senha, que é baseada em informações não armazenadas no banco de dados (suponho que você não colocaria a chave AES no mesmo banco de dados com senhas). Existem vários cenários em que o banco de dados de senha pode ser comprometido sem obter acesso à configuração do aplicativo. (injeções SQL, banco de dados em um servidor diferente, acesso a backups de banco de dados, etc.)
Mesmo ao usar o sal específico do usuário do bcrypt, as senhas fracas ainda são relativamente fáceis de decifrar. E haverá muitas senhas fracas em qualquer banco de dados de senhas.
O ponto que não faz sentido: Por que criptografia simétrica, quando você simplesmente poderia anexar a chave secreta à senha antes de executar o BCrypt? Então, o mesmo nível de segurança é obtido por:
$hash = $bcrypt->hash('some-password-here' . 'crypto_key');
Leia mais: link
Tags security encryption bcrypt