Je suis tombé sur une discussion dans laquelle j'ai appris que ce que je faisais n'était pas en fait de saler les mots de passe, mais de les poivrer, et j'ai depuis commencé à faire les deux avec une fonction comme:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
En ignorant l'algorithme de hachage choisi (je veux que ce soit une discussion sur les sels et les poivrons et non sur des algorithmes spécifiques mais j'utilise un algorithme sécurisé), est-ce une option sécurisée ou devrais-je faire quelque chose de différent? Pour ceux qui ne connaissent pas les termes:
Un salt est une valeur générée aléatoirement généralement stockée avec la chaîne dans la base de données conçue pour rendre impossible l'utilisation de tables de hachage pour déchiffrer les mots de passe. Comme chaque mot de passe a son propre sel, ils doivent tous être forcés individuellement afin de les déchiffrer; cependant, comme le sel est stocké dans la base de données avec le hachage du mot de passe, un compromis de base de données signifie perdre les deux.
Un pepper est une valeur statique à l'échelle du site stockée séparément de la base de données (généralement codée en dur dans le code source de l'application) qui est censée être secrète. Il est utilisé pour qu'une compromission de la base de données n'entraîne pas la force brute de la table des mots de passe de l'application entière.
Y a-t-il quelque chose qui me manque et est-ce que saler et poivrer mes mots de passe est la meilleure option pour protéger la sécurité de mon utilisateur? Y a-t-il une faille de sécurité potentielle à faire de cette façon?
Remarque: Supposons, aux fins de la discussion, que l'application et la base de données sont stockées sur des machines distinctes, ne partagent pas les mots de passe, etc., de sorte qu'une violation du serveur de base de données ne signifie pas automatiquement une violation du serveur d'applications.