Obiettivo
Voglio memorizzare i dati crittografati in un database.
Vincoli
- La crittografia a livello di applicazione (la crittografia prima di inviare al DB) non è un'opzione ragionevole per il mio caso d'uso.
- I fornitori di DB che sto considerando non mi consentono di creare più utenti / gestire i permessi al prezzo che pagherò. Ciò significa che la separazione delle autorizzazioni per i registri rispetto a letture e scritture non è un'opzione.
Opzioni
- Permetti a MySQL di gestire la crittografia AES (tramite
aes_encrypt/decrypt
) per me (sono a conoscenza del problema del blocco della BCE e del fatto che MySQL registra dati sensibili in testo normale se non configurato correttamente) - Utilizza un provider DB che offre la crittografia a riposo (il tipo che avviene in modo trasparente - cripta automaticamente su
SET
e decrittala suSELECT
)
Domande
Domanda 1
Perché dovrei mai scegliere questo tipo di crittografia a riposo su aes_encrypt
? (Come nota, non sto memorizzando informazioni sulla carta di credito o qualsiasi altra cosa che mi incoraggerebbe a criptare legalmente a riposo).
A quanto ho capito, il punto di crittografia dei dati nel database è quello di affrontare la realtà che le violazioni DB avvengono. Con questo in mente, se qualcuno ottiene l'accesso al mio DB (nel senso che possono eseguire query), questo tipo di crittografia in realtà non li aiuterebbe in quanto sarebbe semplicemente decrittografare i dati quando SELECT
? Mi sembra che stia rallentando le query senza aggiungere sicurezza.
aes_decrypt
, d'altra parte, richiede che l'intruso abbia accesso a una chiave memorizzata su una macchina diversa dietro credenziali diverse. Non è più sicuro?
Domanda 2
Nello scenario descritto nella domanda 1, un utente malintenzionato ha ottenuto l'accesso alla query a un DB. Se è così, non potrebbero semplicemente abilitare la registrazione e recuperare il tasto AES in testo semplice, rendendo anche aes_encrypt
inutile?
(Ricordare il numero 2 qui.)
Domanda 3
Escludendo l'iniezione sql, ci sono altri scenari in cui un utente malintenzionato sarebbe in grado di visualizzare ciò che è nel mio database senza eseguire un SELECT
e quindi senza attivare una decrittazione trasparente a riposo?
raccomandazioni?
Se hai qualche suggerimento che si adatta ai miei limiti, fammelo sapere. Grazie!