¿Se puede saber si el resultado de hash ha cerrado una conjetura de contraseña?

74

Últimamente he estado leyendo acerca de la administración de contraseñas (¡cosas muy interesantes!) y me preguntaba qué tan diferentes serían los hashes para cadenas similares.

¿Es posible saber si una suposición de contraseña estaba cerca comparando el hash resultante con el hash real?

Por ejemplo, si la contraseña real es "password123" y un hacker intenta con "Password123", "password1234", "password124", etc., los hashes generados serían lo suficientemente similares al hash real que el hacker o su ¿La computadora podría decir que estaban en el camino correcto?

Supongamos que el pirata informático conoce cualquier sal, pimienta, polvo de cayena, adobo, lo que sea ... Si intentan la contraseña correcta, generarán un hash correspondiente.

(Creo que esto puede variar dependiendo de la función hash utilizada, pero no lo sé con seguridad).

    
pregunta elmer007 15.09.2016 - 22:50
fuente

9 respuestas

159

No, no puedes determinar qué tan cerca adivinaste viendo el hash. Una función hash está diseñada con esto en mente: un solo bit cambiado en la entrada debe cambiar muchos bits en la salida. Se llama efecto de avalancha .

Los siguientes son hashes SHA1 para algunas de sus contraseñas de ejemplo:

cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123

b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123

2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124

115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple

abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple

Un solo cambio de bit cambiará completamente el resultado de hash. De hecho, en un caso ideal para cada bit de cambio de entrada, cada bit de salida se cambiará con un 50% de probabilidad.

    
respondido por el ThoriumBR 15.09.2016 - 23:12
fuente
14

No, gracias al efecto de avalancha, incluso un solo cambio de bit en la entrada debería crear una gran diferencia significativa en la salida.

También estamos hablando de funciones de hashing como md5 u otras ... Dado el tamaño de entrada, el tamaño de salida no cambiará. En md5, si su tamaño de entrada es de 2 bits o 2000 bits, su salida siempre será de 32 dígitos en alfanumérico (formato hexadecimal). Por lo tanto, es casi imposible para el usuario normal adivinar el tamaño de la entrada, incluso si tiene el hash de salida de md5, adivinar la contraseña es mucho más allá del alcance para el usuario normal, todavía hay formas con la computación paralela de gama alta mediante la aplicación de algoritmos y muchas permutaciones y combinaciones para descubrir una de las posibles entradas si tiene el código hash ...!

md5 Output:
password123  = 482c811da5d5b4bc6d497ffa98491e38
Password123  = 42f749ade7f9e195bf475f37a44cafcb
password1234 = bdc87b9c894da5168059e00ebffb9077

Los resultados anteriores muestran el efecto de avalancha.

    
respondido por el Surendra Patil 16.09.2016 - 00:31
fuente
13

Para agregar un elemento adicional a las respuestas anteriores, el punto entero de una función hash es no eliminar el tipo de información de la pregunta, si pudiera determinar cualquier cosa Acerca de la similitud de la forma de las entradas que comparan las salidas, que representa una falla de la función hash.

No es solo que las funciones hash realizan algún trabajo y, por cierto, no puedes averiguar nada acerca de las entradas, el trabajo de la función hash es darte cero información sobre las entradas, y si puedes encontrar algo acerca de las entradas al comparar dos salidas, eso violaría ese principio.

    
respondido por el Jason 16.09.2016 - 19:06
fuente
7

Depende de la función hash que uses. Ya que especificó un hash contraseña , luego inequívocamente no , nunca desearía usar una función de hash para las contraseñas que filtraron cualquier tipo de información. El hash simplemente debe coincidir o no coincidir y eso es todo.

Dicho esto, existen funciones hash que proporcionan información de similitud; se proporciona más información en esta respuesta .

    
respondido por el TTT 16.09.2016 - 17:18
fuente
4

No. No debería haber ninguna relación con los datos que entraron en la función hash y lo que sale.

Por ejemplo, aquí está 'hola' en MD5:

5d41402abc4b2a76b9719d911017c592

Y aquí está 'Hola':

8b1a9953c4611296a827abf8c47804d7
    
respondido por el Joshua Hunter 15.09.2016 - 23:08
fuente
1

Esto es un poco inverosímil, pero en general no, no hay manera de determinar "qué tan correcta" es una conjetura de contraseña a partir de un valor hash. El escenario más cercano que se me ocurre sería cuando los segmentos de la frase de paso se dividen y se procesan por separado, como en LMhash . Esta situación le permitiría al atacante obtener información de las secciones correctas de la contraseña, pero no permitiría que el atacante deduzca "qué tan cerca" estaba cada segmento de ser correcto.

