MD5 es una función muy utilizada para calcular hashes.
Los principiantes suelen utilizarlo para hacer hash de la contraseña, lo que no es una buena idea porque hay muchas formas de recuperar la contraseña original.
Este artículo describe métodos específicos para hacerlo.
Toda la seguridad se basa en el hecho de que se necesita un tiempo desproporcionadamente largo para probar todas las contraseñas. Bueno, debería. El problema con el algoritmo md5()
en particular es que es una función muy rápida. En un ordenador normal, no hay problema para calcular más de un millón de hashes por segundo.
Si rompemos la contraseña probando combinaciones una a una, es un ataque de fuerza bruta.
Hay varias estrategias:
Hay muchos más métodos, este artículo sólo describe los más comunes.
Todas las combinaciones de letras, números y otros caracteres se prueban de una en una.
Los intentos generados se someten a un hash uno por uno y se comparan con el hash original.
Así, por ejemplo:
aaaaaaabaaacaaadaaaeaaaf...
El problema de este ataque está en el propio algoritmo md5()
, si probáramos sólo las letras minúsculas del alfabeto inglés y los números, tardaría como mucho decenas de minutos en probar todas las combinaciones en un ordenador comúnmente disponible.
Por lo tanto, es importante elegir contraseñas largas, preferiblemente aleatorias y con caracteres especiales.
La gente suele elegir contraseñas débiles que existen en el diccionario.
Si aprovechamos este hecho, podemos descartar rápidamente variantes poco probables como 6w1SCq5cs
y, en su lugar, adivinar las palabras existentes.
Además, sabemos por anteriores filtraciones de contraseñas de grandes empresas que los usuarios eligen una letra mayúscula al principio de la contraseña y un número al final. Veamos, ¿también tiene eso su contraseña? :)
Dado que una contraseña corresponde siempre al mismo hash, es fácil recalcular una enorme base de datos en la que se buscarán primero las contraseñas.
De hecho, la búsqueda es siempre órdenes de magnitud más rápida que la búsqueda de hashes una y otra vez.
Además, en el caso de las filtraciones de datos más grandes, las contraseñas pueden ser sometidas a hash en paralelo de esta manera y, por ejemplo, el 10% de todas las contraseñas de los usuarios pueden ser recuperadas rápidamente.
Una buena base de datos de contraseñas es por ejemplo Crack Station.
Muchas contraseñas simples son conocidas directamente por Google porque indexa las páginas que contienen hashes.
Siempre uso Google como primera opción. :)
El Principio de Dirichlet describe que si tenemos un conjunto de hashes que siempre tienen 32 caracteres, entonces hay al menos 2 contraseñas diferentes de 33 caracteres (una más larga) que generan el mismo hash.
En la práctica, no tiene sentido buscar colisiones, pero a veces el propio autor de la aplicación facilita las conjeturas volviendo a calcular las colisiones.
Por ejemplo:
$password = 'contraseña';for ($i = 0; $i <= 1000; $i++) {$password = md5($password);}echo $password; // 1000x hashed via md5()
En este caso, tiene sentido adivinar la colisión en lugar del hash original.
¡Salud a los hilvanes!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | es