Articolo
TCFS - Transparent Cryptographic File System
Un filesystem cifrato per Linux.
DIA - Dipartimento di Informatica
ed Applicazioni
Università degli Studi di
Salerno.
http://www.tcfs.it
Introduzione.
Al giorno d'oggi, tenuto conto del notevole progresso della tecnologia di rete,
è realmente fattibile condividere risorse in rete. Non solo in rete locale
(LAN) ma anche su rete globale (WAN o Internet).
Con l'avvento sul mercato di
strumenti wireless (quali PDA o notebook) è sempre maggiore la richiesta
di repository accessibili da qualunque punto della rete e attraverso diversi
tipi di rete.
In questa ottica, i file system di rete, uno dei primi servizi ad esser stato
distribuito in rete, assume un ruolo sempre più necessario.
Il distribuire in rete servizi, risorse e applicazioni, se da un lato offre
notevoli vantaggi, dall'altro crea notevoli problemi di sicurezza: utenti
non autorizzati possono ottenere accesso a servizi ristretti.
Nell'esempio di file system distribuiti in rete, due sono le entità in
gioco: da un lato il server che ha accesso diretto al file system locale,
dall'altro il client che richiede accesso al file system.
Uno dei più diffusi file system di rete è NFS (Network
File System). A dispetto della sua notevole diffusione, l'NFS non si
pone affatto il problema della sicurezza. Nessun tentativo di proteggere i
dati in rete, nessun tentativo di identificazione del client da parte del
server, nessun tentativo di identificazione del server da
parte del client. In questo contesto, niente proibisce ad un malintenzionato
accesso all'intero file system che il server condivide.
In questo articolo verrà introdotto TCFS (Transparent
Cryptographic File System), un file system di rete che affronta e risolve
il problema di proteggere i dati in un file system di rete.
Il progetto nacque nel 1995 ed ha subito, nel corso degli anni, notevoli
migliorie con l'aggiunta di nuove uniche caratteristiche (come la condivisione
di file cifrati in gruppo).
Scopi di TCFS.
Durante la progettazione di TCFS si cercò di trovare un sistema
capace di fornire un robusto meccanismo di sicurezza che implicasse quanto
meno coinvolgimento possibile da parte dell'utente finale.
Questo meccanismo doveva garantire:
- un modello di fiducia minimo;
- impatto minimo sull'amministrazione del sistema;
- impatto minimo sulle applicazioni client;
- impatto minimo sull'utente finale.
l'architettura di TCFS è stata progettata per rispettare i punti
appena esposti, pur rimanendo semplice nella sua essenza: ogni qualvolta una
applicazione, in esecuzione sul client, richiede un blocco di dati, il kernel
del client effettua una richiesta al server. Il server invia i dati al client
in maniera cifrata. Il kernel del client decifra i dati e li passa alla
applicazione che li ha richiesti.
Il processo di scrittura funziona in maniera analoga: l'applicazione in
esecuzione sul client desidera salvare dati sul file system di rete. Il kernel
del client riceve i dati dall'applicazione, li cifra e li invia (cifrati) al
server. Quest'ultimo salva i dati sul file system senza minimanente toccarli.
L'utente ha il solo onere di passare la chiave al kernel all'inizio della
sessione di lavoro. Non deve nemmeno ricordare altre password all'infuori
della propria password di login (a meno che non voglia usare una passphrase).
Questa semplice architettura rispetta i quattro punti sopra esposti:
- modello di fiducia minimo:
i dati compaiono in chiaro (sia quelli letti che quelli da scrivere) solo sul
client. Il server riceve solo dati cifrati e non ha alcun modo per decifrarli.
In rete i dati viaggiano sempre cifrati (sia in lettura che in scrittura).
Inoltre, poich&ecute; il processo di cifratura e decifratura dei dati avviene solo
sul client, la chiave stessa non verrà mai spedita attraverso la rete.
L'unica macchina fidata è, quindi, il client.
- impatto minimo sull'amministrazione del sistema:
il server funge da normale server NFS.
L'amministratore di sistema della macchina server può del tutto
ignorare il fatto che il file system esportato sia in realtà un file
system TCFS. Per lui è un normale file system NFS.
- impatto minimo sulle applicazioni client:
nessuna modifica ai sorgenti e nessuna ricompilazione delle applicazioni
installate sul client è necessaria. Le usuali funzioni di gestione di
file sono rimaste inalterate.
Non è nemmeno richiesto che le applicazioni abbiano a conoscere come
gestire le chiavi. Tutto ciò è gestito, trasparentemente,
da TCFS.
Le applicazioni client ignorano del tutto il fatto di lavorare su file
salvati su TCFS. Così come NFS viene visto dalle
applicazioni come un normale file system locale, così accade anche per
TCFS.
- impatto minimo sull'utente finale:
TCFS ha un impatto minino sull'utente finale.
In alcuni casi addirittura nullo. Utenti sulla macchina client
(nel caso questa sia condivisa da più di un utente) possono accedere ai
loro file ignorando del tutto che essi siano conservati su TCFS. Ciò non
vieta, però, la possibilità, ad utenti che lo richiedano,
di un maggiore controllo sulle regole di accesso ai file.
TCFS fornisce a questo tipo di utenti completa gestione delle chiavi
di accesso e l'abilità di controllare quali file debbano essere cifrati
e quali no.
Panoramica delle caratteristiche di TCFS.
L'ultima versione di TCFS (la 3.0 attualmente non ancora completa ed in
versione beta) implementa le seguenti funzionalità:
- data integrity check:
ad ogni blocco di un file cifrato con TCFS viene aggiungo un piccolo
check (un hash).
Questo hash viene controllato ad ogni lettura del blocco. Se
il controllo ritorna errore, allora il blocco è stato modificato sul
server o durante il viaggio in rete.
In questo caso TCFS ritorna un errore all'applicazione richiedente.
Per ogni file viene generata una chiave diversa. Questa chiave viene
cifrata con la chiave di sessione dell'utente e conservata all'interno
dell'header del file. Per ogni blocco dati alla file key viene aggiunto
il numero del blocco. In questo modo ogni blocco viene cifrato usando una
chiave differente. Blocchi uguali daranno quindi output diverso, sia
in file diversi che all'interno dello stesso file.
- dynamic encryption modules:
È possibile scegliere, per ogni singolo file o directory, il motore di
cifratura da usare per cifrarlo. Nel caso delle directory questo significa
scegliere con che motore di cifratura cifrare i nomi dei file e che motore
usare per cifrare i nuovi file appena creati. È comunque possibile
cambiare il motore di cifratura ogni volta che si vuole.
È possibile inserire o rimuovere motori di cifratura a runtime, senza
bisogno di far ripartire il sistema, senza bisogno di rilanciare TCFS e
addirittura mentre TCFS stesso sta lavorando per altri utenti.
Questo è stato ottenuto sfruttando appieno il caricamento di codice
dinamico (i moduli) presente in Linux.
Il motore di cifratura usato per cifrare un file (o directory) è
salvato nel suo header. Quando viene
effettuata una lettura/scrittura in quel file, viene caricato il modulo
corrispondente in memoria. Il modulo, una volta caricato, provvederà a
registrare le proprie funzioni di cifratura/decifratura. In questo modo
TCFS potrà usarle per cifrare/decifrare il file.
- group sharing of files:
È possibile condividere file o directory tra gruppi di utenti.
Per ogni gruppo viene generata una chiave (all'atto della creazione del
gruppo stesso). Ad ogni membro del gruppo viene data una share (un pezzo
di chiave). Quando una certa soglia (threshold, definibile per ogni
gruppo) di utenti è connessa al sistema ed ogni utente ha immesso la
propria share, allora, e solo allora, la chiave diventa disponibile al sistema
ed è possibile cifrare/decifrare i file del gruppo.
È matematicamente impossibile ricuperare la chiave (non conservata in
nessun database, al contrario della chiave utente) se un numero di utenti
inferiori alla soglia combina le proprie share.
- Kerberos support:
Ancora non disponibile in TCFS 3.0 beta, dovrebbe essere disponibile
nella sua versione finale.
Sarà possibile autenticare un utente, e quindi ottenere la chiave di
sessione, utilizzando Kerberos.
La gestione delle chiavi in TCFS è totalmente svincolata dal
core di TCFS stesso.
Tutta la gestione delle chiavi è affidata ad una libreria esterna
chiamata tcfslib. Al momento la tcfslib fornisce un sistema base
(Basic Key Management System) per la gestione delle chiavi (cifrando la
chiave di sessione di TCFS con la password di login dell'utente).
Nella versione finale stabile di TCFS 3.0 sarà possibile gestire
le chiavi appoggiandosi al sistema di autenticazione di Kerberos.
- TCFS-aware application support:
Anch'esso ancora in fase di sviluppo, sarà disponibile nella versione
finale stabile di TCFS 3.0.
Grazie all'uso di un header TCFS è possibile salvare, in maniera
sicura, informazioni aggiuntive riguardanti un file cifrato.
È possibile sviluppare una qualsiasi applicazione TCFS e
sfruttare l'header del file cifrato per salvare flag o dati aggiuntivi
(metadata).
Sarà sviluppato un intero set di funzioni di libreria (API) per
la gestione dei metadata utente.
Links utili
Maggiori informazioni su TCFS possono essere reperite dalla home page del
progetto
Documentazione più dettagliata su TCFS è scaricabile in
formato Postscript o PDF cliccando su questo link:
Archivi della mailing list di TCFS sono, invece, reperibili seguendo
questo link:
Aniello Del Sorbo