MD5

annuncio pubblicitario
MD5
1
MD5
L'acronimo MD5 (Message Digest algorithm 5) indica
un algoritmo crittografico di hashing realizzato da
Ronald Rivest nel 1991 e standardizzato con la RFC
1321.
Questo tipo di codifica prende in input una stringa di
lunghezza arbitraria e ne produce in output un'altra a
128 bit che può essere usata per calcolare la firma
digitale dell'input. La codifica avviene molto
velocemente e l'output (noto anche come "MD5
Checksum" o "MD5 Hash") restituito è tale per cui è
altamente improbabile ottenere con due diverse
stringhe in input una stessa firma digitale in output.
Inoltre, come per la maggior parte degli algoritmi di
hashing, non dovrebbe esserci possibilità, se non per
tentativi (forza bruta), di risalire alla stringa di input
partendo dalla stringa di output (la gamma di possibili
valori in output è infatti pari a 2 alla 128esima
potenza).
Schema di una operazione dell'MD5. L'algoritmo consta di 64 di
queste operazioni, raggruppate in gruppi di 16. Nello schema, "F" è
una funzione non lineare (ne viene usata una per ogni passaggio),
"Mi" indica un blocco a 32 bit del messaggio, "Ki" indica una
costante a 32 bit, differente per ogni operazione.
A oggi, la disponibilità di algoritmi efficienti capaci di
generare stringhe che collidono (ossia che producono in
output lo stesso valore di hash) in un tempo
ragionevole ha reso MD5 sfavorito rispetto ad altri algoritmi di hashing (vedi WHIRLPOOL, SHA-1 o
RIPEMD-160), sebbene la sua diffusione sia a tutt'oggi molto estesa (basti pensare che il controllo di integrità più
frequente su file si basa proprio su MD5).
Storia e crittanalisi
I Message Digest sono una serie di algoritmi progettati dal professor Ronald Rivest al MIT. Quando studi analitici
(realizzati dal crittografo tedesco Hans Dobbertin) indicarono che il predecessore dell'MD5, l'MD4 era insicuro,
l'MD5 fu progettato nel 1991 come rimpiazzo più sicuro.
Nel 1993 Der Boer e Bosselaers ottennero un primo risultato, anche se limitato, trovando una "pseudo-collisione"
dell'algoritmo MD5; cioè due diversi vettori di inizializzazione I e J con 4 bit di differenza tali che:
MD5compress(I,X) = MD5compress(J,X)
Nel 1996 Dobbertin annunciò una collisione della funzione di compressione MD5. Anche se non rappresentava un
attacco alla funzione hash MD5 completa, fu sufficiente a molti crittografi per raccomandare di passare ad un
sostituto come il WHIRLPOOL, SHA-1 o RIPEMD-160.
La dimensione dell'hash a 128 bit era abbastanza piccola per contemplare un attacco del compleanno. Nel marzo
2004 iniziò il progetto distribuito MD5CRK con lo scopo di dimostrare che l'MD5 era un algoritmo insicuro,
trovando una collisione, usando un attacco birthday.
MD5CRK durò fino a che, il 17 agosto 2004, fu trovata una collisione da Xiaoyun Wang, Dengguo Feng, Xuejia Lai
e Hongbo Yu [1] . Il loro attacco su un cluster IBM p690 impiegò solo un'ora.
Il 1º marzo 2005 Arjen Lenstra, Xiaoyun Wang e Benne de Weger dimostrarono [2] la costruzione di due certificati
X.509 con differenti chiavi pubbliche e lo stesso MD5 hash, di fatto una collisione. La costruzione funzionava sia
MD5
2
per le chiavi private che per quelle pubbliche. Dopo pochi giorni Vlastimil Klima descrisse [3] un algoritmo
migliorato, capace di costruire collisioni MD5 in poche ore su un singolo computer. Il 18 marzo 2006, Klima
pubblicò un algoritmo [4] che riusciva a trovare una collisione in un minuto su un singolo computer, usando un
metodo che chiamò "tunneling".
Applicazione pratica dell'MD5
La crittografia tramite algoritmo MD5 viene applicata in tutti i settori dell'informatica che lavorano con il supporto
delle firme digitali o che comunque trattano dati sensibili. Ad esempio, viene utilizzata per controllare che uno
scambio di dati sia avvenuto senza perdite, semplicemente attraverso il confronto della stringa prodotta dal file
inviato con quella prodotta dal file ricevuto. Con lo stesso metodo si può verificare se il contenuto di un file è
cambiato (funzione utilizzata dai motori di ricerca per capire se una pagina deve essere nuovamente indicizzata). È
diffuso anche come supporto per l'autenticazione degli utenti attraverso i linguaggi di scripting Web server-side
(PHP in particolare): durante la registrazione di un utente su un portale internet, la password scelta durante il
processo verrà codificata tramite MD5 e la sua firma digitale verrà memorizzata nel database (o in qualsivoglia
contenitore di dati). Successivamente, durante il login la password immessa dall'utente subirà lo stesso trattamento e
verrà confrontata con la copia in possesso del server, per avere la certezza dell'autenticità del login.
Esempio applicativo nel PHP
<?php
//Assegno ad una variabile la stringa che voglio codificare con
l'algoritmo MD5
$my_var = 'Questa è la stringa che voglio codificare';
//Stampo a video la codifica MD5 della stringa memorizzata nella
variabile
echo md5($my_var);
?>
Questo script in PHP assegna innanzitutto la stringa che vogliamo codificare a una variabile chiamata $my_var (sarà
l'input dell'algoritmo). Successivamente (attraverso l'utilizzo di echo, che visualizza una stringa) stampa a video il
valore di quella variabile in MD5 (ovvero l'output dell'algoritmo). La firma digitale prodotta in questa esempio sarà
52bc309e11259af15e4623c7a0abc28c, che corrisponde alla stringa memorizzata nella variabile.
Esempi
L'hash MD5 a 128 bit (16 byte) (anche chiamato message digest) è rappresentato come una sequenza di 32 cifre
esadecimali. Il seguente mostra una stringa ASCII di 47 byte e il corrispondente hash MD5:
MD5("Cantami o diva del pelide Achille l'ira funesta")
= b4dd7f0b0ca6c25dd46cc096e45158eb
Un piccolo cambiamento nel messaggio provocherà (molto probabilmente) un hash risultante molto differente, per
esempio cambiando una a con una o:
MD5("Contami o diva del pelide Achille l'ira funesta")
= f065b51db9c592bf6ecf66a76e39f8d0
MD5
3
Altri esempi:
MD5("Hello world")
= 3e25960a79dbc69b674cd4ec67a72c62
MD5("Wikipedia")
= 9c677286866aad38f8e9b660f5411814
L'hash corrispondente alla stringa nulla è:
MD5("")
= d41d8cd98f00b204e9800998ecf8427e
Note
[1]
[2]
[3]
[4]
(http:/ / eprint. iacr. org/ 2004/ 199) (http:/ / eprint. iacr. org/ 2004/ 264)
Cryptology ePrint Archive: Report 2005/067 (http:/ / eprint. iacr. org/ 2005/ 067)
Cryptology ePrint Archive: Report 2005/075 (http:/ / eprint. iacr. org/ 2005/ 075)
Cryptology ePrint Archive: Report 2006/105 (http:/ / eprint. iacr. org/ 2006/ 105)
Voci correlate
• MD4
Collegamenti esterni
• (EN) Hash'em all! (http://www.hashemall.com) per calcolare online l'hash di stringhe e files
• Funzione md5() in PHP (http://it2.php.net/manual/it/function.md5.php) (dalla documentazione ufficiale di
PHP)
• MD5 online cracker (http://passcracking.com)
• Online MD5 Reverser | Hash cracker (http://ice.breaker.free.fr)
• MD5 Database - 46.000.000 (http://md5.rednoize.com)
• MD5 OpenSSL API ed esempi (http://ardoino.com/21-openssl-des-blowfish-idea-md5-implementation/)
• Database MD5 Italiano (http://criptoweb.altervista.org) il primo database italiano contenente tutte le parole
italiane e inglesi in md5.
• Delphi Implementation (http://nebotov.ru/p/md5.html)
Fonti e autori delle voci
Fonti e autori delle voci
MD5 Fonte:: http://it.wikipedia.org/w/index.php?oldid=34326779 Autori:: Abisys, Albertomaria, Beltd, Beta16, Biopresto, Drugonot, FabioPal, Fabrizio, Gionnico, Giovannigobbin, Harlock81,
Jacopo, Klaudio, Klimius, Leo72, Luca.Padovan, Lucare, Marcuscalabresus, Mercy, Mirkop88, Parerga, Qualc1, Ragno, Ripkars, Rollopack, Scitale, Wiso, 39 Modifiche anonime
Fonti, licenze e autori delle immagini
Immagine:MD5.svg Fonte:: http://it.wikipedia.org/w/index.php?title=File:MD5.svg Licenza: Creative Commons Attribution-Sharealike 3.0 Autori:: User:Surachit
Licenza
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/
4
Scarica