Invisibile ma sotto gli occhi di tutti

Tempo fa ho parlato del Ladro di Bagdad e di come faceva “sparire” il tesoro del Sultano un po’ alla volta facendolo sotto gli occhi di tutti.

A questo punto mi viene in mente che questo é stato fatto  ripetutamente con qualcosa di più importante che il metallo prezioso:  le informazioni.

Cosa voglio dire con questo? In un precedente post ( Lettere d’amore fra Alice e Bob ) ho parlato di come si può far transitare una informazione con la sicurezza che solo il destinatario possa leggerla. Il difetto di questo metodo è che TUTTI vengono a sapere che c’e’ stata una corrispondenza fra Alice e Bob. E in certe occasioni anche solo questa informazione è già troppo.

Se pensate che sia una affermazione paranoica, considerate che ormai è costume diffuso in certi ambienti, scambiarsi informazioni usando dei bigliettini (o “pizzini”) affidati a corrieri di fiducia in modo tale da non lasciare traccia elettronica delle informazioni contenute in essi.

Cominciamo con qualche nota storica: ai tempi della antica Grecia Erodoto narra i due seguenti epsodi in cui vengono usate tecniche steganografiche per recapitare messaggi segreti:

  • il primo riguarda Demarato di Sparta che per avvisare i compatrioti di una possibile invasione persiana scrive su di una tavoletta un messaggio da nascondere, poi copre la tavoletta di cera e sulla cera scrive un messaggio innocuo. Poiché nell’antichità le tavolette di cera erano normalmente usate per scrivere testi provvisori, non destò sospetti. (cit wikipedia)
  • il secondo riguarda 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.

Già da questi due episodi si può capire che il contenuto del messaggio viene salvaguardato non da una criptazione ma dal fatto che esso non viene riconosciuto come tale.

Successivamente altre forme di steganografia sono state sviluppate, tipo quella di nascondere il messaggio all’interno di lettere fra parenti ed amici, il cui contenuto era apparentemente innocuo, ma leggendo, ad esempio, tutte le iniziali delle prime parole delle frasi o di ogni riga, si veniva a conoscenza del messaggio. Ovvero qualcosa come illustrato nella immagine seguente

Il testo è in polacco: è l’unico esempio che ho trovato in rete! (significa – più o meno – Thomas Wala La volpe ) Forse in futuro ne farò uno in italiano

Al giorno d’oggi, si usano delle tecniche più complesse, ma il principio è sempre lo stesso: rendere il messaggio irriconoscibile agli occhi di chi lo cerca. Il metodo steganografico più usato è quello di mascherare il messaggio con il “rumore di fondo“.

Vediamo di essere meno “criptici” 😀

Immaginiamo di voler nascondere un documento digitale (es. un file in formato pdf ) in una immagine digitale (è indifferente che sia in formato jpg, bmp o altro, per semplicità consideriamo che sia una bitmap non compressa ) – è ovvio che le dimensioni dell’immagine debbano essere molto superiori di quelle del documento da nascondere: la nostra azione sarebbe come quella di infilare una serie di palline da ping-pong dentro una cassa contente altri oggetti. Le palline andranno posizionate nei “vuoti” presenti .

Devo premettere che l’occhio umano, per sue limitazioni fisiologiche non riesce a discriminare più di una sessantina di sfumature dello stesso colore. Per semplicità limitiamoci ad un solo colore della terna di base RGB. Analoghe considerazioni si possono fare su coppie di colori o sull’intera terna, oppure anche solo sulla scala di grigi.

Se abbiamo una striscia di sfumature di blu come quella riportata sotto:

Codice colore #000000

r=0 g=0 b=0

Codice colore #000020

r=0 g=0 b=32

Codice colore #000040

r=0 g=0 b=64

Codice colore #000060

r=0 g=0 b=96

Codice colore #000080

r=0 g=0 b=128

Codice colore #0000a0

r=0 g=0 b=160

Codice colore #0000c0

r=0 g=0 b=192

Codice colore #0000e0

r=0 g=0 b=224

Codice colore #0000ff

r=0 g=0 b=255

è facile percepire la variazione cromatica fra una sfumatura e l’altra in quanto i valori tra 2 celle adiacenti variano fortemente ( di 32 punti su una scala che va da zero a 255 – non è cosi’ per l’ultima, ma non fateci caso: non è importante per quello che voglio dire ). Ma se le stesse celle cambiassero di meno ad esempio della meta’ ?

 

Codice colore #000000

r=0 g=0 b=0

Codice colore #000010

r=0 g=0 b=16

Codice colore #000020

r=0 g=0 b=32

Codice colore #000030

r=0 g=0 b=48

Codice colore #000040

r=0 g=0 b=64

Codice colore #000050

r=0 g=0 b=72

Codice colore #000060

r=0 g=0 b=88

Codice colore #000070

r=0 g=0 b=112

Codice colore #000080

r=0 g=0 b=255

 

si vede che le variazioni sono ancora più sfumate. Se ora faccio cambiare il range di colore fra 0x000060 e 0x000072 cosa potrebbe accadere ?

Vediamo:

 

Codice colore #000060

r=0 g=0 b=96

Codice colore #000062

r=0 g=0 b=98

Codice colore #000064

r=0 g=0 b=100

Codice colore #000066

r=0 g=0 b=102

Codice colore #000068

r=0 g=0 b=104

Codice colore #00006a

r=0 g=0 b=106

Codice colore #00006c

r=0 g=0 b=108

Codice colore #00006e

r=0 g=0 b=110

Codice colore #000070

r=0 g=0 b=128

qui è  già più complicato vero ? Si nota appena una lieve variazione di tinta fra l’estremo destro e quello sinistro, e solo perché ve lo avevo detto !!!!

Se facessimo una tabella quadrata ( un frammento di una immagine, per esempio ) con la stessa dinamica di colore, potremmo avere qualcosa del genere:

Riuscite a vedere quali sono i quadratini con il colore differente ? Io che li ho fatti non riesco a vedere la differenza, eppure all’ultima visita oculistica che ho fatto la mia percezione del colore risultava nella norma, ve lo giuro ! 😛 .

Per ogni  riga  c’e’ un quadratino più chiaro della media di 2 punti sulla scala colore ed uno più scuro di 2 punti colore. Se provate a guardare il monitor inclinandolo a destra e sinistra o verso il basso, qualche quadratino di un colore leggermente diverso potreste intravvederlo… ma non è detto. Tenete presente inoltre che in questo caso l’elemento dell’immagine è ingrandito di un migliaio di volte rispetto alle dimensioni originali.

Cosa significa questo ? Significa che posso utilizzare 2 bit della profondità di colore ( per ogni canale ) per inserire delle informazioni nascoste che sfuggono ad un esame “ad occhio”. Due bit signifca che posso inserire dei valori ( quattro per l’esattezza ) che variano da 0 a 3. Vi pare poco ?

Non lo è. Se voglio codificare un testo scritto in alfabeto inglese ( 26 caratteri ) e i segni di interpunzione “.” “,” “!” “?” “;”  le parentesi “(” “)” numeri da 0 a 9, il segno “+” e “-” e lo spazio ” ” mi serve una codifica che vada da 0 a 45 ( sono infatti 46 caratteri ) e bastano 6 bit  ( 2^5 = 64 ) per avere tale codifica. Inoltre ho dei valori della codifica che avanzano.

Abbiamo detto che abbiamo 2 bit a casellina ( pixel ) quindi la nostra codifica andrà “distribuita” su 3 elementi consecutivi dell’mmagine. Un quadrato 20 *20 come quello nell’esempio potrà contenere un messaggio di 800 bit, ovvero 266 caratteri: molto piu’ di quello che un social tipo tweetter accetta.

Esempio: il quadrato esposto sopra in dimensioni originali.

Immagine_stegano

e questo sullo schermo viene visualizzato come illustrato sopra.

Quello che ho detto fino ad ora è valido anche se invece che un colore fondamentale solo uso tutti e 3 i colori base delle immagini: la tripletta RGB (red,green,blu) in quel caso moltiplicherei per 3 la capienza dell’immagine, che nel caso del nostro esempio salirebbe a 800 caratteri nascosti usando la codifica esposta in precedenza.

Un ulteriore aumento di capenza del nostro esempio potrebbe essere quello di usare un algoritmo di compressione del testo e memorizzare quello che risulta da questa compressione nella nostra immagine. Siccome è ragionevole pensare che le dimensioni del testo compresso scendano a circa la metà del testo originale, significa che nel nostro quadratino blu, potrei inserire circa 1600 caratteri, ovvero circa un quarto di una pagina di un libro.

Poi potrei pubblicare il quadratino su un sito web ….
….e lasciare il messaggio sotto gli occhi di tutti, ma solo chi sa che c’é e sa come estrarre i dati potrebbe recuperarli.

La tecnica illustrata fino ad ora si può usare, con i debiti accorgimenti, per tutto quello che è in formato digitale. Un esempio è quello riportato sotto, dove si nasconde una immagine dentro l’altra con una tecnica steganografica.

Esempio di funzionamento della steganografia: A sinistra l’immagine originale, al centro l’immagine da nascondere a destra quella “somma” delle due.

Ovviamente il messaggio inserito nella “immagine” contenitore, può essere compressa con vari agoritmi, criptata con la rsa o altri sistemi oppure trattata in svariati altri modi per renderla irriconoscibile dal normale rumore di fondo. In ogni caso questi “trattamenti” devono essere reversibili, in modo da poter recuperare integralmente l’informazione nascosta. Non si può ad esempio usare un sistema di compressione “a perdita”, tipo quello del jpg.

Ma questa tecnica può essere usata anche per nascondere dati (un qualsiasi contenuto digitale) dentro filmati, file audio e così via. Non vi immaginate nemmeno quante immaggini inocue presenti sui social contengano messaggi, immagini e documenti che inocui non lo sono affatto.

Nota: alcuni anni fa ( mi pare nel 2013 ) si scoprì che tutte le immagini di un sito di incontri a scopo matrimoniale conteneva informazioni criptate e poi steganografate  a scopo terroristico, e cosi’ pure in alcuni filmati di alcuni siti decisamente pornografici, per non parlare dei file audio con dei proclami inneggianti ad un certo regime che non voglio nominare. Mi fermo qui: a buon intenditor poche parole.

Chi volesse saperne di più può consultare la pagina di wikipedia in italiano ed in inglese.

Se qualcuno fosse interessato a provare qualche software  li può trovare su “sourceforge” seguendo il link: http://sourceforge.net/directory/security-utilities/security/?q=steganography

E mi raccomando: usateli solo per scopi NOBILI 🙂

 

Advertisements

Un pensiero su “Invisibile ma sotto gli occhi di tutti

  1. Pingback: Ancora sulla Steganografia | Num3ri v 2.0

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...