Com base em que criar chaves de dados
Para PII, temos que criptografar algumas colunas em nosso banco de dados (toda a nossa infra reside em nosso próprio DC, não usando nenhum provedor de nuvem).
Agora, aproximadamente o que estamos fazendo é
- Criou um CMK na AWS.
- Gerar chave de dados usando CMK
- Armazene a chave criptografada no banco de dados
- Para cada solicitação, descriptografamos a chave de dados criptografada via AWS e obtemos a chave de dados de texto simples. (Basicamente, não fazemos isso para cada solicitação, armazenamos em cache por algum tempo na memória devido a problemas de custo / desempenho)
- Criamos nossa própria biblioteca de criptografia (usando AES-256 com CBC com IV aleatório / salt aleatório para cada solicitação)
- Em seguida, usando a chave de dados de texto simples, chamamos a biblioteca AES para criptografar / descriptografar.
Agora eu tenho algumas perguntas
a) Quantas chaves de dados diferentes precisamos criar? Quero dizer se deve ser diferente para cada coluna / diferente para cada serviço / equipe de chamada?
O AES-256 com CBC (Random SALT / Random IV para cada solicitação) é adequado para nosso caso de uso ou preciso usar AES com GCM?
Eu preciso girar as chaves de dados?
Respostas
Não podemos saber as respostas. Depende totalmente do seu caso de uso, do qual você explicou muito pouco.
Algumas considerações:
Quantas chaves de dados você precisa criar? Tanto quanto você tiver permissões de acesso diferentes. Por exemplo: se o grupo1 tiver acesso a col1, col2, col3 e o grupo2 tiver acesso a col1, col4, col5, você precisará de 3 chaves de dados (uma para col1, uma para col2 / 3 e uma para col4 / 5). Se você deseja ser realmente flexível, por exemplo, porque sua organização freqüentemente se reorganiza, você pode escolher usar mais chaves, por exemplo, uma por coluna.
Eu escolheria o GCM, pelos seguintes motivos:
- desempenho
- CBC é menos seguro (ataques de preenchimento fe)
- Sempre gostei de Evariste Galois
- Isso depende muito do seu aplicativo. Para bancos de dados muito grandes que contêm muitos anos de dados históricos, a rotação de chaves geralmente é impraticável. Para bancos de dados pequenos onde o valor dos dados é limitado no tempo, você pode.