Crittografia - Mario Molfese

Crittografia
Dal greco κρυπτóς (kryptós) che significa "nascosto", e γραφία (graphía) che
significa "scrittura"
Tecnica che consente di nascondere il contenuto dei propri messaggi, ed
impedire che vengano compresi da persone indesiderate (il destinatario però
sì!)
Il messaggio originale (plaintext) viene cifrato creando così un messaggio
cifrato (cyphertext) ed inviato lungo un canale, anche insicuro (tanto è
cifrato)
Chi riceve il cyphertext esegue (se può, se ha diritto) l'operazione inversa,
decodificando il messaggio e arrivando alla forma comprensibile
15/12/14
http://lsa.molfese.net - mario@molfese.net
1
Crittografia
La crittografia permette di risolvere alcuni interessanti problemi
Segretezza: chi intercetta non capisce
● Autenticazione: chi riceve è certo dell'identità del mittente
● Affidabilità: chi riceve è certo che il messaggio non sia stato alterato da
persone diverse dal mittente
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
2
Crittografia
Crittogramma: messaggio cifrato
Cifrario: algoritmo per creare crittogrammi
Crittografia: l'arte di costruire i cifrari
Crittoanalisi: l'arte di violare i cifrari
Crittologia: l'insieme dei precedenti concetti
I cifrari operano in base a chiavi (sequenze di bit)
È la chiave a garantire la segretezza del cifrario
Non conviene basare la forza di un protocollo crittografico sul mantenere gli
algoritmi segreti perchè
● Tanto "si scoprono facilmente”
● Algoritmi a codice aperto sono più affidabili e testati dalla comunità
Domanda aperta:
e se, crittoanalizzando un crittogramma, compare un messaggio sensato, ma
diverso dal messaggio originale? La cosa è improbabile, non impossibile..
15/12/14
http://lsa.molfese.net - mario@molfese.net
3
Crittoanalisi
Primo algoritmo e ultima spiaggia del crittoanalista: il bruteforcing
Il bruteforcing funziona sempre, ed è facile, semplice, banale.
Basta provare ad interpretare il cyphertext con tutte le chiavi possibili ;-)
Quante sono le chiavi possibili?
Se la chiave è lunga n bit, esistono 2^n possibili chiavi possibili
Più sono le chiavi possibili, più è lungo il complesso di bruteforcing: non
esistono protocolli inviolabili, esistono solo protocolli in grado di resistere al
bruteforcing per miliardi di anni
Si tratta di una quantità esponenziale nel numero di bit utilizzati: aumentando
di 1 bit la chiave, raddoppiano le possibili chiavi (la scacchiera e il riso)
Quindi non utilizzate password corte, please ;-)
15/12/14
http://lsa.molfese.net - mario@molfese.net
4
Storia della crittografia
Steganografia, l'antenata
● Il messaggero Persiano
● Crittografia propriamente detta
● Lo scitala Spartano (la chiave simmetrica è il diametro del bastoncino)
● Il cifrario Atbash (la chiave è la conoscenza dell'algoritmo stesso)
● Caio Giulio Cesare (100 AC – 44 AC) (numero di chiavi pari alla
dimensione dell'alfabeto)
● La crittoanalisi statistica di Al Kindi (801-873) inizia a mettere in
difficoltà i cifrari monoalfabetici
● Il disco cifrante di Leon Battista Alberti (1404-1472) del 1467, primo
metodo polialfabetico, illustrato nel De Cifris e notevolmente sicuro ma
non troppo pubblicizzato dallo stesso Alberti, che probabilmente voleva
tenerlo segreto (I cifrari polialfabetici si differenziano dai monoalfabetici
in quanto un dato carattere del testo in chiaro non viene cifrato sempre
con lo stesso carattere, ma con caratteri diversi in base ad una qualche
regola, in genere legata ad un segreto da condividere. Il crittoanalista
non può così sfruttare eventuali equivalenze chiaro-cifrato già scoperte)
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
5
Storia della crittografia
Il cifrario di Blaise de Vigenere (1523-1596) del 1586: utilizzava 26
alfabeti per cifrare un solo messaggio, seguendo una generalizzazione del
codice di Cesare. L'idea era rendere la cifratura di un carattere dipendente
anche dalla posizione che esso occupa nel testo (verme/tavola). Di fatto,
però, si rivelava più debole di quello, meno noto, dell'Alberti
● Il colonnello prussiano Friedrich Kasiski nel 1863 crea un metodo di
decrittazione della crittografia di Vigenere, particolarmente efficace in
caso di vermi corti (che possono generare sequenze ripetute)
●
Il cifrario di Vernam, derivazione del cifrario di Vigenere utilizzando un
verme di lunghezza pari al messaggio (sicuro, dimostrato da Shannon)
●
La macchina Enigma del III Reich (Arthur Scherbius)
●
La macchina Purple dell'Impero Giapponese
●
One Time Pad, di Frank Miller
●
RSA
● Steganografia contemporanea
● tecnica dei 3 lsb di colore nelle immagini
● One Way Hashing
● MD5 (Message Digest algorithm 5)
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
6
Crittografia simmetrica
L'idea è che entrambe le parti comunicanti siano a conoscenza della stessa
chiave (sarà opportuno che se la siano scambiata in maniera sicura, ovvero
senza che terze parti possano averla intercettata)
La funzione di cifratura e la funzione di decifratura, che possono in linea di
principio essere diverse, operano però con la stessa, unica chiave, posseduta
da entrambe le parti comunicanti
Sembra banale, ma scambiarsi una chiave crittografica in maniera sicura
utilizzando un mezzo di comunicazione insicuro (i.e. Non ancora reso sicuro
dalla crittografia che stiamo per creare) può non essere un problema banale
Assomiglia un po' al paradosso dell'uovo e della gallina..
Soluzioni? Incontrarsi, utilizzare una terza fonte (canto XXVI della Divina
Commedia), utilizzare il mezzo di comunicazione insicuro (con i rischi che
ne derivano), etc..
15/12/14
http://lsa.molfese.net - mario@molfese.net
7
Crittografia simmetrica
15/12/14
http://lsa.molfese.net - mario@molfese.net
8
Crittografia simmetrica – qualche cifrario degno di nota
Cifrario a sostituzione: si sostituisce ogni lettera (o gruppo) con un'altra e/o
gruppo (inconvenienti: chiave molto ingombrante, esposizione a crittoanalisi
statistica)
●
Cifrario a sostituzione monoalfabetica: basato su una permutazione
dell'alfabeto (26! chiavi, crittoanalisi statistica, The Gold Bug di E.A. Poe,
1843)
● Cifrario di Cesare: basato su una particolarmente semplice permutazione
dell'alfabeto, ovvero lo spostamento in avanti (solo 26 chiavi!)
● Cifrario a trasposizione: non modificano le lettere del plaintest ma l'ordine
in cui esse si presentano (Es: cifrario a trasposizione per colonne)
● OTP (One Time Pad, ideato nel 1882 da Miller, brevettato nel 1919 da
Vernam)
● Cifrari conformi al principio crittografico di Shannon di "confusione e
diffusione"
●
DES (Data Encryption Standard, 1974, brevetto IBM)
●
IDEA (International Data Encryption Algorithm, 1992)
●
AES (Advanced Encryption Standard, 2001, successore di DES)
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
9
Crittografia simmetrica – One Time Pad
One Time Pad
Ideato nel 1882 dall'unionista e crittografo Frank Miller (1842-1925),
brevettato nel 1919 da Gilbert Vernam (1809-1960), ingegnere presso AT&T
Bell Labs
Si basa sull'idea di miscelare, carattere per carattere, un plaintext con una
chiave di lunghezza uguale, ottenendo così il cyphertext
La miscelazione può avvenire in vari modi (concettualmente equivalenti)
● Sommando i codici ASCII8 dei 2 caratteri, modulo 256
● Eseguendo lo XOR bit a bit dei 2 caratteri
● In linea di principio, tramite qualsiasi funzione suriettiva che prenda 2 byte
in input e ne restituisca un altro, che rispetti una equa distribuzione
probabilistica
Nel 1949 Shannon dimostrò che, se la chiave è lunga quanto il testo, il
cifrario è attaccabile dal solo bruteforcing (debolezza di ogni cifrario)
15/12/14
http://lsa.molfese.net - mario@molfese.net
10
Crittografia simmetrica – DES
Basato su sostituzioni e trasposizioni, divide il plaintext in blocchi da 64 bit,
ognuno dei quali viene cifrato generando 64 bit di cyphertext
L'algoritmo usa una chiave di cifratura di 56 bit ed è molto complesso, si
compone di 19 passi: il primo è una trasposizione sui 64 bit di plaintext
(indipendente dalla chiave); seguono 16 passi algoritmicamente identici,
ciascuno utilizzante una chiave diversa ricavata dalla chiave originale
Ad ogni passo il testo di 64 bit viene diviso in 2 metà: la parte dx viene data
in output come parte sx, la parte sx viene messa in XOR con il risultato di
una funzione della precedente parte dx e della chiave del passo attuale,
quindi emessa in output come parte dx.. omissis..
Per la decodificare i 19 passi vengono eseguiti in ordine inverso
Il DES è in pratica un cifrario a sostituzione monoalfabetico in cui un
carattere viene rappresentato a 64 bit
15/12/14
http://lsa.molfese.net - mario@molfese.net
11
Crittografia simmetrica – IDEA
Utilizza una chiave di 128 bit ed è attualmente considerato inviolabile
Il plaintext viene diviso in blocchi da 64 bit che producono ciascuno, dopo
una sequenza di passi, un blocco di 64 bit di testo cifrato. Seguono 8 passi di
XOR, addizione e moltiplicazione modulo 2^16 (ignorando la parte alta del
risultato). La chiave di 128 bit viene utilizzata per generare 52 sottochiavi di
16 bit ciascuna, 6 per ognuno degli 8 passi e 4 per una trasformazione finale.
I 64 bit di un blocco vengono divisi in 4 parti da 16 bit, ognuna delle quali
viene addizionata o moltiplicata con una sottochiave; i 4 risultati sono messi
a coppie in XOR e i risultati sono ancora moltiplicati e addizionati con altre 2
sottochiavi; i risultati di queste operazioni sono utilizzati per effettuare
ancora uno XOR con i primi 4 risultati producento 4 blocchi da 16 bit cifrati
Per la decodifica viene utilizzato lo stesso algoritmo ma con sottochiavi
diverse
15/12/14
http://lsa.molfese.net - mario@molfese.net
12
Crittografia simmetrica – AES - 1d2
La storia di AES inizia nel 1997, quando il National Institute of Standards
and Technology NIST (USA) annuncia la ricerca di un successore per la
maturazione degli standard di crittografia DES
Un algoritmo denominato "Rijndael", sviluppato dai crittografi belga Daemen
e Rijmen, eccelleva in sicurezza, nonché in termini di prestazioni e
flessibilità. Ha superato molti concorrenti, ed è stato ufficialmente annunciato
come il nuovo standard di cifratura AES nel 2001. L'algoritmo si basa su
diverse sostituzioni, permutazioni e trasformazioni lineari, ciascuno eseguito
su blocchi di dati di 16 byte – da cui il termine blockcipher. Tali operazioni
vengono ripetute più volte, chiamate "round". Durante ogni round, un’unica
roundkey viene calcolata fuori della chiave di crittografia, e incorporata nei
calcoli. Sulla base di questa struttura a blocchi di AES, il cambiamento di un
singolo bit sia nella chiave sia nei blocchi di testo risulta in un cifrario
completamente diverso di blocco di testo - un chiaro vantaggio rispetto ai
tradizionali cifrari a flusso
15/12/14
http://lsa.molfese.net - mario@molfese.net
13
Crittografia simmetrica – AES - 2d2
AES è veloce sia se sviluppato in software sia se sviluppato in hardware, è
relativamente semplice da implementare, richiede poca memoria ed offre un
buon livello di protezione/sicurezza, motivi che complessivamente l'hanno
preferito agli altri algoritmi proposti
Durante la conferenza Crypto 2011 (California) A. Bogdanov, D.
Khovratovich e C. Rechberger sono riusciti a ridurre il tempo necessario a
superare le difese di AES; il problema è che dal punto di vista pratico, come
ammette Bogdanov stesso, «non siamo nemmeno vicino a forzare AES, al
momento»
Il perché è presto detto: sebbene calati, i tempi per la forzatura restano troppo
lunghi per avere un'utilità pratica; recuperare una chiave robusta
richiederebbe comunque alcuni miliardi di anni
È stato comunque fatto un passo avanti nel comprendere «la struttura interna
di AES: i nostri risultati indicano alcuni limiti nel design di AES»
15/12/14
http://lsa.molfese.net - mario@molfese.net
14
Crittografia asimmetrica – L'Idea
L'idea è di non utilizzare una singola chiave conosciuta da ambo le parti
Ogni parte avrà la propria chiave, nota solo ad essa
In questa maniera, se Alice e Bob vogliono comunicare, non devono
crucciarsi per scambiarsi in maniera sicura l'unica chiave simmetrica: ognuno
ha la sua chiave, la tiene per sé e non la mostra a nessuno, la usa nella
crittografia asimmetrica
15/12/14
http://lsa.molfese.net - mario@molfese.net
15
Crittografia asimmetrica - Teoria
Fin dagli anni ’70 si cercò di ideare un sistema crittografico che non
richiedesse la condivisione delle chiavi, la qual cosa si dimostrò
concettualmente possibile tramite il protocollo dei lucchetti: se A vuole
inviare un messaggio a B, procederà nel seguente modo
A chiude il messaggio con il suo lucchetto e lo invia a B
● B chiude ulteriormente con il suo lucchetto e rispedisce ad A
● A toglie il suo lucchetto e rispedisce il messaggio a B, che può aprirlo
●
L'importanza del protocollo è teorica: dimostra possibile la comunicazione in
sicurezza senza un preventivo scambio di chiavi tra mittente e destinatario
Notiamo però che
● il messaggio ha dovuto compiere 3 viaggi invece di 1, offrendo
all’attaccante una maggiore possibilità di impadronirsi del messaggio
● il protocollo per funzionare richiede l’utilizzo di funzioni commutative per
cifratura e decifrazione
15/12/14
http://lsa.molfese.net - mario@molfese.net
16
Crittografia asimmetrica – RSA
RSA è uno dei più riusciti sistemi di crittografia asimmetrici al giorno d’oggi.
Originariamente scoperto nel 1973 dalla agenzia di intelligenza britannica
GCHQ, ha ricevuto la classificazione "top secret"
La sua riscoperta civile (1978) è dovuta ai crittologi Rivest, Shamir e
Adleman, che lo scoprirono durante un tentativo di decifrare un altro
problema di crittografia: Shamir, israeliano, potè legalmente esportarlo fuori
dagli USA
Al contrario di sistemi di crittografia tradizionali, simmetrici, RSA funziona
con due chiavi diverse: una chiave "pubblica", e una "privata"
Entrambe lavorano in modo complementare tra loro, un messaggio cifrato
con uno di essi può essere decifrato solo dalla sua controparte
Poiché la chiave privata non può essere calcolata dalla chiave pubblica,
quest'ultima è generalmente resa disponibile al pubblico
15/12/14
http://lsa.molfese.net - mario@molfese.net
17
Crittografia asimmetrica – RSA
La sicurezza di RSA si basa principalmente sul problema matematico della
fattorizzazione dei numeri interi
Un messaggio che sta per essere cifrato è trattato come un numero grande
Quando si cripta un messaggio, questo viene elevato alla potenza della
chiave, e diviso con il resto dal prodotto fisso di due numeri primi
Ripetendo il processo con l'altra chiave, il testo può essere nuovamente
recuperato
Attualmente, il miglior metodo noto per rompere la cifratura richiede di
fattorizzare il prodotto utilizzato nella divisione. Attualmente, risulta
impraticabile calcolare questi fattori per numeri maggiori di 768 bit. Tuttavia,
sistemi crittografici moderni usano una lunghezza di chiave minima di 3072
bit
15/12/14
http://lsa.molfese.net - mario@molfese.net
18
Crittografia asimmetrica – RSA
Ogni parte disporrà di una chiave privata
Non basta: ogni parte disporrà anche di una chiave pubblica, nota al resto del
mondo, ed anzi per maggior comodità di tutti possibilmente immagazzinata
in un archivio web, noto come keyring (anello portachiavi)
Alice genererà la propria coppia di chiavi pubblica/privata, idem Bob
Ciascuno porrà la propria chiave pubblica nel keyring, e terrà gelosamente
nascosta la chiave privata
15/12/14
http://lsa.molfese.net - mario@molfese.net
19
Crittografia asimmetrica - RSA
Gli elementi della coppia di chiavi non sono generati a caso, ma rispecchiano
alcune proprietà matematiche (inerenti i numeri primi di grandi dimensioni)
tali per cui è possibile miscelarle ai plaintext per ottenere i cyphertext, e
viceversa
Si noti che la miscelazione della privata prima e della pubblica poi riproduce
il messaggio originale. Idem se invertiamo l'ordine delle miscelazioni
Più formalmente
Misc(Misc(Msg, Pri), Pub) == Msg
● Misc(Misc(Msg, Pub), Pri) == Msg
●
Il tutto funziona se e solo Pub e Pri fanno parte della medesima coppia:
chiavi prese da coppie diverse sono incompatibili, poichè tra loro non vale
una certa relazione matematica
15/12/14
http://lsa.molfese.net - mario@molfese.net
20
Crittografia asimmetrica - RSA
A cosa serve?
Crittografia: Alice applicherà al plaintext la chiave pubblica di Bob, e gli
invierà il tutto. Solo Bob, grazie alla sua chiave privata, potrà risalire al
plaintext originale
● Firma digitale: Alice applicherà al testo da firmare la propria chiave privata
(solo lei è in grado di farlo), ottenendo un messaggio facilmente decifrabile
da chicchessia (tutti conoscono la chiave pubblica di Alice), ma in questo
scenario l'obiettivo non è la crittografia, quanto appunto la firma digitale.
Chiunque al mondo potrà constatare che il testo è stato firmato da Alice,
quindi ella non potrà ripudiarne la maternità
● Protezione da alterazioni durante la trasmissione: se un cyphertext viene
alterato “a caso” (e non è possibile fare meglio se non lo si è decifrato prima),
allora durante la decodifica ciò sarà evidente
●
Sì, questi meccanismi sono combinabili per ottenere messaggi cifrati e firmati
e inalterabili
15/12/14
http://lsa.molfese.net - mario@molfese.net
21
Crittografia asimmetrica – RSA
RSA: generazione delle chiavi
Siano p e q primi (più grandi di 10^100 e con differenza grande;
diversamente, infatti, attraverso alcune operazioni matematiche,
diverrebbe semplice determinare i 2 numeri p e q)
● Sia g = p * q (g è grande: è molto difficile scoprire i fattori p e q)
● Sia z = (p-1) * (q-1) (di z si sa solo che è pari, non importa)
● Si scelga h primo con z (assenza di divisori comuni)
● Si scelga k tale che (h*k) mod z = 1
● Si distruggano p, q, z
●
Avremo così la coppia (h,g) chiave pubblica, e la coppia (k,g) chiave privata
15/12/14
http://lsa.molfese.net - mario@molfese.net
22
Crittografia asimmetrica – RSA
RSA: codifica di un testo (plain/cypher) con una chiave (pubblica/privata)
Il messaggio M viene diviso in vari blocchi M[i] di n bit ciascuno dove n è il
più grande intero per cui 2^n < g, ovvero n < log2(g)
per cifrare M[i] si calcola Cyp[i] = Misc(M[i], [h, g]) = M[i]^h mod g
● per decifrare Cyp[i] si calcola M[i] = Misc(Cyp[i], [k, g]) = Cyp[i]^k mod g
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
23
Crittografia asimmetrica – RSA
Sicurezza
La sicurezza del metodo si basa sulla difficoltà di scomporre in fattori primi
numeri molto grandi: se si potesse scomporre g (che è noto) in fattori si
potrebbero trovare p e q, e da questi z; conoscendo h e z si potrebbe calcolare
k
Tradeoff
● La crittografia asimmetrica è sicura ma lenta
● La crittografia simmetrica è veloce ma meno sicura
Best of both worlds
Utilizzare la crittografia asimmetrica per scambiarsi in maniera sicura una
chiave segreta da utilizzare poi come chiave di algoritmo di crittografia
simmetrica per la sessione corrente.
Così facendo si ha l'ulteriore vantaggio del cambiare la chiave simmetrica
condivisa ad ogni sessione, per una magggior sicurezza
15/12/14
http://lsa.molfese.net - mario@molfese.net
24
Crittografia asimmetrica – PGP - 1d3
PGP (Pretty Good Privacy, inventato da Philip Zimmermann nel 1991) è un
crittosistema ibrido (simmetrica/asimmetrica) che combina alcuni dei migliori
algoritmi di crittografia a chiave pubblica e classica
Unisce la convenienza della crittografia asimmetrica, che risolve il problema
della distribuzione delle chiavi, con la velocità di quella simmetrica
Se usate insieme, distribuzione delle chiavi e velocità sono entrambe
migliorate senza perdita di sicurezza
15/12/14
http://lsa.molfese.net - mario@molfese.net
25
Crittografia asimmetrica – PGP - 2d3
Immaginiamo che Alice (A) voglia inviare un plaintext (P) a Bob (B).
Definiamo le chiavi RSA di Alice come Apub (pubblica) e Apri (privata), e
quelle di Bob come Bpub (pubblica) e Bpri (privata). Conveniamo altresì di
indicare con un doppio due punti (::) la concatenazione di stringhe, e le
parentesi quadre ([x, y]) per indicare la stringa x criptata con la chiave y
Si calcola il message digest di P tramite funzione one way: sia D questo
digest calcolato
● Si firma D con Apri, ottenendo [D, Apri]
● La firma del digest viene inclusa in P, ottenendo P' = P::[D, Apri]
● P' viene compresso, ottenendo Z
● Viene generata una session-key. Sia S tale chiave
● Si utilizza S per cifrare il messaggio con crittografia simmetrica; sia [Z, S] il
risultato di tale operazione
● La session-key viene cifrata con Bpub, ottenendo [S, Bpub]
● Il pacchetto costituito dalle ultime 2 informazioni prodotte ([Z, S]::[S,
Bpub]) viene inviato al destinatario
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
26
Crittografia asimmetrica – PGP - 3d3
Per decodificare un messaggio ricevuto:
Il messaggio [Z, S]::[S, Bpub] viene diviso nei suoi 2 componenti
(cyphertext realizzato con la session-key simmetrica + session-key
crittografata asimmetricamente con la chiave pubblica del ricevente)
● B può facilmente calcolare S = [[S, Bpub], Bpri]
● B può facilmente calcolare Z = [[Z, S], S]
● Partendo da Z, B può calcolare P', e quindi P e [D, Apri], e quindi D
● Il plaintext P può essere ormai letto in chiaro dal legittimo destinatario
● Il destinatario può ricalcolare il digest del plaintext e confrontarlo con D,
verificando quindi se il plaintext abbia subito alterazioni o meno
●
15/12/14
http://lsa.molfese.net - mario@molfese.net
27
Crittografia asimmetrica – GPG
GNU Privacy Guard
GnuPG is a complete and free implementation of the OpenPGP standard as
defined by RFC4880 (also known as PGP)
GnuPG allows to encrypt and sign your data and communication, features a
versatile key management system as well as access modules for all kinds of
public key directories. GnuPG, also known as GPG, is a command line tool
with features for easy integration with other applications. A wealth of
frontend applications and libraries are available. Version 2 of GnuPG also
provides support for S/MIME and Secure Shell (ssh)
GnuPG is Free Software (meaning that it respects your freedom). It can be
freely used, modified and distributed under the terms of the GNU General
Public License
15/12/14
http://lsa.molfese.net - mario@molfese.net
28