Per fornire uno sfondo veloce, dobbiamo implementare una soluzione in cui possiamo garantire che le informazioni siano archiviate crittografate. L'accesso ai dati di crittografia sarà possibile solo attraverso un'applicazione che abbia accesso dedicato al database. Con ogni "richiesta" di questa applicazione, verranno forniti i dettagli di autenticazione che verranno poi utilizzati per creare un registro di chi ha letto quali informazioni e quando.
I miei requisiti principali sono:
- MySQL 5.5
- Il database verrà replicato a scopo di backup. Uno dovrebbe essere in grado di ripristinare da tale database replicato, ma accedendo a un database replicato non dovrei essere in grado di leggere alcuna informazione.
La mia idea è di usare la crittografia a livello di applicazione e memorizzare i valori crittografati espliciti nel database. Cioè, a livello tecnico, il database non ha modo di sapere che le informazioni sono criptate. L'effettiva "struttura" del database (tabelle, colonne, ecc.) Non è qualcosa che consideriamo segreto. Per implementare la crittografia a livello di applicazione, sto pensando di applicare AES_ENCRYPT / AES_DECRYPT che è incorporato in MySQL, utilizzando una passphrase conosciuta solo dall'applicazione.
Qualcuno vede un problema con questo approccio? Sicuramente, la passphrase deve essere tenuta segreta. Se la passphrase dovesse perdere, penso che sarebbe banale riancrivere tutti i valori con una nuova passphrase. Il database non dovrebbe essere grande, i requisiti di prestazione sono bassi. Gli ambienti di sviluppo e testing sarebbero facili da avere, poiché l'unica differenza sarebbe la passphrase utilizzata.