


STEGO(1)                                                 STEGO(1)


NAME
       stego - steganografia testuale

SYNOPSIS
       stego   [-d,   --diz   DIZIONARIO  ]  [-s,  --stego]  [-x,
       --unstego] [-S, --stego-hash N ] [-X, --unstego-hash  N  ]
       [-iw,  --import-word FILE N ] [-il, --import-letter FILE N
       ] [-w, --write FILE ] [-r,  --rate]  [--version]  [--help]
       [-f, --file FILE ] file ...

DESCRIPTION
       La  steganografia  e l'arte  e la scienza di comunicare in
       modo da nascondere  l'esistenza  della  comunicazione.  In
       contrasto  con la crittografia, dove il nemico e' in grado
       di riconoscere, intercettare  e  modificare  il  messaggio
       senza  essere in grado di violare le premesse di sicurezza
       garantite dal sistema  crittografico,  l'obbiettivo  della
       steganografia e' di nascondere un messaggio segreto dentro
       un altro messaggio contenitore in modo da  non  permettere
       al nemico di riconoscerene la presenza.

       La  steganografia  si  puo'  suddividere  in due categorie
       principali :

       steganografia iniettiva
              Nella steganografia iniettiva il messaggio conteni-
              tore e' un file gia' esistente che viene modificato
              iniettandogli al suo interno il messaggio  segreto.
              La maggior parte dei programmi di steganografia che
              operano su immagini, suoni o  altri  tipi  di  file
              appartengono a questa categoria.

       steganografia generativa
              Nella  steganografia  generativa  il messaggio con-
              tenitore e' un file prodotto in maniera  automatica
              dallo stesso programma di steganografia.

       stego  implementa  la steganografia generativa utilizzando
       come file contenitore un testo in linguaggio naturale.  Il
       testo  contenitore viene creato basandosi su un modello di
       riferimento statistico scelto dall'utente. Il  sistema  e'
       quindi utilizzabile indipendentemente dalla lingua.

       E'  importante capire che la steganografia non sostituisce
       la crittografia, infatti anche se si riuscisse  a  nascon-
       dere  perfettamente un messaggio segreto all'interno di un
       altro messaggio contenitore, al minimo sospetto di comuni-
       cazioni  nascoste, il nemico potrebbe procedere esaustiva-
       mente e cercare in tutti i messaggi fino  ad  identificare
       la comunicazione nascosta.

       Per  contro stego e' realizzato in modo tale che un tenta-
       tivo di desteganografia su un  file  contenitore  che  NON
       contenga  nessun  messaggio segreto generi come output del



                         1 Settembre 1997                       1





STEGO(1)                                                 STEGO(1)


       rumore bianco. Operando invece su un file contenitore  che
       effettivamente contenga un messaggio segreto, ma preceden-
       temente crittografato, si ottiene ovviamente  la  versione
       crittografata del messaggio segreto, ma che, senza la cor-
       retta chiave di decrittografia, risulta anch' essa  indis-
       tinguibile  da rumore bianco. In questo modo il nemico non
       puo' piu' distingure tra rumore e messaggi  crittografati.
       E'   quindi   solo   crittografando  che  il  processo  di
       steganografia si completa  rendendo  indistinguibili  mes-
       saggi  normali e messaggi che contengano un messaggio seg-
       reto al loro interno.

       Naturalmente la bonta di questo sistema dipende da  quanto
       il testo crittografato assomigli a rumore bianco. General-
       mente i sistemi crittografici a blocchi di bit  come  DES,
       IDEA,  ...  soddisfano questo prerequisito.  Eventualmente
       si possono utilizzare alcuni  sistemi  appositamente  stu-
       diati  per questo fine come l'utility White Noise Storm di
       Ray Arachelian o la libreria psteg di Roberto Fabbri.

       In  conclusione  il  processo  di  steganografia  dovrebbe
       essere composto dalle sequenti fasi:

              crittografia
                     Per rendere inaccessibile l'informazione.

              trasformazione
                     Per  rendere statisticamente indistinguibile
                     l'informazione da rumore bianco.

              steganografia
                     Per nascondere la comunicazione.

       Nella scelta e' configurazione di questi programmi bisogna
       fare  molta  attenzione  che non vengano aggiunti header o
       altra generica informazione che possa  far  risalire  alla
       reale provenienza del messaggio.

