460 likes | 592 Views
Aspetti algoritmici connessi alla sicurezza nei sistemi informatici distribuiti. Testo consigliato. Crittografia , P. Ferragina e F. Luccio, Ed. Bollati Boringhieri, € 16. Sommario. Introduzione computer security e network security attacchi, meccanismi, servizi Crittografia
E N D
Aspetti algoritmici connessi alla sicurezza nei sistemi informatici distribuiti
Testo consigliato • Crittografia, P. Ferragina e F. Luccio, Ed. Bollati Boringhieri, € 16.
Sommario • Introduzione • computer security e network security • attacchi, meccanismi, servizi • Crittografia • Crittografia a chiave privata • Crittografia a chiave pubblica • Applicazioni di network security • servizi di autenticazione (firma digitale)
Computer security vsnetwork security • Computer security: strumenti automatici per proteggere le informazioni di un calcolatore • Network security: misure per proteggere lo scambio di informazioni durante la loro trasmissione
Network security • Nuovi paradigmi • informazioni distribuite • accesso tramite sistemi distribuiti • Nuove problematiche di sicurezza • sicurezza delle reti locali • da attacchi esterni • da impiegati infedeli • sicurezza delle applicazioni (e-mail, http, ftp,…) • fondamentali per le funzioni aziendali e il commercio elettronico
Problemi base • Le reti sono insicure perché molte delle comunicazioni avvengono in chiaro • Spesso non c’è autenticazione dei server, ma solo (e non sempre) degli utenti • Le connessioni geografiche non avvengono tramite linee punto-punto ma • attraverso linee condivise • tramite router di terzi
Sicurezza: aspetti fondamentali • Attacchi alla sicurezza: azioni che violano la sicurezza delle informazioni possedute da un'organizzazione • Meccanismi di sicurezza: misure hardware e software progettate per prevenire e contrastare gli attacchi alla sicurezza • Servizi di sicurezza: servizi che garantiscono la sicurezza delle informazioni mediante l’uso di uno o più meccanismi di sicurezza
Meccanismi di sicurezza • Esiste una grande varietà di meccanismi di sicurezza, sia hardware che software, quasi tutti basati su tecniche crittografiche • La crittografia (dal greco kryptos, nascosto, e graphein, scrivere) è la disciplina che si occupa dello studio delle scritture “segrete”. • Insieme delle tecniche che consentono di realizzare la cifratura di un testo e la decifrazione di un crittogramma. (Dizionario Garzanti, 1972)
Servizi di sicurezza: esempi • Segretezza: evitare che i dati inviati da un soggetto A a un soggetto B vengano compresi da un terzo soggetto C. • Autenticazione: verificare l’identità di chi manda o riceve i dati. • Integrità: essere sicuri che i dati ricevuti siano uguali a quelli inviati. • Non ripudio: evitare che chi manda dei dati possa in futuro negare di averli mandati (firma digitale).
Garantire segretezza e integrità Principio di Kerckhoffs: “La sicurezza di un sistema crittografico deve essere basata esclusivamente sulla inespugnabilità della chiave di cifratura (gli algoritmi di cifratura e decifratura devono essere considerati noti).”
Crittografia: cenni storici • La crittografiaè una scienza antichissima utilizzata nell’antichità per nascondere il contenuto di messaggi scritti • La crittografia conobbe un enorme sviluppo durante la Seconda Guerra Mondiale, quando il matematico inglese Alan Turing formalizzò la teoria necessaria per decrittare il crittosistema tedesco Enigma.
Crittografia moderna • Nel 1949 C. Shannon pubblicò un articolo che diede l’inizio a quella che oggi viene chiamata la Teoria dell’Informazione. • L’unione di questa nuova scienza, della Teoria della Probabilità, della Teoria della Complessità e della Teoria dei Numeri diede vita alla Crittografia Moderna. • Definizione: Un crittosistema è una quintupla (P,C,K,Cod,Dec), dove, • P: insieme finito dei testi in chiaro • C: insieme finito dei testi cifrati • K: insieme delle possibili chiavi di cifratura • Cod: PK→C funzione di cifratura (iniettiva e invertibile) • Dec: CK→P funzione di decifratura
Proprietà di un crittosistema • Se Cod e Dec utilizzano la stessa chiave per cifrare e decifrare un dato testo, allora si parla di crittosistema simmetrico, altrimenti di crittosistema asimmetrico. • Un crittosistema si dice perfetto se il testo in chiaro e quello cifrato sono statisticamente indipendenti. Shannon ha dimostrato che condizione necessaria affinché un crittosistema sia perfetto è che la lunghezza della chiave sia almeno pari alla lunghezza del testo da cifrare
Un cifrario perfetto • One-time pad (G. Verman, AT&T, 1917): 1. Si costruisce una grande chiave casuale (e non pseudocasuale) ad esempio utilizzando un rivelatore di raggi cosmici. 2. Il testo cifrato è costruito tramite uno XOR bit a bit fra il messaggio in chiaro e la chiave casuale. 3. La chiave non deve mai essere riutilizzata (one-time pad).
Dalla perfezione alla realtà… • A fronte dei cifrari perfetti (ovvero dimostrabilmente sicuri ma praticamente inutilizzabili) esistono anche cifrari: • Computazionalmente sicuri – Il problema crittoanalitico (ovvero di decrittazione di un testo cifrato senza conoscere la chiave) è computazionalmente intrattabile. • Probabilisticamente sicuri – Sono cifrari di cui è stata dimostrata l’inattaccabilità, a patto che non si verifichino alcuni eventi probabilisticamente improbabili. • Tutti i cifrari moderni realmente utilizzati appartengono alla classe dei computazionalmente sicuri.
Algoritmi a chiave simmetrica • Chiave simmetrica: i due soggetti (A e B) usano la stessa chiave K per codificare e decodificare i dati. • Gli algoritmi di crittografia sono pubblici la chiave simmetrica deve essere segreta il principale problema è lo scambio della chiave!
Il problema della trasmissione della chiave • Volendo utilizzare un cifrario simmetrico per proteggere le informazioni tra due interlocutori come posso scambiare la chiave segreta? • Devo utilizzare una canale sicuro di comunicazione!
Un primo esempio di cifrario a chiave simmetrica: il cifrario di Cesare • Consideriamo l’alfabeto italiano, e costruiamo un cifrario che sostituisce ad ogni lettera di questo alfabeto la lettera che si trova 3 posizioni in avanti. • Ad esempio il testo in chiaro “algoritmo distribuito” viene cifrato nel crittogramma “dolrunzpr gnvzuneanzr”. • Facilmente attaccabile tramite approcci statistici.
La crittoanalisi statistica • Tramite l’utilizzo di tecniche statistiche sulla frequenze dei caratteri o sottostringhe del testo cifrato si ottengono informazioni utili sul testo in chiaro.
Crittoanalisi del cifrario di Cesare • Il cifrario di Cesare, come la maggior parte dei cifrari storici basati tu trasposizioni e traslazioni, può essere facilmente violato utilizzando tecniche statistiche (crittoanalisi statistica). • Si analizzano le frequenze relative dei caratteri nel testo cifrato e le si confrontano con quelle di una lingua conosciuta, ad esempio l'italiano. • Con queste informazioni si ottiene un’ottima approssimazione del testo in chiaro
Lo stato dell’arte nella crittografia a chiave simmetrica: Rijndael • Sviluppato da Joan Daemen e Vincent Rijmen. • Questo algoritmo ha vinto la selezione per l’Advanced Encryption Standard (AES) nel 2000. Ufficialmente il Rijndael è diventato lo standard per la cifratura del XXI secolo a chiavi simmetriche. • Il cifrario utilizza chiavi di lunghezza variabile a 128, 192, 256 bit, ed una rete di “confusione del messaggio”, in cui si eseguono molteplici operazioni di trasposizione, xoring e sostituzione di blocchi di messaggio di lunghezza prefissata.
I limiti dei metodi a chiave simmetrica • Un canale sicuro di comunicazione per scambiarsi la chiave segreta esiste veramente nella realtà? E se esistesse, perché ricorrere alla crittografia??? • Inoltre, per una comunicazione sicura tra n utenti, si dovranno scambiare in tutto (n-1)*n/2 chiavi, ad esempio con 100 utenti occorreranno 4950 chiavi!
Algoritmi a chiave asimmetrica • Chiave Pubblica/Privata: Ogni soggetto Sha • una propria chiave pubblica Kpub(S), nota a tutti; • una propria chiave privata Kpriv(S)nota solo a lui. • I requisiti che un algoritmo a chiave pubblica deve soddisfare sono: • i dati codificati con una delle chiavi possono essere decodificati solo con l’altra; • la chiave privata non deve mai essere trasmessa in rete; • deve essere molto difficile ricavare una chiave dall’altra (in particolare la chiave privata da quella pubblica).
I vari scenari a chiave pubblica Primo scenario: A codifica con la chiave pubblica associata a B, il quale decodifica con la propria chiave privata: garantisce segretezza e integrità.
I vari scenari a chiave pubblica Secondo scenario: A codifica con la propria chiave privata il messaggio da inviare a B, il quale decodifica con la chiave pubblica associata ad A: garantisce autenticità e non ripudiabilità!
I vari scenari a chiave pubblica Terzo scenario: A codifica con la chiave pubblica associata a B ed autentica con la propria chiave privata: garantisce segretezza, integrità, autenticità e non ripudiabilità!
La nascita dei sistemi PKI • Dove trovo le chiavi pubbliche dei miei destinatari? • Creazione di “archivi di chiavi pubbliche”, i public key server. • Ma chi mi garantisce la corrispondenza delle chiavi pubbliche con i legittimi proprietari? • Nascita delle certification authority (CA). • A questo punto chi garantisce la validità delle certification authority? • Atto di fede!
La matematica dei sistemi a chiave pubblica Venne introdotta da Diffie e Hellman nel 1976: • Definizione: Una funzione f si dice one-way se per ogni x il calcolo computazionale di y=f(x) è semplice (è in P), mentre il calcolo di x=f-1(y) è computazionalmente difficile (è NP-hard). • Definizione: Una funzione one-way è detta trapdoor (letteralmente, cassetta delle lettere) se il calcolo x=f-1(y) può essere reso facile qualora si conoscano informazioni aggiuntive (private). … ma purtroppo per loro, essi non furono in grado di costruire una funzione one-way trapdoor!
Il cifrario RSA • Progettato nel 1977 da Ron Rivest, Adi Shamir e Leonard Adlemann, il cifrario è stato brevettato, ed è diventato di dominio pubblico solo nel 2000. • Idea base: Dati due numeri primi p e q (molto grandi) è facile calcolare il prodotto n=p∙q, mentre è molto difficile calcolare la fattorizzazione di n (anche se tale problema non è noto essere NP-hard). • I migliori algoritmi di fattorizzazione attualmente disponibili (Quadratic Sieve, Elliptic Curve Method, Euristica ρ di Pollard, ecc.) hanno tutti una complessità esponenziale dell’ordine di:
Il cifrario RSA • Per garantire la sicurezza, occorre che p e q siano almeno di 200 cifre decimali. Infatti, se p e q sono di 200 cifre decimali ciascuno, allora n è di 400 digit, cioè dell’ordine di 10400, da cui: O(∙)≈e79≈1034 da cui l’intrattabilità computazionale. le chiavi sono lunghe in genere 1024 bitS. • RSA è molto più lento degli algoritmi a chiave simmetrica, e spesso viene applicato a piccole quantità di dati, ad esempio per la trasmissione della chiave privata in un sistema simmetrico
Funzionamento di RSA: generazione delle chiavi Ricorda: xy mod z il resto della divisione intera tra x e z e tra y e z è lo stesso, ovvero x mod z = y mod z (o equivalentemente, se esiste un intero k t.c. x=y+kn) 1. Scegli due primi molto grandi p e q e calcola n =p∙q. 2. Calcola la funzione toziente di Eulero rispetto ad n, ovvero la cardinalità dell’insieme dei numeri minori di n e primi con esso: ϕ(n)=ϕ(pq)=pq-[(q-1)+(p-1)]-1=pq-(p+q)+1= =(p-1)(q-1)=ϕ(p)ϕ(q) (poiché esistono q-1 multipli di p minori di n e p-1 multipli di q minori di n) 3. Scegli un numero 0<e<ϕ(n) t.c. MCD(e,ϕ(n))=1. 4. Calcola d tale che e·d1 mod ϕ(n). 5. Definisci la chiave pubblica come (e,n). 6. Definisci la chiave privata come (d,n).
Funzionamento di RSA Invio di un messaggio cifrato • La funzione di cifratura di A è Cod(x)=xe mod n (con x<n), ove (e,n) è la chiave pubblica del destinatario B. • La funzione di decifratura di B è: Dec(x)=Cod(x)d mod n = (xe mod n)d mod n ove (d,n) è la chiave privata di B. Autenticazione di un messaggio • La funzione di cifratura di A è Cod(x)=xe mod n (con x<n), ove (e,n) è la chiave privata di A. • La funzione di decifratura di B è: Dec(x)=Cod(x)d mod n = (xe mod n)d mod n ove (d,n) è la chiave pubblica di A.
Correttezza di RSA: alcuni teoremi di algebra modulare • Teorema (equazioni modulari): L’equazione axb mod n ammette soluzione se e solo se MCD(a,n) divide b. In questo caso si hanno esattamente MCD(a,n) soluzioni distinte. • Corollario (esistenza dell’inverso): Se a e n sono primi tra loro, allora ax1 mod n ammette esattamente una soluzione, detta l’inverso di a modulo n. • Teorema di Eulero: Per ogni n>1, e per ogni a primo con n, si ha che aϕ(n)1 mod n. • Corollario (Piccolo teorema di Fermat): Per ogni primo n>1, e per ogni a{1,…,n-1}, si ha che an-11 mod n (ovvero, ana mod n). • Teorema cinese del resto: Siano n1, n2,…, nk primi tra loro a due a due, e sia n= n1·n2 ·…·nk. Allora, comunque si scelgano degli interi a1, a2,…, ak, esiste almeno un intero x soluzione del sistema di congruenze xai mod ni i=1,..,k. e tutte le soluzioni di tale sistema, sono congruenti modulo n.
Correttezza di RSA • Si noti innanzitutto che e e ϕ(n) sono primi tra loro, e quindi dal corollario sull’esistenza dell’inverso, esiste un unico d minore di ϕ(n) tale che e∙d1 mod ϕ(n). • Qui sta la forza di RSA: per ricavare d da e bisogna conosce-re ϕ(n), cioè p e q, e quindi bisogna saper fattorizzare! • Ora occorre provare che per ogni x<n, Dec(Cod(x))=x. Ma Dec(Cod(x))=(xemod n)d mod n=xed mod n, quindi dobbiamo mostrare che x=xed mod n. Distinguiamo due casi: • p e q non dividono x (e quindi MCD(p,x)=MCD(q,x)=1, poiché essi sono primi); • p (oppure q) divide x, ma q (oppure p) non divide x. (si noti che p e q non possono entrambi dividere x, perché altrimenti si avrebbe x≥n contro le ipotesi)
Correttezza di RSA (2) Caso 1: Abbiamo MCD(x,n)=1, quindi per il th di Eulero, risulta xϕ(n)1 mod n; poiché ed1 mod ϕ(n), si ha che ed=1+kϕ(n), per un k opportuno. Quindi, poiché x<n, si ha: xed mod n = x1+kϕ(n) mod n = x·(xϕ(n))k mod n = x·1k mod n = x. Caso 2: Poiché p divide x, abbiamo xxk0 mod p, ovvero (xk-x)0 mod p, per qualunque intero positivo k. Poiché invece q non divide x, analogamente al Caso 1, abbiamo anche xedx mod q, e quindi (xed-x)0 mod q. Ne consegue che (xed-x) è divisibile sia perp che per q, e quindi per il loro prodotto n, da cui deriva (xed-x)0 mod n xedx mod n xed mod n = xmod n = x. □ Si noti che RSA gode della notevole proprietà: Dec(Cod(x))=Cod(Dec(x)).
Esempio di funzionamento di RSA • B sceglie ad esempio p=3 e q=11. • Quindi n=33 e ϕ(n)=20. • Si può prendere e=3, poiché 3 non ha divisori comuni con 20 (3,33) è la chiave pubblica di B • Cerco d t.c. 3d1 mod 20. Con l’equazione 3d= 1+k·20, ponendo k=1 si trova d=7 (7,33) è la chiave privata di B • Per cifrare un blocco P (P<33) da inviare a B, A calcola C:=Cod(P)=P3 mod 33 • Per decifrare C, B calcola P=C7mod 33 • Poiché n=33, si cifrano al più 5 bit alla volta (25<33) • Nella pratica, n è dell’ordine di 21024, e quindi si possono cifrare blocchi di 1024 bit, cioè blocchi di 128 caratteri ASCII (di 8 bit ciascuno).
Esempio di funzionamento di RSA Per visualizzare l’esempio precedente, supponiamo per semplicità che le 26 lettere dell’alfabeto inglese possano essere codificate con 5 bit, e quindi poiché n=33, posso cifrare un carattere alla volta
Complessità computazionale di RSA • Si può dimostrare che le chiavi (e quindi p,q,e,d) possono essere generate in tempo polinomiale (ovvero logaritmico nel loro valore). • In particolare, e viene in genere scelto prendendo un numero primo abbastanza piccolo (ad esempio, e=3). • Invece, d viene ricavato mediante un’estensione (polinomiale) dell’algoritmo di Euclide per il calcolo del MCD (basato sul fatto che MCD(a,b)=MCD(b,a mod b)). • Tuttavia, per trovare numeri primi molto grandi (cioè p e q), i test di primalità utilizzati sono tutti di tipo probabilistico, in quanto quelli deterministici sono troppo lenti (sebbene polinomiali, ma dell’ordine di O(log10n)). • Infine, si noti che i processi di cifratura e decifrazione possono essere eseguiti efficientemente tramite successive esponenziazioni (potenza modulare).
Alla ricerca di p e q • Definizione (Algoritmo Monte Carlo): Un algoritmo Monte Carlo “no-biased” è un algoritmo randomizzato per la risoluzione di un dato problema di decisione, in cui la risposta “no” è sempre corretta, mentre la risposta “si” può essere inesatta con probabilità fissata ε. Analogamente sono definiti gli algoritmi Monte Carlo “yes-biased”. • L’algoritmo di Miller e Rabin è un algoritmo Monte Carlo “no-biased” per testare la primalità di un numero. Esso ha una complessità di O(log3 n), e una probabilità di inesattezza ε≈1/4 (cioè se risponde SI, è corretto con probabilità ≈3/4).
Algoritmo di Miller-Rabin • E’ basato sulla seguente proprietà: per un intero n dispari, e per un qualche 2≤y≤n, poniamo y-1=2wz, con z dispari (quindi w è il max esponente consentito per 2), e definiamo i 2 predicati: (P1): MCD(n,y)=1; (P2): (yz mod n = 1) OR (esiste 0≤i≤w-1 t.c.y2iz mod n=-1). Teorema:Se n è primo soddisfa entrambi i predicati, mentre se n è composto il numero di interi compresi tra 1 e n-1 che soddisfano entrambi i predicati è minore di n/4. Eseguiamo MR(n) un certo numero k di volte, testando ogni volta i due predicati su un intero a caso minore di n. Se l’algoritmo risponde “no” anche una sola volta il numero è sicuramente composto, mentre se risponde sempre “si”, la probabilità che il numero sia composto è 4-k, e quindi la probabilità che il numero sia primo è: P(primo)=1-P(composto)=1-4-k (ad es., se k=100, si ha P≈1-10-60 ≈ 1)
Algoritmo di Miller-Rabin Miller-Rabin(n) • Set n-1=2sr con r dispari • For i=1 to k do 2.1 scegli a caso un intero t t.c. 2≤t≤n-2 2.2 calcola y=tr mod n 2.3 if y≠1 esegui 2.3.1 j=1 2.3.2 while ((j≤s-1) and (y≠n-1)) y:=t2jr mod n j++ 2.3.3 if y≠n-1 ritorna composto • Ritorna primo(w.h.p. 1-4-k)
E’ facile trovare numeri primi? • Nonostante l’efficienza nel testare se un numero sia primo o meno resta l’incognita se i numeri primi siano “pochi” e quindi difficili da scovare. • Teorema di Gauss (dei numeri primi): Sia π(n) la funzione di distribuzione dei numeri primi, cioè il numero di numeri primi che precedono n. Allora essa soddisfa il seguente: • Quindi se si cerca un numero primo di 100 cifre occorre verificare “solo” ln (10100) ≈ 230 numeri consecutivi.