Se vuoi assicurarti che gli utenti abbiano accesso ai loro file solo fornendo una chiave (possibilmente conservata in memoria in modo che non debbano fornirla più e più volte), allora perché non usi semplicemente un semplice , file system non crittografato e crittografare ogni file individualmente?
Forse perché questo perde informazioni sul numero di file, le date di creazione e modifica, le dimensioni dei file e, eventualmente, i nomi dei file se non li crittografate. Quindi inizi a scrivere del codice attorno a quella soluzione e alla fine ti ritroverai con una soluzione che memorizza i singoli file in un contenitore in modo da avere il controllo sui metadati del file.
E ora hai reinventato LUKS, TrueCrypt, VeraCrypt, ...
L'unica differenza tra il tuo sistema e queste soluzioni è che il tuo sistema supporta chiavi individuali per ogni utente mentre LUKS & Co basta usare una sola chiave. Ma puoi ottenere quasi lo stesso comportamento da LUKS creando un singolo contenitore per utente. Hai ancora il problema che se qualcuno ottiene l'accesso come root alla macchina, può leggere tutti i contenitori aperti.
Tuttavia, può farlo anche quando ogni file è crittografato individualmente. È necessaria un'interfaccia per il sistema che accetta un utente e un nome file, decodifica il file al volo utilizzando la chiave utente, che si trova in memoria, e restituisce il contenuto del file decrittografato. Cosa deve impedire a root di utilizzare la stessa interfaccia, mascherata da utente?
Fondamentalmente, LUKS sotto un filesystem standard fornisce l'interfaccia che avresti dovuto progettare altrimenti. Ci sono solo due soluzioni che posso vedere per darti più sicurezza (ma non quello che pensi):
-
Utilizzare un TPM per proteggere le chiavi dell'utente. In questo modo non verranno rubati dalla memoria, ma un utente che ha root può comunque mascherarsi da un altro utente e decrittografare ogni file ordinando al TPM di decodificarne il contenuto.
-
Inserisci i dati crittografati e un'API di accesso su un computer dedicato che serve solo la tua applicazione ed è accessibile solo tramite l'API di accesso. Questo rende molto più piccola la superficie di attacco sui dati crittografati. Ma non può nemmeno proteggerti da un account root compromesso sul tuo server delle app o sul server di archiviazione.
Quindi, per riassumere: penso che tu abbia già quello che vuoi fuori dalla scatola con LUKS. Non esiste una linea di difesa sicura contro root compromessa.