La steganografia è una tecnica di sicurezza che viene di solito confusa con quella della crittografia. In realtà esiste una differenza ben precisa tra i due concetti.
Lo scopo della crittografia è quello di
nascondere il contenuto di un messaggio, mentre la steganografia si prefigge di
nasconderne l’esistenza. Essa nasce perché in molte situazioni il solo uso
della crittografia non è sufficiente. Si pensi ad esempio ad un soldato che
viene sorpreso a scambiare messaggi cifrati con un governo ostile:
indipendentemente dal contenuto del messaggio, il solo fatto che vengono
scambiati messaggi cifrati desta ovvi sospetti. Inoltre le restrizioni
applicate dai vari governi ai sistemi crittografici hanno indotto a studiare
metodi alternativi per lo scambio di messaggi privati, tra cui la stessa
steganografia.
Lo studio di questa materia nella letteratura scientifica si deve a Simmons che nel 1983 formulò il “Problema dei prigionieri”. In questo scenario Alice e Bob sono in prigione e devono escogitare un piano per fuggire: tutti i loro messaggi vengono scambiati tramite il guardiano Willie. Se Willie scopre che essi si scambiano messaggi cifrati metterà uno di loro in isolamento ed il piano fallirà. Quindi essi devono trovare un metodo per nascondere il loro testo cifrato in un testo apparentemente innocuo.
2 Breve Storia della steganografia
La steganografia oggi è utilizzata frequentemente per mandare messaggi segreti via internet. Tuttavia le sue origini non sono affatto recenti.
La parola steganografia deriva dall'unione dei due vocaboli greci stèganos (nascosto) e gràfein (scrivere) ovvero scrittura nascosta o meglio ancora l'insieme delle tecniche che consente a due o più persone di comunicare in modo tale da nascondere l'esistenza della comunicazione agli occhi di un eventuale osservatore, tradizionalmente denominato "nemico" .
Il primo esempio di questa tecnica risale all'epoca
dell'impero persiano.
2.1 Storia di Erodoto
Erodoto, infatti, racconta la storia di un nobile persiano che fece tagliare a zero i capelli di uno schiavo fidato al fine di poter tatuare un messaggio sul suo cranio; una volta che i capelli furono ricresciuti, inviò lo schiavo alla sua destinazione, con la sola istruzione di tagliarseli nuovamente.
Le griglie di Cardano che erano fogli di materiale rigido nei quali venivano ritagliati fori rettangolari ad intervalli irregolari. Questa griglia veniva appoggiata su un foglio di carta bianca, il messaggio segreto veniva scritto nei buchi (ciascun buco poteva contenere una o più lettere), dopodiché si toglieva la griglia e si cercava di completare la scrittura del resto del foglio in modo da ottenere un messaggio di senso compiuto, il quale poi veniva inviato a destinazione. Per poter leggere il testo nascosto si doveva applicare sul messaggio ricevuto una copia esatta della griglia originaria
Quella delle cifre nulle era un'altra
tecnica steganografica che consisteva nell'inserire il messaggio nascosto in un
altro messaggio di testo. Fu usata nella seconda guerra mondiale, in
particolare per comunicazioni via radio. I messaggi trasmessi venivano
registrati e poi filtrati in modo opportuno per ricavare il messaggio nascosto.
Tecnicamente il messaggio trasmesso veniva composto in modo tale che, unendo le prime lettere di ogni capoverso o con altre tecniche, si ottiene un messaggio di senso compiuto. Il seguente, ad esempio, è un testo realmente inviato da una spia tedesca durante la seconda guerra mondiale:
Apparently neutral's protest is thoroughly discounted and ignored.
Isman hard hit. Blockade issue affects pretext for embargo on by products, ejecting suets and vegetable oils.
Considerando in sequenza la seconda lettera di ogni parola, si ottiene il messaggio:
Pershing sails from NY June 1
Anche se in realtà c'è una "r" di troppo.
2.4 Gli
Inchiostri Invisibili
Gli inchiostri invisibili (o inchiostri simpatici) sono sostanze che, in condizioni normali, non lasciano tracce visibili se usate per scrivere su un foglio di carta, ma diventano visibili se il foglio viene sottoposto a una fonte di calore.
Gli inchiostri usati vanno da sostanze di uso comune come succo di limone, aceto, latte, fino a sostanze più complicate come l'inchiostro a cobalto, utilizzato durante la seconda guerra mondiale, che può essere reso visibile solo mediante l'uso di particolari reagenti chimici.
Con l'utilizzo di queste sostanze è possibile scrivere il messaggio segreto negli spazi compresi tra le righe di un messaggio dall'aspetto "innocuo", quest'ultimo scritto con un inchiostro normale. (Per accedere al messaggio segreto occorre letteralmente "saper leggere tra le righe"...).
2.5
Tecnica dei Micropunti
La tecnica dei micropunti fotografici fu inventata dal direttore del F.B.I. durante la seconda guerra mondiale, si tratta di fotografie della dimensione di un punto dattiloscritto che, una volta sviluppate e ingrandite, possono diventare pagine stampate di buona qualità.
Caratteristica della steganografia, come si è detto, è l'esistenza di due messaggi: il primo, detto messaggio contenitore, è facilmente percepibile ed ha il compito di nascondere il secondo, detto messaggio segreto, racchiudendolo al suo interno e rendendolo quindi invisibile o, più correttamente, difficilmente percepibile.
I principi che stanno alla base dei software steganografici sono sempre gli stessi. Tuttavia esistono diversi approcci che fanno individuare varie famiglie di software.
In base all'origine del file contenitore possiamo
distinguere software di steganografia iniettiva e software di steganografia
generativa.
3.1
Steganografia Iniettiva
La prima categoria è senz'altro la più numerosa. I software di questo tipo consentono di "iniettare" il messaggio segreto all'interno di un messaggio contenitore già esistente modificandolo in modo tale sia da contenere il messaggio, sia da risultare, al livello al quale viene percepito dai sensi umani, praticamente indistinguibile dall'originale.
|
|
|
|
Figura
1: Schema
steganografia iniettiva
3.2
Steganografia Generativa
Nei software di tipo generativo, invece, si parte dal messaggio segreto per produrre un opportuno contenitore atto a nascondere nel migliore dei modi quel determinato messaggio segreto.
Secondo un diverso sistema di classificazione le tecniche steganografiche possono essere ripartite in tre classi: steganografia sostitutiva, steganografia selettiva e steganografia costruttiva.
Figura
2: Schema
steganografia generativa
È senz'altro la tecnica steganografica più
diffusa, tanto che spesso quando si parla di steganografia ci si riferisce
implicitamente a quella di questo tipo. Alla base di questa tecnica c'è
un'osservazione: la maggior parte dei canali di comunicazione (linee
telefoniche, trasmissioni radio, ecc.) trasmettono segnali che sono sempre
accompagnati da qualche tipo di rumore.
Questo rumore può essere sostituito da un segnale
- il messaggio segreto - che è stato trasformato in modo tale che, a meno di
conoscere una chiave segreta, è indistinguibile dal rumore vero e proprio, e
quindi può essere trasmesso senza destare sospetti.
Quasi tutti i programmi si basano su questa idea,
sfruttando la grande diffusione di file contenenti una codifica digitale di
immagini, animazioni e suoni; spesso questi file sono ottenuti da un processo
di conversione analogico/digitale e contengono qualche tipo di rumore. Per
esempio, uno scanner può essere visto come uno strumento di misura più o meno
preciso.
Un'immagine prodotta da uno scanner, da questo
punto di vista, è il risultato di una specifica misura e come tale è soggetta a
essere affetta da errore. Lo stesso discorso lo si può fare analogamente per un
file sonoro che evidentemente è stato acquisito tramite una scheda sonora.
La tecnica impiegata nella maggior parte dei
programmi è concettualmente molto semplice: sostituire i bit meno significativi
dei file digitalizzati con i bit che costituiscono il file segreto (i bit meno
significativi, infatti, corrispondono ai valori meno significativi, importanti
ed evidenti di una misura, cioè proprio quelli che possono essere facilmente
affetti da errore!)
Quello che succede quindi è che il file
contenitore risultante, dopo un'iniezione steganografica, si presenta in tutto
e per tutto simile all’originale, con differenze difficilmente percettibili e
quindi, a meno di confronti approfonditi con il file originale (comunque non
effettuabili ad occhio nudo) è difficile dire se le eventuali perdite di
qualità siano da imputare al rumore od alla presenza di un messaggio segreto
steganografato. Inoltre il più delle volte il file originale non è disponibile
e quindi effettuare questo confronto è pressoché impossibile.
3.3.1
Steganografia Sostitutiva con file Bitmap e File Wav
Supponiamo di voler utilizzare come contenitore
un file di tipo bitmap (bmp) con una profondità di colore a 24 bit (224=16777216
colori possibili).
Un immagine, dal punto di vista digitale, non è
altro che una matrice MxN di piccoli punti colorati detti pixel. Un file
grafico di tipo bitmap a 24 bit è codificato in modalità RGB, pixel per pixel.
Questo significa che ogni singolo pixel viene codificato tramite 3 byte in
sequenza, ognuno dei quali rappresenta i livelli (da 0 a 255) dei colori
primari, cioè rosso (Red), verde (Green) e blu (Blue) che costituiscono il
colore di quel determinato pixel. Questo significa che, per fare un esempio, un
file bitmap a 24 bit di dimensioni 640x480 occuperà uno spazio di
640x480x3=921600 byte. Un'operazione di steganografia sostitutiva su questi
tipi di file consiste nel sostituire i bit meno significativi dei singoli byte
con quelli del messaggio segreto. Cioè, se ad esempio, abbiamo un pixel
codificato in questo modo:
11100001 00000100 00010111
possiamo inserire tre bit del messaggio
segreto. Se ad esempio i bit del messaggio segreto sono 110 il nostro pixel
diventerà il seguente:
11100001 00000101 00010110
e operazioni che si
fanno su ogni singolo byte quindi possono essere tre:
1) Lo si lascia invariato
2) Gli si aggiunge 1
3)
Gli si sottrae 1
Questo fa sì che ad
occhio nudo le variazioni di colore siano praticamente impercettibili.
Per meglio renderci
conto abbiamo effettuato un esperimento. Preso un file bitmap di dimensioni
800x540, ne abbiamo fatto una copia ed abbiamo iniettato in essa un file di 157
kb utilizzando Steganos 3 Security Suite. Poi abbiamo osservato con un editor
esadecimale le differenze fra il file originale e la copia contenente il nostro
file nascosto. Ecco il risultato su una parte del file:
Figura 3: Una parte del file originale Figura 4: La
stessa parte col messaggio nascosto
Facendo qualche
calcolo, per inserire un byte del messaggio segreto occorrono ovviamente 8 byte
del messaggio contenitore. Generalizzando, volendo calcolare la massima
dimensione di un messaggio segreto che può stare all'interno di un file grafico
MxN si può usare la seguente formula:
Quindi, tornando al nostro file bitmap 800 x 540, esso
avrebbe potuto contenere al massimo (800 x 540 x 3) / 8 = 162000 byte di dati; infatti
nel precedente esperimento abbiamo potuto iniettare senza problemi un file di 157 Kb = 160768 byte, ma sarebbe stato impossibile iniettarne uno di soli 2 kb più grande. Un formato tipico, come il 640 x 480, potrà contenere invece un messaggio segreto di (640 x 480 x 3) / 8 = 115200 byte.
Tuttavia è possibile raddoppiare o addirittura
triplicare o quadruplicare la possibile dimensione del messaggio segreto
utilizzando non più il singolo bit meno significativo di ogni byte, ma i due,
tre o quattro bit meno significativi. L’altra faccia della medaglia sarà
ovviamente una diminuzione della qualità dell’immagine e quindi si può dire che
più bit si usano, maggiore è la possibilità di destare sospetti. Quindi quello
che si può fare è controllare ogni volta il risultato e decidere di conseguenza
quanti bit utilizzare a seconda di quanto è visibile la perdita di qualità.
Alcuni software, ad esempio, testano che la differenza di luminosità tra un
pixel e quelli che lo circondano non sia troppo alta.
Un discorso analogo lo si può fare per i file
sonori di tipo wav. Questo formato si basa anch'esso su sequenze di parole di 8
o 16 bit.
Un file wav mono, campionato a 44100 Hz a 16 bit,
per esempio, indica un file che è stato costruito ottenendo 44100 stringhe di
16 bit al secondo nella fase di digitalizzazione del suono, ossia è stata
generata una stringa di 16 bit ogni 1/44100 di secondo. Nel caso di un wav
stereo, le stringhe di 16 bit ottenute sono due, una per il canale destro ed
una per il sinistro. E' facile capire che anche qui, con la stessa logica di
prima, si possono sostituire i bit meno significativi allo scopo di
steganografare un messaggio. Tanto per avere un'idea, un file wav stereo di un
minuto è grande 16 bit x 44100 Hz x 60 sec = 42336000 bit = 5168 Kb ca. da
raddoppiare perché il file è stereo, quindi 10336 Kb. Se decidessimo di
utilizzare i 2 bit meno significativi per ogni stringa di 16 bit otterremmo una
disponibilità di 84762000 bit / 16 bit x 2 = 10595250 bit = 1293 Kb ca.
|
|
Figura 5: File wav originale |
Figura 6: Lo stesso file wav con iniezione di un file di testo di 128 kb |
In base a quanto si è detto, tutto sembra
funzionare perfettamente, ma c'è un problema intrinseco nell'operare nel modo
sopra esposto. Il problema risiede proprio nel formato del file contenitore
utilizzato. I formati bitmap e wav, infatti, sono formati abbastanza pesanti ed
ingombranti come si è visto e proprio per questo non sono molto popolari sulla
rete Internet, quindi il solo fatto di scambiare un file bitmap o wav potrebbe destare
sospetti. Ecco perché, sulla base del concetto originario, si sono escogitate
altre tecniche steganografiche da attuare anche sui formati di file più comuni
in Internet. Tuttavia si sono dovute trovare delle soluzioni alternative.
In particolare, non è possibile operare come
sinora descritto con i file compressi. Se iniettassimo delle informazioni in un
file bitmap e dopo lo convertissimo in JPEG, ad esempio, le informazioni
andrebbero inevitabilmente perse. La compressione JPEG, infatti, ha la tendenza
a preservare le caratteristiche visive dell'immagine piuttosto che l'esatta
informazione contenuta nella sequenza di pixel, di conseguenza sarebbe
impossibile risalire al file bitmap originario.
Quello che si fa in questi casi è operare ad un
livello di rappresentazione intermedio. Per poter utilizzare anche le immagini
JPEG come contenitori, è possibile iniettare le informazioni nei coefficienti
di Fourier ottenuti dalla prima fase di compressione.
Un discorso analogo si può fare col popolare
formato audio MP3. Questo formato, al fine di comprimere, durante la fase detta
Inner loop allarga gli intervalli di prelevamento del campione e testa
se il livello di distorsione introdotto è superiore ad un certo limite definito
da un modello psicoacustico. In questa fase, quindi, si individueranno i bit
più importanti e quelli meno importanti e quindi utilizzabili potenzialmente
per nascondere informazioni.
Il problema principale della steganografia che
usa file compressi come contenitori è che, purtroppo, è facilmente attaccabile,
nel senso che se un file compresso che fa da contenitore viene decompresso e
compresso nuovamente, è facile capire che il messaggio nascosto andrà perso.
3.3.3
Formato Gif
Questo formato merita un discorso a parte perché
per raggiungere lo scopo di trasformarlo in messaggio contenitore, si utilizza
un approccio un po' diverso dai precedenti. Il formato GIF fa uso di una
palette di colori, cioè un sottoinsieme di colori prestabilito. I pixel che
formano l’immagine possono assumere uno dei colori della palette.
Questo si traduce in una grossa economia di
rappresentazione del file visto che ogni pixel può essere rappresentato
semplicemente da un puntatore ad un colore della palette. Un caso tipico è
quello delle GIF a 256 colori. Nel momento in cui un'immagine è acquisita da
uno scanner contiene sicuramente un numero maggiore di 256 colori.
Tuttavia esistono alcuni algoritmi capaci di
diminuire il numero di colori utilizzati limitando il più possibile la perdita
di qualità. La soluzione che viene di solito adottata dunque è la seguente: si
acquisisce un'immagine dopodiché si limita il numero di colori ad un numero
inferiore a 256 utilizzando uno degli algoritmi suddetti. Dopodiché si converte
in GIF riempiendo la palette con dei colori molto simili a quelli rimasti.
Questo significa che ogni volta che si dovrà rappresentare un colore si potrà
scegliere di rappresentarlo in due modi: con il colore originale oppure con il
colore aggiunto simile all'originale.
Quindi c'è una possibilità di scelta e tutte le
volte che c'è possibilità di scelta fra più alternative si ha la possibilità di
nascondere un'informazione, è uno dei principi fondamentali della
steganografia. Se le alternative sono due potremo nascondere un bit (se il bit
è 0, scegliamo la prima, se è 1 la seconda); se le alternative sono quattro
potremo nascondere due bit (00 per la prima, 01 per la seconda, 10 per la
terza, 11 per la quarta) e così via.
La soluzione esposta è senz’altro molto
ingegnosa, ma presenta un problema: è molto semplice scrivere un programma che
analizzi la palette ed individui sottoinsiemi di colori simili e quindi la
probabile presenza di un messaggio steganografato. In effetti, questo tipo di
attacco è stato portato a termine con pieno successo da diversi steganalisti,
tanto che alcuni di loro hanno sostenuto che il formato GIF non fosse adatto
alla steganografia. In realtà esiste un altro metodo per steganografare con GIF
che si basa sulla seguente osservazione: un immagine GIF può essere rappresentata
in 256! modi diversi.
Come si è detto infatti, la palette che sta alla
base di una GIF si compone di 256 colori, tuttavia non è importante l’ordine in
cui i colori compaiono nella palette e quindi i 256 colori di una palette
possono essere permutati in 256! modi, ciò vuol dire che una stessa immagine
GIF può essere rappresentata in 256! modi diversi, a patto di cambiare
opportunamente la sequenza dei puntatori. Ancora una volta ci troviamo di
fronte a delle alternative. Poiché le alternative sono 256!, ciò significa che
potremo codificare log(256!) = 1683 bit, e questo indipendentemente dalle
dimensioni dell’immagine. Basta semplicemente permutare in modo opportuno la
palette.
3.3.4
Altri Formati
Come è facile intuire, partendo
dai concetti di base della steganografia è facile estendere queste tecniche ai
più svariati formati.
Oltre a numerosi applicativi
per i formati più comuni già descritti, come Steganos per BMP e WAV, Jstegshell
e JP Hide and Seek per JPEG, Mp3Stego per MP3, Gifitup e Gifshuffle per GIF, in
rete è possibile trovare tools steganografici per i formati più vari. In
particolare esistono programmi come wbStego, capaci di utilizzare PDF e HTML, o
ancora Datamark Technologies, che può utilizzare MID, AVI o MPEG.
Per quanto riguarda il discorso sicurezza,
generalmente tutte le norme che valgono per i programmi di crittografia
dovrebbero essere utilizzate per i programmi steganografici. Ci sono comunque
dei semplici principi a cui attenersi. Innanzitutto non bisogna mai usare file
pubblici o facilmente accessibili, quindi noti, perché ciò darebbe più
possibilità all’attaccante di scorgere la presenza di un messaggio
steganografato. Inoltre non bisogna mai usare più volte lo stesso file come
contenitore (l'ideale sarebbe generarne ogni volta uno nuovo mediante scanner
(nel caso di un file grafico) o convertitore analogico/digitale (nel caso di un
file sonoro) e distruggere gli originali dopo averli usati).
Tuttavia, il principale difetto della
steganografia sostitutiva è che le sostituzioni possono alterare le
caratteristiche statistiche del rumore nel media utilizzato. Se il nemico,
infatti, possiede un modello del rumore, può utilizzarlo per testare se i file
sono conformi al modello; se non lo sono probabilmente si è in presenza di un
messaggio steganografato. Il problema di questo tipo di attacco però sta nella
difficoltà di costruire un modello che tenga conto di tutti i possibili errori
o rumori. In casi molto specifici comunque questo tipo di attacco ha avuto buon
successo e la steganografia selettiva e costruttiva hanno proprio lo scopo di
evitarlo.
3.5 Steganografia
Selettiva
La steganografia selettiva ha valore puramente teorico e non viene utilizzato in pratica. Essa si basa sull’idea di procedere per tentativi fino a quando non si verifica una certa condizione. Per esempio, si fissi una semplice funzione hash che vale 1 se il file contenitore contiene un numero dispari di bit 1 e 0 se ne contiene un numero pari. A questo punto volendo codificare il bit 0, acquisiremo un'immagine (o un file sonoro) e controlleremo se il numero di bit 1 è pari. Se lo è avremo trovato un file adatto a contenere l'informazione che vogliamo codificare, altrimenti provvederemo ad acquisire un'altra immagine.
Questa tecnica ha il vantaggio che l'immagine ottenuta contiene effettivamente il messaggio segreto, ma non è stata modificata. È ovvio che sul piano pratico questa soluzione è inaccettabile perché è molto dispendiosa in termini di tempo ed oltretutto permette di nascondere una quantità d'informazione molto modesta.
La steganografia costruttiva, opera più o meno come la steganografia sostitutiva, con la differenza che nel modificare il file contenitore si tiene conto di un modello di rumore, nel senso che si tenta di sostituire il rumore presente nel media utilizzato con il messaggio segreto nel rispetto delle caratteristiche statistiche del rumore originale. Quest'approccio sembra la soluzione migliore, ma in realtà anch'esso non è esente da difetti.
Come si è già detto non è facile costruire un
modello del rumore, ed anche se lo si costruisce è possibile che qualcun altro
abbia costruito un modello più accurato e quindi in grado di scorgere comunque
la presenza di un messaggio segreto. Inoltre se il modello utilizzato cadesse
nelle mani del nemico, egli lo potrebbe analizzare per cercarne i punti deboli.
In questo modo si regalerebbe involontariamente al nemico uno strumento di
attacco molto efficace.
4
Sistema Steganografico ideale
A causa dei suddetti problemi, la tecnica
iniettiva rimane la più conveniente da usare.
Se si hanno particolari esigenze di sicurezza, si può pensare di usare
contenitori molto più grandi rispetto al messaggio segreto. In questo modo il
messaggio contenitore verrà modificato sono lievemente in modo da rendere
impossibile la rilevazione di un messaggio nascosto.
Tuttavia rimane un problema ancora da risolvere. In ambito crittografico il principio di Kerckhoff recita così: la sicurezza del sistema deve basarsi sull'ipotesi che il nemico abbia piena conoscenza dei dettagli di progetto e implementazione del sistema stesso; la sola informazione di cui il nemico non può disporre è una sequenza (corta) di numeri casuali - la chiave segreta - senza la quale, osservando un canale di comunicazione, non deve avere neanche la più piccola possibilità di verificare che è in corso una comunicazione nascosta.
È facile capire che, volendo aderire a questo principio, le tecniche esposte sono insufficienti. Infatti se i dettagli dell’algoritmo utilizzato sono resi pubblici, chiunque è in grado di accedere ad eventuali informazioni nascoste, semplicemente applicando il procedimento inverso.
Ecco perché si rende necessaria una fase di
preelaborazione del messaggio segreto. La soluzione più ovvia è quella di
crittografare il messaggio segreto prima di iniettarlo. Così facendo il
problema però non è del tutto risolto, poiché il file cifrato può comunque
essere estratto da chiunque e si presume che un crittoanalista esperto possa
riconoscere un file prodotto da un programma di crittografia convenzionale. A
questo punto il sistema steganografico fallisce. Mentre il fallimento di un
sistema crittografico è decretato dalla lettura del messaggio cifrato da parte
del nemico, un sistema steganografico si può decretare fallito quando ci si
accorge della sola presenza di un messaggio nascosto. La soluzione, quindi, è
quella di camuffare il messaggio cifrato prima di iniettarlo in modo che
risulti indistinguibile da semplice rumore. Per esempio, se un messaggio è
stato cifrato con PGP, il file cifrato rispetterà un particolare formato
contenente, oltre al blocco di dati cifrati, altri dati per lo più ridondanti
che facilitano la gestione del file da parte di PGP. Esistono programmi come
Stealth capaci di eliminare (e di reinserire nella fase di ricostruzione) tutte
le informazioni diverse dal blocco di dati cifrati. In questo modo il file
nascosto appare come una sequenza di bit apparentemente casuale, che è molto
difficile distinguere da rumore. L’attacco a questo punto sarà molto più
complesso perché seppure verrà estratto il file nascosto sarà difficile capire
che quei caratteri costituiscono un blocco di dati cifrati. Quindi soltanto
disponendo della chiave giusta si potrà accedere al messaggio in chiaro. In
caso contrario non si potrà neppure capire se il fallimento è dovuto al fatto
di non disporre della chiave giusta o al fatto che il file contenitore non
contiene alcun messaggio segreto.
Figura 7: Schema
steganografico ideale
In questa sezione esplicheremo il funzionamento
di alcuni tra i software steganografici più utilizzati. Un raccolta completa
dei programmi steganografici si può trovare all’indirizzo http://steganography.tripod.com/stego/software.html
5.1 Steganos
3 Security Suite
Il programma è stato sviluppato dalla DEMCOM di Francoforte (Germania) in collaborazione con CenturionSoft di Washington (USA). La versione 3 è stata rilasciata nei primi mesi del 2001 per piattaforma Intel con sistema operativo Windows 95, 98, ME, NT 4.0 e 2000. I requisiti minimi richiesti dal programma sono un processore Pentium, 32 MB di ram, circa 15 Mb di spazio libero su hard-disk. Il programma può essere scaricato gratuitamente dal sito www.steganos.com in versione shareware. Dopo 30 giorni di utilizzo è possibile continuare ad utilizzare il programma, ma in versione light, cioè con alcune funzionalità disattivate, oppure si può scegliere di registrarsi per continuare ad usarlo normalmente.
Più che un software steganografico, Steganos 3 è una suite di strumenti per la sicurezza. All’avvio appare una finestra dalla quale è possibile avviare i vari tool del pacchetto.
Figura 8: Steganos center
Open safe: permette di creare un drive virtuale nascosto a cui si può accedere
mediante una password. Dopo l’accesso è possibile utilizzare questo drive come una
qualsiasi unità e quindi utilizzarla con i normali File Manager. I dati
residenti su questo drive e la password per accedervi sono cifrati tramite
l'algoritmo AES selezionato dal NIST nell'ottobre 2000.
Internet trace destructor: quando si naviga su Internet, il browser memorizza dati riguardanti le ultime pagine visitate (cookies, cache, cronologia…). Queste informazioni facilitano e velocizzano la navigazione, ma lasciano tracce dei siti visitati. Anche l'uso quotidiano del computer lascia tracce. Questo strumento ha proprio lo scopo di eliminare queste informazioni.
Lock computer: permette di bloccare il computer e di potervi riaccedere tramite una
password.
E-mail encryption: fornisce uno strumento per la cifratura delle
e-mail (o più in generale, di un qualsiasi testo) tramite l’algoritmo Blowfish.
Utilizza gli appunti di Windows come i più noti applicativi crittografici.
Steganos file manager: è questa la parte della suite che riguarda la
steganografia. L’interfaccia utente è molto intuitiva e ricorda quelle di noti
programmi di compressione ed in effetti ci sono delle affinità nell'utilizzo.
La differenza è che mentre un programma di compressione permette di inserire
dati in un archivio compresso, questo strumento permette di nascondere dati
all'interno di file BMP o WAV. Dopo aver cliccato su New, abbiamo la
possibilità di compilare l'elenco dei file e/o delle directory da nascondere.
Figura 9: Schermata
principale di Steganos File Manager
Fatto ciò, cliccando su Close and secure
possiamo scegliere se cifrare soltanto o anche nascondere i dati. L’operazione
di Hide infatti presuppone comunque, nel rispetto del sistema
steganografico ideale, una operazione preliminare di cifratura. Dopo aver
scelto Hide il programma ci chiede in che modo scegliere il file
contenitore: possiamo scegliere di far cercare automaticamente un file
contenitore appropriato tra quelli disponibili sull'hard-disk, di generare un
nuovo file contenitore o di selezionare un determinato file come contenitore,
che ovviamente dovrà essere di una grandezza tale da contenere le informazioni
che vogliamo nascondere, altrimenti ci verrà chiesto di selezionare un file di
dimensioni maggiori. Dalle prove effettuate, il programma opera sostituendo
sempre e comunque soltanto l’ultimo bit meno significativo per non pregiudicare
la qualità del file contenitore.
Figura 10: Selezione file
contenitore
In seguito, come è ovvio, viene richiesta una
password (che fa da chiave) e l’operazione è completata.
Figura 11: Immissione
password
Per effettuare l'operazione inversa, cioè il recupero di dati nascosti, nella schermata principale basta cliccare su Open, indicare il file contenitore ed inserire la password opportuna. Anche in questo tool viene utilizzato l'algoritmo AES per la cifratura.
Shredder: quando si cancella un file, in realtà il file non viene cancellato
fisicamente dal disco, nemmeno quando è svuotato il cosiddetto cestino, di
conseguenza è possibile recuperarlo con opportuni software. Questo tool cerca
di evitare questo problema cancellando i file permanentemente. Tuttavia, nella
documentazione del software si legge che non è assicurata la totale
eliminazione dei dati in quanto i moderni sistemi operativi (Windows ME o 2000)
utilizzano tecniche di swap dei dati e non è possibile cancellare completamente
informazioni da un supporto magnetico. Nelle note viene consigliato, se si
hanno forti esigenze di sicurezza, addirittura di distruggere il supporto!
Password manager: gestisce tutte le password utilizzate per il
programma stesso e per account a servizi in rete. Ancora una volta è utilizzato
AES per la cifratura.
S-Tools 4, scritto da Andy Brown, è un programma steganografico tra i più diffusi, facilmente reperibile in rete presso i più comuni siti di software freeware. L’uso del programma, infatti, è completamente gratuito ed illimitato nel tempo. La versione 4 è stata rilasciata nel 1996 e da allora non sono state prodotte nuove versioni. Il programma gira su un qualunque PC con sistema operativo Windows in tutte le versioni, lo spazio richiesto su hard disk è trascurabile. Supporta i formati WAV, BMP e GIF come file contenitori. La particolarità di questo programma è un'interfaccia utente basata esclusivamente sul drag'n'drop. I menu infatti si presentano molto scarni. Lo schema di utilizzo è il seguente:
1) Si trascina il file contenitore da una finestra di un file manager nella finestra principale di S-Tools.
2) Si trascina il file segreto sul file contenitore.
3) Si sceglie la passphrase e l'algoritmo di cifratura; si può scegliere tra IDEA, DES, Triple DES o MDC, tutti utilizzati in modalità CFB.
4) A questo punto viene generato il nuovo file contenente il messaggio segreto ed è possibile salvarlo.
Per estrarre il messaggio segreto dal contenitore si segue uno schema simile:
1) Si trascina il file contenitore da una finestra di un file manager nella finestra principale di S-Tools.
2) Si seleziona Reveal cliccando col tasto destro del mouse sul file contenitore trascinato.
3) Si sceglie la passphrase e l'algoritmo di cifratura.
4) Se la passphrase è giusta compare un elenco dei file nascosti ed è possibile salvarli.
Figura 12: S-Tools 4
Questo programma, scritto da Derek Upham e John
Korejwa funziona su tutte le versioni di Windows esclusa la 2000. è specifico per il formato JPG ed è utilizzabile
in due modalità: a linea di comando oppure con un comodo wizard che guida passo
passo nelle operazioni e permette di specificare tutti i parametri della
versione a linea di comando. Inizialmente il wizard ci chiede se nascondere un
file o estrarre un file già nascosto.
Figura 13: Il wizard di
Jsteg Shell
Scegliendo Hide file, si passa a scegliere
il file da nascondere e si decide se utilizzare anche la crittografia, con
sistema RC4-40, inserendo eventualmente la password.
Figura 14: Wizard di Jsteg
Shell, passo 2
Successivamente si sceglie il file contenitore e
si settano eventualmente opzioni che permettono di applicare lo smoothing, di
produrre il file output in toni di grigio, ecc
Figura 15: Wizard di Jsteg
Shell, passo 3
infine si provvede a salvare il file prodotto,
contenente il messaggio segreto.
Figura 16: Wizard di Jsteg
shell, passo 4
Scegliendo invece Extract file si sceglie il file contenente il messaggio segreto, si inserisce l’eventuale passphrase nel caso si sia utilizzata la crittografia e si provvede a salvare il file segreto. L’unico difetto di questa interfaccia è che tutte le volte che c'è bisogno di inserire una passphrase, non compaiono i caratteristici asterischi, di conseguenza la passphrase è visibile durante la digitazione.
Questo programma si occupa di steganografia con file MP3 come contenitori. E’ stato rilasciato nell’agosto del 1998 ed è disponibile sia per i sistemi operativi Microsoft che per Linux. Oltre all’eseguibile, l’autore Fabien Petitcolas (Computer Laboratory, Cambridge (UK)) distribuisce anche il sorgente liberamente. Il programma si basa su un'interfaccia a linea di comando anche se è possibile scaricare una interfaccia grafica ancora da migliorare. Esistono due comandi: Encode e Decode. Ecco un esempio dell’utilizzo di Encode:
encode -E data.txt sound.wav sound.mp3
Il programma prende come input il file da nascondere in formato txt e il contenitore in formato wav. Dopodiché provvede a comprimere il file wav iniettando, durante la fase di compressione stessa, il file txt e generando in output il file mp3.
Per estrarre il file nascosto si utilizza il comando Decode.
decode -X sound.mp3
Con questo
comando si decomprimerà il file sound.mp3 in sound.mp3.pcm, tentando di
estrarre eventuali informazioni nascoste e salvandole in sound.mp3.txt.
Figura 17: Uso di encode e
decode
5.5 Gif-it-up 1.0
Questo
software è dedicato alla steganografia con file GIF come contenitori ed utilizza
le tecniche già descritte. E’ stato realizzato nell’Università del Galles da
Nelsonsoft e rilasciato nel 1998. Funziona su tutte le versioni di Windows
esclusa la 2000.
L’interfaccia è tra le più comuni. Prima si apre il file contenitore e poi come al solito è possibile scegliere tra due comandi da un menu: Inject e Extract a seconda che il file segreto sia da inserire nel file contenitore o da estrarre. Nella fase di iniezione, se il file GIF non utilizza tutti i colori della palette, è possibile estendere i colori a tutta la palette in modo da sfruttare tutte le permutazioni possibili dei colori della palette. Si può utilizzare anche la crittografia e quindi inserire una password. L'operazione di estrazione, invece, richiede semplicemente la password e ci fa salvare il file nascosto estratto.
Figura 18: Gif-it-up
Internet
Steganography information,
software and news to enhance you privacy
http://web.tiscalinet.it/NetCenter/articles/arty.01.htm
Articolo: La steganografia nelle bitmap a 24
bit (link locale)
http://www.nemesi.net/stegano.htm
Occultamento di testi in immagini digitalizzati (link locale)
http://www.jjtc.com/stegdoc/index2.html
Steganography
http://www.kyuzz.org/anon/stego.html
Steganografia
(link locale)
http://www.cl.cam.ac.uk/~fapp2/steganography/mp3stego/
Mp3Stego (link locale)
http://www.dcs.ed.ac.uk/~mxr/gfx/
Graphics – The
graphic file formats page
Bmp format (link locale)
Gif format (link locali: Gif87a specifications, Gif89a specifications, Gif compression)
Jpg format (link locale)
http://ibis.nott.ac.uk/guidelines/ch62/chap6-2.html
Data formats
and compression
Wav format (link locale)
http://www.iis.fhg.de/amm/techinf/layer3/
Mpeg Audio
Layer 3 (link locale)
Riviste
Enrico Speranza: Foto piene di sorprese,
inter.net n.59 Luglio/Agosto 2000, pag. 42-46
Altro
Anderson Ross
J. - Petitcolas Fabien A.P.: On the Limits of Steganography, IEEE
Journal of Selected Areas in Communications, 16(4):474-481, May 1998. Special
Issue on Copyright & Privacy Protection. ISSN 0733-8716. (pdf)
Help on line di
Steganos 3 Security Suite, S-Tools 4, J-steg Shell, Mp3 Stego, Gif-it-up