Sei sulla pagina 1di 11

FONDAMENTI di CRITTOGRAFIA 2

Conoscere la crittografia è un prerequisito importante per potersi addentrare nella cybersecurity.

INTRODUZIONE alla CRITTOGRAFIA 2.1


La crittografia è la disciplina che studia algoritmi per la sicurezza dei dati. La crittoanalisi invece
è la disciplina che si occupa di studiare tecniche d’attacco nei confronti di algoritmi ritenuti sicuri.
Potremmo pensare che la crittografia rappresenti i buoni, la crittoanalisi i cattivi, non è ovviamente
così. Infatti, nel momento in cui viene pubblicato un algoritmo crittografico, questo viene messo al
vaglio della comunità internazionale dei crittoanalisti che cerca di trovare criticità, ricorrendo ai
ripari anzitempo, prima che potenziali attaccanti possano farne uso. Il motivo per cui un algoritmo
viene crittoanalizzato da terzi, è legato al fatto che il progettista difficilmente riesce a estraniarsi da
ciò che ha creato e quindi vedere nuovi attacchi o nuovi punti di vista da cui attaccare.

1- ALICE, BOB ed EVE


Alice (A) è il mittente di un dato privato, Bob (B) il destinatario legittimo ed Eve
(eavesdroppers, trad. origliare) quello illegittimo.

Il dato scritto da Alice è senza alcun tipo di protezione da qui plaintext, trad. testo in chiaro.
Quest’ultimo, non può essere inoltrato così com’è a Bob, perché un utente intermedio, Eve, può
leggere il contenuto senza sforzo, facendo perdere la confidenzialità. Da qui nasce la necessità
di trasformare il plaintext in qualcos’altro, il ciphertext, trad. testo cifrato. Se la trasformazione
è fatta bene, chi osserva il ciphertext non ha nessuna informazione in merito al plaintext e
l’azione di trasformazione prende il nome di cifratura. In questo modo Eve osserva il
ciphertext che è ciò che Alice invia sul canale. La cifratura prevede un’operazione inversa, la
decifratura, che permette di riottenere il plaintext. A questo punto sorge il problema, se Eve
fosse a conoscenza del procedimento di decifratura? Saremmo punto e a capo. La cifratura
avviene avendo due input: il plaintext e la chiave di cifratura, mentre per la decifratura: il
ciphertext e la chiave di decifratura. Se la chiave di cifratura e decifratura è la stessa, siamo in
presenza di un crittosistema simmetrico altrimenti di uno antisimmetrico. In entrambi i casi,
per far funzionare il meccanismo, la chiave dev’essere segreta e posseduta esclusivamente da
Alice e Bob, se questo avviene, Eve non riuscirà nel suo intento. La discriminazione tra Bob ed
Eve è computazionale, il primo fa poca fatica conoscendo a priori la chiave, il secondo cerca in
tutti i modi di ricavarsela.

1
A questo punto Eve può adoperare due tipi di attacchi per arrivare alla chiave:
- Passivi, se non interloquisce direttamente con Bob ed Alice;
- Attivi, se decide di farlo, per esempio, potrebbe pensare di fingersi Alice.
Nella crittografia contemporanea ci sono almeno quattro attacchi da considerare:
1- Ciphertext only
Il solo attacco considerato fino ai primi anni del 1900. Eve ha a disposizione solo testi
cifrati da cui cerca di recuperare la chiave.
2- Known plaintext
Eve ha una o più copie del testo cifrato e dei corrispondenti testi in chiaro, facendo un
matching, c’è un’alta probabilità che riesca a risalire alla chiave. Questo tipo di attacco,
insieme ad altri, fu quello che aiutò il gruppo di Turing ad attaccare la macchina Enigma,
perché all’inizio di quasi tutte le lettere inviate dai tedeschi vi era il saluto al Führer, questo
era un known plaintext.
3- Chosen plaintext
Eve sceglie un testo in chiaro e contemporaneamente ha accesso limitato alla macchina
cifrante. Se immaginiamo che questo possa andare avanti per un tempo infinito, prima o poi
arriverà a convergenza.
4- Chosen ciphertext
La stessa cosa del punto 3 ma al rovescio, cioè Eve ha la possibilità di decifrare per un po’.

Risulta fondamentale conoscere i possibili attacchi per costruire un algoritmo più efficiente.

2- PRINCIPIO DI KERCKOFFS, 1883


Definizione
La sicurezza di un sistema crittografico non può essere basata sulla segretezza dell’algoritmo
ma sulla sicurezza del chiave.
In netta contrapposizione con chi crede che per fornire la massima sicurezza bisogna mantenere
il tutto segreto, solo chi lo progetta conosce, security through obscurity. Non è così,
l’algoritmo dev’esser reso pubblico per poter esser migliorato ma deve prevedere un ingresso, le
chiavi, che invece devono rimanere segrete. Questa separazione dei ruoli, dell’algoritmo e della
chiave, è di massima importanza in crittografia. Il principio di Kerckoffs corrisponde ad una
serie di regole, non trasportabili direttamente ai giorni nostri ma con minimi aggiustamenti
risultano ancora valide. Esse sono:
1- Un sistema crittografico deve essere materialmente, se non matematicamente, indecifrabile
→ cifrario perfetto, definito nel 1943 da Claude Elwood Shannon, utilizzato una sola
volta, a causa della sua complessità, per mettere in contatto il presidente degli Stati Uniti
d’America, Roosevelt ed il primo ministro del Regno Unito, Churchill.

2
2- Il sistema non deve esigere la segretezza, e deve poter cadere in mani estranee senza
inconvenienti.
3- Deve essere possibile scambiare e memorizzare la chiave senza bisogno di note scritte, ed
essa deve poter essere cambiata o modifica a piacere dagli utenti.
Questa regola mi dice che la chiave deve essere relativamente corta anche perché altrimenti
ricadremmo nel punto 1, dato che il cifrario perfetto utilizza un chiave spropositata,
principale problematica dell’applicazione di quest’ultimo.
4- Il sistema deve essere applicabile alla corrispondenza telegrafica.
Basta sostituire telegrafica con Internet e siamo arrivati ai giorni nostri, la regola rimane la
stessa, cioè si deve poter applicare ai dati.
5- Il sistema deve essere portatile ed il suo utilizzo o il suo funzionamento non devono
richiedere l’impiego di un gran numero di persone.
6- Infine, date le circostanze nelle quali verrà presumibilmente utilizzato, il sistema non deve
richiedere la conoscenza di una lunga serie di regole, né essere di difficile applicazione.

3- ALGORITMI A CHIAVE SIMMETRICA


Fino ad un centinaio di anni fa l’unico modo di fare crittografia.

E, funzione crittografica, ha in ingresso due argomenti: la chiave segreta, K ed il testo in chiaro,


X.
Y, è il testo cifrato e viaggia su un canale pubblico.
D, è la funzione che decifra Y per farla ritornare ad essere X.
Metodo di cifratura schematizzato da una cassaforte, dove soltanto chi ha quella determinata
chiave riesce ad aprire ed accedere al suo contenuto. In questo schema non ci si pone il
problema di come Bob ed Alice si siano passati una copia della chiave, questo esula dal dominio
della cifratura simmetrica poiché rientra in quello della cifratura asimmetrica.

3
Esempi di cifrari simmetrici standardizzati dal NIST, National Institute of Standards and
Technology:
- DES, Data Encryption Standard
Obsoleto anche se ancora presente per motivi che in inglese diremmo legacy, trad. eredità,
cioè far si che i sistemi continuino a lavorare fin tanto che non si estinguano.
- AES, Advanced Encryption Standard
Introdotto nei primi anni del 2000, per sopperire alle limitazioni del DES, ancora regge.
Utilizzato per esempio per cifrare hard disk ed essendo molto veloce, permette di cifrare o
decifrare dati in tempo reale senza rendermi conto.

4- CONDIVISIONE DI SEGRETI SU CANALE PUBBLICO,


ALGORITMI A CHIAVE ASIMMETRICA
Esplosa a partire dagli anni ’70, da introdurre per passi perché in prima istanza risulta
fortemente contro natura. Per poter capire il meccanismo di funzionamento, prendo un esempio:
Supponiamo di parlare usando colori e di mettere in
piedi un protocollo, cioè una sequenza di regole,
per poter scambiare un segreto in maniera pubblica.
Il protocollo, per Alice e Bob, è:
Passo 1: Decidono un colore e lo fanno vedere a
tutti.
Passo 2: Scelgono un colore a testa segreto.
Passo 3: Mescolano il colore pubblico con il
proprio colore privato.
Passo 4: Si scambiano le miscele pubblicamente.
ASSUNZIONE: La separazione delle miscele è
molto complita ma non impossibile, per cui un
modo che hanno gli attaccanti per arrivare alla
stessa miscela di Bob e Alice è per tentativi, cioè
partendo dai colori pubblici iniziali fare tante
miscele, attacco a forza bruta.
Passo 5: Mescolano la miscela scambiata
pubblicamente con il loro colore privato. Il risultato è lo stesso ma soltanto loro due lo hanno.

4
Bisogna quindi trovare un modo per tradurre in termini
algoritmico-matematici la procedura appena descritta →
Diffie-Hellman, 1970, mettono in piedi un protocollo
crittografico che consente a due entità di stabilire una
chiave condivisa e segreta utilizzando un canale di
comunicazione insicuro, pubblico, senza la necessità che
le due parti si siano scambiate informazioni o si siano
incontrate in precedenza. Il protocollo utilizza il
problema dei logaritmi discreti come base per la
creazione di funzioni unidirezionali, in quanto l’utilizzo
di operazioni quali somma, sottrazione, moltiplicazione
e divisione, o costituiscono operazioni non commutative
oppure commutative ma non sicure. Tale procedura
però, implica che la chiave è scambiata soltanto se Bob ed Alice sono responsive, trad. reattivi,
per cui sarebbe meglio evitare questo doppio passaggio. Per evitare ciò, quello che si fa è,
associare ad ogni attore coinvolto nella comunicazione una coppia di chiavi:
- Pubblica, disponibile per tutti;
- Privata, personale e segreta.
Evitando così il problema connesso alla necessità di uno scambio in modo sicuro dell’unica
chiave utile alla cifratura-decifratura presente invece nella crittografia simmetrica.
Alice produce una coppia di
chiavi per ogni
comunicazione, una pubblica
messa in una directory
pubblica ed una privata
facilmente connessa a quella
pubblica, con il vincolo che il
viceversa richiede uno sforzo
computazionale enorme.
Bob prende il messaggio e lo
cifra utilizzando la chiave
pubblica di Alice, la quale
facilmente tramite la propria chiave privata decifra il
messaggio.
Se gli algoritmi sono stati scelti ed utilizzati in modo
appropriato, i messaggi non possono essere decifrati da nessuno
che non possieda la chiave privata corrispondente, che si
presume quindi essere il proprietario di tale chiave e quindi la
persona associata alla chiave pubblica. Per fare ciò, deve essere
computazionalmente facile per un utente generare una coppia di
chiavi, pubblica e privata, da utilizzare per cifrare e decifrare.
La forza di un sistema di crittografia a chiave pubblica si basa sulla difficoltà di determinare la

