¿Un salto demasiado largo reduce la seguridad de un hash de contraseña almacenado?

23

Supongamos que tenemos contraseñas con una longitud estadística de 7-8 caracteres. ¿Agregar una sal de 200 caracteres es menos seguro que una sal de 5 caracteres, debido a las entradas de función hash similares?

Me preguntaba: ¿qué pasaría si alguien intenta adivinar la sal mediante el uso de bruta forzando la sal con, por ejemplo, la contraseña "123456" u otra contraseña popular que se puede encontrar en el sistema o incluso en una contraseña conocida del propio pirata informático? cuenta?

    
pregunta Piotr Müller 25.11.2014 - 08:53
fuente

5 respuestas

47

Como Mike y Gumbo han mencionado en los comentarios, un salt no pretende agregar protección a las contraseñas incorrectas. Está destinado a evitar que los atacantes rompan toda la base de datos a la vez. La longitud de la sal no está destinada a agregar dificultad para romper las contraseñas almacenadas. Está pensado para garantizar que su sal sea razonablemente única en comparación con otras en Internet, y (si lo está haciendo bien) no hay dos de sus usuarios que tengan la misma sal.

Imagina que tienes 20 usuarios que tienen "dios" como contraseña. Considere los siguientes escenarios:

  1. Las contraseñas no tienen sal
    El atacante puede usar una tabla precomputada para romper la contraseña de un usuario en muy orden corta. Además de eso, una vez que tenga el primero de los 20, también tendrá los otros 19 ya que sus hashes serían idénticos.

  2. Las contraseñas son saladas. La sal utilizada es bastante corta. La misma sal se utiliza para todos los usuarios.
    Es posible que el atacante tenga que buscar un poco, pero posiblemente encuentre una tabla precomputada hecha específicamente para su configuración. Después de ese punto, vea el escenario 1.

  3. Las contraseñas son saladas. La sal usada es razonablemente fuerte. La misma sal se utiliza para todos los usuarios.
    Es probable que el atacante no encuentre una tabla precalculada para su sistema en Internet. Tendrá que hacer uno propio. Esto tomará un poco de tiempo extra. Sin embargo, una vez hecho esto, volveremos al escenario 1 nuevamente.

  4. Las contraseñas son saladas. La sal usada es razonablemente fuerte. Cada usuario tiene una sal única.
    Esto es lo que deberías estar haciendo. No solo el atacante no podrá encontrar una tabla precomputada para su sistema, sino que ni siquiera vale la pena dedicar tiempo a hacer la suya propia. Cualquier procesamiento previo que pudiera hacer solo funcionaría contra un usuario. Incluso si golpea a uno de los 20 usuarios mencionados anteriormente, no conocerá a los otros 19 porque todos los hashes serán diferentes. Por lo tanto, cada contraseña debe ser atacada individualmente, y eso tomará un tiempo si también está usando un algoritmo de hashing fuerte y lento como debería ser. Es probable que las contraseñas débiles se terminen comprometidas eventualmente. Solo le tomará al atacante un poco más de tiempo superarlos todos, y no tendrá que comprometer a los usuarios de una sola vez porque tienen la misma contraseña.

Por lo tanto, use sales largas y hágalas únicas por usuario. Pero no cuente con eso para ayudar a los usuarios individuales si usan "dios" como contraseña.

    
respondido por el Iszi 25.11.2014 - 09:47
fuente
15

Una sal demasiado larga no reducirá la seguridad. Una sal demasiado corta reducirá la seguridad.

A medida que la sal se vaya alargando la seguridad mejorará. En algún momento cruzará un límite, donde comenzará a obtener rendimientos decrecientes al aumentar la longitud de la sal. Y, finalmente, cruzará otro límite, donde una sal más larga no agrega ningún tipo de seguridad.

Sin embargo, como una sal más larga no tiene un costo significativo, hay pocas razones para dejar de aumentar la longitud hasta que llegue al segundo límite. Incluso si aumentara la longitud de la sal más allá de eso, el único inconveniente es un costo adicional menor en términos de tiempo de almacenamiento y procesamiento.

Lamentablemente, las sales se generan más a menudo con una longitud por debajo del más bajo de los dos umbrales.

Entonces, ¿cuáles son los dos umbrales?

