bcrypt ¿no es necesario almacenar sal?

4

Estoy confundido con bcrypt, creo que necesitaría almacenar mi sal, y luego comparar mi contraseña de texto sin formato + sal con la contraseña con hash, sin embargo, de la documentación no parece que sea necesario almacenar la sal en absoluto . De hecho, utilicé este código para crear una contraseña salt y hash:

  let salt = await bcrypt.genSalt(10);

  const saltpasshash = await new Promise((resolve, reject) => {
    bcrypt.hash(plain_text_password, salt, function(err, hash) {
      if (err) reject(err)
      resolve(hash)
    });
  })

  //NOTE I SAVE saltpasshash as users pass and the salt in a separate field in the users table.

Esto funciona, lo que me confunde es que devolverá un resultado válido si lo comparo de la siguiente manera:

valid = await bcrypt.compare(plain_text_password, user.saltpasshash);

Estoy confundido en cuanto a por qué esto sería válido cuando no estoy proporcionando la sal, y si es así, ¿por qué almacenar la sal en absoluto?

    
pregunta edencorbin 28.04.2018 - 16:33
fuente

1 respuesta

4

De una descripción de bcrypt en Wikipedia :

  

... El resto de la cadena de hash incluye el parámetro de costo, un sal de 128 bits (Radix-64 codificado como 22 caracteres) y 184 bits de el valor hash resultante (Radix-64 codificado como 31 caracteres)

Por lo tanto, la sal se incluye automáticamente en la cadena de salida, lo que significa que no hay necesidad de agregarla usted mismo.

    
respondido por el Steffen Ullrich 28.04.2018 - 16:47
fuente

Lea otras preguntas en las etiquetas