Qual è una buona strategia di crittografia dei dati per una risorsa condivisa (testo)?

5

Ho un caso d'uso in cui ho bisogno di crittografare un pezzo di informazione PII in un database, che poi può essere decodificato e accessibile da più ruoli utente in un'applicazione (ad esempio l'utente a cui appartiene, servizio clienti, ingegneria, ecc. ..).

Che cos'è una strategia standard del settore per questo genere di cose?

UPDATE: LEGGERE PRIMA DEL POSTING : oltre a postare commenti per la mia idea qui sotto (che apprezzo molto), proponi anche una strategia. Credo che sarebbe molto utile a tutti coloro che cercano di criptare ogni risorsa condivisa al giorno d'oggi.

Ecco quello che ho in mente al momento che, si spera, descriverò quello che mi riferisco meglio:

Full Disclosure : le informazioni riportate di seguito servono anche per ottenere un'opinione o una recensione tra pari sulla mia attuale strategia che ho trovato

Come parte di una strategia di difesa dei livelli, il mio criterio è di avere almeno 3 fattori per la strategia di crittografia / decrittografia in questo modo se vengono danneggiati 2 pezzi i dati non possono essere ancora decifrati.

I 3 fattori: Il software che accede alle informazioni, Un DB con dati crittografati (DB1), Un DB con le chiavi di crittografia (DB2).

La strategia di crittografia:

  1. I dati vengono immessi nel software
  2. A, diciamo, la chiave a 128 bit viene generata
  3. I dati vengono crittografati con quel tasto
  4. I dati crittografati sono archiviati nel DB (presentato come DB1 nei 3 fattori precedenti)
  5. La chiave 128b viene crittografata con una chiave master codificata nel software
  6. La chiave crittografata a 128 bit viene archiviata nell'altro DB (presentato come DB2 nei 3 fattori precedenti)

La strategia di decrittografia è il contrario.

Il punto è che il software contiene la chiave principale (Fattore 1), DB1 ha i dati crittografati (Fattore 2) e DB2 detiene le chiavi crittografate (yay per la ripetizione delle parole ... anche fattore 3) che può essere decodificato con la chiave principale.

Nella mia testa se qualcuno di questi viene esposto, è un'informazione inutile che non rivela le PII crittografate.

Btw presuppone algoritmi di crittografia solidi come AES (più probabile AES solo dato che DES, 3DES e Blowfish sono deprecati).

Aggiornamento mi rendo conto che non mi sono reso chiaro sul punto in cui questi tre fattori si reiscriveranno. Tutti e 3 saranno in diversi ambienti di hosting su 3 server diversi  Stiamo parlando di una strategia su larga scala (che potrebbe funzionare anche su piccola scala) dove i DB sono entità hardware intrinsecamente separate. Nella mia mente questa era l'assunzione iniziale.

Aggiornamento 2 Molti dei commenti qui giustamente suggeriscono che il software è il tallone d'Achile qui. Questo è anche il mio grande canandrum. Non riesco a pensare a nessuna strategia software in cui, se il software è compromesso, i dati non sono a rischio, dato che il software ha sempre un aprire la connessione nel DB e contiene tutta la logica aziendale per visualizzare / gestire tali dati. Anche implementando mydiamo nel software, ciò significa che i dati vengono compromessi se qualcuno prende il controllo del software.

    
posta dwkd 15.12.2016 - 21:06
fonte

6 risposte

7

Qualcuno che si intromette nel server farà il giro del software e dei database. Avendo tutti i tuoi fattori, saranno quindi in grado di eseguire la strategia di decrittografia al contrario per recuperare tutte le PII.

Nell'autenticazione a più fattori, i fattori aggiuntivi non contano se verrebbero rubati contemporaneamente a un fattore esistente. Ad esempio, un token hardware è un fattore diverso da una password, perché un keylogger (il tipico modo di rubare la password), essendo software, non sarebbe in grado di rubare il token hardware allo stesso tempo.

    
risposta data 16.12.2016 - 01:39
fonte
3

Se ho capito correttamente la tua domanda, stai cercando di rafforzare i dati contro un utente malintenzionato che potrebbe assumere un controllo parziale sul tuo datacenter. Non dimenticare che una volta che una parte di un data center viene compromessa, si presume che la zona completa amministrativamente accessibile da lì sia compromessa. Ciò significa che non è sufficiente separare le informazioni su 3 server diversi, ma che 3 server dovrebbero trovarsi in 3 zone diverse con un rigoroso firewall tra di loro per garantire che solo le informazioni richieste possano essere scambiate. O almeno, il database protetto e il normale database non dovrebbero trovarsi nella stessa zona.

In particolare, l'applicazione dovrebbe essere in grado di ottenere la chiave di crittografia / decrittografia attraverso un servizio web e presentando le credenziali che dimostrano che lo fa per conto di un utente autorizzato. Ciò significa che dovrai configurare un sistema di autenticazione e autorizzazione avanzato e esaminare attentamente tutte le implicazioni sulla sicurezza. Inoltre, è necessario impostare controlli del codice per controllare che l'applicazione non mantenga quella chiave più a lungo del necessario

Ciò che intendo è che è necessario utilizzare un sistema di crittografia strong, ma è solo la parte visibile di ciò che dovrebbe essere fatto per aumentare effettivamente la sicurezza. La parte essenziale non sarà solo tecnica, ma coinvolgerà l'organizzazione e una definizione precisa di quali privilegi sono concessi a chi e a quale server è permesso comunicare con quale altro. Dovresti anche considerare come vengono eseguiti i backup perché sono una parte essenziale in un sistema sicuro perché devono essere robusti ma non troppo facilmente accessibili. IMHO si dovrebbe anche prendere in considerazione il valore dei dati e dei rischi a cui è esposto. Perché l'installazione di un sistema sicuro non verrà senza un costo.

TL / DR: non ci sono evidenti difetti in ciò che descrivi, ma ciò che manca è la definizione della segregazione tra le diverse parti, perché il diavolo si nasconderà in tali dettagli.

    
risposta data 20.12.2016 - 18:20
fonte
1

So che hai accennato al fatto che i due database sono separati, ma ovviamente comunicano in qualche modo, quindi li considererei entrambi a rischio se la tua rete è compromessa, il che significa che potrebbero essere considerati solo 1 fattore.

Avere un token fisico separato è comunque una buona idea, ovviamente, ma il mio messaggio è che l'utilizzo di 2 database potrebbe non essere molto meglio che usare 1.

    
risposta data 20.12.2016 - 16:47
fonte
1

Forse un modo per migliorare la sicurezza non è l'hardcode della "chiave master" nel software, piuttosto il recupero in fase di esecuzione da un altro server. Almeno in questo modo l'attaccante non può semplicemente andarsene con software e DB, ma deve anche creare un dump della memoria per ottenere la chiave master o addirittura attaccare il server delle chiavi.

    
risposta data 20.12.2016 - 18:44
fonte
1

Se quello che stai facendo è un progetto su larga scala come hai detto, la mia raccomandazione è di andare con soluzioni commerciali indirizzate proprio a questo.

Conoscete il solito consiglio: non tirate da soli quando si tratta di crittografia / crittografia. Ci sono molti modi in cui la tua strategia può andare storta. Meglio controllare una soluzione testata e ce ne sono alcuni che penso si adattino esattamente alle tue esigenze.

In parole povere, vuoi una soluzione che abbia crittografia a livello di colonna, che fornisca chiavi di crittografia / decrittografia diverse per ogni colonna e ti dia la possibilità di definire i criteri di controllo dell'accesso per colonna.

La soluzione dovrebbe anche aiutarti a memorizzare e gestire le tue chiavi in un server separato (preferibilmente HSM) e garantire una trasmissione sicura delle chiavi tra i server.

Come divulgazione, ho lavorato come consulente di crittografia DB per un po 'di tempo, ma di nuovo questo mi mette nelle condizioni di darti un consiglio "I-ve-been-done-that".

Ho consultato molti clienti che hanno requisiti molto severi in termini di sicurezza e prestazioni. Non sono sicuro di quale DBMS stai utilizzando, ma se utilizzi il DB open source, potresti trovare mydiamo per avere tutto ciò che sei cercando. Se stai utilizzando DBMS commerciale, questo compan y o questo ha soluzioni abbastanza ben collaudate.

    
risposta data 21.12.2016 - 02:52
fonte
1

HSM

Una pratica piuttosto comune in questi contesti è quella di avere la "chiave master" del tuo scenario in un modulo di sicurezza hardware, quindi non la lascia mai e può decodificare le chiavi specifiche dei dati quando richiesto.

Come descritto attualmente, il tuo software sembra essere un singolo punto di errore: un exploit nella tua applicazione avrebbe accesso alla chiave master e probabilmente anche l'accesso in lettura a entrambi i database. Se vuoi veramente una "difesa in strati", allora devi assicurarti che il sistema che ha accesso a tutti i dati non sia in grado di decrittografarlo e il sistema in grado di decrittografare i dati non possa accedere a tutti i dati.

    
risposta data 21.12.2016 - 03:11
fonte