Où devrais-je créer un mot de passe sel

J'ai cherché un endroit préféré pour créer un mot de passe.

Pour moi, il est logique de créer le mot de passe au niveau de la database et de faire le hachage du mot de passe entré + sel au niveau de la database.

Mais comme je suis un expert en security de connection, je voulais savoir quel est le meilleur endroit pour créer le sel lui-même.

D'après ce que j'ai lu, j'ai créé une procédure stockée qui prend un userlogin et un password et compare la concaténation de sel stockée pour valider si le mot de passe entré est correct.

Ce que je dois savoir maintenant, c'est où le mot de passe doit-il être créé sur un nouveau count d'user?

Mon intention est d'avoir un mot de passe non remboursable si l'user l'oublie. S'ils l'oublient, cela leur donne un temp et nécessite ensuite un changement après. De plus, si le mot de passe change, je veux aussi changer le sel en conséquence.

Je n'ai aucune illusion de security totale, je veux seulement atténuer l'opportunité.

L'endroit pour générer le sel et pour hacher le mot de passe, devrait être dans le code, pas dans la database.

Pour hacher les passwords, vous avez besoin d'une fonction de dérivation de key lente comme BCrypt ou PBKDF2, mais la plupart des bases de données n'ont pas d'implémentation de telles fonctions. Ces fonctions ont un facteur de coût qui contrôle le time nécessaire pour calculer la valeur de hachage (le plus long est le plus sûr contre le forçage brutal). Le sel ainsi que le facteur de coût sont généralement stockés dans la même string que le mot de passe, de sorte que vous n'avez besoin que d'un seul champ pour stocker le hachage.

Pour vérifier le mot de passe, vous devez d'abord chercher avec le nom d'user pour le mot de passe, puis la fonction peut extraire le sel utilisé et le facteur de coût, et enfin le mot de passe entré peut être haché avec les mêmes parameters de comparaison.

Il y a une autre raison de le faire dans le code, les systèmes de mot de passe doivent passer à des algorithms plus forts ou doivent augmenter le facteur de coût à l'avenir, il est alors plus facile de gérer la rétrocompatibilité dans le code.