Ce poste peut virer un peu trop loin de l'original de votre question, mais j'espère que vous le trouverez utile;
La sécurité est de renforcer les barrières et d'obstacles; la défense en profondeur. Il n'est pas vraiment sûr de hachage solution, seulement ceux qui sont difficiles à briser. C'est comme mettre un système d'alarme et de verrous de fenêtre dans votre maison, votre site moins attractif pour percer que quelqu'un d'autre.
De sel pour la crypte de l'algorithme n'est qu'une petite partie du problème de sécurité. Un seul sel signifie simplement qu'il y a une chose de moins à comprendre quand d'essayer de casser le mot de passe pour plusieurs utilisateurs. Une faible entropie de sel (tels que l'heure du serveur) le rend un peu plus difficile, et une haute entropie de sel rend plus difficile encore. Laquelle de ces utiliser, et si c'est quelque chose dont vous devez vous préoccuper principalement dépend à la fois de la sensibilité des données vous êtes à la protection, mais aussi ce que les autres mesures de sécurité en place. Un site qui donne juste un personnalisé prévisions météo pour une ville sélectionnée a évidemment moins de données sensibles que celui qui a l'adresse de votre domicile, de la mère nom de jeune fille, date de naissance et d'autres informations qui pourraient être utilisées à des fins d'identification.
Donc, c'est là le hic; un haut niveau d'entropie sel est encore un mauvais sel si c'est facile à obtenir.
Dans le monde réel, le stockage de sel dans la base de données (aléatoire ou non) est probablement moins sûre que l'utilisation d'une constante de sel et de l'enfouir loin de privé yeux dans un fichier inaccessible via le navigateur web. Tout en un unique et de haute entropie de sel est plus difficile à deviner, si vous les avez autorisés à root de se connecter à partir de n'importe quel serveur MySql et le mot de passe à 'mot de passe' il n'a pas vraiment d'importance! Contraste combien il est facile pour le crack de la base de données contre obtenir une connexion valide à votre serveur - qui est peut-être plus difficile de le faire discrètement, comme vous pouvez le mettre fail2ban et une pléthore d'autres vecteurs d'attaque watchers en place en fonction de votre configuration.
Vous pouvez combiner les deux approches, le stockage de l'emplacement d'un fichier contenant un utilisateur spécifique du sel dans la base de données, plutôt que le sel lui-même. Si le fait d'avoir à se fissurer à la fois le système de fichiers et de la base de données est justifiée dépend si la sensibilité des données que vous tentez de protéger les bons de souscription de surcharge.
Une autre alternative, la recommandation d'experts en sécurité pour stocker le nom d'utilisateur dans une base de données distincte (et, idéalement, une technologie différente) pour le mot de passe, et de référence entre les deux à l'aide d'un UUID. E. g. utiliser MySQL et SQLite. Cela signifie que les deux bases de données doivent être craqué (et c'est aussi pourquoi, de descendre de séparer trou de lapin pour le bien d'un exemple, vous ne devez pas stocker les détails de l'utilisateur et les numéros de carte de crédit dans la même base de données, puisque l'un n'est d'aucune utilité sans l'autre).
Notez que des Algorithmes tels que SHA-512 et Blowfish pouvez retourner le sel dans le cadre de leur hachage. Soyez prudent avec ces comme si vous stockez l'complet de hachage de vous donner l'algorithme, ce qui signifie qu'il y a deux chose en moins pour les pirates de la figure (le sel donne aussi loin de l'algorithme).
Assurez-vous d'appliquer des mots de passe forts et les noms d'utilisateur, de sorte que les attaques par dictionnaire ne pourront pas; je sais de dictionnaires pour tous les 6 alphanumériques combinaisons de nom d'utilisateur/ mot de passe entrées pour le MD5 et je pense qu'il ya plus que cela disponible pour toutes sortes d'algorithmes. Avec l'explosion du faible coût de nuage et CPGPU de l'informatique, de la taille et de la complexité des dictionnaires disponibles est sur le point d'exploser.
En fin de compte, de la manière la plus sûre est de ne jamais en programmant générer un sel mais obliger l'utilisateur à entrer avec leur nom d'utilisateur et mot de passe sur une liaison SSL (donc ne peut pas être snooped), mais jamais de les stocker. C'est l'approche adoptée par les sociétés de cartes de crédit; c'est à dire les 3 chiffres CSV clé de sécurité sur votre carte de crédit, vous devez le saisir à chaque fois que vous achetez en ligne, car il ne doit jamais être stocké dans une base de données. Si vous voulez vraiment générer le sel, l'envoyer à eux séparément (par exemple, via SMS ou e-Mail) et les rend toujours les saisir manuellement à chaque fois. Avec cette approche, bien que plus de sécurité, vous devez le contraste entre la complexité contre si les utilisateurs vont tout simplement arrêter d'utiliser le site comme vous l'avez fait, il est trop difficile pour eux d'être dérangé.
Tous les ci-dessus repose toujours sur le fait que vous avez aussi une protection contre le détournement de session, cross-site scripting, etc., etc. Le plus fort du monde algorithme de mot de passe n'est pas pertinent si tout ce que je dois faire est de calculer un valide PHPSESSID pour un utilisateur connecté et la détourner!
Je ne suis pas un expert en sécurité, mais avez lu sur ce autant que j'ai peut raisonnablement le faire. Le fait qu'il ya tellement de nombreux livres sur le sujet indique la taille de la réponse à votre question est vraiment.
Un couple de vraiment grands livres que vous aimeriez essayer que j'ai trouvé le précieux;
Les Vulnérabilités des Applications Web de Détecter, de les Exploiter, de les Prévenir - ISBN-13: 978-1-59749-209-6
La prévention des Attaques Web avec Apache - ISBN-13: 978-0-321-32128-2