In realtà, hai TRE problemi che hai insinuato nella tua domanda.
- Il titolo parla di dati a riposo.
- Nella domanda parli anche del controllo degli accessi.
- Inoltre, hai anche una domanda di dati in transito.
La domanda potrebbe avere una risposta diversa se si sta già utilizzando un sistema DB e si introduce la crittografia in un sistema esistente. Molti dei sistemi DB ora supportano tali funzionalità di sicurezza (vedi sotto).
Controllo di accesso e dati in transito
La maggior parte dei sistemi DB supporta il controllo degli accessi dal primo giorno (è quasi un requisito minimo). Tuttavia, quando dici che tale e tale sistema deve essere in grado di leggerlo, è davvero una domanda di controllo degli accessi.
Allo stesso modo, i dati in transito sono anche una questione dei protocolli utilizzati, molti dei quali sono supportati dai sistemi di DB esistenti. Ad esempio, SQL Server supporta SSL per le connessioni, così come MySQL . (Cerca gli altri, potrebbero anche supportarli.)
Crittografia a riposo
Il terzo è la crittografia a riposo, che risolve il problema se una persona o un sistema non autorizzato ottenga il file DB effettivo, cosa vedono. Arriva anche un problema correlato di gestione delle chiavi, cioè perché non è possibile che chi ha ottenuto il tuo file DB non abbia le chiavi?
Durante la progettazione, sarebbe prudente assumere che un giorno le chiavi potrebbero essere compromesse o rubate o, semplicemente dal punto di vista dell'agilità di crittografia, sarà necessario modificare l'algoritmo e le chiavi (ad esempio, chiunque abbia usato DES doveva infine trasferirsi in AES). Anche se non può essere il costo 0, deve esserci un percorso esp. se il tuo DB sta per essere distribuito, per modificare l'algoritmo o la chiave.
Molti DB ora forniscono la crittografia a riposo insieme ad alcune soluzioni di gestione delle chiavi. Ad esempio, SQL Server ha supportato la crittografia dal 2008 . Inoltre, il server SQL ha pubblicato una gestione del ciclo di vita delle chiavi anche con apparentemente supporta chiavi simmetriche e asimmetriche (tramite certificati). Credo che SQL supporti anche la crittografia completa del DB rispetto ai campi selezionati tramite query (come nel caso specifico per SSN).
Allo stesso modo MySQL supporta anche la crittografia tramite le funzioni di query , che è possibile utilizzare per il tuo scenario SSN. Puoi anche utilizzare altri sistemi DB che potrebbero già supportare la crittografia e usarli.
Se utilizzi un sistema che supporta la crittografia integrata, è probabile che tu possa evitare molte insidie associate a farlo da solo, oltre a ottenere un sistema supportato.
DB ricerca
CryptDB è un sistema DB sviluppato presso il MIT che crittografa i dati a riposo e supporta anche l'esecuzione di query su dati crittografati. Se guardi la pagina del sistema, elenca le organizzazioni che lo stanno effettivamente utilizzando.
Scrittura della propria logica di crittografia
Probabilmente questo richiede più tempo e più difficoltà per farlo bene, ma in base alla tua domanda, sembra che tu stia pensando a questo come un problema. Se fossi in una situazione simile, sicuramente la eviterei e andrei con uno dei sistemi DB esistenti.
Ci sono molti problemi. Ad esempio, quando si crittografa i dati, l'output è in qualche modo casuale, pertanto la crittografia degli stessi dati con la stessa chiave di solito non comporterà lo stesso testo cifrato. Potrebbe essere un po 'impegnativo e potrebbe essere necessario ridurre l'entropia (ad esempio utilizzando gli stessi IV o sali) che potrebbero influire sulla sicurezza del sistema. E con qualcosa di semplice come la memorizzazione degli hash (o anche degli HMAC con una singola chiave), se qualcuno ottiene i file del database, possono eseguire la forza bruta per recuperare i dati in poche settimane, se non giorni. Ciò è particolarmente vero per campi come SSN, a meno che non si impieghi tempo e richiedano sempre più campi per una query (ad esempio SSN e DOB e prime tre lettere di cognome o tali combinazioni) e memorizzino solo quelli come hash ma nessuno dei due questi separatamente. Ciò aumenterà l'entropia e renderà più difficile per qualcuno trovare i valori effettivi nel caso in cui ottengano il file DB.
Oltre a questo, è necessario capire i principali problemi di gestione del ciclo di vita.
EDIT: In realtà è un problema comune e una volta ho valutato i dati di crittografia, quando ho scritto la risposta iniziale, non l'ho incluso qui. Da allora ho aggiornato la mia risposta per includere ciò, oltre a chiarire il controllo dell'accesso, la connessione sicura e i dati a problemi di resto.