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

Rispondere a