Question:
MD5 est-il considéré comme non sécurisé?
Tawfik Khalifeh
2012-09-08 22:21:57 UTC
view on stackexchange narkive permalink

Après avoir circulé en ligne tous ces articles sur les exploits md5 , j'envisage de passer à un autre algorithme de hachage. Autant que je sache, cela a toujours été l'algorithme de choix parmi de nombreux DBA. Est-ce vraiment un avantage d'utiliser MD5 au lieu de (SHA1, SHA256, SHA384, SHA512), ou s'agit-il d'un pur problème de performances?

Quel autre hachage recommandez-vous (en tenant compte des applications liées aux données comme plate-forme)? J'utilise actuellement des hachages salés (hachages salés MD5). Veuillez considérer à la fois les hachages de fichiers md5 et les hachages de mots de passe.

Vous avez mentionné les hachages salés, cela signifie-t-il que vous parlez de hachage de mot de passe? Le hachage de mot de passe nécessite des propriétés différentes du hachage normal, ce qui rend SHA-256 presque aussi mauvais que MD5 dans ce contexte.
J'utilise le hachage md5 pour vérifier l'intégrité des fichiers critiques avant de les charger, et les hachages md5 salés pour les mots de passe.
Ni l'un ni l'autre n'est un bon choix, mais pour des raisons complètement différentes.
comme à quel point, j'ai besoin de bien comprendre la situation avant de recoder la partie entière, c'est un sanglant 24 heures au minimum. la base de code est comme 2K
Vous voudrez probablement lire [Comment hacher en toute sécurité les mots de passe] (http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords). Je pense que c'est l'une des questions les plus importantes sur ce site.
Sept réponses:
CodesInChaos
2012-09-09 00:10:16 UTC
view on stackexchange narkive permalink

MD5 pour les mots de passe

Utiliser md5 salé pour les mots de passe est une mauvaise idée. Pas à cause des faiblesses cryptographiques de MD5, mais parce qu'il est rapide. Cela signifie qu'un attaquant peut essayer milliards de mots de passe candidats par seconde sur un seul GPU.

Ce que vous devez utiliser, ce sont des constructions de hachage délibérément lentes, telles que scrypt, bcrypt et PBKDF2. Le SHA-2 salé simple n'est pas assez bon car, comme la plupart des hachages à usage général, il est rapide. Consultez Comment hacher les mots de passe en toute sécurité? pour plus de détails sur ce que vous devez utiliser.

MD5 pour l'intégrité des fichiers

L'utilisation de MD5 pour l'intégrité des fichiers peut ou non être un problème pratique, en fonction de votre scénario d'utilisation exact.

Les attaques contre MD5 sont des attaques par collision, pas des attaques pré-image. Cela signifie qu'un attaquant peut produire deux fichiers avec le même hachage, s'il a le contrôle sur les deux. Mais il ne peut pas correspondre au hachage d'un fichier existant qu'il n'a pas influencé.

Je ne sais pas si les attaques s'appliquent à votre application, mais personnellement, je commencerais à migrer même si vous le pensez pas. Il est beaucoup trop facile d'oublier quelque chose. Mieux vaut prévenir que guérir.

La meilleure solution dans ce contexte est SHA-2 (SHA-256) pour le moment. Une fois que SHA-3 sera normalisé, ce sera également un bon choix.

