Je fournirai une interprétation légèrement différente à ce sujet.
Je stocke toujours le sel mélangé avec le hachage du mot de passe salé.
Par exemple, je placerai la première moitié du sel avant le hachage salé du mot de passe, et la dernière moitié du sel après le hachage salé du mot de passe. L'application est consciente de cette conception et peut donc récupérer ces données et obtenir le hachage de sel et de mot de passe salé.
Ma justification de cette approche:
Si les données de mot de passe / de hachage sont compromises et tombent entre les mains d'un attaquant, l'attaquant ne saura pas ce qu'est le sel en regardant les données. De cette façon, un attaquant ne peut pratiquement pas effectuer une attaque par force brute pour obtenir un mot de passe correspondant au hachage, car il ne connaît pas le hachage pour commencer et n'a aucun moyen de savoir quelles parties des données sont des parties du sel, ou parties du hachage de mot de passe salé ( sauf s'il connaît la logique d'authentification de votre application ).
Si le hachage de mot de passe salé est stocké tel quel, une attaque par force brute peut être effectuée pour obtenir un mot de passe qui, lorsqu'il est salé et haché, produit les mêmes données que le hachage de mot de passe salé.
Cependant, par exemple, même si le hachage du mot de passe salé a été stocké tel quel, mais pré-suspendu avec un seul octet aléatoire, tant que l'attaquant ne sait pas que ce premier octet doit être rejeté, cela augmenterait également la difficulté d'attaque. Votre application devrait ignorer le premier octet des données lorsqu'elle est utilisée pour authentifier votre utilisateur.
La conclusion à cela ..
1) Ne stockez jamais les données que votre application d'authentification utilise sous leur forme exacte.
2) Si possible, gardez votre logique d'authentification secrète pour plus de sécurité.
Allez plus loin ..
Si vous ne pouvez pas garder secret la logique d'authentification de votre application - beaucoup de gens savent comment vos données sont stockées dans la base de données. Et supposez que vous avez décidé de stocker le hachage de mot de passe salé mélangé avec le sel, avec une partie du sel précédant le hachage de mot de passe salé et le reste du sel l'ajoutant.
Lors de la génération du sel aléatoire, vous pouvez également décider de manière aléatoire quelle proportion de votre sel vous stockerez avant / après le hachage du mot de passe salé.
Par exemple, vous générez un sel aléatoire de 512 octets. Vous ajoutez le sel à votre mot de passe et obtenez le hachage SHA-512 de votre mot de passe salé. Vous générez également un entier aléatoire 200. Vous stockez ensuite les 200 premiers octets du sel, suivis du hachage du mot de passe salé, suivi du reste du sel.
Lors de l'authentification de la saisie du mot de passe d'un utilisateur, votre application passera sur la chaîne et supposera que le premier 1 octet des données est le premier 1 octet du sel, suivi du hachage salé. Cette passe échouera. L'application continuera en utilisant les 2 premiers octets des données comme les 2 premiers octets du sel et répétera jusqu'à ce qu'un résultat positif soit trouvé après avoir utilisé les 200 premiers octets comme les 200 premiers octets du sel. Si le mot de passe est incorrect, l'application continuera d'essayer toutes les permutations jusqu'à ce qu'aucune ne soit trouvée.
Les avantages de cette approche:
Sécurité accrue - même si votre logique d'authentification est connue, la logique exacte est inconnue au moment de la compilation. Il est pratiquement impossible d'effectuer une attaque par force brute, même en connaissant la logique exacte. Des longueurs de sel accrues augmenteront encore la sécurité.
Les inconvénients de cette approche:
Étant donné que la logique exacte est déduite au moment de l'exécution, cette approche est très gourmande en ressources processeur. Plus la longueur du sel est longue, plus cette approche est gourmande en CPU.
L'authentification de mots de passe incorrects entraînera le coût le plus élevé du processeur. Cela peut être contre-productif pour les demandes légitimes, mais augmente la sécurité contre les attaquants.
Cette approche peut être mise en œuvre de différentes manières et peut être rendue encore plus sûre en utilisant des sels de largeur variable et / ou des hachages de mots de passe salés.