Se una vacanza estiva o un incarico lavorativo dovessero portarvi in qualche città ben fornita di librerie antiquarie, un acquisto tanto interessante quanto "importante" potrebbe essere una rara edizione del XVII secolo del De Steganographia di Johannes Trithemius, opera fondamentale nella storia della crittografia e base concettuale di tecniche che, con l'avvento dell'informatica e dell'era digitale, si intersecano sempre più spesso con la nostra vita quotidiana. Anche se, per definizione, fanno di tutto perché non ce ne accorgiamo.

Il Tritemio, o Giovanni di Trittenheim, abate e studioso, è un nume tutelare della crittografia: suo infatti il primo volume mai stampato sull'argomento, il Polygraphia del 1518, e sua la prima opera sistematica sulle tecniche steganografiche utilizzabili per nascondere informazione all'interno di altra informazione: il De Steganographia, appunto, un lavoro dalla genesi tortuosa che, proposto in forma di grimorio magico, fu pubblicato solamente a novant'anni di distanza dalla morte del suo autore, quindi nel 1606, per essere messo all'Indice tre anni dopo.

Il testo ha in effetti le apparenze della tradizionale pubblicistica ermetica ed esoterica medievale; ma, sotto la patina dei linguaggi mistici e delle formule magiche per tecniche come la trasmissione del pensiero attraverso gli angeli, il Tritemio riassume lo stato della conoscenza di una pratica strettamente associata alla crittografia che da secoli viene impiegata come primo perimetro di sicurezza per la trasmissione di informazioni segrete. Da questo punto di vista lo stesso libro del Tritemio può essere considerato un esercizio steganografico, proprio perché i suoi contenuti effettivi risultano abilmente offuscati dalla cortina fumogena del linguaggio da grimorio.

La steganografia rimane tuttavia argomento da addetti ai lavori fino ai primi anni Ottanta, quando si inizia uno studio diffuso delle sue applicazioni alla nascente informatica di massa. Software, dati, testi e immagini digitali non sono altro che informazione, e come tale non passa molto tempo prima che studiosi e appassionati inizino a indagare le potenzialità steganografiche del nuovo mezzo giungendo a risultati pratici che oggi, specie nel campo dell'imaging, sono assai più diffusi di quanto non si sospetti.

Ora lo vedi, ora no

Una tecnica crittografica ideale è tale da garantire la segretezza dell'informazione cifrata anche quando la natura di quest'ultima sia palese: sapere con certezza che un certo file è cifrato è condizione necessaria ma decisamente non sufficiente per poterlo decifrare, anche qualora si conosca l'algoritmo usato. Vi sono tuttavia situazioni nelle quali può essere opportuno fare in modo che l'informazione - sia essa cifrata piuttosto che in chiaro - risulti nascosta agli occhi di un osservatore terzo. Un Grande Fratello orwelliano sospetterà automaticamente di un cittadino che detenga documenti criptati, anche qualora il loro contenuto effettivo sia del tutto legittimo; un pirata informatico risulterà inevitabilmente attirato da file palesemente cifrati archiviati sul computer delle sue vittime. E un abile analista armato dei più recenti strumenti matematici potrebbe disporre della conoscenza necessaria a decifrare un file criptato ritenuto inespugnabile. Alzando uno schermo che cela l'informazione alla vista, la steganografia aggiunge uno strato di protezione supplementare: nascondendo per esempio l'informazione all'interno di una collezione di immagini, diminuiscono le probabilità che qualcuno possa identificarne la presenza e, se cifrata, proceda all'opportuna analisi crittografica.

Il concetto su cui si basano le applicazioni steganografiche per computer è tutto sommato semplice: come afferma la teoria dell'informazione, esistono canali di trasmissione che possiedono una capacità superiore rispetto a quanto è effettivamente necessario per mandare a buon fine una comunicazione tra due parti; la porzione "ridondante" di questi canali è quindi utilizzabile come spazio a se stante per includere una comunicazione secondaria non immediatamente apparente.

Facciamo un esempio: se consideriamo un'immagine digitale RGB da 24 bit, il nostro canale di trasmissione sarà una bitmap nella quale 8 bit (per una scala di valori possibili da 0 a 255) sono dedicati all'informazione "rosso", altri otto all'informazione "verde" e gli ultimi otto all'informazione "blu". Se tuttavia ritenessimo sufficienti solo i primi sette bit per ciascun colore (una scala da 0 a 127), accontentandoci di un'immagine da due milioni di colori anziché da sedici milioni, ecco che per ogni pixel potremmo disporre di tre bit utilizzabili a scopi steganografici. Oppure, ancora più subdolamente, potremmo stabilire di "sottrarre" un unico bit ogni otto pixel dell'immagine originale prelevandolo alternativamente dai valori R, G e B: il risultato sarebbe tale per cui ogni otto pixel avremmo il 50% di probabilità di variare di un duecentocinquantaseiesimo l'intensità di un componente cromatico del pixel stesso: ai fini visivi è come se non cambiasse nulla, dato che l'occhio umano non è in grado di percepire una differenza così minima. Diciamo allora che i 24 bit di capacità del canale di trasmissione "immagine digitale" sono più che sufficienti per comunicare in maniera realistica la resa visiva dell'informazione principale; la differenza è uno spazio utilizzabile a fini steganografici.

