Sicurezza nei Sistemi Informativi Integrità dei messaggi Funzioni di Hash e codici MAC una persona che intercetti una comunicazione cifrata non può leggerla...... ma può modificarla in modo imprevedibile! Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania O.Tomarchio Sicurezza nei sistemi informativi 2 Message digest Message digest e funzioni di hash È un riassunto del messaggio da proteggere deve essere: veloce da calcolare difficile da invertire spesso usato per evitare di lavorare sul messaggio completo quando questo è molto grosso (es. perché la crittografia a chiave pubblica è molto lenta) digest calcolabili in molti modi, ma solitamente tramite una funzione di hash O.Tomarchio Sicurezza nei sistemi informativi 3 O.Tomarchio Sicurezza nei sistemi informativi 4
Classificazione Classificazione Funzioni hash Senza chiave: Modification Detection Code (MDC) Senza chiave Con chiave oppure Message Integrity Code (MIC) Obiettivo: integrità dei messaggi Funzioni Hash One-Way (OWHFs) Funzioni Hash Collision Resistant (CRHFs) Altre applicazioni MIC (o MDC) Altre applicazioni MAC Con chiave: Message Authentication Code (MAC) Obiettivo: autenticazione e integrità dei messaggi One Way Hash Functions Collision Resistant Hash Functions Non richiedono ulteriori meccanismi O.Tomarchio Sicurezza nei sistemi informativi 5 O.Tomarchio Sicurezza nei sistemi informativi 6 Funzioni di hash: definizioni Funzioni di hash: proprietà Una (one-way) hash function h (anche detta message digest function), è una funzione che realizza una corrispondenza univoca tra un insieme M di stringhe binarie di lunghezza arbitraria (finita), e un insieme D di stringhe binarie, ciascuna di lunghezza n fissata (la dimensione dell hash) Il valore d = h(m) può essere visto come una rappresentazione compatta di m h può essere applicata a un blocco di dati di qualsiasi dimensione h produce un output di lunghezza fissa La probabilità che l immagine attraverso h di un m scelto a caso sia un dato d deve essere 2 -n Efficienza computazionale: dato m dev essere relativamente semplice calcolare d=h(m) O.Tomarchio Sicurezza nei sistemi informativi 7 O.Tomarchio Sicurezza nei sistemi informativi 8
Funzioni di hash: proprietà Obiettivi di sicurezza per un MDC non invertibilità: one-way hash (detta anche preimage resistance) Dato d = h(m), dev essere computazionalmente difficile risalire a m, cioè trovare un m tale che d=h(m) weak collision resistance (detta anche 2 nd preimage resistance) Dato un x, dev essere computazionalmente difficile trovare x1 x tale che h(x1)=h(x) strong collision resistance Dev essere computazionalmente difficile trovare due messaggi distinti che collidano Due messaggi x e y, con x y, collidono se h(x)=h(y) Obiettivo per un MDC (relativamente alla strong collision resistance): Fare in modo che per trovare, con probabilità 0.5, due valori che producono lo stesso output si debbano calcolare O(2 n/2 ) hash n = dimensione in bit dell hash Un MDC viene considerato sicuro se verifica questa proprietà (insieme alla preimage resistance) NOTA: la collision resistance non garantisce la preimage resistance! O.Tomarchio Sicurezza nei sistemi informativi 9 O.Tomarchio Sicurezza nei sistemi informativi 10 Lunghezza valore hash Lunghezza valore hash La resistenza di una funzione hash contro gli attacchi a forza bruta dipende esclusivamente dalla lunghezza del codice hash prodotto dall algoritmo L impegno richiesto è proporzionale a: 2 n monodirezionalità (preimage resistance) 2 n weak collision resistance 2 n/2 strong collision resistance Attacco a compleanno Attacco per trovare collisioni h: X Z funzione hash, X = m e Z = n Scelgo a caso diversi messaggi Verifico se ottengo almeno due valori hash uguali Quanti messaggi per avere una buona probabilità di successo? n numero dei diversi valori hash t numero messaggi da scegliere ε probabilità di successo O.Tomarchio Sicurezza nei sistemi informativi 11 O.Tomarchio Sicurezza nei sistemi informativi 12
Paradosso del compleanno Quante persone scegliere a caso affinchè, con probabilità 0.5, ci siano almeno due con lo stesso compleanno? Risposta: bastano 23 persone! O.Tomarchio Sicurezza nei sistemi informativi 13 Paradosso del compleanno Scegliamo a caso elementi in un insieme di cardinalità n. Quanti elementi scegliere se si vuole che la probabilità che ci siano almeno due elementi uguali sia ε? Se ε = 0.5 allora t 1.17 n t 1 n 2ln 1 ε Applicazione: n = 365 e ε = 0.5 allora t = 22.3 Che relazione c è con le funzioni hash? O.Tomarchio Sicurezza nei sistemi informativi 14 Attacco del compleanno Sicurezza hash 128 bit 160 bit Scegliere t elementi a caso e calcolarne i valori hash. Quanti elementi scegliere per avere almeno una collisione? Assumiamo che tutte le classi di equivalenza abbiano più o meno la stessa cardinalità, caso migliore per chi sceglie h Per una fissata probabilità ε, t è circa Se n = 2 80 allora t 2 40 Se n = 2 160 allora t 2 80 n MD5: hash a 128 bit Costo di un attacco per computare collisioni: 2 64 2. 10 19 valutazioni della funzione Attacco <1mese e $10.000.000 P. van Orschot e M. Wiener [1994] Su un codice hash a 160 bit la stessa macchina impiegherebbe 4000 anni!!! O.Tomarchio Sicurezza nei sistemi informativi 15 O.Tomarchio Sicurezza nei sistemi informativi 16
Esistenza delle one-way hash function Modello base: funzioni di hash iterative OWHF: funzione hash con la proprietà della non invertibilità Ad oggi tutte le OWHF sono solo candidate: non è possibile dimostrare, senza ipotesi, la loro non invertibilità È solo possibile mostrare la difficoltà computazionale dell operazione di inversione Le owhf di oggi, per costruzione, sono difficili da iivertire quanto sono difficili da risolvere i problemi della classe NP-completa Se si dimostrasse l esistenza delle OWHF, si sarebbe anche dimostrato che P!= NP Viceversa, se si dimostrasse che le OWHF non esistono, si sarebbe vicini alla dimostrazione che P = NP (e molte delle ipotesi di base della crittografia moderna crollerebbero ) Fase preparatoria Si concatena il messaggio originale con un numero binario che indica la lunghezza del messaggio stesso Padding, per ottenere, da una lunghezza originaria del messaggio arbitraria (j), un multiplo del blocco base q sul quale opera la funzione di compressione f La funzione di compressione f accetta come input un blocco di q bit (blocco del messaggio originale) più una variabile di stato di n bit, e produce un valore di n bit t iterazioni della funzione di compressione, con il risultato intermedio r i =f(x i,r i-1 ), r 0 =IV IV può essere fisso, funzione di m, o casuale (nel qual caso dev essere trasmesso con m) La trasformata finale g è opzionale O.Tomarchio Sicurezza nei sistemi informativi 17 O.Tomarchio Sicurezza nei sistemi informativi 18 Modello base: note Funzioni hash ottenute dai cifrari a blocchi Ciò che distingue le varie funzioni di hash basate su questo modello sono: Il meccanismo seguito per eseguire il pre-processing (padding) La struttura della f Numero di round (anche detti pass, in questo contesto) che la f esegue per processare ciascun blocco (o gruppo di blocchi) di plaintext Le costanti usate per generare le varie matrici di trasformazione che compongono la f Le operazioni elementari che compongono ciascun round interno alla f Il numero di bit che la f accetta in ingresso (q) e il numero di bit che la f genera in uscita (n) Il metodo Matyas-Meyer-Oseas: E k f I vari r i vengono usati come chiave per la E k, un algoritmo simmetrico, previa riduzione/espansione (se necessario) al numero corretto di bit necessari, tramite la funzione w r i =x i XOR E k (x ), i k=w(r i-1 ) x i viene messo in XOR con il risultato, per prevenire attacchi di tipo meet-in the-middle Ci sono altri meccanismi simili O.Tomarchio Sicurezza nei sistemi informativi 19 O.Tomarchio Sicurezza nei sistemi informativi 20
Problemi con gli MDC che derivano f da una E k simmetrica La dimensione dell hash (d) dipende da b (la dimensione del blocco usato da E k ) Ci sono meccanismi simili per ottenere funzioni di hash con d=n b, ma diventano rapidamente complessi, e quindi lenti La complessità computazionale, e quindi la lentezza di esecuzione, sono molto più grandi per gli algoritmi crittografici simmetrici, rispetto a funzioni di hash con f specificamente progettate all uopo Ovviamente un vantaggio di questo approccio è che rende possibile ottenere una funzione di hash partendo da un algoritmo simmetrico, senza dover progettare una funzione di compressione f specifica MD5 (Message Digest 5) Progettato da Rivest nel 1991 [RFC 1321] Successore di MD4 Genera un hash di 128 bit Molto veloce, ma: Basato su una funzione (MD4) che è stata compromessa nel 1995 (sono state trovate collisioni) Non è sicuro in alcuni casi patologici : anche MD5 è stata compromessa, nel 1996 (Dobbertin) Oggi, inizia ad essere anche vulnerabile ad attacchi a compleanno (complessità 2 64 ) O.Tomarchio Sicurezza nei sistemi informativi 21 O.Tomarchio Sicurezza nei sistemi informativi 22 MD5: caratteristiche SHA-1 m di lunghezza qualsiasi, n = 128 bit, q = 512 bit Padding Al messaggio originale viene aggiunto un blocco composto da: Un bit impostato a 1 Una stringa di 0, lunga m mod(512) -1-64 Il numero m mod(2 64 ), codificato in 64 bit Il risultato è una stringa di bit la cui dimensione è un multiplo intero t di 512 bit Funzione di compressione f Lavora su blocchi di 512 bit (q = 512) Composta da 4 pass: ciascun blocco da 512 bit viene processato da f in quattro distinte fasi Produce un digest da 128 bit SHA sta per Secure Hash Algorithm Introdotto nel 1993, [RFC 3174] Standard del Governo americano dal 1993 Modificato nel luglio 1994, denotato SHA-1 m di lunghezza minore di 2 64 bit, n = 160, q = 512 Decisamente più lento di MD5, ma più sicuro Altre versioni, derivate da SHA-1 SHA-256, SHA-384, and SHA-512 O.Tomarchio Sicurezza nei sistemi informativi 23 O.Tomarchio Sicurezza nei sistemi informativi 24
SHA-1: caratteristiche SHA-256, SHA-512, SHA-384 Padding: come per MD5 (senza mod(2 64 )) Funzione di compressione f Lavora su blocchi di 512 bit (q = 512) Composta da 5 pass: ciascun blocco da 512 bit viene processato da f in cinque distinte fasi Produce un digest da 160 bit (riduce la probabilità di un birthday attack, rispetto a MD5) Stessi principi di MD5, SHA-1 SHA-256 Messaggio diviso in blocchi di 512 bit Parole da 32 bit SHA-512 Messaggio diviso in blocchi di 1024 bit Parole da 64 bit SHA-384 Valore hash = primi 384 bit di SHA-512, con costanti iniziali cambiate O.Tomarchio Sicurezza nei sistemi informativi 25 O.Tomarchio Sicurezza nei sistemi informativi 26 MAC - Message Authentication Code Utilizzo MAC messaggio M chiave segreta K MAC MACK (M) chiave privata K messaggio M Y MAC K (M) chiave privata K Applicazioni M, y Autenticità del messaggio M Integrità del messaggio M Alice Bob? Y = MAC K (M) O.Tomarchio Sicurezza nei sistemi informativi 27 O.Tomarchio Sicurezza nei sistemi informativi 28
MAC + confidenzialità MAC fornisce solo autenticazione Se si vuole confidenzialità, si può cifrare prima/dopo con una diversa chiave condivisa K CBC-MAC Cipher Block Chaining (con IV=0) Uno dei più usati (FIPS PUB 113 e ANSI X9.17) Testo X = X 1 X 2 X n diviso in blocchi di 64 bit E K (M), MAC K (E K (M)) IV x 11 x 22 x nn Alice oppure E K (M,MAC K (M)) Bob k k k DES DES DES MAC Valore troncato: da 16 a 64 bit più a sinistra O.Tomarchio Sicurezza nei sistemi informativi 29 O.Tomarchio Sicurezza nei sistemi informativi 30 MAC basati su Funzioni Hash Vantaggi uso funzioni hash Sono più veloci dei cifrari a blocchi, in genere Sono incluse nelle funzioni di libreria, in genere Non ci sono restrizioni sull esportazione dagli USA Attenzione alla costruzione! I meccanismi più ovvi e intuitivi non funzionano (sono attaccabili facilmente). Metodo del segreto suffisso Sia g() un generico MDC() (una funzione hash) Suffix-only: d=mac k (m)=g(m k) Problema: conoscendo m e m tali che d=d, dove d=g(m) e d =g(m ) si sarà anche sicuri che MAC k (m)=mac k (m ) Il problema è dovuto che la k, per costruzione, viene usata solo nell ultima iterazione della f() usata dalla g() Attacco in pratica: qualcuno vi fa firmare m, ed in seguito potrà sostenere che voi abbiate firmato m Il fatto di riuscire a montare un birthday attack sulla g() porta a un attacco alla relativa MAC k () (e un birthday attack di questo tipo si può fare off-line, e senza conoscere k ) O.Tomarchio Sicurezza nei sistemi informativi 31 O.Tomarchio Sicurezza nei sistemi informativi 32
Metodo del segreto prefisso HMAC Prefix-only: d=mac k (m)=g(k m) Problema: conoscendo d=mac k (m) è semplice ricavare d =MAC k (m x), senza conoscere k Si può usare d come valore r i nella f della particolare MDC usata La cosa diventa più complicata con MDC che usano padding/lunghezza del messaggio, ma è sempre fattibile (in questo caso il messaggio falsificato non sarà (m x), bensì (m pad l x) ) Esercizio: trovare una soluzione (semplice) al problema Attacco in pratica: osservando un d=mac k (m) è possibile generare un d valido di una qualunque estensione di m HMAC - Hash-based MAC: metodo per utilizzare un MDC qualunque per ottenere un MAC (si parla di HMAC-MD5, HMAC-SHA1, ) RFC 2104, HMAC: Keyed-Hashing for Message Authentication, Febbraio 1997 ANSI X9.71 Keyed Hash Message Authentication Code, 2000 FIPS 198, The Keyed-Hash Message Authentication Code (HMAC), pubblicato 6 marzo 2002 Standard effettivo dal 6 agosto 2002 Draft pubblicato 5 gennaio 2001, review e commenti pubblici Funzioni Hash usate come black-box Utilizzo delle funzioni hash senza modifiche Facile cambio della funzione hash (più veloci e più sicure) Facile utilizzo e gestione di chiavi O.Tomarchio Sicurezza nei sistemi informativi 33 O.Tomarchio Sicurezza nei sistemi informativi 34 HMAC Primo meccanismo di MAC basato su MDC per il quale si sia dimostrata la sicurezza, basandosi su ipotesi relativamente blande sull MDC di partenza L applicazione di HMAC risolve anche i problemi di bassa collisionresistance di MD5 Gli autori hanno dimostrato, tra le altre proprietà di HMAC, che esso è altrettanto sicuro di quanto è sicuro l MDC sottostante. In breve, semplificando: Ipotesi: MDC sia collision-resistant Tesi: HMAC-MDC è sicura, ossia: È collision-resistant: è computazionalmente impossibile trovare x e y, con x y, tali che HMAC-MDC k (x) = HMAC-MDC k (y) È computazionalmente impossibile trovare il corretto HMAC-MDC k (x), se non si conosce k, anche osservando un numero arbitrario di HMAC-MDC k (y), con x y Prestazioni: praticamente le stesse della funzione di hash usata come base Morale: usate HMAC O.Tomarchio Sicurezza nei sistemi informativi 35 chiave K HMAC chiave K opad 0x5c ripetuto 64 64 volte hash ipad 0x36 ripetuto 64 64 volte messaggio M hash H ( K opad, H(K ipad,m) ) O.Tomarchio Sicurezza nei sistemi informativi 36
HMAC: il miglior attacco possibile Tipologia: birthday attack a) Trudy osserva un numero sufficiente di coppie <m i,d i > (scambiate tra Alice e Bob) finchè non ne trova due, m 1 e m 2, tali che d 1 =d 2 b) Trudy crea m 3 =m 1 x, con scelto x a suo piacimento e chiede ad Alice di generare d 3 =MAC k (m 3 ) c) Trudy può ora calcolare d 4 =MAC k (m 4 ), dove m 4 =m 2 x Tale attacco avrà una probabilità significativa di riuscire solo se l attaccante, statisticamente, riesce ad osservare un numero di coppie <m i,d i > maggiore o uguale a 2 n/2 (dimostrazione banale tramite il birthday problem) Con HMAC-MD5, ciò significa osservare almeno 2 64 blocchi da 512 bit, tutti generati con la stessa chiave, cioè almeno 2 73 bit. Su un canale da 10 Gb/s, questo richiederebbe circa 25mila anni di osservazione (!) Con HMAC-SHA1 la cosa diventa ancora meno fattibile Si tratta quindi, in pratica, di un attacco poco probabile O.Tomarchio Sicurezza nei sistemi informativi 37