2017-09-27 1 views
0

je regardais l'exemple de code dans Bcrypt docs:Comment le hachage de noeud/comparer le travail puisque le sel est inconnu

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { 
    // Store hash in your password DB. 
}); 

Ce que je ne comprends pas comment je compare les mots de passe si je ne sais pas les sels?

bcrypt.compare(myPlaintextPassword, hash, function(err, res) { 
    // res == true 
}); 

Après quelques lectures, j'ai appris que le hash contient déjà le sel et le coût. Mais si c'est le cas, une fois un hacker, obtient ce hash il peut déjà bruteforce les mots de passe peut-être en utilisant des tables arc-en-ciel ou quelque chose?

Est-il préférable de stocker le haschisch et le sel séparément?

Est-ce une façon sécurisée de gérer les mots de passe?

Répondre

1

Vous avez mal compris la sécurité offerte par un sel. Il n'y a aucune attente ou intention que le sel soit gardé secret d'un attaquant - si un attaquant obtient les mots de passe hachés, ils auront aussi le sel. Mais cela les empêche toujours d'utiliser une table arc-en-ciel ou une autre attaque pré-calculée, car ils n'auront pas de table arc-en-ciel générée avec ce sel spécifique. Ils peuvent exécuter une attaque en force brute, bien sûr, mais bcrypt a d'autres fonctionnalités pour rendre cela difficile.