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
© Copyright 2024 Paperzz