¿Cómo funciona una sal al azar? [duplicar]

42

No entiendo cómo puede funcionar el uso de un salt aleatorio para contraseñas de hash. Tal vez la sal aleatoria se refiere a algo más que las contraseñas de hash? Aquí está mi proceso de pensamiento:

  1. La sal se usa para agregar basura adicional al final de una contraseña antes de hacerla con un hash, para luchar contra la posibilidad de ser resquebrajado por una tabla de arco iris

  2. Sin embargo, para asegurarse de que aún puede verificar que la contraseña sea correcta, debe usar el mismo sal para cada contraseña antes de cifrarla para ver si coincide con el hash guardado para un determinado usuario

  3. Si se usa un salt aleatorio, ¿cómo puede verificarse esa contraseña nuevamente? ¿Se guarda la sal aleatoria en algún lugar para usar para cada cifrado? Me parece menos seguro si la sal se guarda junto con la contraseña con hash, en lugar de utilizar algún tipo de sal computarizada que un atacante no sabría si obtendría sus datos.

No estoy seguro de si me estoy perdiendo algo aquí, o si la sal al azar tiene que ver con un escenario diferente en el cifrado, y no tiene sentido en este caso en particular. ¿Cómo puede funcionar una sal aleatoria en el caso anterior de hash de contraseñas antes de cifrar?

    
pregunta Kevin DiTraglia 08.09.2014 - 16:38
fuente

2 respuestas

37
  

¿Se guarda la sal aleatoria en algún lugar para ser utilizado para cada cifrado?

  

Me parece menos seguro si la sal se guarda junto con la contraseña de hash, en lugar de usar algún tipo de sal computarizada que un atacante no sabría de forma inherente si obtuviera una retención de sus datos.

No lo es, porque lo único que hace y se inventó una sal es, como dijiste:

  

para luchar contra la posibilidad de ser rajado por una mesa de arco iris

y nada más. Agrega complejidad a una sola contraseña, y para cada contraseña en una base de datos, es única. Para verificar la contraseña, necesita almacenarla junto a ella. Esto no compromete la seguridad de esa contraseña única en lo más mínimo, el algoritmo hash sigue siendo tan seguro como sin un salt.

Pero, observando toda la base de datos, cada contraseña está mejor protegida contra los ataques de arco iris, porque el atacante debe calcular el hash individual con la sal respectiva por separado y no puede realizar operaciones en masa en ellos.

    
respondido por el Florian Peschka 08.09.2014 - 16:42
fuente
23

Para verificar la contraseña con hash sin sal, calcula MD5(privided_password) y se compara con los datos almacenados en la base de datos. Hace una búsqueda trivial en una tabla hash para descodificar muchas de sus contraseñas. (Sé que MD5 es débil para el almacenamiento de contraseñas, lo estoy usando solo porque los hashes son más cortos que SHA-512, por ejemplo).

Si usa sal, debe calcular MD5(provided_password + salt) y comparar con la base de datos. Como la sal es parte del hash, almacena la sal en la base de datos y la contraseña en el usuario.

Si 3 de sus usuarios tienen passw0rd como contraseña, y usa MD5 sin sal para cifrar sus contraseñas, y alguien roba su base de datos, puede ver algo como esto:

|username    | password                         |
|user1       | 71d00b760d017b2999eb54e32f41f592 |
|user7       | 71d00b760d017b2999eb54e32f41f592 |
|user13      | 71d00b760d017b2999eb54e32f41f592 |

Entonces, tan pronto como el hacker localiza una contraseña en una tabla hash (hay muchas en línea), conoce todas las demás.

El primer paso es usar una sal. Cada contraseña tendrá datos adicionales antes del hash, pero se usa el mismo salt:

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user13      | SALT | a66a96b36d78e452202c12d36b6d198c |

Al usar este esquema, el pirata informático tendrá que aplicar fuerza bruta a los hashes para obtener las contraseñas. Tomará algún tiempo, pero tan pronto como una contraseña sea crackeada, todas las demás serán reveladas también.

El siguiente paso es sal aleatoria . Cada contraseña tendrá una sal aleatoria diferente:

|username    | salt | password                         |
|user1       | SALT | a66a96b36d78e452202c12d36b6d198c |
|user7       | ASDF | 8062279f0ba04fa6ee41d0a9e04f4c93 |
|user13      | ABCD | 5743092bfb79214247c50c4102af0b99 |

En este caso, incluso si todos sus usuarios tienen la misma contraseña, el pirata informático no puede saber sin una fuerza bruta cada contraseña. En este ejemplo, la sal es muy corta, solo 4 bytes, pero puede usar sales más grandes (128 bytes o más) y aumentar la dificultad para forzar las contraseñas.

    
respondido por el ThoriumBR 08.09.2014 - 17:04
fuente

Lea otras preguntas en las etiquetas