El umbral inferior está determinado por el número de usuarios y el propósito de la sal, que es diferente para cada contraseña elegida por cualquier usuario. Si tomamos algunas estimaciones conservadoras, el número de usuarios en todo el mundo es inferior a 10 ^ 10, y cada usuario tiene contraseñas para menos de 10 ^ 2 sistemas y, a lo largo de su vida útil, cambia esta contraseña menos de 10 ^ 3 veces. Eso significa que en total habrá menos de 10 ^ 15 contraseñas. Dado esto, se podría concluir erróneamente que 50 bits de entropía en la sal son suficientes para garantizar que nunca se repitan dos sales, pero debido a la paradoja del cumpleaños, tenemos que duplicar ese número.

Entonces, una vez que la sal crece más de 100 bits, comenzamos a ver rendimientos decrecientes en términos de seguridad agregada. El umbral de 100 bits implicaba muchas adivinanzas. El siguiente umbral implica mucho menos adivinanzas. Más de 100 bits de entropía en la sal aún mejoran la seguridad, pero no mucho.

Sin embargo, una vez que la sal crece más que la salida de la función hash subyacente, no existe ninguna seguridad adicional para que no vuelva a funcionar. El umbral depende de la función de hash, estos varían de 128 a 512 bits para los hashes típicos.

Recuerde que las sales generalmente se generan con 6 bits de entropía por carácter, por lo que necesitaría 86 caracteres de sal para alcanzar los 512 bits de entropía.

    
respondido por el kasperd 25.11.2014 - 21:52
fuente
5

La única propiedad de una sal que es importante desde una perspectiva de seguridad es que es globalmente única . La longitud puede afectar cuán única puede ser la sal, pero es irrelevante desde cualquier otra perspectiva. Asumir que tiene un efecto positivo o negativo en cualquier cosa es pedirle a la sal que realice una función que nunca tuvo la intención de cumplir.

Por lo tanto, una sal debe ser lo suficientemente larga para asegurar razonablemente la singularidad, y eso es todo. Suponiendo que su sal tenga una buena singularidad, ya no afectará la seguridad de manera positiva o negativa, sino que con toda seguridad desperdiciará espacio de almacenamiento.

    
respondido por el Xander 25.11.2014 - 22:13
fuente
2

Otros han comentado sobre el uso correcto de sales y contraseñas, pero tal vez sea útil agregar una palabra sobre las funciones hash porque su pregunta parece sugerir una intuición algo incorrecta de la forma en que funcionan.

Por diseño, una buena función criptográfica de hash no debería permitirte adivinar qué tan similares fueron las entradas basadas en los valores de hash. De lo contrario, podría invertirse reduciendo gradualmente esta distancia, lo que sería mucho menos costoso que la simple suposición de fuerza bruta. Así que el hash (salt1 + "12345") no debería ser más similar al hash (salt1 + "67890") o al hash ("12345") que al hash (salt2 + "67890").

El punto principal de la sal es asegurarse de que las entradas (y, por lo tanto, el hash) no sean idénticas , incluso si dos cuentas utilizan la misma contraseña pero similitud No debería ser un problema.

    
respondido por el Relaxed 26.11.2014 - 13:29
fuente
0

La longitud de una sal sigue la ley de rendimientos decrecientes.

  • En ningún momento una sal se vuelve menos segura al ser más larga,

  • pero deja de ser significativo más seguro relativamente rápido.

Nunca se "quiebra" una sal: lo que estás descifrando es la contraseña con hash, a la que se agrega la sal. La sal simplemente aborda la amenaza de las tablas de arco iris: la capacidad de encontrar tablas de hashes previamente calculadas que le permiten omitir el laborioso proceso de forzar la fuerza bruta.

Para este propósito, todo lo que necesita son sales lo suficientemente largas como para que nadie haya creado tablas de arco iris integrales para todas las sales posibles. Y debido al costo de crear una tabla de arco iris y el crecimiento exponencial en el número de sales que tendría que calcular a medida que aumenta la longitud máxima de sal, este no es un requisito muy difícil: solo unos pocos caracteres de sal ya estarán muy probable que se asegure de que nadie haya calculado tablas arcoiris integrales sobre las sales de su formato.

Para elegir un valor aleatorio de la nada, las sales de, digamos, 16 caracteres hexadecimales o más serán bastante buenas, suponiendo que su método para seleccionarlas al azar no tenga defectos explotables.

Más allá de esto, el aumento de la seguridad se vuelve cada vez más insignificante.

    
respondido por el thomasrutter 27.11.2014 - 04:59
fuente

Lea otras preguntas en las etiquetas