5
chiave privata corrispondente alla chiave pubblica. La sicurezza dipende quindi solo dal
mantenere la chiave privata segreta, mentre la pubblicazione della chiave pubblica non
compromette la sicurezza.
La differenza con la cifratura simmetrica sta nel fatto che le chiavi per cifrare e decifrare non
sono le stesse, con quella con cui si chiude non si apre ed il viceversa, anche se chi ha la chiave
per aprire, ha anche quella per chiudere, per quanto detto.
Chi ha solo la chiave pubblica può solo cifrare ma poi non può decifrare perché quella privata è
difficilmente calcolabile.
Quindi, un qualsiasi utente su internet genera una coppia di chiavi per ogni comunicazione, si
tiene per sé quella privata, mette a disposizione quella pubblica, riceverà messaggi cifrati da
chiunque tramite la chiave pubblica, senza bisogno di avere una pre-condivisione di chiave con
nessuno.
Quanto appena detto è implementato in tanti crittosistemi asimmetrici di cui RSA fa da padrone,
poi c’è El Gamal e le curve ellittiche.
Per mettere in pratica quanto detto bisogna mettere in piedi una trapdoor, trad. trappola, cioè
una funzione facile da computare in una direzione, ma difficile da calcolare nella direzione
opposta, ossia trovarne l’inversa, se non si conoscono determinate informazione. In termini
matematici, sia F una funzione trapdoor, allora esiste una qualche informazione segreta y tale
che date F(x) e y risulti facile calcolare x. Una trapdoor è un problema matematico difficile, per
esempio la fattorizzazione di un numero intero, il logaritmo discreto e le relazioni delle curve
ellittiche. Questo comporta però un peso computazionale non indifferente.
Un esempio di una semplice trapdoor matematica può essere: 6895601, prodotto di due numeri
primi, quali sono questi numeri? Una tipica soluzione, utilizzando la forza bruta, potrebbe essere
quella di dividere il numero per diversi numeri primi fino a trovare la risposta. Tuttavia, se
qualcuno rendesse noto che 1931 è parte della risposta, diverrebbe semplice, con l'aiuto di una
calcolatrice, trovare la soluzione completa, 6895601 ÷ 1931. Questo esempio non rappresenta
dunque una robusta funzione trapdoor dal momento che un computer moderno può facilmente
elaborare tutte le possibili soluzioni in un arco di tempo molto breve, ma lo stesso esempio può
essere irrobustito ricorrendo al prodotto di due numeri primi molto più grandi.
Due i modi di trasferire dati:
1- Public Key Encryption, PKE

A causa del peso computazionale della crittografia asimmetrica, essa è usata per piccoli
blocchi dati, in genere il trasferimento di una chiave di cifratura simmetrica, la chiave di
sessione.
Solo crittografia asimmetrica.

6
2- Key Exchange Mechanism, KEM + Data Encryption Mechanism, DEM

Metodo con cui vengono trasferiti molti dati. Utilizza la crittografia asimmetrica per
generare una chiave di sessione, impiegata per cifrare la comunicazione successiva tramite
uno schema di crittografia simmetrica in quanto basato su algoritmi semplici e quindi molto
veloci, una volta terminata viene buttata.
Cifratura ibrida = Crittografia asimmetrica + crittografia simmetrica.

Il problema di questi due modi è lo stesso e riguarda come Bob raccoglie le chiavi pubbliche
dei suoi interlocutori, se Eve riuscisse a spacciarsi per un suo contatto, facendo mettere nel
mazzo di chiavi la sua pubblica, il gioco è fatto. Questo tipo di attacco è detto man in the
middle e fa parte della categoria degli attacchi attivi.

❖ Firma digitale
Metodo matematico teso a dimostrare l’autenticità di un documento digitale autenticando
l’autore di un documento, la confidenzialità è messa da parte. E’ un paradigma diverso
rispetto a quello della cifratura asimmetrica appena visto ma in cui si possono usare le
medesime primitive crittografiche, per esempio utilizzare RSA ma al contrario, ciò non
significa che tutti i sistemi crittografici asimmetrici si possono prendere e rovesciare, l’idea
però è quello d’invertire il ruolo della chiave privata e pubblica. Infatti, un messaggio viene
firmato con la chiave privata del mittente e può essere verificato da chiunque abbia accesso
alla chiave pubblica del firmatario. Questa verifica dimostra che il mittente ha avuto
accesso alla chiave privata e quindi è molto probabile che sia la persona associata alla
chiave pubblica. Inoltre, dimostra che la firma è stata preparata per quel preciso messaggio,
poiché la verifica fallirà per qualsiasi altro messaggio che si possa concepire senza
utilizzare la chiave privata.

