Armazenar senha AES criptografada no MySQL após criar um hash bcrypt

1

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 ?

    
por Justin 17.08.2012 / 05:45

2 respostas

3

Não, uma senha criptografada com um fator de trabalho razoável deve ser segura por conta própria.

    
por 17.08.2012 / 05:47
2

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

    
por 18.08.2012 / 00:14