Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Criptografando os dados do usuário para login automático no sistema de terceiros


Você tropeçou no maior problema com a criptografia de dados no banco de dados:

➽ Onde guardar a chave?

A criptografia não pode resolver o problema de proteger os dados, ela só pode "concentrá-los" em uma chave. Onde quer que você armazene a chave, seu aplicativo deve ser capaz de descriptografar os dados, assim pode fazer um invasor. Existem duas soluções possíveis para este problema que eu conheço:
  1. Coloque a chave em um local o mais seguro possível. Isso significa que certamente deve ser colocado fora do diretório www-root em um diretório inacessível no servidor. Dependendo da importância dos dados, você também pode considerar terceirizar a criptografia para outro servidor dedicado.
  2. Não armazene uma chave e a derive da senha do usuário. Esta é a única maneira realmente segura, porque nem mesmo o servidor pode descriptografar os dados. Os contras são, claro, que o usuário precisa digitar a senha toda vez que usar seu serviço. Se o usuário alterar a senha, você precisará criptografar novamente todos os dados. Se o usuário esquecer a senha, os dados serão perdidos.

P.S. Eu recomendaria criptografar os dados antes armazenando-o no banco de dados, porque o MySQL AES_ENCRYPT usa o modo ECB sem um IV. Isso permite pesquisar um determinado valor, mas é menos seguro (tenho certeza de que você não deseja pesquisar por senha).