7
Una volta firmato digitalmente un file, chiunque può verificare la firma:
1- Calcolando l'hash del messaggio;
2- Decifrando l'hash del messaggio;
3- Confrontando la firma del messaggio.
Chi garantisce che la chiave pubblica è quella connessa alla privata del mittente? Le
Certification Authority, CA. Il futuro mittente si reca alla CA, quest’ultima verifica le
credenziali della persona che sta facendo la richiesta e genera una coppia di chiavi, quella
privata la dà al futuro mittente mentre la pubblica la tiene per se. A questo punto è compito
dell’ente di certificazione, garantire che quella chiave pubblica corrisponde effettivamente
alla persona fisica dichiarata.

❖ Funzioni Hash:
Fa parte della famiglia delle funzioni one-way, cioè
chiunque può calcolare la funzione diretta, nessuna
l’inversa.
Le possiamo paragonare ad un frullatore di bit che da come
output una stringa di bit di dimensione fissa. I bit d’uscita
sono dipendenti dall’ingresso e cambiando anche una
minimi parte, il digest cambia, per esempio, cambiando 1
bit in 1TB di dati, il digest corrispondente è completamente
differente da quello prodotto dal solo TB. Il digest, trad.
digerire, è il risultato della funzione hash. Una volta
prodotto un digest nemmeno chi l’ha prodotto può risalire
al messaggio d’ingresso, è chiaro però che chi l’ha calcolato può memorizzare il messaggio
d’ingresso.

8
5- CONFRONTO TRA CIFRATURA SIMMETRICA ED
ASIMMETRICA

6- CIFRARI A FLUSSO E A BLOCCO


