Differenza tra "Integrità" e "Segretezza" (a cura del Dottor

annuncio pubblicitario
Differenza tra "Integrità" e "Segretezza" (a cura del Dottor Antonio Guzzo Responsabile CED
Sistemi Informativi del Comune di Praia a Mare)
Quando ci riferiamo ai concetti di integrità e sicurezza ed alle sue tecniche è necessario basarci sul
concetto di hash inteso come una funzione univoca operante in un solo senso (ossia, che non può
essere invertita), atta alla trasformazione di un testo di lunghezza arbitraria in una stringa di
lunghezza fissa, relativamente limitata. Tale stringa rappresenta una sorta di "impronta digitale” del
testo in chiaro, e viene detta valore di hash, checksum crittografico o message digest. Per quanto
riguarda la segretezza, l’hash non è detto che serva. Qual è il ruolo degli algoritmi di hash?
E’ quello dell’integrità cioè l’hash ci garantisce l’integrità dell’informazione ma non ci
garantisce la segretezza dell’informazione e ci consente di capire i campi di applicabilità.
Facciamo un esempio concreto. Abbiamo un sito web, ad es, alice invia un documento a bob
ed inoltre alice su una pagina di giornale pubblica il documento che ha inviato a bob è questo
l’uso corretto della tecnica hash. La tecnica hash ci serve per assicurare il destinatario
relativamente all’integrità dell’informazione che ci sta inviando e quindi alice manda un documento
a bob, a bob arriva un documento. Quel documento è stato modificato? Il modo migliore è
quello della pubblicizzazione nel senso alice sul giornale comunica che l’hash del documento
che ho dato a Bob è questo. Questo è quello che si intende per integrità, perché dato un file e
l’hash di un file, cioè il numero che ricavo da un file è molto difficile trovare un file modificato
tale che l’hash del file modificato sia uguale all’hash del file. Invio un documento in rete e
rendo pubblico, il più possibile, il suo hash Dati file + hash(file) è molto difficile trovare
file_modificato tale che: hash(file_modificato) = hash(file)
Da qui si deduce che con l’utilizzo delle tecniche di hash l’obiettivo perseguito è l’integrità,
non la segretezza Quando parliamo di integrità ci riferiamo al caso in cui l’attaccante non può
modificare il messaggio perché ho reso pubblico l’estratto del documento, questo estratto
forte del documento e d’altro canto la cifratura non garantisce l’integrità del dato. Se io ricevo
un documento cifrato, non significa che lo stesso sia integro ed originale ma può essere stato
modificato perché un attaccante è in grado di modificarlo senza riuscirlo comunque a leggere. Una
cosa è cifrare un dato, un documento mentre una cosa è renderla illeggibile modificandola. Un
esempio ci viene dato dalle cosiddette aste on line nelle quale si verifica il seguente fenomeno: un
attaccante volendo potrebbe cambiare la mia cifra di partecipazione all’asta senza conoscere quanto
valeva prima. Un altro esempio più banale è quello dell’algoritmo RSA nel quale la cifra è il
messaggio elevato ad un esponente modulo di un certo valore e si torna al messaggio originale che è
la cifra elevata ad un altro esponente modulo lo stesso valore. Ma se io cambio un bit del messaggio
cifrato, quando qualcuno lo va a decifrare al posto del messaggio ottiene un altro messaggio. La
cifratura, di per se, non garantisce l’integrità, un attaccante può essere in grado di modificare
il messaggio senza poterlo leggere (ES: asta on line). Un attaccante può essere in grado di
modificare il messaggio, a volte lo fa in modo logico, a volte ne cambia un solo bit. Ciò viene
affermato dai fautori dell’RSA:“RSA encryption is intended primarily to provide confidentiality…
It is not intended to provide integrity” (from RSA Labs Bulletin) cioè l’rsa encryption è intesa in
primis per fornire confidenzialità cioè segretezza dell’informazione . Non è intesa per fornire
integrità. Alcuni sistemi di cifra assicurano contemporaneamente segretezza e integrità.
Quando si parla di tecniche riferite ad integrità e segretezza ci si riferisce alle cosiddette
tecniche di hash. Se abbiamo un documento x, questo è l’hash di x che ha una lunghezza
prefissata ad es. di 128 bit. Questa è la regola fondamentale delle tecniche hash cioè l’hash di
un documento deve essere possibilmente diverso da quella di un altro documento. In caso
contrario uno potrebbe scambiare i documenti lasciando l’hash inalterato. Quindi se faccio un hash
che non funziona a questo punto si verificano le cosiddette collisioni cioè si verifica una situazione
che avviene quando due diversi input producono lo stesso output tramite una funzione hash. Si veda
in dettaglio il seguente grafico:
Dobbiamo fare in modo che queste collisioni non ci siano cioè in sostanza si ha un universo grande
di documenti ed un universo un pò più piccolo di numeri, l’hash fa questo, prende uno di questi e lo
mette in comunicazione con un altro di questi e viceversa. Ad un certo punto i pallini dell’universo
più piccolo che è in coda all’hash finiscono, allora bisogna fare in modo che finiscano il più tardi
possibile, anche se comunque di potenziali documenti c’è ne ho infiniti, mentre i numeri hash se
fossero esattamente tanti quanti sono i potenziali documenti allora si verificherebbe un ammanco di
documenti. Ad un certo punto però troverò uno di questi tra questi tantissimi che collide. Ma
quant’è grande questa collisione?. Facciamo una prova. La funzione di hash non è iniettiva, di tipo
one-way. Facciamo l’esempio dell’algoritmo SHA1 che converte da uno spazio a dimensione
infinita ad uno spazio largo 160 bit. Questo è lo SHA1. Quanti diversi valori si possono fare
con 160 bit? 2 alla 160 diversi valori. Quanti diversi documenti x1, x2, etc devo prendere per
riuscire a trovare i due documenti che mi danno lo stesso hash? Sicuramente ne dovrò trovare 2 alla
160 per essere sicuro che questo sia vero. Quanto appena detto in realtà non è vero. Questa
situazione è meglio rappresentata dal cosiddetto paradosso del compleanno. Io ho 100 persone
in una stanza. Che probabilità ho che due di queste persone siano nate lo stesso giorno? Ad occhio è
maggiore o minore del 50%? Intuitivamente saremmo portati a dire che è minore, in realtà però è
maggiore perché se io ho 100 persone la probabilità di nascita dei due persone lo stesso giorno è n
su 2 binomiale (le cosiddette combinazioni) che è uguale a n fattoriale diviso n-2 fattoriale per 2
fattoriale= n per n-1 per n-2 fattoriale diviso n -2 fattoriale per 2 fattoriale = n per n-1= n al
quadrato cioè significa che su 10 persone creo 100 possibili coppie. Alla fine passano 23 persone
per una probabilità superiore al 50%. Si può fare questo conteggio anche utilizzando il calcolo
delle probabilità. Io prendo una persona, ne prendo una seconda che probabilità c’è che la seconda
persona sia nata lo stesso giorno della prima? 1/365. Nel secondo caso prendo una persona ed
ipotizzo che la seconda persona non è nata nello stesso giorno. Che probabilità ci sono che non sia
nata nello stesso giorno? 364/365. Che probabilità ci sono che sia nata lo stesso giorno? 1/365.
Esaminiamo ora il paradosso del compleanno con le tecniche di hashing. Io voglio trovare t che è il
numero di possibili valori di x che dobbiamo scandire prima di trovare una collisione. Ala collisione
si verifica quando ad un certo punto trovo un documento , trovo che l’hash di un documento è
uguale a quello di un altro. Qual è questo numero minimo di valori che devo scandire?
Intuitivamente dobbiamo rispondere 2 elevato a 160 bit se l’hash è 160 bit invece non è cosi.
Supponiamo di avere tante coppie x1, x2, etc, prese due qualsiasi x e x3, che probabilità ci sono che
l’hash di x sia uguale a quello di x3? Quanto è grande il nostro spazio? 160 bit? Diciamo che n=1/2
elevato ad n perché l’universo dell’hash è 2 alla n possibili valori, il secondo ci ha probabilità 2 alla
n. Ma quante possibili coppie x, x1, etc dobbiamo guardare prima di arrivare alla prima collisione?
Le dobbiamo guardare ad un numero che è compatibile con 2 alla n per cui il numero delle coppie
da guardare è circa 2 alla n ma quante coppie ho in totale?Per cui il numero è (t per t-1 fratto 2), un
numero che è paragonabile a t quadro. Per cui nel caso dello SHA1 non devo guardare 2 allo 160
ma 2 alla 80 documenti perché ottengo tante coppie che m fanno 2 allo 160 coppie. E’ lo stesso
paradosso del giorno di nascita.
Passiamo ora ad esaminare le funzioni hash più utilizzate che sono l’MD5 che aveva uno spazio di
valori di 128-bit output ideata da Ron Rivest, ancora molto utilizzata. L’MD5 è stata in informatica
la prima funzione hash che è stata utilizzata. Dato che l’MD5 è stata la prima funzione hash ci sono
tantissimi sistemi che ancora la usano anche se è stata trovata una tecnica relativa alle collisioni nel
2004. Nel caso concreto se noi firmiamo con l’MD5 in pochi minuti un nuovo computer è in grado
di trovare un documento che va in collisione con quello che è stato generato in precedenza. Per
l’appunto è stata fatta una variante a 160 bit (RIPEMD-160) che ha avuto un po’ di fortuna che è
stato adottato come standard dal NIST, lo SHA-1 (Secure Hash Algorithm) 160-bit. Pero
ultimamente il governo statunitense, ha stabilito che a partire dal 2007 deve essere sostituta con
SHA-224/256algoritmo di hash e nel 2010 non ci devono stare più implementazioni di SHA1 in
quanto hanno trovato un algoritmo O( 2 elevato a 63) che riesce a bucare ed a trovare una collisione
per SHA1. Questo è un problema molto grave perché l’hash SHA1 è quello maggiormente usato
dalla Digital Security Standard. Questa è una scelta molto forte ed ha un forte impatto economico
ed organizzativo.
Le tecniche hash sono delle tecniche che consentono di assicurare la correttezza e quindi la
integrità dell’informazione e non la sua segretezza. L’hash ci consente di dire su una rete posso
mandare un informazione ed ho un modo per dire che questa informazione non è stata
modificata ad esempio tramite e-mail, aste on line etc. Quindi l’hash può servire come verifica di
integrità ma anche come prova a posteriori del fatto che ho inviato quella determinata richiesta.
Abbiamo esaminato la differenza fra integrità e segretezza e che l’RSA non serve a proteggere e
garantire l’integrità dell’informazione ma serve a garantire la segretezza dell’informazione
stessa.
Passiamo ora ad esaminare dei casi specifici. Ad esempio log-in al sistema operativo (inseriamo le
credenziali di autenticazione), per le pwd di accesso all’applicazione una delle regole è che la pwd
deve essere difficile da scoprire. Un modo per evitare che la pwd sia pubblica è quella dell’utilizzo
di tecniche di hash. Tutto ciò significa quando si effettuerà il log-in alla macchina il sistema farà
l’hash e lo confronterà con quello presente sulla macchina per cui non avrà bisogno di conoscere la
pwd ma solo dell’hash. L’integrità per esempio è una sorta di istituto. Facciamo l’es. di un comune
che decise di distribuire la firma elettronica e la fece al suo interno. Fu fatta una richiesta normativa
e tecnica al Ministero degli Interni. Il Comune mise a disposizione il software di firma il quale però
non era certificato e questo si creò un grosso problema di sicurezza, cioè chiunque avrebbe potuto
modificare un documento alterando atti amministrativi di una certa importanza. Facciamo l’esempio
di un asta , alice fa un offerta, trasmette l’hash e non un valore (send) e solo successivamente
trasmette un valore per cui gli altri non sanno quanto e stato offerto. La funzione di hash deve
essere gestita correttamente altrimenti si verificano delle criticità.
Le funzioni hash più utilizzate sono l’MD5 ma è stato superato il suo relativo problema, lo SHA1 a
160 bit soltanto che il governo usa ha cambiato come accennato in precedenza. Come dicevamo in
precedenza questi algoritmi possono essere più lenti, quello che io ad esempio per fare uno SHA1
impiego un millisecondo, per fare un SHA2 ci metto un decimillisecondo e quindi meno tempo. La
scelta della sicurezza però impatta sulle performance oppure sull’organizzazione del lavoro.
Un’altra tecnica di hash (si chiama HMAC) è quella che consente di fare l‘hash del messaggio più
la chiave che è cosi formalizzata: Message Autenthication Code = hash(messaggio +chiave). Quindi
per mandare un messaggio al mio corrispondente decido una chiave e mando sia il messaggio che la
chiave, mando l’hash del messaggio più la chiave. Quindi per ogni messaggio uguale mandato a
persone diverse passeranno sulle rete dati diversi, se A deve parlare con B e C a ha deciso una
chiave tra A e B ed una chiave tra A e C per cui sulla rete ho due firme diverse. L’HMAC è anche
utilizzato in IP security e in SSL/TLS. Ci avviciniamo così al concetto di unicità dell’informazione.
Infine un’altra tecnica di hash è quella chiamata DSS che è l’hash per “Digital Signature Standard
(DSS)”. Si potrebbe utilizzare anche la cifratura al posto dell’hash ma, in software l’hashing è più
veloce della cifratura (Bellare, Canetti, and Krawczyk nel 1996).
Scarica