In maniera concettualmente simile, anche se riferita a un dominio totalmente diverso, funziona l'applicazione delle tecniche steganografiche ai file audio: anche la musica rappresenta un canale di trasmissione sufficientemente ampio specie qualora il campionamento avvenga con una precisione di 20 bit e a una frequenza adeguatamente elevata. E combinando informazione visiva con informazione sonora si ottiene informazione video, anch'essa utilizzabile a fini crittografici.

Occhio alle distorsioni

Esiste tuttavia un ostacolo che impedisce di utilizzare la steganografia in abbinamento ai formati visuali e sonori più diffusi, ed è la compressione "lossy", a perdita d'informazione. Pensiamo cosa accade quando salviamo un file JPEG compresso: semplificando, possiamo dire che il software analizza l'immagine alla ricerca di blocchi composti da pixel sufficientemente simili da poter essere uniformati a un valore mediano tale da favorire la successiva procedura di compressione. Al momento della decodifica dell'immagine, la decompressione ci restituirà quel valore mediano senza essere in grado di dirci nulla di più preciso in merito all'effettivo valore originale di quei pixel. In altre parole, con la compressione JPEG una componente dell'informazione originaria è andata irrimediabilmente perduta. È chiaro che in un tale contesto i bit steganografici sono a rischio, tanto che la compressione lossy rappresenta uno degli strumenti standard a disposizione di chi debba impedire la fuga di dati per via steganografica mediante il cosiddetto attacco a distorsione.

Ecco il motivo per cui la steganografia funziona solitamente con formati "lossless" che garantiscono la perfetta ricostruzione del dato originale, come ad esempio PNG o BMP. Facciamo una prova installando sul nostro computer un'applicazione steganografica: un buon punto di partenza è OpenStego (openstego.sourceforge.net), un programma scritto in linguaggio Java e quindi compatibile con qualunque sistema operativo moderno. OpenStego ci chiederà di specificare un Message File (il nostro file segreto: può essere di qualunque tipo: testo, immagine, documento PDF, qualsiasi cosa), un Cover File (l'immagine entro la quale nascondere il file segreto: deve ovviamente avere dimensioni sufficientemente ampie da poter contenere il Message File) e infine il nome di un Output Stego File, che sarà la versione del Cover File "fusa" con il Message File segreto. Notate come il Cover File possa essere anche un'immagine JPG o GIF: l'importante è che l'immagine steganografica, l'Output Stego File, sarà obbligatoriamente prodotta da OpenStego sotto forma di BMP o PNG.

OpenStego: Embed tag

Ora selezioniamo il tab Extract nella parte superiore della finestra di OpenStego e proviamo a recuperare il nostro messaggio segreto specificando il file steganografico appena prodotto e la directory nella quale salvare il file estratto. Il nostro abate Tritemio sarebbe orgoglioso del risultato. Ma proviamo ora a scombinare le carte: carichiamo l'immagine steganografica PNG o BMP in un programma grafico che ci permetta di trasformarlo in un file JPG compresso. Prendiamo il file JPG così ottenuto e riconvertiamolo in un file PNG, e chiediamo infine a OpenStego di estrarre nuovamente il messaggio segreto. Ciò che otterremo sarà invece un messaggio... di errore: la perdita d'informazione dell'algoritmo di compressione JPEG ha di fatto eliminato la componente steganografica del file, e la procedura che abbiamo appena seguito non è stata altro che un attacco a distorsione.

OpenStego: Extract tab

Per completezza, occorre notare come esistano anche tool steganografici più sofisticati che riescono a produrre file compressi; ma in questi casi la tecnica steganografica è incorporata all'interno dell'algoritmo di compressione stesso ed è il file di partenza, il Cover File, a dover essere fornito in un formato lossless. E anche in questi casi un nuovo passaggio di decodifica e ricodifica mediante un'applicazione generica è in grado di distruggere il messaggio nascosto nel file.

La steganografia deve guardarsi poi da altri nemici, in particolare le tecniche di stegoanalisi: si tratta di strumenti matematici che hanno lo scopo di segnalare la presenza di contenuti nascosti mettendo in evidenza le anomalie statistiche che la steganografia inevitabilmente introduce nei file che produce. E proprio sul campo statistico si sta continuando a giocare la partita tra le opposte fazioni di steganografi e stegoanalisti. Una partita senza fine, simile per intensità a quella che interessa la crittografia, e i cui esiti non mancano di avere ricadute pratiche anche per chi si occupa di imaging. Vedremo infatti, in un articolo successivo, come la steganografia ricopra un ruolo centrale tra tutela dei diritti d'autore e protezione (o assenza di essa) della privacy.

Il testo integrale del De Steganographia: www.pazuzu.it/tritemio/
OpenStego: openstego.sourceforge.net