Guide: passo per passo

Condividi:        

Generale
PREMESSA: se non conoscete il significato di qualche parola consultate il nostro Glossario.
8. File System Steganografico

Si può pensare di usare la steganografia anche per creare qualcosa di completamente diverso e più particolare. Si può pensare di mettere in piedi un file system basato sulla steganografia. Lo si può vedere come un meccanismo di immagazzinamento dei dati che ha lo scopo di dare all'utente un livello molto alto di protezione contro la rivelazione stessa dei suoi contenuti. Verrà permesso l'accesso ad un file a tutti quegli utenti che conoscono il suo nome e la relativa password; ma un attaccante che non sia in possesso dell'informazione corretta non potrà nemmeno immaginare la sua esistenza, anche avendo un completo accesso a tutto l'hardware ed il software. Sono possibili due costruzioni diverse.

Una prima idea potrebbe basarsi sul volere che l'attaccante non abbia nessuna conoscenza del nome del file e della sua password, e in questo modo non possa ottenere nessuna informazione sul sapere se il file sia presente nel sistema a meno che non conosca una parte del suo contenuto o possa tentare tutte le password possibili. Per semplicità nell'esposizione, si può assumere che la password P sia formata da k bit. L'idea principale è di avere un certo numero di file di copertura (cover files) nel sistema, che vengono inizializzati con valori random, e successivamente si nascondono i file dell'utente con delle operazioni di or esclusivo con un sottoinsieme dei file di copertura. Il sottoinsieme viene scelto in base alla password.

Per dare un esempio concreto, si supponga che tutti i file abbiano la stessa lunghezza e che ci siano k file di copertura nel sistema con cui iniziare, chiamati C0,...,Ck-1. Supponiamo anche che il primo file dell'utente sia F e che la sua password sia P. Allora vengono selezionati quei Cj tali che il j-esimo bit di P abbia valore 1 e si applica loro l'operazione di XOR bit per bit; il risultato viene ancora "xorato" con il file fornito dall'utente. Il risultato è che il file dell'utente F è ora l'or esclusivo di un sottoinsieme dei Cj selezionati dai bit non nulli di P. In altre parole, abbiamo:



Un utente potrà quindi nascondere un numero di file pari alle combinazioni possibili dei file di copertura. Aggiungendo successivamente altri file richiede di risolvere insiemi di equazioni lineari per decidere quale combinazione dei Cj vada alterata.

Una proprietà importante di questo sistema è che si avrà una gerarchia di accessi lineari (cioè un utente che memorizza un file con un dato livello di sicurezza conosce le password di tutti i file memorizzati ai livelli inferiori) e quindi i file possono essere aggiunti in modo naturale senza disturbare i dati già nascosti in precedenza.

L'algebra lineare mostra un possibile attacco al sistema: se la dimensione della password è k ed il nemico fosse a conoscenza di più di k bit del testo in chiaro, allora dopo aver ottenuto tutti i file casuali dal computer potrebbe scrivere k equazioni lineari nel k numero di bit sconosciuti della chiave. Questo è la ragione per cui si è supposto in partenza che il nemico non conosca niente del testo in chiaro. Se questa assunzione vale, allora l'intera struttura appare vulnerabile solo ad un nemico che conosca la password.

In un sistema pratico però si potrebbe voler gestire dei files di lunghezze diverse, ed anche avere la protezione sulle directory oltre che sui singoli files. Tutto questo può essere accomodato nel sistema descritto qui sopra immagazzinando ogni directory in uno dei file Fj la cui lunghezza potrebbe essere fissata a (per esempio) 10 MB; 100 di queste directory potranno essere facilmente immesse in un tipico PC con 3.5 GB di hard-disk, lasciando comunque abbastanza spazio libero per il sistema operativo e per software e dati non protetti.

In ogni caso questa costruzione comporta due problemi, uno maggiore ed uno minore. Quello minore è che potrebbe non essere sempre conveniente avere una gerarchia stretta di accessi lineari, mentre quello maggiore è che ci sarebbe una notevole penalizzazione nelle prestazioni: leggere o scrivere un file comporterebbe accedere ad una grande quantità di dati, soprattutto nel caso in cui si stia modificando l'intera directory.

A questo punto ci si potrebbe chiedere: perchè non viene semplicemente riempito l'intero hard-disk con bit casuali, e poi si scrive ciascun blocco di file ad un indirizzo assoluto del disco scelto in base a qualche processo pseudocasuale, come ad esempio criptando la locazione del blocco nel file usando come chiave una funzione hash del nome del file e della password della directory? Il blocco potrebbe inoltre essere criptato usando una chiave derivata usando un processo simile e così, assumendo di avere un blocco cifrato che il nemico non possa distinguere da una permutazione casuale, la presenza o l'assenza di un blocco a qualsiasi locazione non potrebbe essere distinguibile.

Il problema principale di un simile approccio è che, in base al teorema del compleanno di teoria delle probabilità, si comincerebbe ad avere "collisioni" (cioe' riscrittura di aree di dati gia' utilizzate) subito dopo aver scritto poco più di blocchi, dove N è il numero di blocchi presenti sul disco. Esiste comunque una soluzione: scrivere il blocco in più di una locazione. Se, per esempio, ogni blocco venisse scritto in due locazioni scelte pseudocasualmente, allora entrambi questi blocchi verrebbero sovrascritti da un terzo solo quando il numero dei blocchi totali sia approssimativamente nell'ordine O(N^2/3).

Si dovrebbe quindi aggiungere ridondanza ad ogni blocco prima di criptarlo, in modo che il sistema possa identificare quando un blocco è stato sovrascritto e cercare l'altra locazione in cui esso era stato salvato. Continuando su questo ragionamento, si avrebbe che se venissero scritte 10 locazioni uguali, allora prima che tutte le locazioni contenenti un blocco siano accidentalmente sovrascritte potremmo scrivere O(N^9/10) blocchi, e così via.

Sono già presenti sul mercato dei pacchetti di software che realizzano un tentativo di file system steganografico, tra cui va ricordato Steganos, che oltre a fare quanto voluto mette a disposizione anche le normali tecniche steganografiche già descritte per S-Tools. Purtroppo non essendo freeware non è possibile sapere a quale costruzione si siano ispirati i programmatori per implementare il file system.


Generale: Sergio1983 [45 visite dal 20 Dicembre 04 @ 00:01 am]