Un saluto a tutta la lista,
mi scuso in anticipo l'OT.
Avrei bisogno di un consiglio per cifrare il contenuto di una directory
(che può avere dimensione variabile) e che dovrà essere caricata online.
Al momento sto valutando due possibili candidati:
1) gocryptfs (disponibile sui repo di Debian 12). Lo sto provando e
funziona bene. Per chi non lo conoscesse è un fs FUSE, bisogna
inizializzare la directory da cifrare, montarla e scriverci dentro i
file e smontarla. Il risultato finale è una directory con il suo albero.
I nomi dei file e directory sono cifrati, usa un IV per ogni singola
directory (e non per singolo file) che viene memorizzato nella directory
a cui appartiene. C'è stato un audit nel 2017 dove viene riportato che
qualche informazione si può recuperare ma generalmente è considerato
sicuro. Ha dei limiti: per esempio la lunghezza del nome del file non
puo superare un certo numero di caratteri, in passato non supportava le
ACL. Inoltre ha un file (gocryptfs.conf) che non deve essere caricato
online altrimenti si può perdere la confidenzialità dei dati.
2) Container LUKS su file: stavo leggendo qualche tempo fa [1] di poter
utilizzare i container LUKS per cifrare solo una parte interessata e non
necessariamente tutto il device. Praticamente si crea una file di un
determinata dimensione. Con fallocate l'allocazione è molto veloce in
quanto riserva solo lo spazio necessario senza scrivere dati (il file
viene visto pieno di \0) ma si può anche riempirlo con l'output di
urandom. Una volta creato il file si crea il device con 'cryptsetup
luksFormat', si apre con 'cryptsetup open', si crea il filesystem (ext4
o xfs) si monta, ci si scrive dentro, lo si smonta, si chiude il device
e il risultato è un file cifrato che può essere inviato in rete anche
via rsync (che con il sync del delta è molto efficiente). Per i
successivi utilizzi basta 'aprire' il container luks e montare l'fs.
Permette inoltre di avere un header staccato dal file in modo tale che
le informazioni importanti non vengano spedite in rete. Nel caso in cui
serva più spazio, il container può essere ingrandito (questo comporta
anche resizefs) a proprio piacimento.
I dubbi sono che mentre gocryptfs è sviluppato da (credo) un singolo
utente, LUKS/dm-crypt è lo standard su Linux. Inoltre LUKS è stabile e
molto testato, è portabile tra diversi sistemi e le limitazioni che ha
sono legate al filesystem che si usa sul device luks mentre le
limitazioni di gocryptfs sono legate al software stesso. Inoltre se
gocryptfs non è compilato per la distribuzione che si utilizza può
essere fastidioso non averlo nei repo del sistema (anche se ha una
versione statica sul sito).
L'unica pecca del container LUKS è che ci sono multipli livelli impilati
tipo: device -> fs -> luks -> fs. Credevo che questo comportasse un
degradamento delle performance ma dopo qualche test mi sono ricreduto.
Altra piccola nota è che in preparazione del file container, nel caso lo
si voglia popolare con dati random, richiede tempo e risorse ma una
volta fatto va una meraviglia.
Quali tra i due metodi è migliore?
Grazie in anticipo e mi scuso ancora per l'OT.
[1] - https://opensource.com/article/21/4/linux-encryption