# Steganografia

La steganografia è una tecnica che si prefigge di nascondere la comunicazione tra due interlocutori. Il termine è composto appunto dalle parole greche στεγανός (coperto) e γραφία (scrittura).
Il primo utilizzo registrato del termine fu nel 1499 da Johannes Trithemius nella sua Steganographia, un trattato sulla crittografia e la steganografia, mascherato come un libro sulla magia. L'opera incominciò a circolare in corrispondenze private e suscitò reazioni così allarmate che l'autore decise di non darla alle stampe e ne distrusse addirittura larghe parti, ritenendo che non avrebbero mai dovuto vedere la luce. Continuò comunque a circolare in forma di minuta e fu pubblicata postuma nel 1606.
Generalmente, i messaggi nascosti sembrano essere (o fanno parte di) qualcos'altro: immagini, articoli, liste della spesa o un altro testo di copertura. Ad esempio, il messaggio nascosto può essere un inchiostro invisibile tra le linee di una lettera privata. Alcune implementazioni della steganografia che non utilizzano un segreto comune sono forme di security through obscurity, mentre gli schemi steganografici a chiave dipendono dal principio di Kerckhoffs.
La steganografia, a differenza della crittografia, consente di nascondere un messaggio all'interno di un vettore che possa consentirne il trasporto senza destare sospetti.
La steganografia comprende l'occultamento di informazioni all'interno di file di computer. Nella steganografia digitale, le comunicazioni elettroniche possono includere la codifica steganografica all'interno di un livello di trasporto, ad esempio un file di documento, un file di immagine, un programma o un protocollo. I file multimediali sono ideali per la trasmissione steganografica a causa della loro grande dimensione. Ad esempio, un mittente potrebbe inviare un file di immagine innocuo e regolare il colore di un pixel ogni cento per farlo corrispondere a un carattere alfabetico. La modifica è così lieve che è improbabile che qualcuno la noti, a meno che non la stia cercando in modo specifico.

## Storia

Tracce della steganografia si hanno già nell'antica Grecia, quando Erodoto narra di due esempi nelle sue Storie: Demarato di Sparta, che per avvisare i compatrioti di una possibile invasione persiana scrisse su una tavoletta un messaggio da nascondere, poi coprì la tavoletta di cera e sulla cera scrisse un messaggio innocuo. Poiché nell'antichità le tavolette di cera erano normalmente usate per scrivere testi provvisori, non destò sospetti. Istieo mandò un messaggio al suo vassallo, Aristagora, rasando la testa del suo servo più affidato, "scrivendo" il messaggio sul suo cuoio capelluto, poi mandandolo in viaggio una volta che i suoi capelli erano ricresciuti, con l'istruzione "quando arriverai a Mileto, di' ad Aristagora di rasarti i capelli e di guardarti la testa."

## Modelli steganografici