les chiffres sont plutôt effrayants, [hashcat] (http://hashcat.net/hashcat/) peut essayer jusqu'à [86.24M combinaison / s] sur 8 threads win 7 64bit (md5 hash), c'est comme une nouvelle ère de mot de passe craquant à la lâche. Bonne réponse...
@sarepta hashcat est inoffensif par rapport à ocl-hashcat qui fonctionne sur un GPU. Un seul GPU peut atteindre plus de 6 milliards de combinaisons par seconde avec cela.
Une attaque pré-image est théoriquement possible contre MD5, mais les attaques actuelles ont une complexité de calcul de 2 ^ 123,4 pour une pré-image complète.
Gardez à l'esprit que des attaques de pré-image * partielles * sont possibles avec MD5. Vous pouvez prendre un fichier existant et modifier les métadonnées / ajouter des fichiers indésirables et générer une collision avec un fichier que vous générez entièrement. C'est ainsi que fonctionne l'attaque par collision de certificat SSL MD5.
@ewanm89 - 2 ^ 123,4 est irréalisable (même avec des milliards de GPU calculant des milliards de hachages MD5 par seconde pendant des milliards d'années). Oui, c'est mieux que 2 ^ 128 par un facteur de 24, mais la distinction n'a pas de sens pour les attaques réelles. (Mais d'accord avec d'autres raisons pour éviter MD5).
@Polynomial Je n'appellerais pas cela une pré-image partielle. C'est plutôt quelque chose comme une collision structurée.
@CodesInChaos Ouais, c'est probablement une meilleure description. Il était environ 7 heures du matin quand j'ai écrit ça!
@drjimbob Je n'ai pas encore dit que c'était faisable, bien que nous y arrivions, je viens de souligner que cela existe, et qu'il s'agissait d'une attaque pré-image complète. Comme d'autres l'ont souligné, une pré-image partielle est souvent suffisante. À notre rythme actuel avec le GPU et le matériel FPGA accélérant la force brute et toujours plus rapide tout le temps, il ne faudra probablement pas longtemps avant qu'une pré-image complète devienne possible.
@sarepta Mon GPU peut gérer ~ 279,5 millions de combinaisons par seconde pour SHA1 et il a maintenant quelques années. Je déteste penser à ce qu'un nouveau GPU brillant peut faire pour le MD5 plus rapide ...
En utilisant les GPU, vous pouvez obtenir 33,1 milliards de hachages par seconde pour MD5. 6 mots de passe char sont instantanément toastés.
Les auteurs du malware Flame ont réussi à générer une collision de préfixe choisi dans MD5, ce qui est assez effrayant, je ne recommanderais plus cet algorithme à aucune fin. SHA-3 est désormais normalisé AFAIK.
@buherator Je ne pense pas que SHA-3 soit encore standardisé. Nous savons que keccak est le gagnant du concours, mais nous ne savons pas quels ajustements le NIST lui appliquera avant qu'il ne devienne SHA-3. En ce qui concerne l'insécurité de MD5, toutes les applications ne dépendent pas de la résistance aux collisions, de sorte que toutes les applications n'ont pas besoin de migrer d'urgence de MD5. Pour les nouveaux projets, je ne recommanderais certainement pas MD5.
J'ai vu ce raisonnement (à propos de la vitesse de md5) plusieurs fois, et bien que je sois d'accord pour dire qu'un hachage plus lent est plus sûr, je ne comprends pas les conseils pratiques contre le salage.Donc, je sale des cordes avec 20 caractères de sel, la chaîne résultante est d'au moins 28 caractères.Désormais, un attaquant peut effectuer des milliards de hachages par seconde par GPU, disons qu'il a des millions de GPU en cours d'exécution pendant un an.Quelle est la chance qu'il obtienne la chaîne d'origine?Je peux faire des maths, la probabilité est pratiquement de 0.
@ivan Un salt est stocké à côté du hachage du mot de passe et donc connu de l'attaquant.Le hachage de mot de passe n'est que le dernier niveau de défense lorsqu'un attaquant a compromis le serveur tous ses secrets (y compris les clés de chiffrement utilisées pour chiffrer le hachage du mot de passe, ou pepper).
Thomas Pornin
2013-02-24 09:43:55 UTC
view on stackexchange narkive permalink

Pour compléter la réponse de @CodesInChaos, MD5 est souvent utilisé à cause de la Tradition , et non à cause des performances. Les personnes qui utilisent des bases de données ne sont pas les mêmes que celles qui s'occupent de la sécurité. Ils ne voient souvent aucun problème à utiliser des algorithmes faibles (par exemple, voir la blague d'un algorithme que MySQL utilisait pour hacher les mots de passe). Ils utilisent MD5 parce qu'ils utilisaient autrefois MD5 et sont habitués à utiliser MD5.

Les performances sont beaucoup plus souvent discutées que mesurées; et pourtant, logiquement, il ne peut y avoir de problème de performance s'il n'y a rien à mesurer. En utilisant un cœur d'un processeur de base, vous pouvez hacher plus de 400 Mo par seconde avec MD5, plus près de 300 Mo / s avec SHA-1 et 150 Mo / s avec SHA-256. D'un autre côté, un disque dur décent produira des données à un taux encore plus bas (100 à 120 Mo / s serait typique), de sorte que la fonction de hachage n'est presque jamais le goulot d'étranglement. Par conséquent, il n'y a pas de problème de performances par rapport au hachage dans les bases de données.

Les recommandations habituelles, pour les fonctions de hachage, sont:

  1. Ne le faites pas. Vous ne devez pas utiliser d'algorithmes cryptographiques élémentaires, mais des protocoles qui assemblent plusieurs algorithmes afin qu'ils fournissent collectivement certaines fonctionnalités de sécurité (par exemple le transfert de données avec confidentialité et intégrité).

  2. Vraiment, ne le faites pas. Pour stocker les mots de passe (plus précisément, les jetons de vérification de mot de passe), ne faites pas un mélange personnalisé d'une fonction de hachage et de sels; utiliser une construction qui a été étudiée spécifiquement pour une telle utilisation. Cela signifie normalement bcrypt ou PBKDF2.

  3. Si une fonction de hachage est effectivement ce qui fait le travail, alors utilisez SHA-256. Envisagez d'utiliser toute autre fonction uniquement si un problème sérieux avec SHA-256 (très probablement ses performances ) a été dûment détecté et mesuré.

Je vois votre réponse comme: "N'utilisez pas directement les fonctions de hachage - utilisez un système plus grand tel que TLS pour le transfert de données, les certificats pour l'authentification et / ou bcrypt ou PBKDF2 pour le stockage des mots de passe."
Bradley Kreider
2012-09-10 07:11:10 UTC
view on stackexchange narkive permalink

J'utilise actuellement des hachages salés (hachages salés MD5).

Si vous salez des hachages MD5, vous ne voulez certainement pas utiliser MD5. Il semble que vous deviez utiliser PBKDF2 ou bcrypt.

Pour autant que je sache, cela a toujours été l'algorithme de choix parmi de nombreux DBA.

Ce n'est pas une raison impérieuse.

J'ai travaillé avec beaucoup de DBA qui ont au moins 5 ans de retard dans la technologie générale (n'utilisant pas le contrôle de version, les scripts perl non formatés pour tout, etc.). Ils ont peut-être été des administrateurs de base de données particulièrement mauvais, mais je pense que cela vient avec l'état d'esprit extrêmement conservateur de ne pas changer les choses.

