J'ai du mal à comprendre l'utilité d'un sel pour un mot de passe. J'ai cru comprendre que sa principale utilité est d'entraver une attaque de type "rainbow table". Cependant, les méthodes que j'ai vues pour mettre en œuvre ce principe ne semblent pas vraiment rendre le problème plus difficile.
J'ai vu de nombreux tutoriels suggérant d'utiliser le sel comme suit :
$hash = md5($salt.$password)
Le raisonnement est que le hachage ne correspond plus au mot de passe original, mais à une combinaison du mot de passe et du sel. Mais disons que $salt=foo
y $password=bar
y $hash=3858f62230ac3c915f300c664312c63f
. Maintenant, quelqu'un avec une table arc-en-ciel pourrait inverser le hachage et obtenir l'entrée "foobar". Il pourrait alors essayer toutes les combinaisons de mots de passe (f, fo, foo, ... oobar, obar, bar, ar, ar). Cela pourrait prendre quelques millisecondes de plus pour obtenir le mot de passe, mais pas beaucoup plus.
L'autre utilisation que j'ai vue est sur mon système linux. Dans le fichier /etc/shadow, les mots de passe hachés sont en fait stockés. avec le sel. Par exemple, un sel de "foo" et un mot de passe de "bar" donneraient le résultat suivant : $1$foo$te5SBM.7C25fFDu6bIRbX1
. Si un hacker parvenait à mettre la main sur ce fichier, je ne vois pas à quoi sert le sel, puisque le hachage inverse de te5SBM.7C25fFDu6bIRbX
est connu pour contenir "foo".
Merci pour toute lumière que quelqu'un peut apporter sur ce sujet.
EDITAR : Merci pour votre aide. Pour résumer ce que je comprends, le sel rend le mot de passe haché plus complexe, ce qui le rend beaucoup moins susceptible d'exister dans une table arc-en-ciel précalculée. Ce que j'ai mal compris auparavant, c'est que je supposais qu'une table arc-en-ciel existait pour TOUS les hashs.