- CIFRARIO A FLUSSO o STREAM CIPHERS
Cifra un bit, byte o carattere per volta. Attenzione: lavorare elemento per elemento non
significa che il singolo elemento in uscita è funzione del singolo elemento di ingresso, se
così fosse, non si non si avrebbe sicurezza. Ogni elemento d’uscita deve dipendere da molti
caratteri di ingresso non solo da quello corrispondente, idealmente da tutti quelli prima. Il
cifrario deve avere memoria, un suo stato interno che si aggiorna in funzione dell’input. Poi
quando arriva un nuovo input, viene immediatamente generato un nuovo output che non è
funzione solo di quell’input appena arrivato, ma anche di tutti quelli prima.
- CIFRARIO A BLOCCO o BLOCK CIPHERS
I bit in ingresso sono raccolti in blocco ed elaborati tutti insieme fornendo un blocco di bit
in uscita. Esiste un buffer, cioè una memoria dove i dati in ingresso sono raccolti fino a
riempire la dimensione di un blocco prestabilito che può essere 128, 256, 512 bit o anche
più. Solo quando un blocco è pieno si esegue la cifratura e si produce in uscita un
corrispondente blocco di dati. In questo caso c’è già una buona sicurezza in quanto si cifra
un blocco sufficientemente lungo. Tuttavia, risulta più sicuro se si fa in modo che l’esito
della cifratura di un blocco dipenda non solo dal blocco d’ingresso, ma anche da quelli
prima.
I cifrari simmetrici possono essere sia a flusso che a blocco.
I cifrari asimmetrici sono cifrari a blocco.
9
7- NOZIONI DI SICUREZZA
La sicurezza perfetta non esiste, o meglio esiste ma è una sola ed inadatta alla stragrande
maggioranza dei sistemi reali. Bisogna quindi assumere che l’attaccante può riuscire a
recuperare il messaggio senza conoscere il segreto.
Si parla di computacional security, cioè sicurezza computazionale, quando si stima lo sforzo
computazionale che un attaccante deve fare per recuperare il messaggio senza conoscere la
chiave, il work factor. Se lo sforzo supera le capacità dell’attaccante, il livello di sicurezza è
adeguato. Il difficile sta nel capire qual è il miglior algoritmo di attacco possibile, una volta
individuato, calcolare quante operazioni deve fare per arrivare a convergenza.
Si parla di provable security quando si può dimostrare che decifrare in assenza del segreto
equivale a risolvere un problema matematico provatamente difficile. Questo, il paradigma su cui
si basa la nostra sicurezza digitale. Esempi di provable security:
- Logaritmo discreto;
- Fattorizzazione dei numeri interi molto grandi;
- …
È sempre possibile attaccare un crittosistema secondo l’attacco a forza bruta, cioè tentare di
scoprire il segreto enumerando tutte le possibilità. Il miglior sistema crittografico che possiamo
fare è quello per cui l’unico modo che l’attaccante ha per bucarlo è la forza bruta.
Esempio
D = 1030 possibili chiavi, eseguendo 109 calcoli ogni secondo, occorrono 3x1013 anni
per completare la ricerca.
Tuttavia, l’attacco a forza bruta fornisce un limite superiore al livello di sicurezza, perché spesso
esistono algoritmi di attacco più efficienti. Ad esempio, il paradosso del compleanno,
applicabile quando si utilizzano funzioni hash, stabilisce che con un numero di tentativi ≈ √𝐷 la
probabilità di trovare la chiave corretta è > 1/2.
La maggior parte dei cifrari possono esser attaccati con tecniche diverse dalla forza bruta oppure
non usano efficacemente i bit della chiave.
Due algoritmi con chiavi di uguale lunghezza possono avere livelli di sicurezza diversi, ad
esempio, il cifrario a sostituzione ha 26! = 4x1026 possibili chiavi, eppure è uno dei cifrari più
semplici da attaccare.
Il fatto che un algoritmo sia sicuro oggi non comporta necessariamente che lo sarà anche in
futuro in quanto si deve tener conto dei processi tecnologici, ad esempio DES ha resistito 20
anni prima di crollare.
La continua ricerca nell’ambito del quantum computing modificherà radicalmente le basi dei
futuri algoritmi crittografici, ad esempio, RSA è suscettibile ad attacchi basati su computer
quantistici.
Il progetto di un buon crittosistema deve basarsi su considerazioni sia matematiche che
ingegneristiche.

Diametralmente opposto a quest’ultimo paradigma, esiste l’unconditional security, cioè


sicurezza non condizionale, cioè senza condizioni sull’attaccante. La sicurezza del messaggio
si ottiene in termini statistici a prescindere dalla capacità computazionale dell’attaccante, per
10
cui, calcolo la quantità d’informazione che l’attaccante ha a sua disposizione, in questo caso, se
l’attaccante non ha info a sufficienza per ricostruire il messaggio originario, non può far nulla,
indipendentemente dalla capacità computazionale dei sistemi che impiega. Non molto utilizzata.

8- REQUISITI DI UN SISTEMA CRITTOGRAFICO


- RISERVATEZZA-CONFIDENZIALITA’, solo il destinatario legittimo deve essere in
grado di decifrare il messaggio;
- AUTENTICAZIONE, il destinatario deve esser certo dell’origine del messaggio, l’identità
di chi lo ha inviato deve essere certificata;
- INTEGRITA’, il messaggio non deve essere stato in alcun modo modificato durante la
trasmissione, solo errori accidentali durante la trasmissione;
- NON RIPUDIABILITA’, né il mittente né il destinatario possono negare di aver,
rispettivamente, inviato e ricevuto il messaggio.
In generale, i protocolli coprono uno o più di questi aspetti, non tutti, anche se oggigiorno sono
sempre più diffusi algoritmi che mettono insieme più requisiti, in modo tale che non devo creare
una cascata.

11

Potrebbero piacerti anche