Quando lidamos com dados sensíveis, como CPF, telefone ou informações bancárias de usuários, a segurança da informação torna-se um dos pilares mais importantes de um sistema. Uma prática fundamental é armazenar esses dados de forma encriptada no banco de dados.
Exemplo prático: Encriptação de CPF no MySQL
Considere a seguinte estrutura de tabela:
CREATE TABLE clientes (
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100),
cpf VARBINARY(255)
);
Como funciona a encriptação com AES_ENCRYPT
O MySQL oferece a função AES_ENCRYPT(valor, chave) para encriptar dados. Aqui:
- valor:
- chave:
- Recomendações sobre a chave:
é o dado sensível que queremos proteger (por exemplo, o CPF).
é uma senha secreta utilizada no processo de encriptação e decriptação. Importante: A chave nunca deve ser armazenada dentro da própria base de dados. O ideal é mantê-la em um arquivo de configuração da aplicação ou em um gerenciador de segredos (Vault, AWS Secrets Manager, etc).
A chave de encriptação deve ter pelo menos 16 bytes para evitar warnings e garantir maior segurança.
Exemplo de inserção de dados encriptados:
INSERT INTO clientes (nome, cpf)
VALUES ('Bjorn',
AES_ENCRYPT('123.456.789-00',
'chave_secreta_16b'));
Como realizar a decriptação dos dados:
Para visualizar os dados de forma legível, usamos a função AES_DECRYPT(coluna, chave):
SELECT nome,
CONVERT(AES_DECRYPT(cpf, 'chave_secreta_16b')
USING utf8) AS cpf
FROM clientes;
Dica:
É recomendado sempre usar o CONVERT(... USING utf8) para transformar o resultado binário em texto legível.
Considerações importantes
Consistência nos dados:
Tentar decriptar dados que não foram previamente encriptados com AES causará erros ou retornará valores nulos. Garanta que todos os dados sensíveis sejam sempre armazenados de forma encriptada.
Conformidade com a LGPD:
A prática de encriptar dados sensíveis está totalmente alinhada com a LGPD (Lei Geral de Proteção de Dados).
Em caso de um eventual vazamento de dados, as informações estarão ilegíveis para qualquer atacante que não possua a chave de encriptação.
Boas práticas de segurança:
Infelizmente, ainda vemos notícias frequentes de vazamentos de bases de dados de órgãos públicos e grandes empresas. Muitas vezes, os dados estavam armazenados de forma simples e sem criptografia.
Uma política mínima de encriptação já evitaria que tais informações pudessem ser lidas por terceiros não autorizados.
Compatibilidade com MariaDB
As funções AES_ENCRYPT() e AES_DECRYPT() também são suportadas pelo MariaDB, garantindo boa compatibilidade com as versões do MySQL até a 5.7.
Porém, vale uma atenção especial para quem trabalha com MySQL 8.x ou superior, pois algumas mudanças foram introduzidas no modo de criptografia padrão (exemplo: modo de padding e modo de operação AES).
Recomendações ao usar entre MySQL e MariaDB:
Teste a criptografia e decriptação em ambos os ambientes.
Utilize sempre chaves com no mínimo 16 bytes.
Valide se o modo de operação AES é o mesmo entre as versões.
Evite migrações diretas de bases encriptadas entre MySQL 8.x e MariaDB sem testes prévios.
Considerações finais
A segurança de dados não deve ser tratada como um recurso opcional. Encriptar informações sensíveis no banco de dados é uma obrigação para qualquer sistema que armazene dados pessoais.
Com poucas alterações na modelagem e nas queries SQL, já é possível implementar uma camada extra de proteção.
Se você ainda não aplica encriptação de dados sensíveis no seu banco de dados no SGBD MySQL ou MariaDB, o momento de começar é agora.
Feito!
Nenhum comentário:
Postar um comentário