Nella steganografia si hanno due tipi di messaggi: un messaggio contenitore e un messaggio segreto, dove il primo, ben visibile, ha il compito di trasportare e nascondere il contenuto dell’altro, in modo tale da renderlo praticamente invisibile.
Una prima classificazione dei modelli steganografici si divide in steganografia iniettiva e steganografia generativa:
* La steganografia iniettiva è la più utilizzata, consiste nell’inserire (iniettare) il messaggio segreto all’interno di un altro messaggio che funge da contenitore, in modo tale da costruire un messaggio contenitore (a volte detto steganogramma) praticamente indistinguibile dall’originale, con il messaggio segreto che sia invisibile all’occhio umano.
* La steganografia generativa consiste nel prendere il messaggio segreto e costruirgli un opportuno contenitore in modo tale da nascondere il messaggio nel miglior modo possibile.
Una seconda classificazione ripartisce le tecniche steganografiche in tre sottoclassi: steganografia sostitutiva, selettiva e costruttiva.
* La steganografia sostitutiva è la più diffusa, si basa sull'osservazione della maggior parte dei canali di comunicazione (linee telefoniche, trasmissioni radio, ecc.); essi trasportano segnali accompagnati da qualche tipo di rumore. Il rumore (o parte di esso) può essere sostituito dal messaggio segreto. La modifica al messaggio contenitore è impercettibile agli umani, solo con un'approfondita analisi si può rilevare (preferibilmente avendo il messaggio originale) che nel messaggio contenitore ci sono modifiche non riconducibili a rumore.
* La steganografia selettiva, invece, non viene utilizzata nella pratica, ma è puramente teorica. Consiste nel fare una selezione dei contenitori a disposizione per poi procedere a tentativi finché non vengono rispettate determinate condizioni. È una tecnica molto dispendiosa in termini di tempo e non permette un inserimento di una grande quantità di informazioni da nascondere, ma solo una quantità limitata, per questo motivo non viene utilizzata.
* Un modello molto simile alla steganografia sostitutiva è la steganografia costruttiva, con la differenza che nel modificare il file contenitore si tiene conto di un modello di rumore, cioè si tenta di sostituire il rumore presente con il messaggio segreto nel rispetto delle caratteristiche statistiche del rumore originale. È un approccio apparentemente valido, ma non è esente da svantaggi. Infatti, non è per niente immediato costruire un modello del rumore, ciò richiede tempo e grandi sforzi per la selezione di informazioni. Inoltre, se il modello utilizzato cadesse nelle mani del nemico, egli lo potrebbe analizzare e cercarne i possibili punti deboli e difetti. In questo modo si fornirebbe involontariamente uno strumento di attacco molto efficace contro il proprio sistema.

## Tecniche

La steganografia può trovare uso in ogni forma di comunicazione, è sufficiente che mittente e destinatario abbiano concordato un codice non vincolato ai normali simboli alfabetici. Ad esempio: Alice e Bob si accordano sull'uso di un sistema steganografico: il numero di virgole presente in una singola pagina sarà tra 1 e 21, questo numero corrisponderà a una lettera dell'alfabeto (le lettere, concatenate tra loro, costituiscono il messaggio reale). Qualora Alice e Bob dovessero trovarsi in un regime di comunicazione controllata, potrebbero scrivere pagine di copertura narrando informazioni prive di valore per loro, ma facendo un uso accurato delle virgole, riuscirebbero a nascondere il vero messaggio con questa tecnica steganografica.

### Fisico

La steganografia è stata ampiamente utilizzata per secoli. Ecco alcuni esempi fisici:
* Messaggi nascosti su carta scritti in inchiostri segreti, sotto altri messaggi o su parti vuote di altri messaggi.
* Messaggi scritti in codice Morse su filo e poi lavorati a maglia in un capo indossato da un corriere.
* Messaggi scritti su buste nell'area coperta dai francobolli.
* Durante entrambe le guerre mondiali, le spie femminili utilizzavano il lavoro a maglia per inviare dei messaggi crittografati, ad esempio facendo un punto irregolare nel tessuto oppure lasciando un buco intenzionale nel tessuto.
* Durante la seconda guerra mondiale, Velvalee Dickinson, una spia del Giappone nella città di New York, inviò informazioni ai contatti in Argentina. Lei era una commerciante di bambole e utilizzava esse per fornire informazioni sulla Marina degli Stati Uniti. Il suo caso divenne famoso e divenne nota come la donna delle bambole.
* Durante la seconda guerra mondiale, il vetro fotosensibile fu dichiarato segreto e usato per trasmettere informazioni agli eserciti alleati.
* Jeremiah Denton ha ripetutamente battuto le palpebre in codice Morse durante una conferenza stampa televisiva del 1966, scandendo "TORTURE" e confermando per la prima volta all'intelligence navale degli Stati Uniti che i prigionieri di guerra americani venivano effettivamente torturati dai nord-vietnamiti.Immagine di un albero con un'immagine steganografica nascosta. L'immagine nascosta viene rivelata rimuovendo tutti i bit tranne i due meno significativi di ciascun componente di colore e una successiva normalizzazione. L'immagine nascosta è mostrata sotto.