Machavity
2015-10-28 19:28:09 UTC
view on stackexchange narkive permalink

Juste pour compléter les réponses déjà données (dont la plupart sont excellentes), nous avons maintenant un exemple concret où une violation de données (Ashley Madison) conduit à une fuite de la table des mots de passe. Ils ont utilisé bcrypt avec un sel aléatoire pour hacher les mots de passe. Un chercheur en sécurité a décidé de prendre ces hachages et de les forcer brutalement. C'était le résultat

À la suite de tout cela, bcrypt impose des exigences herculéennes à quiconque tente de déchiffrer le dump Ashley Madison pour au moins deux raisons. Premièrement, 4 096 itérations de hachage nécessitent d'énormes quantités de puissance de calcul. Dans le cas de Pierce, bcrypt a limité la vitesse de sa plate-forme de craquage à quatre GPU à 156 suppositions dérisoires par seconde. Deuxièmement, parce que les hachages bcrypt sont salés, sa plate-forme doit deviner le texte brut de chaque hachage un par un, plutôt que tout à l'unisson.

"Oui, c'est vrai, 156 hachages par seconde", a écrit Pierce. "Pour quelqu'un qui a l'habitude de déchiffrer des mots de passe MD5, cela semble assez décevant, mais c'est bcrypt, donc je vais prendre ce que je peux obtenir."

Pierce a abandonné une fois qu'il a passé la barre des 4 000. Pour exécuter les six millions de hachages du pool limité de Pierce contre les mots de passe RockYou, il aurait fallu 19 493 ans, a-t-il estimé. Avec un total de 36 millions de mots de passe hachés dans la décharge d'Ashley Madison, il aurait fallu 116 958 ans pour terminer le travail.

En fin de compte, les seuls qu'il a pu déchiffrer étaient des mots de passe ridiculement simples ou courants (comme "123456").

En fait, certains d'entre eux étaient disponibles en tant que hachages MD5 (soit à partir d'un système plus ancien ou autre, je ne suis pas sûr).Celles-ci ont été fissurées sans problème.
Matrix
2012-09-08 22:37:08 UTC
view on stackexchange narkive permalink

