¿Debe un valor hash cifrado ser más grande que la contraseña desde la que se generó?

4

Estaba leyendo un libro llamado Introducción a la teoría y práctica de la seguridad de redes, y encontré el siguiente párrafo:

  

Tablas de arco iris

     

Una tabla de arco iris es una tabla de dos columnas construidas de la siguiente manera:   ser una función que asigna un hash cifrado de una contraseña a una cadena en   El dominio de posibles contraseñas. Esta función se conoce como   función de reducción, para la longitud de una contraseña es generalmente más corto   que la longitud de su valor hash cifrado .

Noté la palabra normalmente, pero me estaba preguntando:

¿ encrypted_hash < password significa que será más fácil encontrar una forma de descifrar el hash?

¿Por qué es eso? ¿Por qué no?

    
pregunta Dex 05.11.2015 - 12:26
fuente

4 respuestas

8

Lo primero es lo primero: esto NO es cifrado. Esto es hash. Si su libro habla de "hash cifrado", entonces ese libro está confundido y, por lo tanto, confuso. En particular, las contraseñas con hash nunca se "descifran", ya que no están cifradas en primer lugar.

Una función hash criptográfica ofrece un tamaño de salida fijo. En el caso de contraseñas , uno tiene que hacer algo específico llamado "password-hashing", que tiene su propia teoría (consulte esta respuesta para más detalles). Sin embargo, el principio principal todavía está allí: al verificar una contraseña entrante, la contraseña se convierte en un valor x , y ese x se compara con el valor que se almacenó. Si la contraseña es la correcta, se obtiene el mismo x . Sin embargo, si se ingresó una contraseña incorrecta, se obtiene otro valor x ', que es distinto de x con alta probabilidad .

Este es el punto importante aquí: un atacante aún podría tener (mucha) suerte y, en lugar de enviar la contraseña correcta, podría en teoría tropezar con otra contraseña distinta que, por pura casualidad, arrojaría el mismo valor de hash.

Por supuesto, no queremos que ocurra algo así, y la mejor manera de hacer que ese evento sea totalmente improbable es hacer que estos valores x (es decir, la salida de la función hash) sean lo suficientemente grandes como para Mala suerte de no ocurrir en la práctica. Las funciones hash existentes tienen un tamaño de salida que suele ser de 16 bytes (128 bits) o más. Esto también se aplica a las funciones de hashing de contraseñas; p.ej. bcrypt genera 192 bytes.

(Para aumentar el efecto, las salidas de hash son binarias, pero a menudo están codificadas en Base64 antes del almacenamiento en la base de datos, lo que aumenta el tamaño; además, las funciones de hashing de contraseña necesitan algunos parámetros adicionales, por ejemplo, un salt las cuales, en algunas funciones, también están codificadas en la salida, expandiendo aún más la salida.)

Las contraseñas elegidas por el usuario rara vez superan una docena de caracteres de longitud, por lo que, en general, la salida de hash será mayor. Sin embargo, las funciones de hash pueden usar entradas grandes, por lo que no hay intrinsic por lo que las salidas de hash siempre deben ser más grandes que las contraseñas. Simplemente sucede que necesitamos, para frustrar al "atacante afortunado" descrito anteriormente, un tamaño de salida que es "suficientemente grande", y que "suficientemente grande" es mayor que el tamaño promedio de las contraseñas elegidas por los usuarios humanos.

    
respondido por el Thomas Pornin 05.11.2015 - 15:09
fuente
3

Las tablas de arco iris son un elemento de TMTO (Time-Memory-Trade-Off) por el cual los hash de contraseña se calculan previamente, pero no se almacenan como el hash mismo. Para almacenar una contraseña de esta forma, necesita un punto de inicio T0. En T, aplica la función hash de contraseña y obtiene H. Ahora, la función de reducción se aplica para obtener un T1 nuevo. Este procedimiento se repite un tiempo definido y solo se almacenan en la tabla T0 y Tn (el último nodo). En un ataque, obtiene el hash de la contraseña de la base de datos de la contraseña, aplica la función de reducción y verifica si es igual a un Tn conocido. Si es así, inicia esa línea y calcula el hash de contraseña de T0. Después de cada hash, verifica si el resultado es igual al hash que quieres conocer de la base de datos. Si ese no es el caso, aplique la función de reducción y continúe computando a través de "Me gusta" en la generación inicial.

¿Por qué la longitud de una contraseña suele ser más corta que la longitud de un hash? Bueno, eso se debe a que los humanos son muy malos para memorizar las contraseñas. Incluso cuando les permitiste elegir una contraseña sin complejidad, muchos eligieron "bienvenido" o "contraseña", que tienen 49 y 56 bits de longitud respectivamente. Pero incluso con MD5, su hash de contraseña sería de 128 bits y con SHA2 probablemente de 256 o incluso 512 bits de longitud. Por lo tanto, es seguro decir que una contraseña suele ser más larga que un hash de contraseña.

    
respondido por el Zonk 05.11.2015 - 12:52
fuente
1

Esto tiene más que ver con la naturaleza de los seres humanos, que a menudo eligen contraseñas cortas que se pueden recordar. Se realiza un gran esfuerzo para almacenar contraseñas tan cortas (débiles) de manera segura, la ampliación de la clave es una de las medidas para manejar contraseñas cortas, no sería necesario para contraseñas largas y seguras.

La salida de un hash debe permitir suficientes combinaciones, por lo que un atacante no puede crear una tabla de búsqueda con todos los posibles resultados, y para evitar muchas colisiones, esto requiere una longitud mínima. Por lo tanto, la longitud de la contraseña suele ser más corta que la longitud de su hash.

    
respondido por el martinstoeckli 05.11.2015 - 12:51
fuente
1

Cuando una contraseña tiene una entropía más alta que el hash, se debilita haciéndolo. La razón es que cuando se realiza un ataque de fuerza bruta, es más probable que encuentre una colisión aleatoria que la contraseña original, y se aceptará una colisión aleatoria tal como lo haría la contraseña.

Sin embargo, la mayoría de las funciones hash utilizadas comúnmente para las contraseñas de hash tienen una entropía que es muchos órdenes de magnitud más alta que cualquier contraseña que un ser humano normal pueda recordar ( excepto algunas personas extraordinarias ).

    
respondido por el Philipp 05.11.2015 - 17:33
fuente

Lea otras preguntas en las etiquetas