### Messaggi digitali

La steganografia moderna è entrata nel mondo nel 1985 con l'avvento di personal computer applicati a problemi di steganografia classica. Lo sviluppo successivo è stato molto lento, ma da allora è decollato, passando a un gran numero di software di steganografia disponibili.
* Nascondere messaggi all'interno dei bit meno significativi di immagini o audio.
* Nascondere dati all'interno di dati crittografati o all'interno di dati casuali.
* Immagini incorporate nel materiale video (opzionalmente riprodotte a velocità più bassa o più veloce).
* Inserimento di ritardi impercettibili ai pacchetti inviati tramite la rete dalla tastiera. Ritardi nella pressione dei tasti in alcune applicazioni (telnet o software desktop remoto) che possono essere utilizzati per codificare i dati.
* Modifica dell'eco di un file audio.
* Steganografia per segnali audio.
* Steganografia di segmentazione della complessità del bit-plane.

#### Testo digitale

* Utilizzo di caratteri Unicode che assomigliano al set di caratteri ASCII standard (come nell'attacco omografico). Sulla maggior parte dei sistemi non c'è differenza visiva dal testo normale.
* Rendere il testo dello stesso colore dello sfondo nei documenti di elaborazione testi, e-mail e post sul forum.
* Utilizzo di caratteri (di controllo) nascosti e uso ridondante del markup (ad es. grassetto, sottolineato o corsivo) per incorporare le informazioni all'interno del codice HTML, che è visibile esaminando l'origine del documento. Le pagine HTML possono contenere codice per ulteriori spazi vuoti e schede alla fine delle linee e colori, tipi di carattere e dimensioni, che non sono visibili quando vengono visualizzati.
* Utilizzo di caratteri Unicode non stampabili Zero-Width Joiner (ZWJ) e Zero-Width Non-Joiner (ZWNJ). Questi caratteri sono usati per unire e disgiungere lettere in arabo e persiano, ma possono essere usati negli alfabeti romani per nascondere le informazioni perché non hanno significato negli alfabeti romani: poiché sono "a larghezza zero" non vengono visualizzati. ZWJ e ZWNJ possono rappresentare rispettivamente "1" e "0".
* Incorporare un messaggio segreto sotto forma di quelli che sembrano errori, in realtà intenzionali, e correzioni contrassegnate in un documento di elaborazione testo, utilizzando la funzione di rilevamento delle modifiche del programma di elaborazione testi.

#### Steganografia sociale

In alcune comunità antiche, ma anche in quelle moderne, le persone usano la steganografia per nascondere messaggi in idiomi, video, canzoni molto spesso anche pubblicati in internet e sui social network. Alcuni esempi includono:
* Nomi o parole errate che sono popolari nei media in una determinata settimana, per suggerire un significato alternativo.
* Nascondere un'immagine che può essere tracciata usando Paint o qualsiasi altro strumento di disegno.
* Nascondere un messaggio in un video che a prima vista non ha significato, ma in realtà solo le persone che conoscono bene l'autore di esso possono cogliere il vero significato.

### Rete

Tutte le tecniche di occultamento delle informazioni che possono essere utilizzate per lo scambio di steganogrammi nelle reti di telecomunicazione possono essere classificate sotto il termine generale della steganografia di rete. Questa nomenclatura è stata originariamente introdotta da Krzysztof Szczypiorski nel 2003. Nel 2016, un primo libro sulla steganografia di rete è stato pubblicato da Mazurczyk et al. Tuttavia, il nascondere le informazioni nella rete era già applicato alla fine degli anni '80 da Girling e Wolf. Contrariamente ai tipici metodi steganografici che utilizzano i media digitali (immagini, file audio e video) per nascondere i dati, la steganografia di rete utilizza gli elementi di controllo dei protocolli di comunicazione e le loro intrinseche funzionalità. Di conseguenza, tali metodi possono essere più difficili da individuare ed eliminare.
I tipici metodi di steganografia di rete implicano la modifica delle proprietà di un singolo protocollo di rete. Tale modifica può essere applicata alla PDU (Protocol Data Unit),alle relazioni temporali tra le PDU scambiate, o entrambe (metodi ibridi).
La steganografia di rete copre un ampio spettro di tecniche, che includono, tra le altre:
* Steganofonia - l'occultamento dei messaggi nelle conversazioni Voice over IP, ad esempio l'uso di pacchetti ritardati o corrotti che normalmente verrebbero ignorati dal ricevitore (questo metodo è chiamato LACK - Lost Audio Packets Steganography) o, in alternativa, nascondendo le informazioni in campi di intestazione non utilizzati.
* Steganografia WLAN - trasmissione di steganogrammi in reti locali wireless. Un esempio pratico di WLAN Steganography è il sistema HICCUPS (Hidden Communication System for Corrupted Networks).

### Sistemi cyber-fisici / Internet of Things

Lo studio accademico dal 2012 ha dimostrato la fattibilità della steganografia per i sistemi cibernetici (CPS) / Internet of Things (IoT). Alcune tecniche di steganografia CPS / IoT si sovrappongono alla steganografia di rete, cioè nascondono i dati nei protocolli di comunicazione usati in CPS / IoT. Tuttavia, queste tecniche specifiche nascondono i dati nei componenti CPS. Ad esempio, i dati possono essere memorizzati nei registri inutilizzati dei componenti IoT / CPS e negli stati degli attuatori IoT / CPS.

### Stampato

L'output di steganografia digitale può essere sotto forma di documenti stampati. Un messaggio può essere crittografato con mezzi tradizionali, producendo un testo cifrato. Quindi, un covertext innocuo viene modificato in qualche modo da contenere il testo cifrato, risultante nello stegotext . Ad esempio, la dimensione della lettera, la spaziatura, il carattere tipografico o altre caratteristiche di un testo di copertina possono essere manipolate per portare il messaggio nascosto. Solo un destinatario che conosce la tecnica utilizzata può recuperare il messaggio e quindi decifrarlo. Una tecnica del genere era il cifrario di Bacone, sviluppato da Francesco Bacone.
Sebbene non siano classiche steganografie, alcuni tipi di stampanti laser a colori moderne integrano il modello, il numero di serie e il timestamp su ogni stampa per motivi di tracciabilità utilizzando un codice a matrice di punti piccoli e gialli non riconoscibili a occhio nudo (steganografia di stampa per i dettagli).

## Caratteristiche

La steganografia si pone come obiettivo di mantenere nascosta l'esistenza di dati a chi non conosce il protocollo di occultamento, mentre l'obiettivo della crittografia è di non rendere accessibili i dati nascosti a chi non conosce la chiave, cioè di nascondere il contenuto del messaggio. La crittanalisi è l'attacco alla crittografia, che mira a estrarre i dati cifrati senza chiave. La steganalisi è l'attacco alla steganografia, l'obiettivo della steganalisi non è quindi quello di estrarre i dati nascosti, ma semplicemente di dimostrarne l'esistenza.

## Principi della steganografia digitale

La steganografia è una forma di Sicurezza tramite segretezza, l'algoritmo di steganografia a differenza di un algoritmo crittografico deve tenere conto della forma plausibile che i dati generati devono avere, affinché non destino sospetti.
La steganografia valuta la robustezza dei suoi algoritmi sia in condizioni di analisi da parte di individui (che il dato generato sia coerente, almeno alle apparenze, con dati simili) sia da parte di computer (quindi analisi matematiche, statistiche e di confronto con archivi).

### Steganografia LSB/rumore di fondo

LSB (dall'inglese least significant bit, bit meno significativo) è la tipologia di steganografia più diffusa. Si basa sulla teoria secondo la quale l'aspetto di un'immagine digitale ad alta definizione non cambia se i colori vengono modificati in modo impercettibile.
Ogni pixel è rappresentato da un colore differente, cambiando il bit meno significativo di ogni pixel, il singolo colore non risulterà variato in modo significativo e il contenuto dell'immagine sarà preservato nonostante questa manipolazione.
L'algoritmo steganografico riceve in input un'immagine di copertura/contenitore (C), una chiave (K) e un dato da nascondere (D). Estrae da C i bit meno significativi, misurandone la dimensione e verificando se questa è sufficiente per ospitare D. Tramite K, D viene sparpagliato tra i bit meno significativi, sovrascrivendo i valori originali. Viene così generato S, il dato steganografico.
Chi analizzerà S avrà davanti a sé un'immagine plausibile, e pur conoscendo l'algoritmo avrà bisogno di K per verificare se c'è un messaggio nascosto. È sempre possibile un attacco di tipo forza bruta, avendo chiaro l'algoritmo e il dato da forzare, come avviene nella crittografia.
In alcuni algoritmi di steganografia, K viene usato per cifrare D e non nel processo steganografico, che di conseguenza è sempre uguale per ogni esecuzione dell'algoritmo. Essendo la sicurezza dell'algoritmo vincolata a parametri umani, non si può generalizzare dicendo che questo approccio è insicuro, ma l'uso della chiave per finalità crittografiche e quindi un uso della distribuzione steganografica non dipendente da chiave, può diventare una vulnerabilità.
L'esempio portato con le immagini può essere replicato su altri dati multimediali (file audio e video), perché tutti condividono la caratteristica di tollerare distorsioni plausibili, lasciando fruibile il contenuto originale.
Questa tecnica steganografica viene generalizzata dicendo che si basa sul rumore di fondo. Tutte quelle porzioni di dati contenenti dettagli inessenziali per la trasmissione del contenuto possono essere utilizzate come contenitore steganografico, una volta trovato un codice adeguato a non causare incoerenze evidenti all'analista.

### Steganografia pura/a generazione di copertura

In alcuni contesti, piuttosto che usare un contenitore per nascondere dei dati al suo interno, un software di steganografia può ricevere in input la chiave (K) e il dato (D) e generare autonomamente un dato steganografato. Di fatto il contenitore viene generato basandosi su di una base di dati preesistente.
Spammimic, dimostrato vulnerabile nel 2007, ha implementato questa tecnica applicandola a contenitori di tipo testo: il software genera spam, in quanto teorica fonte di informazioni casuali e plausibili, come contenitore di dati steganografati. Il fatto che spammimic sia stato dimostrato vulnerabile non è da imputarsi alla tecnologia scelta, ma solo alla limitatezza del dizionario dal quale lo spam viene generato e dalla presenza di tratti riconoscibili.

### Strumenti steganografici

* OpenPuff: BMP, JPG, PNG, TGA, MP3, WAV, 3gp, Mp4, MPEG-1, MPEG-2, VOB, SWF, FLV, PDF
* S-Tools: BMP, GIF, WAV, unused floppy disk space
* Steghide: JPEG, BMP, WAV e AU
* MP3Stego: MP3
* Invisible Secrets: BMP, PNG, JPG, WAV, Html
* StegFS: File system steganografico
* outguess: tool da linea di comando per Linux
* JSteg: algoritmo steganografico applicato su pagine web tramite JavaScript Injection.
* Steg: BMP, JPG, JPEG, PNG, PPM, TIFF.

## Attacchi alla steganografia
### Steganalisi

La steganalisi è il processo inverso della steganografia. Ha l'obiettivo di determinare se un file o qualsiasi altro mezzo che possa trasportare informazioni contenga un messaggio segreto e nel caso l'esito sia positivo trovare quali sono le informazioni nascoste.

### Distorsione

Un attacco a distorsione è portato quando la terza parte che osserva le comunicazioni può modificare il dato in modo automatico al fine di cambiarne alcune caratteristiche. Un attacco di distorsione applicato a dei contenuti multimediali con steganografia LSB si realizza diminuendo la definizione del contenuto: infatti qualunque tecnica steganografica sia stata applicata, la ridefinizione dell'immagine danneggia il messaggio nascosto nel dato.