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

Qual é a melhor maneira de armazenar dados confidenciais no MySQL?


Sério, NÃO USE o aes_encrypt() do MySQL É o método mais inseguro de usar uma cifra de bloco. Ele está usando o modo ECB, e posso dar um exemplo simples de demonstração por que isso é um erro grave.

Mensagem de texto simples:



A mesma mensagem criptografada com o modo ECB (não importa qual cifra você use):

A mesma mensagem EXATA usando o modo CBC (novamente, não importa qual cifra você usa):

ainda mais razões para não usar o aes_encrypt do mysql, mais notavelmente todas as consultas que você enviar também terão a chave aes que você usa. Se o banco de dados estiver comprometido, o invasor habilitará o log e apenas obterá sua chave aes e descriptografará o banco de dados inteiro .

Então, o que deve você usa? Eu gosto de esta classe por enquanto. Está usando o modo CBC com uma função String2Key e um IV. Você pode usar a chave primária como seu IV, cada mensagem deve ter um IV exclusivo. Tudo bem se o invasor conhecer o IV e se eles forem sequenciais, desde que a implementação da cifra de bloco seja segura. A reutilização de um IV tornou o WEP muito menos seguro .