Oui, MD5 n'est pas sécurisé, tout comme SHA-1, je recommande d'utiliser SHA-256 si la taille du résumé est un problème. N'oubliez pas que si vous le stockez dans une colonne BINARY, il prendra moins d'espace que s'il est stocké dans CHAR. Assurez-vous simplement que cela est fait correctement. MD5 est environ 2,3 fois plus rapide que SHA-256. D'autres benchmarks sont disponibles sur http://www.cryptopp.com/benchmarks.html

N'utilisez pas de hachages standard pour le stockage des mots de passe. Ils sont bien trop rapides. PBKDF2 / bcrypt sont la voie à suivre.
Shane
2013-06-20 13:50:08 UTC
view on stackexchange narkive permalink

Pour faire court, c'est assez peu sûr maintenant à cause des tables arc-en-ciel, Rainbow table est une liste de hachages MD5 et de leurs chaînes correspondantes. Donc, fondamentalement, je considérerais d'autres alternatives telles que SHA1

Les tables arc-en-ciel s'appliquent presque également à tous les hachages non salés. La migration vers SHA1 ou SHA2 ne ferait presque rien. L'approche correcte pour le hachage de mot de passe consiste à utiliser un sel avec une fonction de hachage de mot de passe délibérément lente telle que PBKDF2, bcrypt ou scrypt. Même avec des hachages rapides non salés, il est souvent moins coûteux d'exécuter une nouvelle recherche GPU que d'utiliser une table arc-en-ciel.
Dom
2013-06-20 12:57:21 UTC
view on stackexchange narkive permalink


Vous parlez tous d'insécurité, mais aucun d'entre vous n'a répondu directement à la question.

J'ai travaillé avec MD5 et Sha512, tous deux faciles à craquer une fois que je avait mis mon petit expert en hacker là-dessus, jusqu'à ce qu'il nous frappe tous les deux comme un tonnerre! Le moyen le plus simple et le plus efficace d'arrêter les "Mass Attacks" comme ceux décrits ci-dessus, est de régler un limiteur de tentatives de connexion, ce qui signifie:

  function checkbrute ($ user_id, $ mysqli) {// Obtenir l'horodatage de l'heure actuelle $ now = time (); // Toutes les tentatives de connexion sont comptées à partir des 2 dernières heures. $ valid_attempts = $ maintenant - (2 * 60 * 60); if ($ stmt = $ mysqli->prepare ("SELECT time FROM login_attempts WHERE user_id =? AND time > '$ valid_attempts'")) {$ stmt->bind_param ('i', $ user_id); // Exécute la requête préparée. $ stmt->execute (); $ stmt->store_result (); // S'il y a eu plus de 5 échecs de connexion if ($ stmt->num_rows > 5) {return true; } else {return false; }}}  


Vous obtenez mon point?
Le nombre maximum de combinaisons que le hacker veut essayer, il est limité à 5 échecs toutes les 2 heures. Vous pouvez même bloquer l'utilisateur après X tentatives.

Vous ne tenez pas compte des sauvegardes volées / incorrectement supprimées des bases de données d'utilisateurs ou des enregistrements d'utilisateurs récupérés en masse grâce à un exploit (par exemple un SQLi). Votre réponse concerne le piratage de bases de données en direct via et par l'application serveur qui est censée être la seule à accéder à ces données, un compte utilisateur à la fois, ce qui - si c'était le seul risque - pourrait être résolu beaucoup plus élégamment et par mot de passe les hachages ne seraient pas nécessaires en premier lieu. Tu ne me crois pas? Demandez [LinkedIn] (http://www.zdnet.com/blog/btl/6-46-million-linkedin-passwords-leaked-online/79290) (parmi beaucoup d'autres);)
1) J'ai explicitement écrit que MD5 et SHA-2 ne sont pas sécurisés en tant que hachages de mot de passe. 2) Il n'y a aucune attaque connue sur SHA-512 lorsqu'il est utilisé correctement. C'est un hachage cryptographique, pas un hachage de mot de passe. 3) Il vous manque le point de hachage de mot de passe. Le but d'un hachage de mot de passe est de protéger les mots de passe lorsque votre base de données a été divulguée. Dans ce scénario, un limiteur de débit n'aide pas du tout.
FWIW limitant les tentatives de connexion de cette manière rend simplement très facile d'effectuer un déni de service
@EricGrange: Évidemment, vous les limitez pour chaque IP ou autre, pas au total.
@Evi1M4chine à l'ère de l'IPv6, un attaquant peut facilement (et à moindre coût) avoir des millions d'adresses IPv6 différentes


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...