¿Es posible descifrar los hash MD5?


260

Alguien me dijo que ha visto sistemas de software que:

  1. recuperar contraseñas cifradas MD5 de otros sistemas;
  2. descifrar las contraseñas cifradas y
  3. almacenar las contraseñas en la base de datos del sistema utilizando el algoritmo propio del sistema.

¿Es eso posible? Pensé que no era posible / factible descifrar los hash MD5.

Sé que hay diccionarios MD5, pero ¿existe un algoritmo de descifrado real?


77
Revertir el MD5 también generaría múltiples contraseñas.
Carles Company

231
MD5 es un algoritmo de resumen. Piense en ello como convertir una vaca en un bistec. Ahora intenta revertir eso.
Caracol mecánico el

55
@ Por lo que entiendo, sí, pero solo si tuviste MUCHOS de esos. E incluso si lo hiciera, no podría ir en reversa, porque el algoritmo pierde información a propósito.
Jordania

8
@mechanicalsnail dada esa analogía, uno podría hacer un clon perfecto completo del ADN en el filete. :))
Trimikha Valentius

8
@TrimikhaValentius MD5 es un algoritmo digestivo. Piense en ello como comer filete> digestión> salida. Ahora intenta revertir eso.
user4157124

Respuestas:


424

No. MD5 no es cifrado (aunque puede usarse como parte de algunos algoritmos de cifrado), es una función hash unidireccional . Gran parte de los datos originales se "pierden" como parte de la transformación.

Piense en esto: un MD5 siempre tiene 128 bits de longitud. Eso significa que hay 2 128 posibles hashes MD5. Ese es un número razonablemente grande y, sin embargo, definitivamente es finito. Y, sin embargo, hay un número infinito de entradas posibles para una determinada función hash (y la mayoría de ellas contienen más de 128 bits, o unos miserables 16 bytes). Por lo tanto, en realidad hay un número infinito de posibilidades de datos que tendrían el mismo valor. Lo que hace que los hash sean interesantes es que es increíblemente difícil encontrar dos datos que tengan el mismo valor, y las posibilidades de que ocurra por accidente son casi 0.

Un ejemplo simple para una función hash (muy insegura) (y esto ilustra la idea general de que es unidireccional) sería tomar todos los bits de un dato y tratarlo como un gran número. A continuación, realice la división de enteros utilizando algún número grande (probablemente primo) n y tome el resto (ver: Módulo ). Te quedará un número entre 0 y n . Si volviera a realizar el mismo cálculo (en cualquier momento, en cualquier computadora, en cualquier lugar), usando exactamente la misma cadena, obtendrá el mismo valor. Y, sin embargo, no hay forma de averiguar cuál era el valor original, ya que hay un número infinito de números que tienen ese resto exacto, cuando se divide por n .

Dicho esto, se ha descubierto que MD5 tiene algunas debilidades, de modo que con algunas matemáticas complejas, es posible encontrar una colisión sin probar 2 128 posibles cadenas de entrada. Y el hecho de que la mayoría de las contraseñas son cortas, y que las personas a menudo usan valores comunes (como "contraseña" o "secreto") significa que en algunos casos, puede adivinar razonablemente la contraseña de alguien buscando en Google el hash o usando un Rainbow mesa . Esa es una razón por la que debe siempre " sal " hash contraseñas, por lo que dos valores idénticos, cuando hash, ¿no hash al mismo valor.

Una vez que un dato se ha ejecutado a través de una función hash, no hay vuelta atrás.


22
sin embargo, hay más colisiones de lo que se pensaba originalmente en el espacio hash MD5. Ya no se considera óptimo como el mejor hash para contraseñas.
Cheeso el

12
Como la mayoría de las contraseñas son más cortas que el hash MD5, generalmente solo hay una contraseña para cada hash. (Y encontrar una, incluso si no es la original, es suficiente para acceder a la cuenta.) El punto de ser una función unidireccional es que no hay múltiples preimágenes diferentes, por lo que no podemos saber cuál era la original. , pero es realmente difícil encontrar incluso un valor original .
Paŭlo Ebermann

2
@Nick: En realidad, RFC1321 dice explícitamente: "El algoritmo toma como entrada un mensaje de longitud arbitraria"
Adam Batkin

66
@Olathe: no estoy seguro de estar de acuerdo. Dado un hash, generalmente es imposible determinar (con 100% de certeza) la entrada original. Hay (generalmente) un número infinito de entradas que producen todas las salidas posibles (hash). Dije generalmente porque, si sabe (por ejemplo) que está buscando una cadena de caracteres ASCII, y es menor que, digamos, 12 bytes, es probable que solo haya una entrada que produzca una salida dada. Pero siempre habrá colisiones (infinitas), y a menos que tenga alguna restricción externa (como en mi ejemplo), nunca sabrá cuál es la correcta
Adam Batkin,

2
@ Adam Batkin, tienes razón, pero no me refiero al 100% de certeza. El descifrado no se puede hacer con 100% de certeza. El remitente podría haber significado galimatías al azar en lugar de texto simple en inglés usando la misma clave que descifra otros textos claros en inglés, pero la probabilidad de que el inglés sea muy cercana al 100%. Del mismo modo, al elegir entre una contraseña de poema japonés UTF-8 larga y cadenas de galimatías, la probabilidad del poema es cercana al 100%. Esto se puede hacer usando las probabilidades posteriores a los hechos en lugar de las restricciones pre-escogidas. Obviamente no se puede hacer en general, pero sigue siendo bastante útil.
Olathe

154

No puedes, en teoría. El punto principal de un hash es que es de una sola manera. Esto significa que si alguien logra obtener la lista de hashes, aún no puede obtener su contraseña. Además, significa que incluso si alguien usa la misma contraseña en varios sitios (sí, todos sabemos que no deberíamos, pero ...) cualquier persona con acceso a la base de datos del sitio A no podrá usar la contraseña del usuario en sitio B.

El hecho de que MD5 sea un hash también significa que pierde información. Para cualquier hash MD5 dado, si permite contraseñas de longitud arbitraria, podría haber varias contraseñas que produzcan el mismo hash. Para un buen hash, sería computacionalmente inviable encontrarlos más allá de una longitud máxima bastante trivial, pero significa que no hay garantía de que si encuentra una contraseña que tiene el hash objetivo, definitivamente es la contraseña original. Es astronómicamente improbable que vea dos contraseñas ASCII de longitud razonable que tengan el mismo hash MD5, pero no es imposible.

MD5 es un mal hash para usar con contraseñas:

  • Es rápido, lo que significa que si tiene un hash "objetivo", es barato probar muchas contraseñas y ver si puede encontrar una que tenga hash para ese objetivo. Salar no ayuda con ese escenario, pero ayuda a que sea más costoso tratar de encontrar una contraseña que coincida con cualquiera de los múltiples hashes que usan diferentes sales.
  • Creo que conoce fallas que hacen que sea más fácil encontrar colisiones, aunque encontrar colisiones dentro de texto imprimible (en lugar de datos binarios arbitrarios) al menos sería más difícil.

No soy un experto en seguridad, así que no haré una recomendación concreta más allá de "No utilice su propio sistema de autenticación". Encuentre uno de un proveedor acreditado y úselo. Tanto el diseño como la implementación de sistemas de seguridad es un negocio complicado.


2
Sí, hay otros métodos, pero debe comprender lo que Jon dijo anteriormente: "no debe enviarles su contraseña por correo electrónico; esa es información confidencial que podría seguir siendo confidencial". - en el nivel más bajo, se pueden interceptar correos electrónicos y se puede recuperar información confidencial. Una contraseña debe permanecer lo más segura posible, generalmente manteniéndola como un hash solo en una base de datos.
Daniel May

3
Y también el hecho de que si la contraseña se puede revertir, eso significa que cualquiera que tenga acceso a su base de datos puede obtener las contraseñas de los usuarios. No es una buena idea Las contraseñas unidireccionales deberían ser la norma; Sólo mantener la contraseña real (incluso cifrados) si es absolutamente tiene a (por ejemplo, para autenticar con otro sistema que no tiene nada a base de testigo).
Jon Skeet

1
He visto medidas antispam en las que el servidor web del receptor niega un correo entrante solo para esperar a que el servidor de correo del remitente vuelva a intentarlo (los robots de spam generalmente solo lo intentan una vez). Eso podría exceder fácilmente su tiempo de espera de 10 minutos.
sisve

1
@ravisoni: Eso es encontrar un valor que tenga el mismo hash, presumiblemente a través de la fuerza bruta o las tablas de búsqueda. No hay garantía de que sea el valor original de texto sin formato.
Jon Skeet

55
@ravisoni: ¿Qué quieres decir con "correcto" aquí? Si la contraseña es desconocida, no puede saber si la revelada es la original o no. Pero el punto es que los hashes unidireccionales como MD5, por definición, pierden información. El hecho de que sitios como este puedan tener una contraseña coincidente es solo una buena evidencia de que MD5 es un mal algoritmo para usar por razones de seguridad.
Jon Skeet

52

Técnicamente, es 'posible' , pero en condiciones muy estrictas ( tablas de arco iris , fuerza bruta basada en la posibilidad muy pequeña de que la contraseña de un usuario esté en esa base de datos hash).

Pero eso no significa que sea

  • Viable
    o
  • Seguro

No desea 'revertir' un hash MD5 . Usando los métodos descritos a continuación, nunca necesitará hacerlo. 'Revertir' MD5 en realidad se considera malicioso : algunos sitios web ofrecen la capacidad de 'descifrar' y aplicar fuerza bruta a hash MD5, pero todas son bases de datos masivas que contienen palabras de diccionario, contraseñas enviadas previamente y otras palabras. Existe una pequeña posibilidad de que revierta el hash MD5 que necesita. Y si ha salado el hash MD5, ¡esto tampoco funcionará! :)


La forma en que los inicios de sesión con el hash MD5 deberían funcionar es:

Durante el registro: el
usuario crea una contraseña -> La contraseña se usa usando MD5 -> Hash almacenado en la base de datos

Durante el inicio de sesión: el
usuario ingresa el nombre de usuario y la contraseña -> (nombre de usuario marcado) La contraseña se codifica con MD5 -> el hash se compara con el hash almacenado en la base de datos

Cuando se necesita 'Contraseña perdida':

2 opciones:

  • El usuario envió una contraseña aleatoria para iniciar sesión, luego se le da error para cambiarla en el primer inicio de sesión.

o

  • Al usuario se le envía un enlace para cambiar su contraseña (con una comprobación adicional si tiene una pregunta de seguridad / etc.) y luego la nueva contraseña se codifica y se reemplaza con una contraseña anterior en la base de datos

1
Tengo algunas trampas. Las mesas arcoiris no son de fuerza bruta. En realidad, hay programas y sitios que hacen contraseñas de fuerza bruta (muy simple) de unos pocos caracteres (generalmente solo se repiten en unas pocas horas o días, y puede completar un hash y esperar que aparezca en el bucle). Y desafortunadamente, dada la falta de calidad de muchas contraseñas, la posibilidad de que aparezca una no es "una posibilidad muy pequeña".
Maarten Bodewes

32

No directamente. Debido al principio del casillero , hay (probablemente) más de un valor que se asocia con cualquier salida MD5 dada. Como tal, no puedes revertirlo con certeza. Por otra parte, MD5 se hace para hacer que sea difícil encontrar ningún ejemplo de hash inversa (sin embargo, se han producido ataques que producen colisiones - es decir, producir dos valores hash para que el mismo resultado, pero no se puede controlar lo que el valor MD5 resultante ser).

Sin embargo, si restringe el espacio de búsqueda a, por ejemplo, contraseñas comunes con una longitud inferior a N, es posible que ya no tenga la propiedad de irreversibilidad (porque el número de salidas MD5 es mucho mayor que el número de cadenas en el dominio de interés). Luego puede usar una tabla de arcoiris o similar para invertir los hashes.


1
Agregaría que encontrar otro valor que se convierta en hash a la misma salida se llama "colisión". Este es el método más común para romper los sistemas hash MD5.
Nicole

55
@Renesis, encontrar datos que coincidan con un valor previamente conocido se llama "preimagen", en realidad, y es mucho, mucho más difícil que solo una colisión. Todavía no se ha demostrado ningún ataque de preimagen contra MD5, pero se han utilizado ataques de colisión.
bdonlan

El punto de las funciones hash (cuando se usa para el almacenamiento de contraseñas) no es que haya muchas contraseñas posibles que den el mismo hash (las hay, pero la mayoría son más largas que el hash mismo), sino que es difícil de encontrar incluso uno de ellos (que sería suficiente para acceder al sistema). Y sí, debido a las tablas de arcoíris, no utilizas hashes sin sal. Y debido al pequeño espacio de contraseña, usará un hash lento (como bcrypt o scrypt) en lugar de uno rápido (como MD5 / SHA - * / ....)
Paŭlo Ebermann

1
Para ser técnico, no puede realizar MD5 con certeza, porque el hardware podría haber funcionado mal. De la misma manera, es posible que no pueda estar seguro de que la contraseña era passwordmás que todas las demás entradas infinitas que producen el mismo hash pero que parecen bastante aleatorias, pero puede estar lo suficientemente cerca.
Olathe

El principio del casillero se aplica, por supuesto, pero todavía es computacionalmente inviable encontrar una segunda entrada que tenga un valor determinado, por ejemplo, un valor hash sobre una contraseña normal. Si encuentra una X que coincide con una H (X) dada, puede estar seguro de que X es la entrada correcta. Esto hace que toda la primera sección de esta respuesta y la mayoría del resto sean incorrectas.
Maarten Bodewes

13

No es posible, al menos no en un tiempo razonable.

La forma en que esto se maneja a menudo es un "restablecimiento" de contraseña. Es decir, les da una nueva contraseña (aleatoria) y la envía por correo electrónico.


55
Si el hash no estaba salado, que se sorprendería de la frecuencia con todo lo que necesita es una búsqueda en Google para el valor hash ...
Michael Borgwardt

1
No es realmente práctico para un sistema de recuperación de contraseña, sin embargo, incluso uno sin sal :)
Mateo Groves

12

No puede revertir una contraseña md5. (En cualquier idioma)

Pero puedes:

dar al usuario uno nuevo.

revisa alguna mesa de arcoíris para recuperar la antigua.


1
Nix la idea de la mesa del arco iris. Si estás salando, y deberías estarlo, entonces de todos modos no funcionaría.
Steven Sudit

1
@StevenSudit Si todavía están usando MD5 para hash contraseñas en lugar de usar un hash de contraseña fuerte, entonces no puede suponer que están usando una sal. Tal vez lo hacen, probablemente no.
Maarten Bodewes

10

No, debe haber estado confundido acerca de los diccionarios MD5.

Los hash criptográficos (MD5, etc.) son unidireccionales y no puede volver al mensaje original solo con el resumen a menos que tenga alguna otra información sobre el mensaje original, etc., que no debería.


8

Descifrado (obteniendo directamente el texto plano del valor hash, de forma algorítmica), no.

Sin embargo, existen métodos que utilizan lo que se conoce como una tabla de arcoiris . Es bastante factible si sus contraseñas se codifican sin sal.


7

MD5 es un algoritmo hash, no puede revertir el valor hash.

Debe agregar "función de cambio de contraseña", donde el usuario da otra contraseña, calcula el hash y la almacena como una nueva contraseña.


7

No hay una manera fácil de hacerlo. Este es el punto de cifrar la contraseña en primer lugar. :)

Una cosa que debería poder hacer es establecer una contraseña temporal para ellos manualmente y enviarlos.

Dudo en mencionar esto porque es una mala idea (y no se garantiza que funcione de todos modos), pero podría intentar buscar el hash en una tabla de arco iris como milw0rm para ver si puede recuperar la contraseña anterior de esa manera.


6

Vea todas las otras respuestas aquí sobre cómo y por qué no es reversible y por qué no querría hacerlo de todos modos.

Sin embargo, para completar, hay tablas de arco iris en las que puedes buscar posibles coincidencias. No hay garantía de que la respuesta en la tabla del arco iris sea la contraseña original elegida por su usuario, por lo que eso los confundiría en gran medida.

Además, esto no funcionará para los hash salados. La salazón es recomendada por muchos expertos en seguridad.


Incorrecta . Si se encuentra una coincidencia, entonces es seguro que será la contraseña original. Si este no fuera el caso, entonces sería posible generar colisiones dado cualquier H (X) donde X es un mensaje sin una estructura predefinida determinada por el adversario. Es computacionalmente inviable encontrar una colisión de este tipo para una función hash criptográficamente segura, incluso si se trata de una función hash rota, como MD5.
Maarten Bodewes

@MaartenBodewes: "Si se encuentra una coincidencia, entonces es seguro que será la contraseña original". No puedo ver cómo ese es el caso, si asumimos longitudes ilimitadas de contraseñas. Diría que es extremadamente probable que sea la contraseña original, pero no tiene que ser así. El hecho de que haya más contraseñas posibles que los hash MD5 significa que debe ser posible que haya dos contraseñas con el mismo hash. El hecho de que sea computacionalmente inviable encontrar tales colisiones no significa que no existan. ¿O te he entendido mal?
Jon Skeet

@ JonSkeet Si es computacionalmente inviable encontrar una colisión a propósito, entonces encontrar una por casualidad es igualmente improbable o peor. Debido al espacio de salida limitado de MD5 y el problema de cumpleaños, la probabilidad de que encuentre una colisión es de aproximadamente 1 en 2 ^ 64 (es decir, aproximadamente la mitad del espacio de salida), y eso es después de hacer coincidir aproximadamente 2 ^ 64 hashes. Y esto ni siquiera considera que el mensaje probablemente deba ser pequeño y tener un formato específico para ser considerado una contraseña. La mayoría de las contraseñas tienen una entropía considerablemente inferior a 2 ^ 64 bits.
Maarten Bodewes

1
@MaartenBodewes: Pero hay una gran diferencia entre "astronómicamente improbable" e "imposible". Su declaración acerca de que es seguro que es la contraseña correcta es demasiado fuerte, en mi opinión. Eso sugiere una certeza matemática que no está presente.
Jon Skeet

También puede adivinar una clave AES de 2 ^ 128 bits de una vez. Es "simplemente" extremadamente improbable. La criptografía se basa en este tipo de probabilidades. A todos los efectos prácticos, si encuentra un mensaje / contraseña de entrada, será el que estaba buscando. Que es teóricamente posible encontrar otro mensaje de entrada es bueno, pero para esta pregunta en StackOverflow no hay necesidad de considerarlo. Y las tablas de arcoiris solo están llenas de posibles contraseñas. No contendrán suficientes datos para tener la posibilidad de una colisión (sin saberlo, sobrescribirían el mapeo o se volverían famosos).
Maarten Bodewes

4

No hay forma de "revertir" una función hash en términos de encontrar la función inversa para ella. Como se mencionó anteriormente, este es el objetivo de tener una función hash. No debe ser reversible y debe permitir un cálculo rápido del valor hash. Entonces, la única forma de encontrar una cadena de entrada que produzca un valor hash dado es probar todas las combinaciones posibles. Esto se llama ataque de fuerza bruta por esa razón.

Probar todas las combinaciones posibles lleva mucho tiempo y esta es también la razón por la cual los valores hash se usan para almacenar contraseñas de una manera relativamente segura. Si un atacante puede acceder a su base de datos con todas las contraseñas de usuario, perderá en cualquier caso. Si tiene valores hash y (idealmente hablando) contraseñas seguras, será mucho más difícil sacar las contraseñas de los valores hash para el atacante.

Almacenar los valores hash tampoco es un problema de rendimiento porque calcular el valor hash es relativamente rápido. Entonces, lo que la mayoría de los sistemas hacen es calcular el valor hash de la contraseña que ingresó el usuario (que es rápido) y luego compararlo con el valor hash almacenado en su base de datos de usuarios.


Esta respuesta no tiene nada de malo, excepto que la velocidad de la función hash es un gran problema porque la mayoría de las contraseñas no son lo suficientemente seguras y permiten que un adversario realice un ataque de diccionario. Por esa razón, se utilizan funciones hash de contraseña lenta en lugar de funciones hash rápidas criptográficamente seguras.
Maarten Bodewes

3

MD5 se considera roto, no porque pueda recuperar el contenido original del hash, sino porque con el trabajo, puede crear dos mensajes que tengan el mismo hash.

No puede quitar el hash de un hash MD5.


3
Por diseño, todos los hashes del mismo largo sufren colisiones. Es inevitable cuando se restringen datos de longitud variable. MD5 se considera obsoleto por su tasa de colisiones, no por el hecho de colisionar.
Jonathan Lonowski el

MD5 se considera roto debido a la probada posibilidad de construir entradas que colisionan.
Ned Batchelder

3

Puede encontrar herramientas en línea que usan un diccionario para recuperar el mensaje original.

