Au travail, nous avons deux théories concurrentes pour les sels. Les produits sur lesquels je travaille utilisent quelque chose comme un nom d'utilisateur ou un numéro de téléphone pour saler le hachage. Essentiellement quelque chose de différent pour chaque utilisateur mais qui nous est facilement accessible. L'autre produit génère de manière aléatoire un sel pour chaque utilisateur et change chaque fois que l'utilisateur change le mot de passe. Le sel est ensuite chiffré dans la base de données.
Ma question est de savoir si la deuxième approche est vraiment nécessaire? Je peux comprendre d'un point de vue purement théorique qu'il est plus sûr que la première approche, mais qu'en est-il d'un point de vue pratique. À l'heure actuelle, pour authentifier un utilisateur, le sel doit être non chiffré et appliqué aux informations de connexion.
Après y avoir réfléchi, je ne vois tout simplement pas de réel gain de sécurité dans cette approche. Changer le sel d'un compte à un autre rend toujours extrêmement difficile pour quelqu'un d'essayer de forcer brutalement l'algorithme de hachage, même si l'attaquant savait comment déterminer rapidement ce que c'était pour chaque compte. Cela part de l'hypothèse que les mots de passe sont suffisamment forts. (Évidemment, trouver le hachage correct pour un ensemble de mots de passe où ils sont tous à deux chiffres est beaucoup plus facile que de trouver le hachage correct des mots de passe qui sont à 8 chiffres). Suis-je incorrect dans ma logique, ou y a-t-il quelque chose qui me manque?
EDIT: D'accord, voici la raison pour laquelle je pense qu'il est vraiment inutile de crypter le sel. (laissez-moi savoir si je suis sur la bonne voie).
Pour l'explication suivante, nous supposerons que les mots de passe sont toujours 8 caractères et que le sel est 5 et que tous les mots de passe sont composés de lettres minuscules (cela facilite simplement les calculs).
Avoir un sel différent pour chaque entrée signifie que je ne peux pas utiliser la même table arc-en-ciel (en fait, techniquement, je le pourrais si j'en avais une de taille suffisante, mais ignorons cela pour le moment). C'est la vraie clé du sel d'après ce que je comprends, car pour déchiffrer chaque compte, je dois réinventer la roue pour ainsi dire pour chacun. Maintenant, si je sais comment appliquer le sel correct à un mot de passe pour générer le hachage, je le ferais parce qu'un sel étend vraiment simplement la longueur / complexité de la phrase hachée. Je réduirais donc le nombre de combinaisons possibles que j'aurais besoin de générer pour "savoir" que j'ai le mot de passe + sel de 13 ^ 26 à 8 ^ 26 parce que je sais ce qu'est le sel. Maintenant, cela rend les choses plus faciles, mais toujours très difficiles.
Donc, sur le cryptage du sel. Si je sais que le sel est crypté, je n'essaierais pas de le décrypter (en supposant que je sache qu'il a un niveau de cryptage suffisant) en premier. Je l'ignorerais. Au lieu d'essayer de comprendre comment le déchiffrer, revenons à l'exemple précédent, je générerais simplement une table arc-en-ciel plus grande contenant toutes les clés du 13 ^ 26. Ne pas connaître le sel me ralentirait certainement, mais je ne pense pas que cela ajouterait la tâche monumentale d'essayer de déchiffrer d'abord le cryptage du sel. C'est pourquoi je ne pense pas que cela en vaille la peine. Pensées?
Voici un lien décrivant la durée de conservation des mots de passe sous une attaque par force brute: http://www.lockdown.co.uk/?pg=combi