OPTIONS
       -d, --diz DIZIONARIO
              Per   tutte  le  prossime  operazioni  utilizza  il
              dizionario  contenuto  nel  file  DIZIONARIO.    Il
              dizionario  viene  effettivamente  caricato solo al
              primo reale utilizzo.   Se  non  viene  specificato
              nessun  dizionario  viene utilizzato per default il
              file ./stego.diz.

       -s, --stego
              Seleziona  la  modalita'  di  codifica.   Tutti   i
              prossimi   file   sulla   command   line   verranno
              steganografati con  il  dizionario  attualmente  in
              memoria.   La  modalita'  di codifica viene assunta
              come default.




                         1 Settembre 1997                       2





STEGO(1)                                                 STEGO(1)


       -x, --unstego
              Seleziona la  modalita'  di  decodifica.   Tutti  i
              prossimi   file   sulla   command   line   verranno
              steganografati con  il  dizionario  attualmente  in
              memoria.

       -S, --stego-hash N
              Seleziona la modalita' di codifica tramite funzione
              hash.  Tutti i prossimi  file  sulla  command  line
              verranno  steganografati  con il dizionario attual-
              mente in memoria tramite la funzione  hash  con  il
              bit-rate N specificato.

       -X, --unstego-hash N
              Seleziona  la  modalita' di decodifica tramite fun-
              zione hash.  Tutti i successi  file  sulla  command
              line  verranno desteganografati tramite la funzione
              hash con il bit-rate N specificato.

       -iw, --import-word FILE N
              Contruisce  il  dizionario  per  la  modalita'   di
              steganografia  di parole dal file di testo FILE con
              dipendenza N compreso tra 1 ed 8.  Valori  ottimali
              per N sono 2, 3 e 4.

       -il, --import-letter FILE N
              Contruisce   il  dizionario  per  la  modalita'  di
              steganografia di lettere dal file di testo FILE con
              dipendenza  N  compreso tra 1 ed 8. Valori ottimali
              per N sono 4, 5 e 6.

       -w, --write DIZIONARIO
              Scrive il dizionario  attualmente  in  memoria  nel
              file DIZIONARIO.

       -r, --rate
              Mostra  il  fattore  di espansione approssimato del
              dizionario attualmente in memoria.

       --version
              Informazioni sulla versione.

       --help Riassunto delle opzioni.

       -f, --file FILE
              Utilizza il file FILE come output per  la  prossima
              operazione  di codifica o decodifica.  Se non viene
              specificato il file di output viene usato  il  nome
              file di input con l'estensione -I .stego aggiunta o
              rimossa a seconda che  si  stia  steganografando  o
              desteganografando.   Il  file  di  input originario
              viene cancellato (non viene pero' sovrascritto).

       file   File di input su  cui  operare,  se  non  ne  viene



                         1 Settembre 1997                       3





STEGO(1)                                                 STEGO(1)


              specificato  nessuno vengono utilizzati lo standard
              input e lo standard output.

MODE
       Ci sono due modalita' di codifica, la modalita' a parola e
       la modalita' a lettera.  In ciascuna di queste modalita' i
       file  vengono  interpretati  come  sequenze   di   simboli
       appartenenti ai rispettivi alfabeti.

       Nella  modalita'  a  parola  viene considerato un alfabeto
       composto da simboli multicarattere tale da approssimare al
       meglio una suddivisione per parole :

              1)     Sequenze di caratteri di spazio (automatica-
                     mente convertite in spazi singoli).
              3)     Sequenze di caratteri di punteggiatura.
              3)     Sequenze di tutti i caratteri restanti.

       I file steganografati risultanti dall'utilizzo  di  questa
       modalita'  risulteranno  essere  composti  da  sequenze di
       parole lessicalmente corrette ma con un  vago  significato
       sintattico.

       Nella modalita' a lettera l'alfabeto e' invece composto da
       simboli mono carattere :

              1)     Sequenze di caratteri di spazio (automatica-
                     mente convertite in spazi singoli).
              2)     Ogni altro singolo carattere.

       I  file  steganografati risultanti dall'utilizzo di questa
       modalita' risulteranno essere composti da sequenze di let-
       tere con con un vago significato lessicale e sintattico.

       In  entrambe  le  modalita' a parola e a lettera gli spazi
       vengono gestiti in maniera tale da non presentare problemi
       in  caso  di  riformattazione del testo steganografato. E'
       infatti possibile sostituire spazi con ritorni  a  capo  e
       viceversa.  Per contro non si possono aggiungere spazi che
       non ci siano in origine oppure rimuoverli.

       La modalita'  viene  scelta  nell'atto  di  creazione  del
       dizionario,  e verra' dedotta in fase di steganografia dal
       dizionario utilizzato.