En algunos casos, el método del diccionario podría ser inútil:

  • si el mensaje se codifica utilizando un mensaje SALT
  • si el mensaje es hash más de una vez

Por ejemplo, aquí hay una herramienta en línea para descifrar MD5 .


Las tablas de arcoíris , no los ataques de diccionario, son inútiles si se usa sal. Hacer hash más de una vez, sin sal, todavía permite tablas de arcoiris, aunque encontrar una preexistente en línea es ciertamente menos probable.
Maarten Bodewes

2

Lo único que puede funcionar es (si mencionamos que las contraseñas solo están codificadas, sin agregar ningún tipo de sal para evitar los ataques de repetición, si es así, debe conocer la sal) por cierto, obtenga una herramienta de ataque de diccionario , los archivos de muchas palabras, números, etc. luego crean dos filas, una fila es palabra, número (en el diccionario) y la otra es hash de la palabra, y compara los hashes si coincide ...

esa es la única forma, sin entrar en criptoanálisis.


2

Sí, exactamente lo que estás pidiendo es posible. No es posible 'descifrar' una contraseña MD5 sin ayuda, pero es posible volver a cifrar una contraseña MD5 en otro algoritmo, solo que no todo de una vez.

Lo que debe hacer es hacer que sus usuarios puedan iniciar sesión en su nuevo sistema utilizando la contraseña MD5 anterior. En el punto en que se inicia sesión que han dado su programa de inicio de sesión de un sin troceo versión de la contraseña que usted prueba coincide con el hash MD5 que tiene. A continuación, puede convertir esta contraseña no compartida en su nuevo algoritmo de hash.

Obviamente, este es un proceso extendido porque tienes que esperar a que tus usuarios te digan cuáles son las contraseñas, pero funciona.

(NB: siete años después, bueno espero que alguien lo encuentre útil)


Gracias por la respuesta. Sin embargo, voy a "ponerme en contacto contigo" :) No recuerdo si realmente hice esto, pero en teoría debería funcionar. En lugar de esperar a que cada usuario inicie sesión para que podamos volver a cifrar su contraseña, simplemente puede cifrar la versión hash de su contraseña. Por lo tanto, cada contraseña tendrá un hash MD5 y luego se cifrará. Acaba de actualizar la verificación de contraseña para hacer lo mismo y los datos del usuario deben estar seguros sin requerir la intervención del usuario.
John Bubriski

Una advertencia más a mi comentario anterior. No soy un experto en cifrado, por lo que no estoy seguro de si hay otras implicaciones de seguridad de esto. Por ejemplo, el cifrado de contraseñas débiles que tienen un hash débil antes de cifrarlo podría comprometer la seguridad del cifrado (¿puede usar también otra sal?). Además, puede tener copias de seguridad flotando con esas contraseñas hash MD5. Probablemente sea mejor hacer una invalidación completa de todas las contraseñas existentes al hacer este tipo de actualización.
John Bubriski

Los criptógrafos se preocupan por el doble cifrado, pero creo que solo han encontrado casos triviales en los que es un problema. Pero no creo que sea útil en este caso porque MD5 todavía es seguro para contraseñas (no demasiado largas, de texto). Aún así, el doble hashing podría ser útil si el desarrollador anterior olvidó agregar sal, de lo contrario, no puedo pensar en un caso en el que no tenga que decirles a todos que las contraseñas deben considerarse pwned. Con suerte, sus copias de seguridad no se pierden, y están encriptadas de todos modos.
user3710044

1

No, no se puede hacer. Puede usar un diccionario o puede probar el hash de diferentes valores hasta que obtenga el hash que está buscando. Pero no puede ser "descifrado".


Vi este sitio web que invierte el md5 en el texto original: md5.gromweb.com . ¿Cómo es posible entonces?
samach

2
@ samach321 - Fácil: tienen una base de datos de cadenas hash. Lo que ingrese en su cuadro "Convertir una cadena en un hash MD5" se agrega a la base de datos. Intenta obtener un hash MD5 de otra fuente e ingrésalo. A menos que sea algo que esté en su base de datos, no obtendrá un resultado.
Vilx-

1

MD5 tiene sus debilidades (ver Wikipedia ), por lo que hay algunos proyectos que intentan precalcular Hashes. Wikipedia también insinúa algunos de estos proyectos. Uno que conozco (y respeto) es ophrack. No puede decirle al usuario su propia contraseña, pero puede decirle una contraseña que funcione. Pero creo: simplemente envíe una nueva contraseña por correo en caso de que la hayan olvidado.


