giovedì 6 maggio 2010

Nella morsa del ragno

Nel film Nella morsa del ragno una bambina viene rapita dal professore pazzo Sonji (si scrive così?), che poi, si scoprirà, è in verità manipolato dalla biondina psicopatica. Ed ora che vi ho rovinato il film nel caso non l'abbiate già visto, veniamo ad una scena esilarante.


Il dottore Alex Cross è in un'aula multimediale della scuola da dove la bambina è stata rapita. Un tecnico del computer ha trovato moltissime immagini in cui sono nascosti dei messaggi attraverso la tecnica della steganografia... Le immagini sono GIF, Graphics Interchange Formats (mi pare sic nel film!!), spiega il tecnico. Cross chiede se si possono decifrare (o decriptare). No, dice il tecnico: serve la password! Senza, servono millenni!

Inoltre qualcuno, forse il tecnico stesso, spiega che questo è il modo in voga per passarsi messaggi tra giovani.

Ora andiamo a spiegare cosa c'è di buffo in quegli scambi di battute.

Steganografia e crittografia sono due cose distinte, tanto per cominciare. La steganografia non esclude la crittografia: un contenuto steganografato può essere benissimo criptato.

La crittografia (o criptografia che dir si voglia) rende "non leggibile" un messaggio (nel mondo digitale, un file su un computer o un flusso di dati), se non si conosce la chiave. Dietro la crittografia più sofisticata ci sono algoritmi complessi; tipicamente delle "funzioni" il cui inverso è computazionalmente irraggiungibile, o quasi, in tempi umani, se non si dispone di un suggerimento, cioè diciamo di una chiave.

Che un messaggio, un file o un dato sia criptato balza all'occhio. Il difficile è il processo di criptoanalisi per capire come è stato criptato e riuscire a decriptarlo senza avere la password. Ma il punto cruciale è che il dato che si vuole in questo modo proteggere mostra la sua esistenza palesemente.

La steganografia invece può essere definita come l'arte di nascondere un "messaggio" in qualche altro messaggio o forma di messaggio. Il punto chiave è il fatto che chi vede il "messaggio" manifesto non deve sospettare che ci sia un messaggio nascosto. Anzi, deve pensare che quello che ha davanti sia niente di più di quello che è.

Nel mondo digitale possiamo parafrasare dicendo che la steganografia è l'arte di nascondere un dato in qualunque altro tipo di dato. Per esempio un file testuale può celare un altro testo, così come un file che normalmente "vediamo" come immagine può "ospitare" qualunque altro tipo di dato (testo, un'altra immagine, un suono e via dicendo...).

Poiché il film parla di immagini e messaggi (testuali), guardiamo questo caso, tenendo bene a mente che comunque è un caso particolare: la steganografia non è solo l'arte di nascondere messaggi testuali nelle immagini!!

Come su detto, l'essenza della steganografia è non rivelare la presenza del messaggio. Dunque già qui il fatto che il tecnico ad occhio si sia accorto della presenza di qualcosa nell'immagine che non era parte dell'immagine suona parecchio strano — o come minimo si tratta di pessima steganografia. Ma ancora più strano suona il fatto che serva la password! Infatti come detto la steganografia nasconde, secondo certi criteri... ma non cripta. Il messaggio (un dato come un altro, byte) nascosto può essere criptato, ma questo è già un livello successivo a quello in cui ci siamo accorti della presenza del dato nascosto e ci siamo ingegnati per estrarlo.

Alla fine è tutto qua: per prima cosa capire che ci può essere qualcosa di nascosto e poi chiedersi come sia stato nascosto. Dunque non è un lavoro di criptoanalisi, è un lavoro di steganoanalisi, che non richiede la ricerca di una parola chiave per essere fatto: richiede solo la comprensione del come sia stato nascosto.

Vediamo un esempio di steganografia. Si tratta, secondo quanto mi risulta, il primo esempio di steganografia nella storia. A voleva mandare un messaggio a C ma non voleva assolutamente che B lo intercettasse e leggesse. Dunque cosa fa? Prende un messo, lo rapa a zero e scrive (forse tatua) il messaggio sulla sua testa. Poi aspetta che gli ricrescano i capelli, gli affida una pergamena indirizzata a C con dentro scritte un po' di robe, e lo manda da C. B lo intercetta, lo cattura, gli prende la pergamena, legge il messaggio indirizzato a C scritto sulla pergamena e gioisce perché sta per sfanculare A. Ordina al messo di continuare il suo viaggio e recapitare il messaggio a C, e se non lo farò verrà ucciso. Il messo obbedisce, arriva da C, butta la pergamena e si fa radere la testa. C legge il messaggio di A, che è diverso da quello scritto sulla pergamena. B non ha neanche sospettato che il messaggio fosse custodito "sul" messo. Questa è una forma di steganografia.

Vediamo ora un esempio di steganografia nel mondo digitale. Prendiamo un file GIF. Il GIF ha una palette di al massimo 256 colori; dunque da qualche parte nel file troviamo la "definizione" di tale tavolozza di colori attraverso le "consuete" triplette di byte RGB. Poi seguono i dati, compressi, che "descrivono" l'immagine; diciamo che sono una serie di byte, usati come indici per la tavolozza.

