Categories
php sysadmin

MD5 non più sicuro

Pare sia stato reso pubblico l’algoritmo per ottenere collisioni con MD5. Per dovere di cronaca l’MD5 è un algoritmo non reversibile che data una stringa ne calcola un hash (in teoria univoco) spesso usato per criptare i dati, inoltre viene definito collisione il caso in cui due differenti stringhe abbiano lo stesso hash.

Il fatto che sia stato trovato un metodo per trovare stringhe che collidono tra di loro porta l’MD5 ad essere un algoritmo insicuro in quanto non garantirebbe più l’unicità dei dati ottenuti dalla funzione di hashing, inoltre pensate che da un test fatto basterebbe meno di un ora per trovare una stringa su un p4 ad 1.6GHz.

Per farvi capire la criticità della scoperta pensate che la maggior parte delle applicazioni php usa come unico metodo di criptazione delle password MD5. Immaginate cosa potrebbe fare un utente malintenzionato che in qualche modo riesce ad ottenere accesso al db con i dati utente, o al semplice cookie dell’utente dove molti, imprudentemente, salvano il valore della stringa hash della password.

Beh, è tempo di passare tutti a SHA-2!

ciuaz

6 replies on “MD5 non più sicuro”

In verità l’algoritmo dà due stringhe in chiaro con lo stesso hash md5, ma non è in grado di generare una stringa con un hash prefissato, quindi agli effetti pratici non è poi così utile (anche se comunque è tempo di cambiare algoritmo)

A dire il vero collisioni != decrypt

In sostanza se e’ vero che sara’ possibile inserire stringhe di bit “pensate apposta” all’interno di files senza alterarne l’md5sum, questo non significa che dall’md5sum si potra’ risalire alla pass in chiaro.

Trovo quindi particolarmente risibile il tuo commento sul “pericolo per i db php che conservano le pass con md5″… a parte che un malintenzionato che ” qualche modo riesce ad ottenere accesso al db con i dati utente” il danno l’ha gia’ fatto.

L’unico pericolo reale per la tuaa password e’ che un malintenzionato entri a tuo nome immettendo password ‘pip\∂€“®po’ invece che ‘pippo’ (giusto per fare un esempio).

Un po’ di precisione su questi temi non farebbe male.

Joe

joe ammetto che il post sia stato scritto frettolosamente e senza essere stato riletto (anche perchè ad ora improbabile) cmq non ho mai parlato di collision = decrypt.. diciamo più che altro che ci sarà uno strumento in più per fare del brute force per trovare le collision. Inoltre per collision non intento injection di stringhe per gabbare md5sum ma una cosa come md5(‘pippo’) = md5(‘topolino’) che è quello che l’algoritmo pare fare.

per quel che riguarda il db:
ok, ho cazzato completamente esempio, lo ammetto :).. cmq pensa solo agli shared host sparsi per il globo, sourceforge in testa, dove qualunque altro utente con poco lavoro può accedere al db del tuo sito… ma non per questo viene considerato compromesso a prescindere, diciamo che era un avviso (scritto da un afasico) per chi si ostina ad utilizzare solo ed esclusivamente md5 per proggere le psw nei siti, spesso basterebbe un semplice salt per risolvere il problema. ;)

e cmq le psw sui programmi in php sono solo la punta dell’iceberg, pensa anche ai certificati digitali o agli hash che certificano i file (procedura usata spesso per le iso delle distribuzioni ma anche dai software di p2p).

e per rendere (giustamente) un poco più preciso questo post ecco qualche link di approfondimento sull’argomento:

http://www.cryptography.com/cnews/hash.html
http://www.ietf.org/internet-drafts/draft-hoffman-hash-attacks-04.txt
http://www.systemexperts.com/tutors/CryptographicHashUpdate.pdf

ciuaz

credo ci sia un’ulteriore piccola imprecisione, l’hash non è “in teoria univoco” per la semplice ragione che la quantità di informazione nell’hash è minore di quella del file originale, altrimenti sarebbe un sistema di compressione perfetto :)

hash non significa compressione.. anche perchè se fai md5() [stringa vuota] ottieni cmq una discreta stringa ;)

inoltre se non erro non essendo reversibili le funzioni di hashing (e quindi non mantenendo inalterata l’informazione iniziale) una volta fatta la compressione non potresti più tornare indietro.

si, infatti è per quello che non esistono hash “univoci”, come ho detto la quantità di informazione è differente nello stream di byte iniziale ed in quello finale.

Comments are closed.