J'ai lu à quelques reprises que, lorsque vous stockez des mots de passe, il est judicieux de "doubler le hachage" des chaînes (par exemple, avec md5 puis sha1, les deux avec des sels, évidemment).
Je suppose que la première question est, "est-ce vraiment correct?" Si non, alors s'il vous plaît, rejetez le reste de cette question :)
La raison pour laquelle je pose cette question est que, à première vue, je dirais que cela a du sens. Cependant, quand j'y pense, chaque fois qu'un hachage est modifié (éventuellement avec quelque chose d'ajouté), tout ce que je peux voir, c'est qu'il y a une réduction de la limite supérieure de "l'unicité" finale ... cette limite étant liée à l'entrée initiale.
En d'autres termes: nous avons x nombre de chaînes qui, une fois hachées, sont réduites à y chaînes possibles. C'est-à-dire qu'il y a des collisions dans le premier set. Passons maintenant du deuxième ensemble au troisième, n’est-il pas possible que la même chose se produise (par exemple, des collisions dans l’ensemble des chaînes «y» possibles qui entraînent le même hachage dans le troisième ensemble)?
Dans ma tête, tout ce que je vois est un "entonnoir" pour chaque appel de fonction de hachage, "canalisant" un ensemble infini de possibilités en un ensemble fini, etc., mais il est évident que chaque appel travaille sur l'ensemble fini qui le précède, ce qui nous donne une ne définissez pas plus grande que l'entrée.
Peut-être qu'un exemple expliquera mes divagations? Prenez 'hash_function_a' qui donnera 'a' et 'b' le hash '1' et donnera 'c' et 'd' le hash '2'. En utilisant cette fonction pour stocker les mots de passe, même si le mot de passe est 'a', je pourrais utiliser le mot de passe 'b'.
Prenez 'hash_function_b' qui donnera '1' et '2' le hash '3'. Si je devais utiliser ce comme un « hachage secondaire » après « hash_function_a » alors même si le mot de passe est « un » je pourrais utiliser « b », « c » ou « d ».
En plus de tout cela, je comprends que les sels devraient être utilisés, mais ils ne changent pas vraiment le fait que chaque fois que nous mappons les entrées 'x' à des sorties 'inférieures à x'. Je ne pense pas.
Quelqu'un peut-il m'expliquer s'il vous plaît ce qui me manque ici?
Merci!
EDIT: pour ce que ça vaut, je ne le fais pas moi-même, j'utilise bcrypt. Et je ne me préoccupe pas vraiment de savoir si c'est utile ou non pour "utiliser des cycles" pour un "pirate informatique". Je me demande vraiment si le processus réduit ou non la "sécurité" du point de vue de la collision de hash.
MD5(password)
. Nous avons dit que ce n'était pas sécurisé, alors ils ont suggéré d'utiliser à la MD5(MD5(password))
place ...