Visualizzazione post con etichetta Crittografia. Mostra tutti i post
Visualizzazione post con etichetta Crittografia. Mostra tutti i post

martedì 22 marzo 2016

Steganografia su Lubit. Parte prima.



La steganografia è una tecnica di sicurezza che viene di solito confusa con quella della crittografia.

Lo scopo della crittografia è quello di nascondere il contenuto di un messaggio. Non mi interessa che venga intercettato il messaggio, a me interessa che lo stesso risulti illeggibile agli occhi di colui che lo intercetta.

Lo scopo della steganografia è invece quello di nascondere proprio l'esistenza del messaggio.
Si pensi ad esempio ad un soldato che venga sorpreso a scambiare messaggi cifrati con uno Stato nemico: indipendentemente dal contenuto del messaggio, il solo fatto che vengano scambiati messaggi cifrati desta ovvi sospetti.

Le origini della steganografia non sono affatto recenti.

La parola steganografia deriva dall'unione dei due vocaboli greci stèganos  (nascosto) e gràfein (scrivere) ovvero scrittura nascosta o meglio ancora l'insieme delle tecniche che consente a due o più persone di comunicare in modo tale da nascondere l'esistenza della comunicazione agli occhi di un eventuale osservatore, tradizionalmente denominato "nemico".

Erodoto racconta 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.

In questa serie di post avremo modo di parlare ampiamente di steganografia su lubit, analizzando nei dettagli un po' di tools preposti allo scopo. Tools ad interfaccia grafica, ma anche a riga di comando. Magari ne creeremo qualcuno ricorrendo a bash e a Python.

Iniziamo da un tool abbastanza semplice: Outguess

Outguess è uno strumento di steganografia a riga di comando, che permette l'inserimento di informazioni nascoste nei bit ridondanti di una sorgente dati; nel nostro caso nasconderemo un messaggio segreto in un'immagine jpg (cuore.jpg)

Per installarlo

$ sudo apt-get install outguess

Spostiamoci nella cartella Documenti, dove avremo già posizionato un'immagine nel formato jpg.

$ cd Documenti

Ora creiamo il file di testo contenente il nostro messaggio segreto

$ echo "io uso lubit come sistema operativo" > secret.txt

A questo punto incorporiamo il file secret.txt nell'immagine

$ outguess -k "lubit linux" -d secret.txt cuore.jpg output.jpg

Il flag -k sta per key, che nel mio caso è lubit linux. Se dimenticherete la chiave, non riuscirete più a recuperare il messaggio segreto, eh. ;)

Per scorporare il messaggio segreto dall'immagine

$ outguess -k "lubit linux" -r output.jpg messaggio_segreto.txt

Alla prossima!

mercoledì 14 gennaio 2015

Il Codice di Cesare [Brevi Esercizi]

Salve!

Uno degli esempi più significativi di crittografia a chiave simmetrica dell'età classica fu senza dubbio il cifrario di Cesare.

Come funziona codesto codice?

Si tratta di un cifrario a sostituzione monoalfabetica: Ogni lettera di una parola viene sostituita con un'altra in base ad una chiave.

Si dice che Cesare usasse come chiave K=3

Esempio:

Parola in chiaro: Luca
Parola cifrata: OAFD

Stabilito che la chiave è 3, la lettera L va sostituita con la lettera O, la lettera U con la lettera A, la lettera C va sostituita con la G e la lettera A con la lettera D.  Chiave 3 significa che bisogna contare tre posti in avanti nell'alfabeto (italiano, nell'esempio), a partire dalla lettera data, che va esclusa dal computo.

Ho creato uno script in bash, semplice semplice, che cifra e decifra in base al cifrario di Cesare. 

#!/bin/bash
#Cifrario di Cesare
#bit3lux@gmail.com

cifrare() {
#chiave=3
#Alfabeto di 26 lettere, senza spazi.
clear
alfabeto=$(echo {a..z} | sed 's/ //g')
k3="DEFGHIJKLMNOPQRSTUVWXYZABC"
read -p "digita il testo da cifrare: " testo
echo $testo | tr "[:upper:]" "[:lower:]" | tr "$alfabeto" "$k3"
}

decifrare() {
clear
alfabeto=$(echo {a..z} | sed 's/ //g') 
k3="DEFGHIJKLMNOPQRSTUVWXYZABC"
read -p "digita il testo da decifrare: " testo
echo $testo | tr "[:lower:]" "[:upper:]" | tr "$k3" "$alfabeto"
}

clear
echo "Per cifrare digita 0, per decifrare digita 1."
echo
read scelta

if [ $scelta == 0 ]
then
    cifrare
    echo

elif [ $scelta == 1 ]
then
    decifrare
    echo

else
    clear && echo "Opzione non valida, per scegliere digita 0 o 1"
    echo

fi

exit 0

Cifrare
Decifrare
Alla prossima!