El hecho de que MD5 esté roto (para usos específicos pero importantes de la función) no tiene absolutamente nada que ver con las tablas de arcoiris (que es lo que se sugiere al mencionar la precomputación de hashes).
Maarten Bodewes

1

El algoritmo Hash MD5 no es reversible, por lo que no es posible la decodificación MD5, pero algunos sitios web tienen un conjunto de contraseñas masivas, por lo que puede probar en línea para decodificar hash MD5.

Probar en línea:

MD5 Descifrar

md5online

md5decrypter


Sí, pero esto ya está cubierto por la pregunta como en la frase "Sé que hay diccionarios". Simplemente señalar los diccionarios, por lo tanto, no cuenta como una respuesta.
Maarten Bodewes

1

En teoría, no es posible descifrar un valor hash, pero tiene algunas técnicas sucias para recuperar el texto plano original.

  1. Fuerza bruta : Todos los algoritmos de seguridad informática sufren fuerza bruta . En base a esta idea, la GPU de hoy emplea la idea de la programación paralela mediante la cual puede recuperar el texto sin formato mediante una fuerza bruta masiva utilizando cualquier procesador de gráficos. Esta herramienta hashcat hace este trabajo. La última vez que revisé su versión cuda , pude aplicar fuerza bruta a un carácter de 7 letras en seis minutos.
  2. Búsqueda en Internet : simplemente copie y pegue el hash en Google y vea si puede encontrar el texto plano correspondiente allí. Esta no es una solución cuando estás pentesting algo, pero definitivamente vale la pena intentarlo. Algunos sitios web mantienen el hash para casi todas las palabras en el diccionario.

2
Los ataques de diccionario son otra forma, o se comparan con otras bases de datos para las que conoce las contraseñas de entrada.
Maarten Bodewes

1

No, no es posible revertir una función hash como MD5: dado el valor hash de salida, es imposible encontrar el mensaje de entrada a menos que se conozca suficiente información sobre el mensaje de entrada.

El descifrado no es una función definida para una función hash; el cifrado y descifrado son funciones de un cifrado como AES en modo CBC; las funciones hash no cifran ni descifran . Las funciones hash se utilizan para digerir un mensaje de entrada. Como su nombre lo indica, no hay un algoritmo inverso posible por diseño .


MD5 ha sido diseñado como una función de hash unidireccional criptográficamente segura . Ahora es fácil generar colisiones para MD5, incluso si una gran parte del mensaje de entrada está predeterminado. Por lo tanto, MD5 está oficialmente roto y MD5 ya no debe considerarse un hash criptográficamente seguro. Sin embargo, todavía es imposible encontrar un mensaje de entrada que conduzca a un valor hash: encuentre X cuando solo se conoce H (X) (y X no tiene una estructura precalculada con al menos un bloque de 128 bytes de datos precalculados) . No se conocen ataques previos a la imagen contra MD5.

Por lo general, también es posible adivinar las contraseñas utilizando la fuerza bruta o los ataques de diccionario (aumentados), comparar bases de datos o tratar de encontrar hashes de contraseñas en las llamadas tablas de arco iris. Si se encuentra una coincidencia, entonces es computacionalmente seguro que se ha encontrado la entrada. Las funciones hash también son seguros contra los ataques de colisión: la búsqueda de X'modo que H(X') = H(X)dada H(X). Entonces, si Xse encuentra un archivo, es computacionalmente seguro que efectivamente fue el mensaje de entrada. De lo contrario, habría realizado un ataque de colisión después de todo. Las tablas de arco iris se pueden usar para acelerar los ataques y hay recursos especializados de Internet que lo ayudarán a encontrar una contraseña dada un hash específico.

Por supuesto, es posible reutilizar el valor hashH(X) para verificar las contraseñas que se generaron en otros sistemas. Lo único que tiene que hacer el sistema receptor es almacenar el resultado de una función determinista Fque toma H(X)como entrada. Cuando Xse le da al sistema, entonces, H(X)por Flo tanto, se puede volver a calcular y se pueden comparar los resultados. En otras palabras, no es necesario descifrar el valor hash para verificar que una contraseña sea correcta, y aún puede almacenar el hash como un valor diferente.


