forma óptima de saltear la contraseña?

5

¿Una buena forma de saltear la contraseña?
He leído algunas respuestas relacionadas con la contraseña de salazón. Pero empecé a confundirme. Encontré algunas funciones que la gente usaba para generar sal, como:

Hay tantas funciones ahí fuera, ¿entonces cuál necesito usar?


y una mini pregunta:
Lo que sé es que la sal debe ser lo más aleatoria posible para la contraseña de cada usuario. Actualmente estoy usando bits pseudoaleatorios (como en el tercero en la lista anterior) para generar sal en bcrypt- > hash (sal + contraseña) y almacenar la sal junto con la contraseña en la misma fila en mysql. ¿Estoy implementando esto mal?

    
pregunta Tian Loon 06.09.2012 - 06:36
fuente

3 respuestas

7

Para que sea eficaz, una sal debe ser aleatoria (impredecible) y única (por lo tanto, un nonce). No tiene que ser muy largo (aunque eso no duele).

Su implementación es cómo se debe manejar una sal. Sin embargo, bcrypt ya incluye un salt, por lo que sus esfuerzos son un poco redundantes. Sin embargo, definitivamente no duele nada.

    
respondido por el Jeff Ferland 06.09.2012 - 08:39
fuente
6

Normalmente, si recuerdo correctamente, Bcrypt tiene su propia sal integrada. Por lo tanto, no es necesario que defina su propia sal, ya que Bcrypt genera sales al hacer hash y las almacena con la salida.

De stackoverflow :

Almacenado en la base de datos, un bcrypt "hash" podría tener este aspecto:

  

$ 2a $ 10 $ vI8aWBnW3fID.ZQ4 / zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

  • 2a identifica la versión del algoritmo bcrypt que se utilizó.
  • 10 es el factor de costo; Se utilizan 2 10 iteraciones de la función de derivación de claves (lo cual no es suficiente, por cierto. Recomendaría un costo de 12 o más)
  • vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa es la sal y el texto cifrado, concatenado y codificado en una Base-64 modificada. Los primeros 22 caracteres se decodifican a un valor de 16 bytes para la sal. Los caracteres restantes son texto cifrado que se comparará para la autenticación.
  • $ se usan como delimitadores para la sección del encabezado del hash.

Este ejemplo se tomó de la documentación de para la implementación de ruby de Coda Hale.

    
respondido por el Lucas Kauffman 06.09.2012 - 08:35
fuente
3

Una sal debe ser única . No tiene que ser nada más (algunos algoritmos de hash de contraseñas tienen requisitos específicos sobre la longitud de la sal, pero, en general, es de forma libre).

La singularidad debe entenderse en todo el mundo y durante todos los siglos. Idealmente. Ser exclusivo de su servidor no es totalmente suficiente (un atacante podría intentar atacar varios servidores a la vez, por el costo de atacar a uno). Ser único en un momento dado no es totalmente suficiente (por ejemplo, si reutiliza el salt cuando un usuario cambia su contraseña, un atacante podría intentar atacar tanto la contraseña antigua como la nueva por el costo de una contraseña esfuerzo de craqueo).

Una forma fácil de obtener el tipo correcto de singularidad es aleatoriedad . Ser impredeciblemente aleatorio no es necesario para una sal, pero si la sal es una secuencia de al menos 128 bits (16 bytes) que se obtiene de un PRNG criptográficamente fuerte, entonces obtendrá la singularidad "gratis" con una probabilidad abrumadora (y eso es lo suficientemente bueno).

(La aleatoriedad imprevisible es un requisito para otros objetos que a veces se llaman incorrectamente "sales", como IV para el cifrado CBC; supongo que cuando dices "salt" realmente estás hablando de contraseña hashing.)

    
respondido por el Tom Leek 06.09.2012 - 13:21
fuente

Lea otras preguntas en las etiquetas