Post on 24-Feb-2019
Introduzione alla Crittografia
Le Basi (definizioni, richiami e strumenti)
Bruno Martino - Fabio Guglietta
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Cosa faremo oggi ?
• Materiale utile
• Finalità
• Concetti base
• Operazioni sul bit
• Crittografia elementare
• Comunicazioni via rete
• Pipes
• “Accendere” e “spegnere” i bit
• Prime funzioni di libreria
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Saperne di più
• Un buon testo sull’argomento:
W. Trappe, L. C. Washington:
“Crittografia con elementi di teoria dei codici”
• Divulgativi:
• D. Kimpton: “Cervellotici codici”
• S. Singh: “Codici & segreti. La storia dei messaggi cifrati
dall’antico Egitto a Internet”
• Verranno proposti nel seguito link a siti legati all’argomento in esame
• Le slides relative agli incontri saranno disponibili a questo indirizzo:
http://www.iasi.cnr.it/seminaricrittografia
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
A che serve la crittografia?
• Transazioni bancarie
• Acquisti in rete
• Dati riservati
• Comunicazioni tra Alice e Bob …
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Mi senti?
Una comunicazione tra
due punti corre il rischio
di venire facilmente
intercettata utilizzando
tecniche di vario tipo
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Qualche definizione
• La crittografia è una tecnica che ha lo scopo di confondere il
significato dei messaggi alterandoli grazie a processi concordati
dal mittente e dal destinatario (quindi non mira a nascondere il
messaggio in sé); la parola deriva dal greco kryptós che significa
nascosto.
• La crittoanalisi è l'insieme delle tecniche impiegate per
combattere i sistemi di crittografia
• La crittologia (crittografia+crittoanalisi) è la “scienza delle
scritture nascoste” (wikipedia)
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Confusione
• Un blocco cifrato deve dipendere in modo complesso dal valore
della chiave (CONFUSIONE)
• La confusione:
• nasconde la relazione esistente tra testo in chiaro e testo
cifrato
• rende poco efficace lo studio del cifrato basato su
statistiche e ridondanze del testo in chiaro
• La sostituzione è il mezzo più semplice ed efficace per creare
confusione
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Diffusione
Ogni simbolo di un blocco cifrato deve dipendere da tutti i simboli
del blocco in chiaro (DIFFUSIONE)
• La diffusione nasconde la ridondanza
del testo in chiaro spargendola
all’interno del testo cifrato.
• La trasposizione è il mezzo più
semplice ed efficace per ottenere
diffusione.
Queste proprietà sono state identificate da Shannon nel lavoro
“La teoria della comunicazione nei sistemi crittografici” (1949)
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Sicurezza di un cifrario
• Un Cifrario è detto PERFETTO, o assolutamente sicuro, se,
dopo aver intercettatto un certo testo cifrato c, l’incertezza
a posteriori sul testo in chiaro m è uguale all’incertezza che
si aveva a priori, cioè prima dell’intercettazione
• Un Cifrario è detto computazionalmente sicuro se il
calcolare m da un c è possibile, ma richiede una potenza di
elaborazione superiore a quella a disposizione
dell’attaccante.
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Parla liberamente!
La crittografia simmetrica è la
tecnica di cifratura più nota; una
chiave segreta, che può essere un
numero, una parola oppure
semplicemente una stringa
casuale viene applicata al testo di
un messaggio per modificarne il
contenuto
Se il destinatario è a conoscenza della chiave può risalire al messaggio
originario applicando al contrario il procedimento di cifratura
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Operatore XOR
E’ un operatore booleano, detto anche
OR esclusivo, che dà come risultato
VERO (1) se e solo se le condizioni sono
diverse, mentre restituisce come
risultato FALSO (o 0 nel sistema
binario) se le condizioni sono uguali
(tutte vere o tutte false).
L'operatore logico OR esclusivo nel linguaggio di programmazione ‘C’
esiste come operatore bit a bit (“^”)
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Cosa vuol dire bit a bit?
Immaginiamo di avere dichiarato due variabili della lunghezza di un byte e di averle valorizzate come segue:
Quanto vale la variabile c?
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Crittografia spicciola
Analizziamo la struttura di un semplice programma che legge da
tastiera dei caratteri (CryptXor8), ne effettua l’XOR con una chiave
di 8 bit e li scrive sullo schermo. La prima cosa che si nota è che il
programma non si interrompe
dopo l’andata a capo del testo in
ingresso in quanto è strutturato
in modo da attenderne la fine del
flusso. Nel caso di un testo in
ambiente UNIX, la fine del flusso
è segnalata da CTRL-D
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Manca qualcosa …
Una altra cosa che può sconcertare è che i caratteri mostrati sullo
schermo sembrano essere in numero minore di quelli letti da tastiera,
proviamo a capire il perchè.
• I caratteri visualizzabili codificati in ASCII sono un
sottoinsieme di tutti quelli rappresentabili (dal codice 32
al 126)
• Alcuni simboli del codice sono codici di controllo come la
fine riga, il cambio pagina ecc. (i codici minori di 32)
• La parte alta della tabella ASCII contiene caratteri non
standard, dipendenti dal sistema operativo in uso e dalla
nazionalità
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Comunicazioni tra programmi
Proviamo ora a combinare i procedimenti di codifica e decodifica
Il modo più semplice per fare interagire due programmi è l’uso
delle pipes che permettono a processi separati di comunicare tra
loro anche se non sono stati creati per farlo.
Si tratta di un sistema unidirezionale, accessibile ad un estremo in
lettura ed all'altro in scrittura.
L’uscita su schermo di un programma può essere collegata
all’ingresso da tastiera di un programma utilizzando il carattere “|”
(p.e. ls -la | more)
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Svincolarsi dalla tastiera
Riprendiamo in considerazione il programma CryptXor8;
l’immissione del testo da cifrare via tastiera è decisamente poco
pratico. Utilizzando il meccanismo delle pipes è possibile utilizzarlo
per crittografare dati forniti da altre applicazioni. Per verificarne la
funzionalità si può utilizzare il comando echo:
Dov’è il testo criptato?
Evidentemente è composto in massima parte da caratteri non stampabili!
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Decriptare
E’ possibile utilizzare una pipe per ridirigere il testo cifrato
verso una altra istanza del programma di cifratura stesso
(il suo comportamento è simmetrico).
In ambiente UNIX un carattere non stampabile PUO’ essere
utilizzato in ingresso da un programma C.
In ambiente Windows è
NECESSARIO obbligare
la console ad utilizzare
il formato binario
setmode(fileno(stdin), _O_BINARY);
setmode(fileno(stdout), _O_BINARY);
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Usiamo la rete
In molti casi la crittografia è utilizzata per rendere più sicure le
comunicazioni in rete.
• In ambiente internet due applicazioni possono comunicare tra
loro utilizzando un canale di tipo SOCKET.
• Il socket è un metodo per la comunicazione tra un
programma client e un programma server per mezzo di una
rete ed è definito come il punto finale in una connessione.
• La programmazione socket esula dagli argomenti trattati in
questo contesto ma è possibile, per semplicità, utilizzare il
comando netcat per ottenere funzionalità di base
Link stabilito
La sintassi di nc (netcat) per trasmettere un messaggio ad una
macchina remota è: nc <indirizzo macchina remota> <porta> mentre
dal lato del ricevitore è: nc –l –p <porta>
Le porte vanno da 1 a 65535 e generalmente sono dedicate ad
applicazioni/servizi; le porte da 1 a 1024 di solito sono riservate
Inseriamo ora il programma di cifratura/decifratura …
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Usiamo la forza
La scelta di una chiave di soli 8 bit permette ad un intercettatore di risalire al
messaggio iniziale con un “attacco a forza bruta” ovvero provare a decriptare
utilizzando TUTTI i valori possibili della chiave (nel nostro caso solo 28=256).
Consideriamo il seguente codice (il messaggio cifrato è contenuto nella
stringa InLine):
L’esame dell’uscita di questo programma permette di risalire alla chiave …
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Manipolare i bit
Appare evidente che a questo livello è importante essere in grado
di lavorare sul singolo bit in modo da modificarne lo stato.
un bit
un bit
“Accendere”
“Spegnere”
Come mai sono stati usati “|” e “&” invece di “||” e “&&” ?
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
Si parte !
Per fare un semplice controllo a volte è sufficiente inserire una
istruzione “printf” in posizione opportuna (da rimuovere in
produzione) invece di usare un sistema evoluto di debug, ma il
“C” può stampare numeri ottali, decimali ed esadecimali ma
NON binari.
Il linguaggio ANSI “C” non dispone del tipo di dato primitivo
boolean (binario); per comodità nel seguito i dati di questo tipo
verranno rappresentati come stringhe di caratteri contenenti il
simbolo “0” o il simbolo “1” e denominati nel seguito
“BS” (Boolean Strings)
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia
The toolbox
La nostra cassetta degli attrezzi conterrà le seguenti funzioni “C”:
• Uchar2BS: conversione di numeri binari in BS
• BS2Uchar: conversione di BS in numeri binari
• BSxor: operazione XOR tra BS
• PrintBS: stampa di BS in formato utile al debugging
Da questo momento e fino alla introduzione dell’algoritmo DES il
nostro lavoro proseguirà davanti alla console di un computer
dotato di compilatore GCC
Bruno MARTINO, Fabio GUGLIETTA – Introduzione alla crittografia