DICTIONARY
       Il dizionario e' l'elemento  caratterizzante  la  fase  di
       codifica.  Viene creato prendendo come modello un testo in
       linguaggio naturale generico. Questo testo  viene  analiz-
       zato  dal  punto di vista statistico sulle occorrenze con-
       dizionate dei singoli elementi dell'alfabeto in  relazione
       a  queli precedenti.  Queste informazioni vengono poi uti-
       lizzate  nella  fase  di  codifica   per   generare   file



                         1 Settembre 1997                       4





STEGO(1)                                                 STEGO(1)


       steganografati  con  le stesse caratteristiche statistiche
       del modello.

       Per la creazione di un dizionario e'  necessario  specifi-
       care la profondita' delle dipendenze da analizzare. Speci-
       ficare un valore unitario indica di raccogliere le  occor-
       renze   condizionate  di  ogni  simbolo  dell'alfabeto  in
       relazione all' elemento precedente, specificare un  valore
       2  indica di riferisi ai 2 elementi precedenti e cosi via.
       Maggiore e' la dipendenza specificata  maggiore  sara'  la
       `somiglianza'  con  il modello, ma maggiore sara' anche la
       dimensione dei file steganografati generati.

       Viene data una misura indicativa del fattore di espansione
       di  un  particolare dizionario con l'utilizzo dell'opzione
       -r.

       Il file di testo da  prendere  come  modello  deve  essere
       preferenzialmente  un  testo  discorsivo,  sono da evitare
       assolutamente testi elencativi come dizionari e vocabolari
       in quanto non significativi dal punto di vista statistico.
       Si consiglia inoltre di eliminare eventuali parti non dis-
       corsive  come  titoli, didascalie, note, bibliografie, ...
       Maggiore e' la dimensione del file di  testo  maggiormente
       complete  ed  accurate saranno le informazioni statistiche
       raccolte, ma maggiori saranno le richieste di memoria  del
       programma.

       Esempi di creazione di dizionari :

              stego -il book.text 5 -r -w dizionario-letter.diz

       Crea un dizionario analizzando le occorrenze delle singole
       lettere del file book.text con una  dipendenza  pari  a  5
       lettere  (o  spazi) precedenti, stampa a video il rapporto
       di espansione del dizionario, ed infine lo salva nel  file
       dizionario-letter.diz.

              stego -iw book.text 3 -r -w dizionario-word.diz

       Crea un dizionario analizzando le occorrenze delle singole
       parole del file book.text con  una  dipendenza  pari  a  3
       parole (o spazi) precedenti, stampa a video il rapporto di
       espansione del dizionario, ef infine  lo  salva  nel  file
       dizionario-word.diz.

STEGANOGRAPHY
       Il  processo di steganografia si basa su un dizionario che
       deve essere condivisio sia dal mittente che dal ricevente.
       Senza  lo  stesso  identico dizionario non sara' possibile
       desteganografare correttamente e recuperare  il  messaggio
       segreto.

       Per steganografare un file dare il comando :



                         1 Settembre 1997                       5





STEGO(1)                                                 STEGO(1)


              stego -d DIZIONARIO -s NOMEFILE

       Il  file  NOMEFILE  verra' steganografato e verra nominato
       NOMEFILE.stego utilizzando il dizionario  DIZIONARIO.   Il
       file originale sara' cancellato.

       Esempio :
              stego -d dizionario.diz secret_file

       Per destenografare dare il comando :

              stego -d DIZIONARIO -x NOMEFILE.stego

       Ricostruisce  il  file  NOMEFILE  e cancella il file NOME-
       FILE.stego.   E'   fondamentale   utilizzare   lo   stesso
       dizionario usato nella fase di codifica.

       Esempio :
              stego -d dizionario.diz -x secret_file.stego


STEGANOGRAPHY WITH HASH FUNCTION
       La steganografia tramite funzione di hash permette di ren-
       dere la fase di decodifica indipendente da quella di codi-
       fica.   Per  poter decodificare un file non e' piu' neces-
       sario l'utilizzo del dizionario usato per la codifica,  ma
       solo  specificare il bit-rate della funzione di hash usata
       durante la codifica.

       Questo si ottiene usando una fase di  decodifica  unica  e
       codificando  per  tentativi  con  backtracing  fino  a far
       ottenere alla funzione hash usata  per  la  decodifica  le
       informazioni  volute.  A causa di questo modo di procedere
       e della natura non deterministica della fase  di  codifica
       non c'e' garanzia che sia possibile codificare ogni file e
       che se e' codificabile una volta lo sia sempre. Scegliendo
       pero'  una funzione di hash con un bit-rate adeguato si ha
       la ragionevole certezza di poter sempre ottenere la  codi-
       fica  desiderata. In particolare conviene sempre scegliere
       bit-rate superiori di almeno 2 o 3  volte  al  fattore  di
       espansione carratteristico del dizionario usato nella cod-
       ifica.

       Scegliere una funzione di hash con un bit-rate basso  puo'
       portare  al  fallimento  sistematico  od occasionale della
       fase di codifica ed ad una non buona somiglianza del  file
       generato  con  il file modello utilizzato per la creazione
       del dizionario.  Per contro specificare un  bit-rate  ele-
       vato  fa  aumentare  la dimensione del file steganografato
       che  risulta  espansa  per  un  fattore  pari  a  bit-rate
       rispetto al messaggio segreto.

       E'  inoltre  fondamentale  considerare  che la funzione di
       hash tende a generare  rumore  bianco  solo  con  bit-rate



                         1 Settembre 1997                       6





STEGO(1)                                                 STEGO(1)


       elevati.  Quindi  specificando  bit-rate  troppo  bassi si
       rischia che il nemico, con una analisi  statistica,  possa
       riconoscere la presenza di un messaggio segreto.

       Il  file  steganografato  prima di essere desteganografato
       viene filtrato in maniera tale da non presentare  problemi
       in  caso  di riformattazione.  E' infatti possibile sosti-
       tuire spazi con ritorni a capo e  viceversa.   Per  contro
       non  si  possono aggiungere spazi che gia' non ci siano in
       origine oppure rimuoverli. Fare soprattutto  attenzione  a
       spazi in coda al file.

       Per  steganografare  un file tramite funzione di hash dare
       il comando :

              stego -d DIZIONARIO -S N NOMEFILE

       Il file NOMEFILE verra' steganografato usando la  funzione
       di  hash  con  il  bit-rate N selezionato e utilizzando il
       dizionario  DIZIONARIO.   Verra'  creato  il  file   NOME-
       FILE.stego ed il file originale sara cancellato.

       Esempio :
              stego -d dizionario.diz -S 42 secret_file

       Per  destenografare  tramite  funzione  di  hash  dare  il
       comando :

              stego -X N NOMEFILE.stego

       Ricostruisce il file NOMEFILE e  cancella  il  file  NOME-
       FILE.stego utilizzando la funzione di hash con il bit-rate
       N specificato.  Il bit-rate deve essere lo stesso  utiliz-
       zato nella fase di codifica.

       Esempio :
              stego -X 42 secret_file.stego

OUTPUT
       Per disabilitare il meccanismo di cancellazione automatica
       dei file di  input  e  l'aggiunta  dell'estensione  .stego
       specificare prima di ogni file di input un file di output,
       oppure usare le pipe.

       Esempi :
              stego -d mydiz.diz -s -f stego_file secret_file
              stego -d mydiz.diz -S 42 -f stego_file secret_file
              stego -d mydiz.diz -x -f decode_file stego_file
              stego -X 42 -f decode_file stego_file

       Per utilizzare stego come pipe semplicemente non  specifi-
       care  nessun  file  di  input  ed  utilizzare  la sintassi
       usuale.  Non specificare inoltre  parametri  che  generano
       dell'output                    (come                   -r,



                         1 Settembre 1997                       7





STEGO(1)                                                 STEGO(1)


       -w)chedisabilitanoautomaticamentelepipe.

       Esempi :
              stego -d mydiz.diz -s > stego_file < secret_file
              stego -d mydiz.diz -S 42 > stego_file < secret_file
              stego -d mydiz.diz -x > decode_file < stego_file
              stego -X 42 > decode_file < stego_file

ENVIRONMENT
       STEGO  E'  possibile  specificare dei parametri di default
              tramite la variabile di environment STEGO.   Questi
              parametri  vengono  processati prima della command-
              line.

DIAGNOSTICS
       In caso di errore stego  stampa  su  stderr  un  messaggio
       esplicativo  e termina con un codice di ritorno diverso da
       0.

       I possibili errori interni  al  programma  (e  quindi  non
       dovuti  a  cause esterne come filesystem corrotti o errata
       command-line) sono :

       hash error, try to increase the bit-rate
              La codifica tramite funzione di  hash  e'  fallita,
              provare ad incrementare il bit-rate.

       dictionary error, no seed
              Non  e'  stato possibile estrarre dal dizionario un
              seme, cioe'  una  sequenza  di  lettere  adatta  ad
              iniziare  un  testo. E' sintomo che il file utiliz-
              zato come modello per la creazione  del  dizionario
              non e' in linguaggio naturale.

       dictionary error, ...
              Il  dizionario  utilizzato nella fase di decodifica
              non corrisponde con quello utilizzato  in  fase  di
              codifica.   Oppure  in generale si sta' utilizzando
              un file dizionario corrotto.

       dictionary empty
              Il dizionario non e' utilizzabile in quanto  vuoto,
              probabilmente e' stato usato un file di riferimento
              statistico troppo piccolo o non discorsivo.

       character wrap
              Si e' verificato un  overflow  di  carattere  nella
              fase  di codifica che pertanto non puo' essere por-
              tata  a  termine.  Questo  errore  e'  estremamente
              improbabile.

       input error
              Il  file  dizionario in lettura e' corrotto. Tenere
              presente che  il  fatto  che  un  dizionario  venga



                         1 Settembre 1997                       8





STEGO(1)                                                 STEGO(1)


              caricato  in  memoria  senza errori non implica che
              non sia corrotto.

BUGS
       Questa  e'  una  BETA  VERSION,  la  presenza  di  bug   e
       tutt'altro che improbabile.

       Il  riconoscimento  delle  opzioni  della command-line non
       segue lo standard unix. In particolare  non  e'  possibile
       accorpare piu' opzioni senza spazi.

       Se  la  memoria disponibile non e' sufficiente, ma e' pre-
       sente  una  qualche  forma   di   memoria   virtuale,   le
       prestazioni  degradano al punto che sarebbe auspicabile il
       fallimento dell'operazione.

AUTHOR
       Andrea Mazzoleni (email: ?@?) (cybernet: 65:1000/4.8)
              Autore primario.

       Roberto Fabbri (email: fabbriro@cli.di.unipi.it)
              Ideatore della decodifica tramite funzione di hash.

SEE ALSO
       pgp(1)
































                         1 Settembre 1997                       9


