J'examine deux logiciels comparables qui chiffrent les données sur disque à l'aide d'une phrase secrète. L'un utilise PBKDF2 pour générer la clé de chiffrement à partir d'une phrase secrète, tandis que l'autre utilise deux tours de SHA256. Quelle est la différence? Est-ce que l'un est préféré à l'autre?
La différence est que:
Donc, si quelqu'un essayait beaucoup de phrases de passe différentes, par exemple le dictionnaire entier, puis chaque mot avec un chiffre ajouté, puis chaque mot avec une majuscule différente, puis deux mots de dictionnaire, etc. alors ce processus serait beaucoup plus lent avec PBKDF2 .
Mais si votre phrase secrète est vraiment sécurisée, c'est-à-dire très longue, assez aléatoire et hors de portée de tout processus d'énumération systématique, cela ne fait aucune différence pratique, sauf qu'un attaquant peut dépenser plus de ressources pour essayer de casser votre phrase secrète (ou peut-être moins si ils décident d'abandonner plus tôt).
Les algorithmes de hachage de mot de passe tels que PBKDF2, bcrypt et scrypt sont destinés à être utilisés avec des mots de passe et sont délibérément lents. Les algorithmes de hachage cryptographique sont rapides. Rapide est bon dans la plupart des situations, mais pas ici. Le ralentissement de l'algorithme (généralement par itération) rend le travail de l'attaquant beaucoup plus difficile. Les hachages de mot de passe ajoutent également une valeur salée à chaque hachage pour le rendre unique afin qu'un attaquant ne puisse pas attaquer plusieurs hachages en même temps.
Les attaquants tenteront de récupérer les mots de passe en effectuant des attaques par dictionnaire et par force brute où ils devineront les mots de passe en les hachant et en les comparant au mot de passe stocké pour déterminer s'ils correspondent. Avec les fonctions de hachage cryptographiques régulières (par exemple MD5, SHA256), un attaquant peut deviner des milliards de mots de passe par seconde. Avec PBKDF2, bcrypt ou scrypt, l'attaquant ne peut faire que quelques milliers de suppositions par seconde (ou moins, selon la configuration).
Cela signifie que chaque mot de passe est beaucoup plus fort si PBKDF2, bcrypt ou scrypt sont utilisés à la place d'une fonction de hachage standard.
De plus, PBKDF2, bcrypt et scrypt utilisent tous de grandes valeurs aléatoires de "sel" pour s'assurer que le mot de passe de chaque utilisateur est haché de manière unique. Attaquer 100 hachages de mot de passe prendra 100 fois plus de temps qu'attaquer un hachage. Attaquer un million prendra un million de fois plus longtemps, etc. Avec SHA256, l'attaquant peut essayer de casser des milliers ou des millions de hachages en même temps avec très peu de ralentissement.
Vous devez toujours utiliser un hachage de mot de passe ou une "formule de dérivation de clé" pour les mots de passe plutôt qu'un hachage cryptographique ordinaire. Il est très difficile de sélectionner des mots de passe suffisamment solides pour résister à un effort de piratage dédié s'ils sont hachés avec quelque chose comme SHA ou MD5. Avec PBKDF2, bcrypt ou scrypt, les mots de passe peuvent être aussi courts que 7 ou 8 caractères mais avec MD5 ou SHA, ils doivent avoir au moins 13-14 caractères.
Il y a de bonnes réponses ci-dessus, mais la raison immédiate est que sha256 n'est pas salé et que deux tours sont pitoyablement faibles de la même manière que les mots de passe à 4 chiffres sont faibles, sur le plan du calcul: