Controllo accessi KEK

2

Ho un server linux.

Voglio crittografare (e decifrare) i dati che sono memorizzati in un database. Ci sono diversi processi che devono essere in grado di farlo, alcune delle mie applicazioni personali, ma anche script in esecuzione in nginx.

Desidero utilizzare una chiave di crittografia dei dati (DEK) per farlo. Per sbloccare il DEK, utilizzo una chiave di crittografia chiave (KEK). Il KEK viene fornito sollecitando l'amministratore all'avvio del sistema.

Qual è il modo migliore di archiviare il DEK in modo che questi processi (ma solo questi!) abbiano accesso ad esso?

La mia idea iniziale era di archiviarla nella memoria condivisa, ma ciò significa che ogni processo ha un potenziale accesso ad esso. (è corretto?)

L'idea successiva era di archiviarla su un tmpfs, che almeno ha qualche controllo di accesso (riguardo agli UID e ai GID) su quale processo può e non può leggerlo.

    
posta Lieuwe 08.02.2018 - 13:54
fonte

1 risposta

1

Idee sbagliate relative a KEK e DEK

Il KEK non è pensato per essere archiviato, solo l'eDEK (DEK crittografato) lo è. KEK viene immesso una sola volta e viene utilizzato per decodificare l'eDEK. Il DEK viene quindi tenuto in memoria da qualunque processo lo richieda, in quanto è fondamentalmente necessario che una chiave sia presente in memoria per poter essere utilizzata per la decodifica. Il KEK dovrebbe essere tenuto in memoria solo per il tempo sufficiente a decodificare l'eDEK, quindi dovrebbe essere sovrascritto (per evitare che si fermi nella memoria liberata). Poiché la gestione delle chiavi in memoria può essere difficile, con molti modi per rovinare le cose, io consiglio vivamente di utilizzare il software esistente progettato per questo scopo. Se non sai come e perché dovresti bloccare la memoria che manterrà il materiale chiave oppure su come garantire che le chiamate di memset non siano ottimizzato durante la cancellazione del materiale chiave dalla memoria, non dovresti implementare i crittosistemi da solo. Utilizzare una soluzione esistente o, per lo meno, una libreria crittografica di fascia alta e di facile utilizzo.

Memoria condivisa

Per quanto riguarda la tua affermazione sulla memoria condivisa, ciò dipende da cosa intendi per memoria condivisa. memoria condivisa POSIX (shmem) è un metodo di archiviazione di oggetti in memoria che qualsiasi processo con le autorizzazioni appropriate possono accedere. È simile alla tua idea di memorizzare i dati in tmpfs, tranne che la memoria condivisa POSIX utilizza un'API speciale per accedere agli oggetti. In tal caso, la memorizzazione di qualcosa di sensibile per un determinato utente nella memoria condivisa potrebbe non essere una buona idea.

L'altra definizione di memoria condivisa è la memoria presente nello spazio degli indirizzi di più di un processo. Un processo deve scegliere di condividere una determinata area di memoria con un altro processo, passando il MAP_SHARED flag su mmap quando si richiede memoria dal kernel. Di solito questo viene fatto da un processo genitore che poi si biforca in due processi che condividono una specifica regione di memoria. In questo caso, la memoria è condivisa solo da processi che lo consentono esplicitamente.

Modellazione delle minacce

È necessario definire il modello di minaccia. Da chi stai proteggendo questi dati? Dove sono posizionati rispetto ai dati? Che livello di accesso hanno? In generale, un sistema operativo fornirà già controlli di accesso a livello di software, rendendo la crittografia uno strumento sbagliato per impedire a un processo dannoso di accedere ai dati utilizzati altrove. Lo storage crittografato è progettato per fornire sicurezza data-at-rest , proteggendo i dati sul disco rigido guidare, dovrebbe essere rubato o altrimenti cadere nelle mani sbagliate. Per questo modello di minaccia in cui si intende utilizzare la crittografia, non è necessario fornire la chiave a un numero maggiore di processi di quelli necessari per la lettura effettiva del database. In particolare, è necessario consentire al software del database di eseguire la crittografia e la decrittografia, consentendo a chiunque disponga dell'autorizzazione di connettersi al server di database la possibilità di leggere i contenuti, in base alle autorizzazioni a livello di software.

    
risposta data 08.02.2018 - 15:43
fonte

Leggi altre domande sui tag