[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
La steganografia è un metodo per nascondere delle informazioni all'interno di qualcosa. Nel concetto di steganografia rientra per esempio l'uso dell'inchiostro simpatico. Nel campo delle informazioni digitali, la steganografia avviene frequentemente attraverso la modifica delle immagini, in modo tale da rendere impercettibile la differenza apportata dall'inserimento dell'informazione addizionale.
L'informazione nascosta attraverso la steganografia richiede spazio; evidentemente, rispetto all'informazione apparente che veicola il messaggio nascosto, l'informazione addizionale può essere solo di entità minore. In questo caso si parla di portante per individuare l'informazione apparente che nasconde quella steganografata.
Nel campo delle immagini digitali, la steganografia si utilizza anche per marchiare i file, con informazioni che contengono i dati sul diritto di autore; in tal caso si parla di filigrana (watermark). Si osservi comunque che l'inserimento di una filigrana all'interno di un file contenente un'immagine, non dimostra la paternità dell'opera; al massimo può dimostrare chi ha eseguito il marchio. Pertanto, di fatto, la filigrana «protegge» l'opera in quanto toglierla comporta normalmente una riduzione della qualità, così che probabilmente solo il suo autore o chi ne possiede i diritti è in grado di fornire un'immagine della qualità originale.
Le tecniche attraverso cui si realizza la steganografia sono varie e possibilmente sconosciute. Quando la tecnica steganografica è nota, ma soprattutto è noto l'algoritmo usato per inserire le informazioni nella portante, di solito i dati da nascondere sono cifrati, salvo il caso della filigrana in cui l'intento può essere proprio quello di rendere evidente l'informazione.
Nel caso delle immagini, se la portante è costituita da un file in formato grezzo, o comunque non compresso (come può essere il formato PNM o il TIFF), l'informazione può avvenire modificando alcuni bit meno significativi che descrivono il colore di ogni punto grafico (pixel). Quando invece l'immagine è costituita da un file in un formato compresso (con perdita di informazioni), la steganografia può sfruttare le caratteristiche dell'algoritmo di compressione stesso per celare le proprie informazioni (la scelta di comprimere in un modo rispetto a un altro determina l'informazione aggiuntiva).
Si possono nascondere delle informazioni anche in un programma eseguibile, quando esiste la possibilità di sostituire delle istruzioni con altre equivalenti, sfruttando così queste variazioni per inserire delle informazioni. Naturalmente ci possono essere anche altre possibilità, in base alle caratteristiche del formato eseguibile da utilizzare; quello che conta è che le modifiche al file per introdurre le informazioni steganografiche non interferiscano con il funzionamento del programma stesso.
È possibile usare anche un file di testo puro per inserire un'informazione addizionale «invisibile», modificando la spaziatura ed eventualmente la punteggiatura. Si può arrivare anche alla sostituzione di parole, attraverso un vocabolario di sinonimi.
Qualunque sia il metodo usato per la steganografia, spesso si richiede che l'informazione aggiunta sia ridondante in qualche modo, per poterla ricostruire anche in caso di un danneggiamento parziale.
Outguess (1) è un programma per la steganografia elettronica in generale, per il quale possono essere scritte delle estensioni per diversi tipi di informazioni. Tuttavia, inizialmente è possibile utilizzare soltanto alcuni formati di immagini per inserire informazioni steganografate:
outguess [opzioni] file_portante_originale file_steganografato |
outguess -r [opzioni] file_steganografato file_informazione_segreta |
Il modello sintattico da un'idea di massima dell'utilizzo dell'eseguibile outguess: in condizioni normali si inserisce un'informazione segreta, creando così un file steganografato; se si usa l'opzione -r, si estrae l'informazione segreta da un file già steganografato in precedenza.
Outguess ha la capacità di inserire due informazioni steganografiche sovrapposte; inoltre, dal momento che l'algoritmo steganografico è noto, le informazioni possono essere cifrate.
Segue la descrizione di alcuni esempi.
$
outguess -d foglio.xls danza.jpg danza-steg.jpg
[Invio]
Con questo comando si vuole utilizzare il file danza.jpg
per nascondere il file foglio.xls
, ottenendo così il file danza-steg.jpg
. Purtroppo, il file portante non ha lo spazio sufficiente per questo:
Reading danza.jpg.... JPEG compression quality set to 75 Extracting usable bits: 17882 bits Correctable message size: 7983 bits, 44.64% Encoded 'foglio.xls': 45056 bits, 5632 bytes steg_embed: message larger than correctable size 45056 > 7983 |
$
outguess -d messaggio.txt danza.jpg danza-steg.jpg
[Invio]
Questo comando è una variante di quello precedente, in cui il file da nascondere è costituito da messaggio.txt
. Questa volta, l'incorporazione ha successo e il file danza-steg.jpg
viene generato:
Reading danza.jpg.... JPEG compression quality set to 75 Extracting usable bits: 17882 bits Correctable message size: 7983 bits, 44.64% Encoded 'messaggio.txt': 440 bits, 55 bytes Finding best embedding... 0: 205(43.4%)[46.6%], bias 197(0.96), saved: 1, total: 1.15% 0, 402: Embedding data: 440 in 17882 Bits embedded: 472, changed: 205(43.4%)[46.6%], bias: 197, tot: 17887, skip: 17415 Foiling statistics: corrections: 93, failed: 0, offset: 30.333333 +- 71.419389 Total bits changed: 402 (change 205 + bias 197) Storing bitmap into data... Writing danza-steg.jpg.... |
Si osservi che il file messaggio.txt
è stato steganografato in chiaro, pertanto chiunque può estrarre l'informazione contenuta nel file danza-steg.jpg
.
$
outguess -d messaggio.txt -k "ciao a tutti" danza.jpg danza-steg.jpg
[Invio]
Questo comando è una variante di quello precedente, in cui il file da nascondere viene cifrato usando la parola d'ordine «ciao a tutti»:
Reading danza.jpg.... JPEG compression quality set to 75 Extracting usable bits: 17882 bits Correctable message size: 7983 bits, 44.64% Encoded 'messaggio.txt': 440 bits, 55 bytes Finding best embedding... 0: 247(52.3%)[56.1%], bias 218(0.88), saved: -3, total: 1.38% 3: 236(50.0%)[53.6%], bias 202(0.86), saved: -2, total: 1.32% 79: 214(45.3%)[48.6%], bias 217(1.01), saved: 0, total: 1.20% 87: 225(47.7%)[51.1%], bias 193(0.86), saved: 0, total: 1.26% 136: 215(45.6%)[48.9%], bias 187(0.87), saved: 0, total: 1.20% 136, 402: Embedding data: 440 in 17882 Bits embedded: 472, changed: 215(45.6%)[48.9%], bias: 187, tot: 17819, skip: 17347 Foiling statistics: corrections: 117, failed: 0, offset: 43.580000 +- 68.673760 Total bits changed: 402 (change 215 + bias 187) Storing bitmap into data... Writing danza-steg.jpg.... |
$
outguess -d messaggio.txt -k "ciao a tutti" -D messaggio-bis.txt -K "viva le donne" danza.jpg danza-steg.jpg
[Invio]
Questo comando è una variante di quello precedente, in cui ci sono due file da nascondere, cifrati con parola d'ordine differenti:
Reading danza.jpg.... JPEG compression quality set to 75 Extracting usable bits: 17882 bits Correctable message size: 7983 bits, 44.64% Encoded 'messaggio.txt': 440 bits, 55 bytes Finding best embedding... 0: 247(52.3%)[56.1%], bias 218(0.88), saved: -3, total: 1.38% 3: 236(50.0%)[53.6%], bias 202(0.86), saved: -2, total: 1.32% 79: 214(45.3%)[48.6%], bias 217(1.01), saved: 0, total: 1.20% 87: 225(47.7%)[51.1%], bias 193(0.86), saved: 0, total: 1.26% 136: 215(45.6%)[48.9%], bias 187(0.87), saved: 0, total: 1.20% 136, 402: Embedding data: 440 in 17882 Bits embedded: 472, changed: 215(45.6%)[48.9%], bias: 187, tot: 17819, skip: 17347 Encoded 'messaggio-bis.txt': 440 bits, 55 bytes Finding best embedding... 111: 248(52.5%)[56.4%], bias 280(1.13), saved: -3, total: 1.39% 111, 528: Embedding data: 440 in 17882 Bits embedded: 472, changed: 248(52.5%)[56.4%], bias: 280, tot: 17924, skip: 17452 Foiling statistics: corrections: 239, failed: 0, offset: 46.980892 +- 108.044297 Total bits changed: 930 (change 463 + bias 467) Storing bitmap into data... Writing danza-steg.jpg.... |
$
outguess -r -k "ciao a tutti" danza-steg.jpg testo.txt
[Invio]
Questo comando si riferisce all'esempio precedente e si mostra l'estrazione del primo file di informazioni (generando il file testo.txt
). Si osservi che la selezione si ottiene solo in base alla scelta della parola d'ordine corretta:
Reading danza-steg.jpg.... Extracting usable bits: 17882 bits Steg retrieve: seed: 136, len: 55 |
$
outguess -r -k "viva le donne" danza-steg.jpg testo-bis.txt
[Invio]
Questo comando si riferisce ai due esempi precedenti e si mostra l'estrazione del secondo file di informazioni (generando il file testo-bis.txt
). Si osservi che la selezione si ottiene solo in base alla scelta della parola d'ordine corretta e l'opzione -k rimane in forma minuscola:
Reading danza-steg.jpg.... Extracting usable bits: 17882 bits Steg retrieve: seed: 111, len: 55 |
Stegdetect (2) è un programma realizzato dallo stesso autore di Outguess, con lo scopo di cercare di individuare la presenza di informazioni steganografiche all'interno di file che apparentemente contengono solo un'immagine.
Il programma è in grado, teoricamente, di individuare la presenza di diversi tipi di algoritmi steganografici, ma non si può contare che l'analisi sia attendibile; soprattutto, non si può contare sul fatto che sia rivelato alcunché, anche quando l'informazione nascosta esiste veramente.
stegdetect [opzioni] [file]... |
Il programma stegdetect, viene usato normalmente senza opzioni, indicando nella riga di comando l'elenco dei file da controllare; se questa indicazione manca, stegdetect attende il nome dei file da controllare dallo standard input. Ecco un esempio molto semplice di utilizzo:
$
stegdetect *.jpg
[Invio]
... 000001.jpg : negative 000002.jpg : jphide(*) 000003.jpg : skipped (false positive likely) 000004.jpg : jphide(***) 000005.jpg : outguess(**) 000007.jpg : negative ... |
Come si può intuire, gli asterischi vengono usati per indicare la probabilità con la quale è da ritenere che esista effettivamente un'informazione steganografata con l'algoritmo indicato.
Il pacchetto di Stegdetect include anche il programma stegbreak, con il quale si può tentare di estrarre l'informazione contenuta nella portante, tentando di scoprire la parola d'ordine usata per cifrare i dati:
stegbreak [opzioni] [file]... |
L'utilizzo del programma avviene nello stesso modo di stegdetect, con la differenza che, se l'analisi ha successo, il rapporto generato restituisce, con il nome del file, la parola d'ordine scoperta.
Per ulteriori dettagli, si vedano le pagine di manuale stegdetect(1) e stegbreak(1).
Steghide (3) è un programma per la steganografia, utilizzando formati grafici (JPEG e BMP) e formati audio non compressi (WAV-RIFF e AU). La sintassi per l'uso del programma prevede un argomento iniziale che dichiara l'azione, seguito dalle opzioni relative:
steghide azione [opzioni] |
L'azione viene dichiarata attraverso un nome, che eventualmente può essere preceduto da due trattini (--).
|
Segue la descrizione di alcune opzioni. Si osservi che le opzioni utilizzabili effettivamente dipendono dall'azione dichiarata all'inizio della riga di comando.
|
In condizioni normali, Steghide comprime e cifra le informazioni prima di procedere alla steganografia; attraverso delle opzioni che non sono state elencate, è possibile specificare il livello di compressione e l'algoritmo da usare per la cifratura. Il sistema crittografico è simmetrico, ovvero a chiave segreta, costituita da una parola d'ordine. Segue la descrizione di alcuni esempi.
$
steghide info prova.jpg
[Invio]
Richiede informazioni sul file prova.jpg
, che in questo caso consente di inserire circa 2,9 Kibyte:
"prova.jpg": format: jpeg capacity: 2.9 KB |
Il programma propone di verificare l'esistenza di un contenuto steganografico, ma in questo caso si rinuncia:
Try to get information about embedded data? (y/n)
n
[Invio]
$
steghide embed -ef messaggio.txt -cf prova.jpg -sf prova-steg.jpg
[Invio]
Si richiede di utilizzare il file prova.jpg
per incorporare il contenuto del file messaggio.txt
, generando il file steganografato prova-steg.jpg
. Mancando l'opzione -p, viene richiesto di specificare la parola d'ordine:
Enter passphrase:
digitazione_all'oscuro
[Invio]
Re-Enter passphrase:
digitazione_all'oscuro
[Invio]
embedding "messaggio.txt" in "prova.jpg"... done writing stego file "prova-steg.jpg"... done |
$
steghide extract -sf prova-steg.jpg
[Invio]
Si richiede di estrarre il contenuto di prova-steg.jpg
:
Enter passphrase:
digitazione_all'oscuro
[Invio]
wrote extracted data to "messaggio.txt". |
$
steghide extract -sf prova-steg.jpg -xf segreto.txt
[Invio]
Si richiede di estrarre il contenuto di prova-steg.jpg
, specificando che il nome da usare per il file da creare deve essere segreto.txt
:
Enter passphrase:
digitazione_all'oscuro
[Invio]
wrote extracted data to "segreto.txt". |
xsteg(1) (4)
Si tratta di un programma frontale per l'uso di Stegdetect, che però è di scarsa utilità.
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) Outguess licenza speciale BSD
2) Stegdetect licenza speciale BSD
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome steganografia.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]