En lugar de MD5, es importante utilizar un hash de contraseña o PBKDF (función de derivación de clave basada en contraseña). Tal función especifica cómo usar una sal junto con un hash. De esa manera, no se generarán hashes idénticos para contraseñas idénticas (de otros usuarios o dentro de otras bases de datos). Los hash de contraseñas por ese motivo tampoco permiten que se usen tablas arcoíris siempre que la sal sea lo suficientemente grande y esté correctamente aleatorizada.

Los hashes de contraseña también contienen un factor de trabajo (a veces configurado usando un recuento de iteraciones ) que puede ralentizar significativamente los ataques que intentan encontrar la contraseña dado el valor de sal y hash. Esto es importante ya que la base de datos con sales y valores hash podría ser robada. Finalmente, el hash de la contraseña también puede ser difícil de memoria, por lo que se requiere una cantidad significativa de memoria para calcular el hash. Esto hace que sea imposible usar hardware especial (GPU, ASIC, FPGA, etc.) para permitir que un atacante acelere la búsqueda. Otras entradas u opciones de configuración como un pimiento o la cantidad de paralelización también pueden estar disponibles para un hash de contraseña.

Sin embargo, todavía permitirá que cualquiera verifique una contraseña dada, H(X)incluso si H(X)es un hash de contraseña. Los valores hash de las contraseñas siguen siendo deterministas, por lo que si alguien conoce todas las entradas y el algoritmo hash en sí mismo, Xpuede usarse para calcular H(X)y, nuevamente, los resultados pueden compararse.

Los hashes de contraseñas más utilizados son bcrypt , scrypt y PBKDF2 . También hay Argon2 en varias formas, que es el ganador de la competencia de hashing de contraseñas razonablemente reciente. Aquí en CrackStation hay una buena publicación de blog sobre cómo hacer la seguridad de contraseña correctamente.


Es posible hacer que sea imposible para los adversarios realizar el cálculo de hash y verificar que la contraseña sea correcta. Para esto, se puede usar un pepper como entrada para el hash de contraseña. Alternativamente, el valor hash puede encriptarse, por supuesto, utilizando un cifrado como AES y un modo de operación como CBC o GCM. Sin embargo, esto requiere el almacenamiento de un secreto / clave de forma independiente y con requisitos de acceso más altos que el hash de contraseña.


0

MD5 es una función hash criptográfica (unidireccional), por lo que no hay forma directa de decodificarla. El propósito completo de una función hash criptográfica es que no se puede deshacer.

Una cosa que puedes hacer es una estrategia de fuerza bruta, donde adivinas lo que se ha procesado, luego lo hash con la misma función y ver si coincide. A menos que los datos cifrados sean muy fáciles de adivinar, podría llevar mucho tiempo.


-1

Todavía no es posible poner un hash de contraseña en un algoritmo y recuperar la contraseña en texto plano porque el hashing es una cosa de una sola manera. Pero lo que la gente ha hecho es generar hashes y almacenarlos en una tabla grande para que cuando ingrese un hash en particular, verifique en la tabla la contraseña que coincida con el hash y le devuelva esa contraseña. Un ejemplo de un sitio que hace eso es http://www.md5online.org/ . El sistema moderno de almacenamiento de contraseñas contrarresta esto mediante el uso de un algoritmo de sal, de modo que cuando ingresa la misma contraseña en un cuadro de contraseña durante el registro, se generan diferentes hashes.


-1

No, no puede descifrar / invertir el md5 ya que es una función hash unidireccional hasta que no pueda encontrar una gran vulnerabilidad en el MD5. Otra forma es que algunos sitios web tienen una gran cantidad de bases de datos de contraseñas, por lo que puede intentar en línea decodificar su cadena de hash MD5 o SHA1. Intenté un sitio web como http://www.mycodemyway.com/encrypt-and-decrypt/md5 y funciona bien para mí, pero esto depende totalmente de tu hash si ese hash está almacenado en esa base de datos, entonces puedes obtener la cadena real .


1
No, MD5 no es cifrado, ni siquiera cifrado unidireccional (lo que no tiene sentido en primer lugar).
Maarten Bodewes

@MaartenBodewes Ese es mi error, no es una función de cifrado, es una función hash Gracias.
Rafi Ahmad
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.