web-dev-qa-db-fra.com

Quelle est la sécurité des hachages de sel sha256 + pour le stockage des mots de passe

J'ai commencé à lire sur le hachage de mot de passe récemment sur plusieurs sites comme cette page sur crackstation et d'autres, et pour ce que j'ai compris, je devrais éviter d'utiliser des algorithmes de hachage comme md5 et sha1 car ils sont obsolètes et à la place, je devrait utiliser sha256 avec du sel. Mais, après avoir lu la page this du manuel php, j'ai remarqué qu'ils décourageaient l'utilisation de sha256 et recommandaient plutôt d'utiliser les fonctions password_hash (). J'ai également remarqué que la plupart de ces articles/pages ont été écrits dans l'intervalle de 2011-13, donc je ne suis pas sûr de la sécurité du mot de passe haché sha256 avec des sels de nos jours et s'il doit toujours être utilisé dans les applications Web.

21
Yuran Pereira

Les hachages à usage général sont obsolètes pour les mots de passe depuis plus d'une décennie. Le problème est qu'ils sont rapides et que les mots de passe ont une faible entropie, ce qui signifie que la force brute est très facile avec tout hachage à usage général. Vous devez utiliser une fonction délibérément lente, comme PBKDF2, bcrypt ou scrypt. Crackstation explique cela en fait si vous lisez la page entière. D'un autre côté, MD5 et SHA-1 ne sont pas plus faibles que SHA-2 dans le contexte du hachage de mot de passe; leur faiblesse n'est pas pertinente pour les mots de passe.

28
cpast

Comme le dit @cpast, le principal problème d'un seul SHA-256 est qu'il est beaucoup trop rapide. Un attaquant avec un GPU de jeu standard peut essayer les mots de passe à un taux qui est comptabilisé en milliards par seconde (milliards américains, mais c'est toujours un lot).

Un autre problème est qu'il existe un potentiel de combinaison incorrecte des choses. SHA-256 est une fonction de hachage: elle prend une entrée et produit une sortie. Si vous alimentez SHA-256 avec un mot de passe et un sel, alors vous définissez vraiment vos propres protocoles cryptographiques, basés sur SHA-256 avec quelques choses supplémentaires , les informations supplémentaires indiquant comment le mot de passe et le sel sont combinés pour effectuer l'entrée SHA-256. La conception de protocoles cryptographiques est connue pour être difficile, notamment parce qu'il n'y a pas de test fiable de sécurité. Vous ne pouvez pas savoir si vous avez bien fait. (Eh bien, lorsque votre serveur est devenu l'hôte d'un groupe complet de pirates informatiques se connectant à partir d'une douzaine de pays différents dont vous n'aviez jamais entendu parler, alors vous savez que vous avez fait mal , mais c'est un peu trop tard ...)

Le hachage correct des mots de passe a une théorie. Lisez cette réponse comme une introduction au sujet.

20
Thomas Pornin

sha256 n'est pas conçu pour hacher les mots de passe. Pour hacher des mots de passe, vous devriez préférer utiliser des fonctions de hachage créées pour cet usage. Vous trouverez toutes les informations requises ci-dessous dans une autre question répondant à une demande similaire: Algorithme de hachage de mot de passe le plus sécurisé? .

Dans la question susmentionnée, vous apprendrez pourquoi les fonctions de hachage à usage général comme sha256 n'ont pas les bonnes propriétés pour assurer un stockage sécurisé des mots de passe (même lorsqu'elles sont appliquées un grand nombre de fois sur lui-même), et vous trouverez également un classement des les fonctions de hachage les plus recommandées dédiées à la gestion sécurisée des mots de passe:

  1. scrypt : Ce qui est encore assez nouveau (publié en 2012), mais est conçu pour assurer une meilleure sécurité que son prédécesseur bcrypt,
  2. bcrypt : Il a été spécialement conçu pour le stockage des mots de passe et a été le choix recommandé pendant longtemps,
  3. PBKDF2 : Il est en fait conçu comme une fonction d'étirement des touches, c'est-à-dire. un moyen sûr de dériver une clé cryptographique à partir d'un mot de passe donné, mais ses propriétés le rendent également adapté au stockage de mots de passe.

Dans votre question, vous avez mentionné la fonction PHP password_hash () . Cette fonction n'est pas un algorithme de hachage en soi. En fait, cette fonction est utilisée pour permettre PHP pour sélectionner l'algorithme de hachage de mot de passe le plus fiable disponible sans avoir à modifier votre code.

Comme indiqué dans la documentation, selon PHP 5.5.0, bcrypt est sélectionné par défaut.

10
WhiteWinterWolf