Cómo usar la contraseña salt de la manera correcta [duplicar]

1

Entiendo la idea básica de las sales de contraseña.

  1. Se genera una cadena de datos 'aleatoria'
  2. anteponer estos datos a una contraseña de usuario
  3. almacene la contraseña y la sal (sal puede que incluso en forma 'clara')

Me gusta en el siguiente escenario: Tiene una aplicación móvil del lado del cliente y una aplicación de servidor con una base de datos. El usuario se registra con un nombre de usuario y contraseña utilizando la aplicación móvil. La contraseña obtiene un valor de sal añadido y se almacena como hash en el lado del servidor. La sal también debe almacenarse en el lado del servidor, porque no confiaría en absoluto en el cliente móvil. Y la sal debe estar conectada de alguna manera a la cuenta de usuario correcta. Así que supongamos que se almacena en la misma tabla de usuario junto a la contraseña.

¿Cómo podría el uso de un salt en este caso prevenir un ataque (por ejemplo, un ataque de diccionario)? Si el atacante ya tiene acceso al servidor de la base de datos, sería fácil obtener la sal. Si el atacante usa la interfaz de la aplicación del servidor de una manera adecuada, la sal también se aplicaría a sus 'intentos de ataque para iniciar sesión'. Tal vez me esté perdiendo algún punto importante de cómo este tipo de ataque se lleva a cabo usualmente. ¿O este sistema solo sería seguro si la sal y el hashing se ejecutaran directamente en el cliente?

    
pregunta little_planet 27.01.2016 - 14:37
fuente

3 respuestas

0

La inclusión por sí sola no impide un ataque de diccionario contra la propia contraseña. Pero hace que los ataques de tabla arco iris o de contraseña común contra el hash sean mucho más difíciles. Si usa un PBKDF en lugar de un hash simple o HMac, un ataque de diccionario contra la contraseña también puede resultar inviable.

P.S .: La sal no es nada que se mantenga en secreto. Su único propósito es aleatorizar el hash y hacerlo único en otro factor que no sea la contraseña elegida por el usuario.

    
respondido por el marstato 27.01.2016 - 14:45
fuente
0
  

¿Cómo podría el uso de un salt en este caso prevenir un ataque (por ejemplo, un ataque de diccionario)?

El propósito de un salt es aumentar el trabajo de cómputo que debe realizar el atacante asegurándose de que la misma contraseña tenga un hash diferente para diferentes usuarios.

Digamos que tienes 1,000 usuarios. Y digamos que el atacante usa un diccionario de 100,000 palabras para probar como contraseñas. Si no hay sales, debe codificar las 100,000 palabras y compararlas con los hashes almacenados de sus 1,000 usuarios; el trabajo computacional es 100,000 operaciones de hash.

Por otro lado, si esos usuarios son salados, entonces él debe hash 100,000 palabras multiplicado por 1,000 valores de sal para un total de 100,000,000 operaciones hash.

Considere que user_a y user_b usan 'hello123' como su contraseña. Si no se usa sal, ambos tendrían el mismo hash:

f30aa7a662c728b7407c54ae6bfd27d1

Ahora consideremos donde cada usuario tiene un salt ("1" en el caso de user_a, y "2" en el caso de user_b). La contraseña salt + se procesará en dos valores separados:

1e081602cd8b58d2fbb83b9d5c3511ee
e91627dc5b332b288e98cb82194cae06

y ahora, si el atacante tiene suerte y adivina uno, no los habrá adivinado.

    
respondido por el gowenfawr 27.01.2016 - 14:48
fuente
0

Salt no evita los ataques de diccionario. Salt ralentiza los ataques del diccionario.

Imagina que tengo una base de datos con varios usuarios y contraseñas:

  • user1:2ac9cb7dc02b3c0083eb70898e549b63
  • user2:60bd8ed7a768e8bd6925beb0a691aadb
  • user3:2ac9cb7dc02b3c0083eb70898e549b63
  • user4:8e601d1cd9d9ea079d8f15a0414e5d2b
  • user5:306578f0e3e22fc26e9295069d9961b1

Usted no sabe cuáles son las contraseñas, pero puede ver, dado un poco de atención, que user1 y user3 tienen la misma contraseña, aunque esté oculta. Por lo tanto, puede buscar hashes comunes e intentar romperlos, sabiendo que obtendrá un puñado de usuarios.

Si tengo la misma base de datos, con las mismas contraseñas, pero con sales únicas para cada una (en este caso, he agregado el nombre de usuario):

  • user1:08df37a942cb96598d8b459861bbcb45
  • user2:ed763cc6753bde74ad1ea491e31882dc
  • user3:95f6430be7989dc73dac21407817c048
  • user4:a01805e1f7d1f88e9b0d8eab8f1aebb6
  • user5:b913e9c11863bf6f9c49777a45dcc3ce

Ahora, no puede saber si alguno de los usuarios está usando la misma contraseña que otros. Tu única opción para intentar romper contraseñas es intentar descifrar cada una de ellas.

Si sé que se han tomado mis datos, les diré a mis usuarios que cambien sus contraseñas. Sin embargo, en el primer caso, es casi seguro que obtendrás algunos resultados bastante rápido para contraseñas débiles, y te darán acceso a varias cuentas.

En el segundo caso, aún obtienes las claves de acceso débiles, pero solo obtienes una cuenta para cada una. Eso me da un poco de búfer para decirle a mis clientes y, con suerte, se verán afectados menos de ellos.

Y eso es antes de considerar que para algunas contraseñas comunes, la experiencia les dará a los atacantes el conocimiento de los contenidos basados en hashes comunes. El usuario 1 en este caso usa Password1 , y estoy seguro de que algunos de los visitantes de esta página Habrá notado eso casi al instante (es solo un hash MD5).

La sal también restringe el uso de tablas de arco iris, aunque estas parecen ser menos populares en la actualidad. Esto podría deberse a un mayor uso de sal aleatoria.

    
respondido por el Matthew 27.01.2016 - 14:48
fuente

Lea otras preguntas en las etiquetas