Introduzione alla Crittografia Le Basi (definizioni, richiami e … · Bruno MARTINO, Fabio...

23
Introduzione alla Crittografia Le Basi (definizioni, richiami e strumenti) Bruno Martino - Fabio Guglietta

Transcript of Introduzione alla Crittografia Le Basi (definizioni, richiami e … · Bruno MARTINO, Fabio...

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