hash - password - sha1 encrypt
¿Cómo puede ser imposible "descifrar" un hash MD5? (13)
Además, dado que varias cadenas pueden crear el mismo hash MD5, debido a que se trata de menos datos que la cadena de entrada, ¿cómo sería mejor cualquier otro sistema hashing?
Se conoce un ataque contra MD5 que permite al atacante crear múltiples documentos con diferentes contenidos pero el mismo hash MD5. Este ataque es computacionalmente factible y, como demostración, se usó para "predecir" el resultado de una elección presidencial. (El atacante publicó un hash antes de las elecciones, luego reveló un documento con ese hash que da el nombre del ganador. Pero en realidad el atacante tenía un documento para cada candidato, todos con el mismo hash).
Un mejor sistema proporcionaría una garantía criptográfica, que es computacionalmente difícil de crear dos documentos distintos que tienen el mismo valor. SHA-1 puede ser tal sistema.
Un sistema aún peor permitiría un ataque por el cual se le da acceso a cualquier hash, podría crear un documento con ese hash. El venerable sistema CRC, que todavía se usa en muchos sistemas de hardware (piense en Ethernet), es vulnerable a este ataque. Al igual que MD5, es una función hash en la cual la salida no es reconstruible desde la entrada, pero dado cualquier resultado, es trivial construir un documento con una firma CRC-32 o CRC-64 dada. Peor aún, puede colocar cualquier texto que desee en dicho documento, luego obtenga el CRC que desee simplemente agregando basura al final.
No es coincidencia que CRC-32 se pueda calcular muy rápidamente, MD5 lleva mucho más tiempo, y SHA-1 tarda algo más que eso. Tanto los modelos de costo como los modelos de confianza son difíciles.
Una función hash realmente buena sería tan rápida de calcular como CRC y tan difícil de construir hashing de dos documentos con el mismo valor que SHA-1. No aguante la respiración ...
Posible duplicado:
¿Cómo es que los valores hash MD5 no son reversibles?
Estaba leyendo una pregunta sobre MD5 y me hizo recordar algo que me deja perplejo. Pregunta muy simple, y lo siento si no es buena. Simplemente no puedo entender cómo convertir algo en una cosa usando algún algoritmo, y no hay forma de convertirlo de nuevo usando el algoritmo al revés.
Como es esto posible?
Además, dado que varias cadenas pueden crear el mismo hash MD5, debido a que se trata de menos datos que la cadena de entrada, ¿cómo sería mejor cualquier otro sistema hashing?
Además, dado que varias cadenas pueden crear el mismo hash MD5, debido a que se trata de menos datos que la cadena de entrada, ¿cómo sería mejor cualquier otro sistema hashing?
Si bien es cierto que deben existir mensajes múltiples (incluso infinitos) que tengan el mismo hash, el objetivo de un hash criptográfico es hacer que no sea factible encontrar tales colisiones.
Usted podría pensar que uno podría encontrar colisiones calculando los hash de los mensajes aleatorios hasta que finalmente obtenga el mismo resultado dos veces. Sin embargo, estarías subestimando el tamaño del espacio de posibles valores hash.
Para MD5, el tamaño del hash es de 128 bits. El espacio de 128 bits es, parafraseando a Douglas Adams, grande. Realmente grande. Simplemente no vas a creer lo inmensamente grande que es. La cantidad de valores hash posibles es 2 128 , o 3.40282367 × 10 38 . ¡Eso es un 34 seguido de 37 ceros! Si pudieras contar hasta un billón en un segundo, aún tardarías 10 mil millones de milenios en contar todos los números de 128 bits.
Sin embargo, algunos algoritmos hash como MD5 tienen debilidades que permiten a los atacantes revertirlo (es decir, encontrar un mensaje con un hash dado) con un esfuerzo significativamente menor en comparación con solo los intentos de fuerza bruta. MD5 se considera completamente roto en este sentido.
Simplemente no puedo entender cómo convertir algo en una cosa usando algún algoritmo, y no hay forma de convertirlo de nuevo usando el algoritmo al revés.
Puedes convertir una vaca en una hamburguesa, pero no puedes convertir una hamburguesa en una vaca.
La transformación reduce los datos que existen al destruirlos, y esos datos no se pueden recuperar.
Aquí hay un paralelo:
Sume las edades de todos en su familia. Solo conserva los dos últimos dígitos.
Ahora dime que todas las edades se basan en ese único número.
Aquí hay una respuesta simple ...
Hay un número finito de valores de hash y un número infinito de valores de texto sin formato que se pueden cargar.
Por lo tanto, invertir un hash MD5 determinado daría como resultado un número infinito de posibles valores de texto sin formato.
Básicamente es porque la salida de MD5 contiene menos información que la entrada. Esto es básicamente lo que distingue a un algoritmo hash de un algoritmo de encriptación.
Aquí hay un ejemplo simple: imagine un algoritmo para calcular el hash de un número de 10 dígitos. El algoritmo es "devolver los últimos 2 dígitos". Si tomo el hash de 8023798734, obtengo 34, pero si todo lo que tiene es el 34, no podría decir cuál es el número original porque el algoritmo hash descarta 8 dígitos de información. Es similar con MD5, excepto que el hash se calcula a través de un procedimiento complejo en lugar de simplemente cortar parte de los datos.
Entonces, ¿cómo puede un hash ser mejor que otro? Por un lado, los algoritmos hash diferentes pueden ser más o menos resistentes a las colisiones (cuando dos entradas producen la misma salida). La probabilidad de una colisión está inversamente relacionada con la cantidad de posibles salidas hash. Las colisiones son una característica no deseada de los hash porque si los datos cambian, también quiere que el hash cambie, así que una forma de obtener un mejor algoritmo hash es usar un hash con más salidas posibles. En el ejemplo de los dígitos anteriores, tomar los últimos 4 dígitos en lugar de los últimos 2 dígitos reduce la probabilidad de una colisión con un hash dado (técnicamente llamado preimagen ) a 1 en 10000 en lugar de 1 en 100, por lo que es más probable que todos Los números de 10 dígitos en cualquier conjunto que tenga tendrán diferentes valores hash.
También está el problema de la seguridad criptográfica. Cuando desee utilizar un hash para asegurarse de que no se manipulen algunos datos, es conveniente que quien manipule no pueda predecir qué entradas producirán un resultado determinado. Si pudieran, podrían alterar los datos de entrada de tal forma que la salida (el hash) permanezca igual. Volviendo al ejemplo de los dígitos, digamos que voy a enviarle un correo electrónico con el número 1879483129 y es sumamente importante que este número no se modifique. Podría llamarte y decirte el hash del número, que sería 29, pero como el algoritmo de "últimos 2 dígitos" no es criptográficamente seguro, un pirata informático nefasto podría cambiar el número en el camino a, digamos, 5555555529 y no lo harías. No sé la diferencia.
Se ha demostrado que MD5 no es criptográficamente seguro (y SHA-1 también está comprometido ). Eso significa que es posible encontrar diferentes entradas que corresponden a cualquier salida dada. Sigue siendo un buen algoritmo para proteger contra volteos de bits aleatorios y similares, pero si existe la posibilidad de que alguien quiera corromper intencionalmente sus datos, debería usar algo más seguro, como SHA-256 o superior, probablemente como parte de un HMAC esquema .
Básicamente, las operaciones de bits involucradas significan que invertirlo sería técnicamente inviable. Para construir un conjunto de resultados, requeriría una complejidad de tiempo insana y una gran complejidad de memoria. No es imposible en absoluto, pero no tiene que ser así, simplemente está más allá del poder de incluso nuestras mejores supercomputadoras por una milla.
Considere la siguiente función: f (x) = x x. Ahora, dado que sabes f (x) = 25, ¿qué es x? Bueno, la respuesta podría ser 5 o la respuesta podría ser -5. No puede recuperar la entrada a f, porque existe algún valor en el rango de f tal que más de un elemento del dominio de f se correlaciona con ese valor bajo f. En consecuencia, la función f no es invertible. El mismo concepto se aplica a MD5; hay múltiples entradas al algoritmo MD5 que, a pesar de ser entradas diferentes, arrojan el mismo valor hash como resultado. En otras palabras, el algoritmo MD5, como f (x) = x x, no es uno a uno y, por lo tanto, no es una función invertible.
Sin embargo, esto no significa que no pueda recuperar la entrada a un MD5. Simplemente significa que no puede recuperar la entrada a MD5 con 100% de certeza. Para hacer esto más concreto, veamos nuevamente la función f (x) = x * x. Ahora, ¿y si te dijera que para cualquier entrada dada f la probabilidad de que sea positivo es del 99%? En ese caso, podría adivinar muy bien que un hash de 25 proviene de un valor de 5 y no de -5. Esta es, de hecho, la forma en que las personas pueden romper las funciones hash (incluyendo MD5, que resulta que no es una muy buena función hash criptográfica). Cuando se trata de contraseñas, hay ciertas contraseñas que se utilizan con mucha más frecuencia que otras contraseñas. Todo lo que necesita hacer es tomar el MD5 de esas contraseñas y compararlo con algo de hash, y si coinciden, entonces es una conjetura bastante razonable que proviene de esa contraseña.
También puede interesarle leer acerca de las funciones uno a uno , las funciones Inyectivas , las en.wikipedia.org/wiki/Cryptographic_hash_function , MD5 , SHA1 y los Secretos Do not Hash de Benlog Security Blog .
En respuesta a la segunda parte de su pregunta (una respuesta a la primera parte ha sido más que adecuada por otros): MD5 se considera débil debido a las pruebas de ataques contra el cifrado (es decir, los cambios que se pueden realizar en el plano -text que no da como resultado cambios en la suma de MD5). Es posible que otras técnicas de hashing no sean tan fácilmente susceptibles a colisiones de hash esencialmente arbitrarias (al menos tales colisiones arbitrarias no se han demostrado hasta ahora como posibles con el conjunto de hash SHA-2, etc.), y por lo tanto, un atacante es es menos probable que pueda replicar un hash hash en una técnica que no es MD5 (teóricamente, por supuesto, los ataques de colisión hash son posibles contra cualquier función de hash, no sería una función de hashing si este no fuera el caso; la pregunta es cuán fácilmente un atacante puede tener éxito al "falsear" un texto plano "correcto", es decir, uno que tiene el mismo valor hash).
Incidentalmente, la suma MD5 de un texto sin formato no es necesariamente segura porque contiene "menos" datos o es "con pérdida", sino porque, a partir de un texto llano arbitrario, calcula un valor de suma dentro de un rango fijo (para planos <128 bits, la suma MD5, de hecho, contiene más información que el texto sin formato ...), y, por lo tanto, un número (teóricamente infinito) de texto sin formato podría alinearse al mismo hash MD5.
Hmm, no quiero ser grosero, pero me parece que todas las respuestas sobre "menos información saliendo que entrando" pierden el sentido.
El uso principal de MD5, y códigos de hash criptográficos similares, es cifrar contraseñas. En ese caso, no me importa si es posible reconstruir la cadena original. Lo único que me importa es si puedo construir cualquier cadena que haga hash con el mismo valor.
Tomemos un ejemplo simplificado: supongamos que nuestro algoritmo hash fue "tomar los últimos dos dígitos". Entonces, si mi contraseña es "12345678", el código hash es "78". ¿Hay alguna manera de pasar de "78" a "12345678"? No. Pero si estoy pirateando contraseñas, no me importa si sé cuál fue tu contraseña original. Solo quiero una contraseña para dejarme entrar. Entonces, si supiera que este era el algoritmo, diría genial, usaré la contraseña "99978". Hace hash a "78", por lo que el algoritmo de validación de contraseña lo pasará, y yo estoy dentro.
Obviamente MD5 es mucho más difícil de revertir, incluso en este sentido de "cualquier cosa que tenga el valor correcto", luego un algoritmo simplista como "tomar los últimos dos dígitos". Pero, ¿es literalmente imposible? Eso me desconcierta, también. Tan seguro, la información se descarta en el camino. ¿Pero no podría revertir a un valor "cualquiera" al completar cualquier valor aleatorio en cualquier punto donde la información se descarta? No he visto el algoritmo real para MD5. Supongo que no es algo fácil de revertir, como cambiar todas las ventajas por minues o algo trivial como ese, o alguien lo hubiera hecho hace mucho tiempo. Por el hecho de que hay millones de piratas informáticos que han tratado de descifrar esto, incluso si es teóricamente posible, debe ser increíblemente difícil.
La entropía de la cadena aumenta, ya que parte de la información se pierde durante el proceso de hash. Esto significa que no hay suficiente información disponible para reconstruir la cadena original.
La mayoría de las respuestas no alcanzan el verdadero punto de la pregunta: las transformaciones hash no son lineales , y como tales son muy difíciles (pero no imposibles, dado el poder computacional y el tiempo suficientes) para revertir.
Piense en la dificultad relativa de cuadrar un número y obtener la raíz cuadrada. Agregue a eso que solo tiene información parcial y todos los bits que faltan son importantes para dar la respuesta correcta (no como en el ejemplo de recortar un número).
Si después de todo todavía no está seguro, intente por su cuenta revertir los pasos de MD5 o cualquier otra función hash criptográfica ;-)
Piensa sobre esto:
Tengo una cadena numérica, digamos que es "12345678".
Tengo un algoritmo hash, simplemente devuelve la suma de todos los números individuales, llamémoslo f ()
entonces, f ("12345678") = 1 + 2+ .. + 8 = 36.
Entonces la pregunta:
conocido f (x) = 36, ¿es posible obtener el valor original de x?
No podemos, porque f () es un algoritmo que causa la pérdida de información.
El MD5 es un algoritmo hash como f (), pero mucho más complejo.