A questo punto è solo questione di "steganotecnica" nascondere il nostro messaggio e abbiamo molte possibilità diverse. Qualunque scegliamo, è nostra intenzione fare in modo che sia "discreta". Se l'impatto visivo sull'immagine è eccessivo qualcuno si può accorgere che l'immagine ha qualcosa di strano e insospettito potrebbe decidere di analizzarla alla ricerca del messaggio steganografato.

Vediamo un paio di queste possibilità.


Testo ASCII come "pixel"

A ogni punto (pixel) dell'immagine corrisponde un byte, usato come indice per indicizzare uno dei 256 colori della tavolozza. Scegliendo una opportuna zona dell'immagine (nonché una opportuna immagine ospite!), possiamo riordinare gli indici e adattare leggermente i colori, secondo necessità, in modo che N (lunghezza del messaggio) pixel consecutivi abbiano indici (byte) che se letti come ASCII danno il messaggio! Se ben fatto, questo non ha un impatto visibile sull'immagine e nessuno si accorgerà che c'è qualcosa nascosto... Sapendo dove comincia la sequenza di N pixel consecutivi (verticali o orizzontali), basta interpretare l'indice come byte ASCII e si legge il messaggio. In chiaro. — Del resto per sconfiggere questa steganografia potrebbe bastare semplicemente decomprimere i dati GIF degli indici e guardarli con un editor esadecimale. Se i pixel erano per "orizzontale" il messaggio potrebbe balzare all'occhio; se erano per verticale serve un po' più di attenzione, ma non servono comunque millenni!

Testo come immagine

In questo caso il nostro "testo" è scritto come immagine nell'immagine stessa. Per esempio nell'immagine ospite compare una striscia nera, per dire. Ci si aspetterebbe un solo indice della tavolozza, e invece ne usiamo due... Però hanno la stessa tripletta RGB sicché non si distinguono. Per vedere il messaggio basta assegnare a uno dei due indici un qualsiasi altro colore (tripletta RGB) che contrasti con il gemello, e il messaggio apparirà, questa volta non a "livello dei dati" ma proprio graficamente. La tecnica può essere resa più "sottile" usando zone di una immagine con colori molto vicini ma diversi, e facendo in modo che le coppie di gemelli siano più di una. Anche qui se le cose vengono fatte bene non c'è niente che dovrebbe far sospettare che ci sia qualcosa di nascosto, a parte la convinzione, derivata da altre considerazioni, che qualcosa deve esserci.


Esistono steganografie più sofisticate. Per esempio si possono nascondere dati anche in un JPG, la cui compressione a perdita di dati rende inutili le due tecniche su descritte, perché la creazione del JPG stesso distruggerebbe tutto (senza contare il fatto che si tratterebbe di tecniche simili, non uguali, visto che il JPG non usa indici e ha una tavolozza ben più vasta). L'unica tecnica che conosco per i JPG è nascondere dati nei coefficienti DCT (Discrete Cosine Transform; la DCT è usata dall'algoritmo di compressione/decompressione, ma "piccole" variazioni non alterano significativamente l'immagine e dunque è un buon posto per nasconderci dati).

Ciò detto l'uso di tool prefatti per la steganografia non ha senso, se questi non offrono anche la crittografia. Infatti un tipo sospettoso o in cerca di qualcosa passerebbe ogni "immagine" (o altro dato) a un simile tool prefatto, per vedere se ricava qualcosa, perché ovviamente la tecnica steganografica è fissata nel programma stesso, senza possibilità di variazioni, o con così scarse possibilità di variazioni che una ricerca esaustiva sarebbe in pratica immediata. Dunque, niente "chiave" senza la quale servono millenni: al massimo qualche parametro.

Se il programma offrisse crittazione, allora l'uso di tale steganografia prefatta avrebbe il solo scopo di nascondere le cose da chi non le sta cercando, mentre la protezione da chi le sta cercando è data dall'aver criptato il dato.

La steganografia migliore rimane però quella di cui non si sospetta e che non ricade in schemi precostituiti e che tutti possono "rivelare" usando stupidi programmini preconfezionati.

Probabilmente i giovani del film usavano uno di questi programmini, ma rimangono le due domande: come ha fatto il tecnico ad accorgersi che l'immagine celava qualche altra cosa e perché pensa di aver bisogno di una password? Alla prima domanda si può rispondere semplicemente sospettando l'uso di un pessimo programma. Ma per la seconda non c'è speranza e la conclusione è il classico squallico tecnoblablà che compare in molti film e telefilm in cui ci sono computer e tecnologia.

Nessun commento:

Posta un commento

Sii educato, costruisci con cura le frasi, rifletti prima di pubblicare, evita parolacce e offese dirette, non uscire dal tema, cerca di non omettere la punteggiatura, evita errori ortografici, rileggi quel che hai scritto.