Comme l'a souligné Johannes Gorset, l'article de Thomas Ptacek de Matasano Security explique pourquoi les fonctions de hachage simples et polyvalentes telles que MD5, SHA1, SHA256 et SHA512 sont de mauvais choix de hachage de mot de passe .
Pourquoi? Ils sont trop rapides - vous pouvez calculer au moins 1 000 000 de hachages MD5 par seconde par cœur avec un ordinateur moderne, la force brute est donc possible contre la plupart des mots de passe utilisés. Et c'est bien moins qu'un cluster de serveurs de craquage basé sur GPU!
Le salage sans étirement des touches signifie uniquement que vous ne pouvez pas précalculer la table arc-en-ciel, vous devez la construire ad hoc pour ce sel spécifique. Mais cela ne compliquera pas vraiment les choses.
L'utilisateur @ Will dit:
Tout le monde en parle comme s'il pouvait être piraté sur Internet. Comme déjà indiqué, limiter les tentatives rend impossible de déchiffrer un mot de passe sur Internet et n'a rien à voir avec le hachage.
Ils n'en ont pas besoin. Apparemment, dans le cas de LinkedIn, ils ont utilisé la vulnérabilité commune d' injection SQL pour obtenir la table de base de données de connexion et déchiffré des millions de mots de passe hors ligne.
Puis il revient au scénario d'attaque hors ligne:
La sécurité entre vraiment en jeu lorsque toute la base de données est compromise et qu'un hacker peut alors effectuer 100 millions de tentatives de mot de passe par seconde contre le hachage md5. SHA512 est environ 10 000 fois plus lent.
Non, SHA512 n'est pas 10000 fois plus lent que MD5 - il n'en faut qu'environ deux fois plus. Crypt / SHA512 , d'autre part, est une bête très différente qui, comme son homologue BCrypt, effectue un étirement de clé , produisant un hachage très différent avec un sel aléatoire intégré et prendra entre 500 et 999999 fois plus pour calculer (l'étirement est réglable).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Donc, le choix pour PHP est soit Crypt / Blowfish (BCrypt), Crypt / SHA256 ou Crypt / SHA512. Ou au moins Crypt / MD5 (PHK). Voir www.php.net/manual/en/function.crypt.php