La steganografia digitale per nascondere le informazioni
Attenzione
Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.
Letteralmente con il termine “steganografia” dal dizionario etimologico si intende “l’arte di scrivere in cifre, perché lo scritto rimanga segreto e ignoto a chi non ne ha la chiave”. In genere quansiasi tipo di messaggio cifrato può essere denominato steganografico. La più antica tecnica steganografica risale a qualche millennio fa (il termine stesso deriva dal greco antico), consisteva nell’utilizzo di comune succo di limone al posto dell’inchiostro. Chi riceveva la missiva segreta doveva avvicinare la carta ad una fonte di calore o ad una fiamma. Le parti passate con il succo di limone non sarebbero annerite, mentre la carta si.
Nel mondo digitale con steganografia si potrebbe intendere qualsiasi messaggio cifrato con condivisione di una chiave, ma più nello specifico ci si riferisce ai messaggi testuali nascosti all’interno di un’immagine. In pratica (semplificando di molto la procedura) ogni pixel che compone l’immagine è composto da un colore differente, e cambiando un solo bit per pixel il contenuto non subirà evidenti modifiche all’occhio umano, mentre un software di criptatura, se impostata la giusta chiave, sarà in grado di estrarre il messaggio. Il metodo più usato è l’algoritmo LSB (Least Significant Bit), che necessita di un dato in formato testuale da nascondere e da una password per la cifratura del messaggio.
Il tool più usato per inserire o estrarre il dato in una immagine è Steghide, mentre quello preposto all’estrazione tramite bruteforce attack è Stegbreak. Se invece vogliamo solo sapere se è stato nascosto un messaggio in una immagine useremo Stegdetect, che però non è in grado di decriptare il messaggio. In questo breve tutorial dimostreremo come sia possibile “iniettare” un file txt all’interno di una immagine jpg, lasciando di fatto l’immagine visivamente inalterata.
Per prima cosa è necessario avere installato “steghide“, presente nei repository delle principali distribuzioni, ma anche facilmente compilabile “a mano”.
Per il nostro test utilizzeremo una immagine i cui spazi di colore non siano troppo uniformi (tipo cielo, parete bianca o simili). Ringrazio Tara, la modella d’eccezione che si è prestata all’esperimento.
Il testo che inserirò è invece tratto dalla Divina Commedia: “Inferno, Canto 1, Versi 1 – 136”; 136 righe contenenti qualsiasi carattere dell’alfabeto italiano (comprese le vocali accentate, apostrofi e virgolette), che in un file txt arrivano a pesare quasi 5kb. Ho chiamato il file “divina.txt”, di seguito potete scaricarlo.
Qui arriva il bello. Includiamo il file all’interno dell’immagine con steghide. Il comando per includere il testo è questo:
steghide embed -cf tara_bn.JPG -ef divina.txt
Steghide chiederà l’immissione di una password (io ho usato “ciaociao”). Il campo si può anche lasciare vuoto, ma in questo caso sarà più semplice scoprire il messaggio nascosto. E il risultato è invisibile agli occhi:
Per estrarre i dati contenuti usiamo ancora steghide, il procedimento inverso è altrettanto semplice:
steghide extract -sf tara_bn.JPG -xf estratto.txt
Verrà creato un file di nome “estratto.txt” che contiene il contenuto del file originale.
Provate anche voi ad estrarre il dato dall’ultima foto… anche nell’hash non c’è un bit fuori posto.
Una funzione importante di steghide è il comando “info”.
Il comando info restituisce una delle cose più importanti che ci interessano: la quantità massima di dati da nascondere nel file ospitante. Nel nostro caso possiamo nascondere 16,2KB, inoltre inserendo la password di criptatura notiamo che il file ospitato pesa 4,9KB, che si chiamava “divina.txt”, che è stato criptato e compresso.
3 commenti
Gabriele Merlonghi · 12 Marzo 2013 alle 7:30 PM
Sono arrivato sul tuo blog per altre ragioni legate alla segnalazione del tutorial di 30gg per imparare HTML5 e CSS, però leggendo questo post sono rimasto molto incuriosito.
Personalmente mi sono occupato di crittografia con iOS e sul mondo embedded e non conoscevo affatto questa tecnica di “oscurazione” delle informazioni in una foto.
Una cosa molto da 007. Il brute force garantisce sempre la penetrazione e quindi la decodifica del testo anche senza conoscere la password ?
TheJoe · 13 Marzo 2013 alle 8:15 AM
Non sempre… anzi direi che il bruteforce non garantisce mai il risultato e se la password è complessa il bruteforce non serve a nulla. La password non è removibile, ma è una vera chiave per crittografare il messaggio.
Spesso davanti a un giudice però non è tanto importante il messaggio, quanto la prova che sia stato mandato. In questo caso stegdetect è una vera manna. Non decodifica il messaggio, ma ti segnala se c’è o no.
Guadalupe · 29 Novembre 2012 alle 2:14 AM
Complimenti per l’articolo, caro cognomino , nonche8 codivinsore della mia stessa passione per la steganografia. E’ davvero ben fatto e concepito con cognizione di causa.Un saluto.Nicola Amato