J'ai bien peur de me faire jeter des tomates sur moi pour avoir posé cette vieille question, mais voilà.
Après avoir lu qu'il est dangereux de créer votre propre hachage de mot de passe à partir des fonctions de hachage existantes plus de et plus de à nouveau, je ne comprends toujours pas la logique. Voici quelques exemples:
-
md5 (md5 (sel) + bcrypt (mot de passe))
-
scrypt (bcrypt (mot de passe + salt))
-
sha1 (md5 (scrypt (mot de passe + md5 (sel))))
Les arguments typiques contre ceux-ci vont comme suit:
Vous n'êtes pas un cryptographe! Vous ne savez pas si ces hachages sont plus sécurisés. Laissez-le aux experts qui savent ce qu'ils font. Ceux-ci n'ajoutent aucune sécurité supplémentaire.
Certes, ils n'améliorent pas la fonction en tant que hachage (c'est-à-dire rendent plus difficile l'inversion ou la recherche de collisions, etc.), mais Certainement sûrement ils ne le font pas pire comme hachage? S'ils le faisaient, les pirates pourraient alors hacher à nouveau les mots de passe hachés standard dans ces hachages farfelus comme ils l'entendent et affaiblir le hachage? Je ne l'achète pas.
Deuxième argument:
Principe de Kerckoffs: Un cryptosystème doit être sécurisé même si tout ce qui concerne le système est connu.
D'accord. C'est essentiellement la raison pour laquelle vous ne stockez pas vos mots de passe en texte brut. Mais si ma réponse à la première critique tient, alors ces hachages farfelus fonctionnent toujours comme des hachages sécurisés, et notre système ne rompt pas le principe de Kerckoffs plus qu'il ne le ferait avec un hachage standard.
Voici deux avantages possibles (et intéressants, pour autant que je sache) à utiliser un hachage "farfelu" sur un hachage normal:
- Bien sûr, votre système doit être sécurisé si l'attaquant possède le code source, mais il est très probable que votre attaquant n'aura pas accès à votre code source et probablement ne sera pas en mesure de deviner votre hachage farfelu, rendant toute tentative de force brute impossible.
- (Celui-ci est la vraie motivation derrière moi en posant cette question)
BCrypt
est pensé pour être sûr, dur pour le CPU et le GPU (super) mais peut être très rapide avec du matériel spécialisé. On dit queSCrypt
est difficile à forcer brutalement sur les CPU, les GPU et actuellement disponible spécialisé, mais il est plus récent et ne fait pas autant confiance à la communauté cryptographique que BCrypt en raison du manque d'exposition dont il dispose. Mais le hachageBCrypt (SCrypt (password + salt))
n'obtient-il pas le meilleur des deux mondes?
J'apprécie que la passion / colère derrière la plupart des diatribes contre ces hachages maison vient du manque de connaissances du programmeur moyen sur ce qui fait un bon hachage, et d'une inquiétude qui encourage ce genre de wacky-hashing se terminera inévitablement par des hachages faibles et inutiles dans le code de production. Mais Si le hachage farfelu est soigneusement construit à partir de hachages solides et fiables, les gains de sécurité ne sont-ils pas très précieux et réels?
Mise à jour
J'ai eu un tas de bonnes réponses à ce sujet, merci. Ce que je semblais oublier dans mes hypothèses, c'est que, bien que la combinaison de hachages ne puisse pas faciliter le déchiffrage du mot de passe original et donc déchiffrer les hachages constituants, la combinaison de deux hachages sécurisés ou plus peut - au moins en principe - être plus faible que n'importe lequel de ses hachages internes en raison des interactions non étudiées et complexes entre eux. Cela signifie qu'il pourrait être possible de trouver une chaîne qui a dépassé le hachage farfelu sans nécessairement casser les hachages qui la composaient.