Otros usuarios han brindado una excelente descripción del hash y el efecto de avalancha, ¡así que no voy a entrar en ello!

    
respondido por el Flutter 20.09.2016 - 12:11
fuente
0

Sí, puedes, pero tienes que almacenar hashes para las fallas cercanas así como asociarlas, por lo que el trabajo y los recursos y el posible problema de seguridad aquí y allá. Es posible, por ejemplo, incluso ahora ver los "intentos" de la contraseña de texto sin formato en un sitio de Wordpress, si alguno de estos coincide con una contraseña de alta entropía conocida de otro lugar, podemos decir de dónde se pudo haber filtrado. Por supuesto, hay algoritmos para generar datos con clave errónea, y esto es ampliamente conocido debido a que la URL se pone en cuclillas en faltas de ortografía similares, sin embargo, deberá asignar puntajes para determinar qué tan cerca puede ser la coincidencia y qué tan cerca debe estar antes de estar alertado Esencialmente, si estas fueran palabras del diccionario, podrías clasificarlas por Soundex o similar.

    
respondido por el mckenzm 19.09.2016 - 08:45
fuente
0

Dependiendo de los algoritmos utilizados, puede ser posible calcular qué tan cerca está la contraseña y esto conduce a ataques de colisión que permiten descifrar la contraseña mucho más rápido que la fuerza bruta.

Según entiendo, es el caso de MD4 que se puede descifrar en milisegundos debido a fallas como esa. No analicé el exploit MD4, pero apuesto a que hay una ecuación de proximidad incrustada en él.

Tomemos un ejemplo idiota: una función hash que es la suma de los códigos ASCII de la contraseña. Las contraseñas AB y BA tendrán el mismo hash 131. Si la contraseña real es AB, el sistema también aceptará BA como la contraseña real. Un poco de ingeniería inversa mostrará una relación: a) cambiar cualquier letra a la siguiente agregará una en el hash; b) agregar una nueva A a la contraseña agrega 65 al hash. Y entonces la grieta está lista. La contraseña devuelta por el crack puede no ser la misma utilizada por el usuario, pero el sistema no notará la diferencia.

Sí, el objetivo de un algoritmo de hash criptográfico es evitar eso. Se supone que es impredecible y, por lo tanto, requiere fuerza bruta. Pero no siempre funciona como se esperaba. Las matemáticas no son perdonadas.

EDIT: MD4, MD5 y SHA1 ya están obsoletos debido a este tipo de ataques. Nuevos algoritmos nacieron para evitar esas vulnerabilidades. Y la comprobación de contraseñas hace un poco más que solo hash. La adopción de nuevos algoritmos no es tan rápida como queremos. Para Linux constantemente actualizado, las contraseñas de base deberían estar usando algoritmos modernos. Pero apuesto a que hay muchos sistemas en el mundo que ejecutan software de más de 10 años porque la nueva versión del sistema operativo puede no ser compatible con las aplicaciones más antiguas o simple por los costos de la licencia si se usa el software de pago. Apuesto a que muchos programas que tienen su propia base de datos de contraseñas separada del sistema tienen poca seguridad.

    
respondido por el Lucas 18.09.2016 - 22:56
fuente
-1

No mirando el hash, no.

Pero podrían imponer una fuerza bruta a unos pocos miles de contraseñas que están cerca de la contraseña ingresada.

Suponiendo, por supuesto, que pueden pasar por alto cualquier defensa que un sitio tenga contra alguien que hace numerosos intentos. Obviamente, el sitio en sí tiene esta capacidad, por ejemplo, si quiere verificar si una contraseña fue simplemente un dedo gordo y no contabilizarla con el número permitido de intentos.)

¿Cuántos intentos se necesitarían para una contraseña de n caracteres?

  • n para probar si el usuario está fatigando un personaje adicional.

  • (n + 1) * 95 para probar un carácter faltante en cualquier posición.

  • n para probar si el usuario escribe 1 minúscula en minúscula en lugar de mayúscula o desplazada (#) en lugar de no desplazada (3).

  • n (n-1) para probar 2 caracteres en minúscula / sin desplazamiento o viceversa.

  • < = 6n para probar si el usuario escribe inadvertidamente un carácter adyacente en lugar de este carácter. (Es decir, si se trata de una F, sustituya D R T G V C).

  • 12 para probar si una de las manos del usuario está desplazada en un lugar desde donde debería estar, más algunos caracteres más en el centro del teclado (Y G H B) que pueden ser golpeados con cualquiera de las dos manos.

Como puede ver, estos números no son prohibitivamente grandes, y tal análisis es factible.

    
respondido por el Harper 19.09.2016 - 03:34
fuente

Lea otras preguntas en las etiquetas