Après tous ces articles circulant en ligne sur exploits md5, j'envisage de passer à un autre algorithme de hachage. Pour autant que je sache, il 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 uniquement d'un 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 (hachés salés MD5). Veuillez considérer à la fois les hachages de fichiers md5 et les hachages de mots de passe.
L'utilisation de md5 salé pour les mots de passe est une mauvaise idée. Pas à cause des faiblesses cryptographiques de MD5, mais parce que c'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 sont des constructions de hachage délibérément lentes, telles que scrypt, bcrypt et PBKDF2. Le SHA-2 salé simple n'est pas suffisant car, comme la plupart des hachages à usage général, il est rapide. Consultez Comment hacher en toute sécurité les mots de passe? pour plus de détails sur ce que vous devez utiliser.
L'utilisation de MD5 pour l'intégrité des fichiers peut ou non être un problème pratique, selon 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 faire correspondre le 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 pensez que ce n'est pas le cas. 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 l'instant. Une fois SHA-3 standardisé, ce sera également un bon choix.
Pour compléter la réponse de @CodesInChaos, MD5 est souvent utilisé à cause de Tradition , pas à cause des performances. Les personnes qui traitent 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 MD5 et sont habitués à utiliser MD5.
Performance est beaucoup plus souvent discuté que mesuré; et pourtant, logiquement, il ne peut pas 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 proche 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 faible (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 les suivantes:
Ne le fais pas. Vous ne devez pas utiliser d'algorithmes cryptographiques élémentaires, mais protocoles qui assemblent plusieurs algorithmes afin qu'ils fournissent collectivement certaines fonctionnalités de sécurité (par exemple, transfert de données avec confidentialité et intégrité).
Vraiment, ne le fais pas. Pour stocker des mots de passe (plus précisément, des 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 étudiée spécifiquement pour une telle utilisation. Cela signifie normalement bcrypt ou PBKDF2 .
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é.
J'utilise actuellement des hachages salés (hachés salés MD5).
Si vous salez des hachages MD5, vous ne voulez certainement pas utiliser MD5. Il semble que vous ayez besoin d'utiliser PBKDF2 ou bcrypt.
Pour autant que je sache, il 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 (sans utiliser le contrôle de version, les scripts Perl non formatés pour tout, etc.). Ils ont peut-être été des DBA particulièrement mauvais, mais je pense que cela vient avec la mentalité extrêmement conservatrice de ne pas changer les choses.
Juste pour compléter les réponses déjà données (dont la plupart sont excellentes), nous avons maintenant un exemple réel où une violation de données (Ashley Madison) a provoqué une fuite de la table de 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 essaie de casser le dépot d'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 dérisoires par seconde. Deuxièmement, comme les hachages bcrypt sont salés, sa plate-forme doit deviner le texte en clair de chaque hachage un à la fois, plutôt que tous à l'unisson.
"Oui, c'est vrai, 156 hachages par seconde", a écrit Pierce. "Pour quelqu'un qui a l'habitude de déchiffrer les 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 franchi la barre des 4 000. Pour exécuter les six millions de hachages dans le pool limité de Pierce contre les mots de passe RockYou, il aurait fallu 19493 ans, a-t-il estimé. Avec un total de 36 millions de mots de passe hachés dans le dépotoir d'Ashley Madison, il aurait fallu 116 958 ans pour terminer le travail.
À la fin de la journée, les seuls qu'il a réussi à déchiffrer étaient des mots de passe ridiculement simples ou courants (comme "123456").
Pour faire court, il est assez peu sûr maintenant à cause des tables Rainbow, Rainbow table est une liste de hachages MD5 et leurs chaînes correspondantes. Donc, fondamentalement, je considérerais d'autres alternatives telles que SHA1
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, cela 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. Plus de repères sont à http://www.cryptopp.com/benchmarks.html