Não tenho certeza se usar o MySQL build em criptografia seria a melhor solução para o seu problema.
M_CRYPT do PHP O pacote é considerado muito bom e oferece a flexibilidade de escolher o algoritmo mais adequado às suas necessidades.
Armazenar sua chave em algum outro servidor tem uma grande vantagem:a chave não está na mesma máquina que os dados criptografados. Portanto, enquanto o invasor não tiver controle suficiente sobre a máquina comprometida, ele não poderá acessar a chave.
Se o invasor obtiver controle total da máquina em que os dados estão armazenados, provavelmente poderá consultar o serviço web para a chave.
No entanto, transmitir a chave de uma máquina para outra abre toda uma nova área que precisa ser protegida. Provavelmente envolvendo mais chaves e mais camadas de criptografia, aumentando assim a chance de erros.
A outra opção é digitar a senha na inicialização do servidor e mantê-la apenas na memória.
Solução possível
Se viu uma solução empregada que usou o seguinte método para criptografar arquivos para usuários com acesso à web (não tenho certeza do seu ambiente, mas pode ser útil):
- Na criação do usuário, uma chave aleatória longa é atribuída ao novo usuário.
- Esta chave aleatória é armazenada em uma coluna criptografada no registro do usuário.
(somente esta coluna é criptografada para não afetar o desempenho do restante do registro! ) - A criptografia da coluna de chave aleatória é feita com 1 senha mestra, armazenada em um arquivo ou na memória.
(A melhor opção é digitar a senha ao abrir seu servidor web e apenas armazená-la na memória. )
(Outra abordagem seria deixar o usuário digitar uma senha e usá-la para criptografar/descriptografar a coluna de chave aleatória, mas não tenho certeza se isso aumentaria ou diminuiria a segurança ) - Todo documento que precisa ser criptografado é criptografado com a chave aleatória para esse usuário e, em seguida, armazenado em disco.
- Os documentos são armazenados com permissões mínimas no sistema de arquivos.
As vantagens dessa abordagem são:
1. A chave aleatória é criptografada no banco de dados. Assim, você ainda tem a segurança adicional do servidor de banco de dados, em combinação com a coluna criptografada.2. Os documentos são armazenados com chaves diferentes, se o invasor conseguir uma chave, apenas parte dos documentos será comprometida.
No entanto:
Se o invasor se apossar da senha mestra e tiver acesso de leitura à tabela de usuários, todo o sistema está, mais uma vez, quebrado.