
Què és MD5?
MD5 és un algoritme que agafa com entrada una cadena de qualsevol longitut i genera un message digest o fingerprint a partir d'ella. Aquest fingerprint és una cadena arbitraria de 32 caracters en notació hexadecimal (realment es tracta d'una cadena de 128 bits).
Exemples de MD5:
Missatge fingerprint hola 4d186321c1a7f0f354b297e8914ab240 La casa de la pradera està en lo alt del riu dedbde57052fd57e93e174dbc90d16c8 La casa de la pradera està en lo alt de la ria 70340676ee330ef60def2baef603c8f3
Per a que serveix l'MD5
Es va disenyar per comprobar l'integritat de les dades en transmisions de qualsevol tipus.
L'entrada de l'algoritme pot ser (i de fet és comú que ho sigui) un arxiu complet. Per exemple, l'hash de md5.html (aquest document) és "7f1ac9a83858a8d812437ab87a30e98c".
és freqüent al descarregar arxius d'una web (especialment arxius grans) trobar l'hash o fingerprint MD5 dels mateixos. Una vegada descarregat, apliques l'algoritme MD5 sobre l'arxiu del teu PC, i si l'hash resultant coincideix amb l' hash del fixer original significa que els dos son idèntics (amb una probabilitat d'errada infinitesimal).
Ens assegurem així que les dades no són manipulades durant la seva transmisió, o de que no s'ha produit cap error durant la mateixa.
Característiques del fingerprint
Com s'aprecia en els hashes anteriors, el fingerprint resultant té una longitut fixa, independent del tamany del missatge d'entrada.
El hash MD5 és constant per a cada cadena. És a dir: el hash de "hola" és SEMPRE "4d186321c1a7f0f354b297e8914ab240". Avui, l'any que vé, estiguem a Xina, Espanya o Madagascar.
Veiem també com, per molt que els dos últims missatges siguin molt similars, els seus fingerprints són radicalment diferents. Això és una característica molt important de l'algoritme MD5 ja que, errades o variacions molt petites en l'entrada provoquen enormes diferencies en la sortida.
Quan es produeixen errors en la transmisió, un sol bit incorrecte dins d'un arxiu de molts megabytes pot ser fatal. En cas d'existir aquesta petita variació entre l'arxiu original i el rebut, ens adonarem per la diferència del seu hash MD5.
Parem-nos a pensar uns instants sobre aquesta afirmació: Hi ha infinites cadenas amb el mateix hash MD5
T'estaràs preguntant: "Com és això posible? No és tan segur i eficaç l'algoritme?"
En efecte, ho és. Però adona't que les possibles diferents hashes són limitades. Moltissimes, però finites (3216 exactament: més de 1.2x1024).
En contraposició, les cadenes o missatges que existeixen són infinits.l'hash MD5 de la Biblia, de la Enciclopedia Larousse de la Biblia posant una "ç" al final de l'Apocalipsis. I sí, els hashes resultants serán molt diferents, quasi-aleatoris... però després de milers de proves trobarem hashes coincidents per a diferents entrades.
L'algoritme MD5 estima que trobar dos hashes iguals per a diferents cadenes suposa una dificultat de 264 intents (hauríem de trobar 1.84467440737E+19 hashes diferents per trobar-nos amb algun d'aquests).
Es pot desencriptar un hash MD5?
La resposta és molt senzilla: NO
Bàsicament perquè MD5 no és un algoritme d'encriptació (codificació per a els amants de la llengua) sinó per trobar un message digest.
En aquest message digest no existeix informació alguna de la cadena original. És una simple marca digital del missatge, però el seu contingut no es troba implícit en els 32 carpacters que componen el hash.
Per què s'entengui millor, ho explicaré amb un exemple:
Els hashes MD5 són comparables a les empremptes dactilars de l'èsser humà. Soposem que un CSI troba la petjada dactilar de l'assassí: Mitjançant la simple observació d'aquella petjada no obtendrà cap informació. En la petjada en sí no hi ha informació sobre si l'assessí és home, dona, cul gros o morè, alt o baix. No seria capaç de dir-nos res a part de que "es una petjada.".
Només mitjançant la comparació d'aquesta petjada amb la base de dades de la policia, i trobant una coincidència amb les que estan allà emmagatzemades, podrem descobrir la identidad de l'assessí.
Afirmaràs: "Un hacker segur que pot desencriptar hashes MD5"
No. Ni tan sols Ronald L. Rivest, el programador de l'algoritme és capaç de desencriptar un hash MD5. Qualsevol programa o utilitat de hacking que et trobis que afirmi que és capaç de fer-ho menteix, o no sap del que està parlant (que és més probable).
On no es pot treure, i si el hash no conté informació de la cadena d'entrada, no ens la podem inventar.
Tingues en compte que si fossim capaços de desencriptar hashes MD5, hauriem inventat l'algoritme de compressió més potent del món.
Imagina que trobem el hash de la trilogia de "El Senyor dels Anells": una cadena enorme, desenas de megabytes. Imagina que el hash resultant és per exemple: 4cf78a309d67c6ed32a29fc722ab7d9 (amb 32 caràcters, com tots). Si ets capaç de desencriptar aquesta cadena i obtenir d'ella la trilogia completa, enhorabona. Em sembla que mai més utilitzariem el winzip... xDL'algoritme MD5 estima que, donant un hash qualsevol, la dificultat de trobar-se amb el missatge que el va produïr és de 2128 intentos (3.40282366921E+38, tasca computacionalment impossible).
MD5 per enmagatzemar contrassenyes
En aquest apartat no hi ha contradicció alguna amb tot allò dit anteriorment. MD5 no és allò més segur per emmagatzemar les passwords dels nostres usuaris en una base de dades. De fet, qualsevol persona amb accés a aquestes hashes podria trobar el 80% de las claus en menys de 15 minuts cadascuna. El problema radica en el mateix de sempre: no fer servir les coses per el que han estat dissenyades.
Preguntaràs: "¿I com ho fan? ¿No deies que un hash MD5 no es pot desencriptar?"
En efecte, no es pot. Quan un usuari fica el seu password en una web que fa servir aquest sistema, el script troba el seu hash i el compara amb el guardat a la base de dades. Si coincideixen és que la password és la mateixa (aquest procés segueix la filosofía de la verificació de la integritat de dades).
Però aquí tenim un aventatge primordial: sabem que la longitut de les passwords és limitada y casi mai supera els 10 caràcters.
Podem procedir doncs a realitzar un atac per força bruta. És a dir, trobar el hash de totes les combinacions de lletres i nombres fins un màxim de 8 o 10 caracters i anar comparant cada resultat amb el hash guardat a la db. Quan trobem coincidència, haurem trobat la password.
Aquest procés sol ser llarg, vàries hores. Si ens trobem davant un hash d'un arxiu real ens resultaria impossible, ja que fer un atac de força bruta amb cadenas de més de 10 caracters és una bogeria. Un atac amb força bruta amb cadenes de 1 megabyte ens portaria diversos segles.
Altres atacs més sofisticats no proven totes les combinacions, sinó que troben els hashs de paraules de menys de 10 o 8 caràcters a partir d'un diccionari (i provant vàries combinacions numèriques amb cada paraula). En aquest procés, i a causa que les passwords dels usuaris solen ser lamentablement fàcils de crackejar, no trigariem més de 15 minuts amb gran part de las contrassenyes.
Bé és cert que l'atacant hauria de tenir accés a les hashes de la base de dades per realitzar aquests atacs, encara així la lliçó és clara: Fes servir les coses per allò que han estat pensades.
Com a exercici per al lector, abans d'acabar, us proposo un petit repte:
En algun punt d'aquest document, es produeix una paradoxa, un "imposible". Si has llegit i entès com funciona i què és un hash MD5 no et serà molt difícil descobrir-ho.