67 votes

Quel est actuellement l'algorithme de cryptage à sens unique le plus sûr ?

Comme beaucoup le savent, le cryptage à sens unique est un moyen pratique de crypter les mots de passe des utilisateurs dans les bases de données. De cette façon, même l'administrateur de la base de données ne peut pas connaître le mot de passe d'un utilisateur, mais il devra deviner le mot de passe, le crypter avec le même algorithme, puis comparer le résultat avec le mot de passe crypté dans la base de données. Cela signifie que le processus de détermination du mot de passe nécessite une quantité massive de suppositions et une grande puissance de traitement.

Étant donné que les ordinateurs sont de plus en plus rapides et que les mathématiciens continuent de développer ces algorithmes, je me demande lequel est le plus sûr compte tenu de la puissance de calcul et des techniques de cryptage modernes.

J'utilise presque exclusivement MD5 depuis des années et je me demande si je ne devrais pas faire quelque chose de plus. Devrais-je envisager un autre algorithme ?

Une autre question connexe : Quelle devrait être la longueur typique d'un champ pour un tel mot de passe crypté ? Je dois admettre que je ne connais pratiquement rien au cryptage, mais je suppose qu'un hachage MD5 (à titre d'exemple) peut être plus long et qu'il faudrait probablement plus de puissance de traitement pour le craquer. Ou bien la longueur du champ n'a-t-elle aucune importance, à condition que le mot de passe crypté puisse y figurer ?

32 votes

Les fonctions de hachage ne sont pas des fonctions de chiffrement. Les fonctions de cryptage ont des fonctions inverses permettant de décrypter une valeur cryptée pour obtenir la valeur originale. Mais les hachages ne peuvent pas être décryptés. Il est seulement possible de trouver des collisions (valeurs d'entrée qui donnent la même valeur de hachage).

3 votes

Le résultat d'une fonction/algorithme de hachage donné est toujours de la même longueur. Pour MD5, il est toujours de 128 bits, quelle que soit la longueur des bits/octets/chaîne en entrée.

0 votes

Ne vous inquiétez pas de la longueur du champ. Dans presque tous les cas, il est beaucoup plus rapide de deviner des mots de passe et de les hacher que de provoquer une collision par force brute, et 128 bits sont largement suffisants pour résister aux attaques par force brute jusqu'à la mort thermique de l'Univers.

64voto

molf Points 34978

Attention : Depuis la rédaction de cet article en 2010, les GPU ont été largement déployés pour effectuer des hachages de mots de passe par force brute. Les GPU à prix modéré peuvent exécuter dix milliards MD5s par seconde. Cela signifie que même un mot de passe alphanumérique à 8 caractères complètement aléatoire (62 caractères caractères possibles) peut être forcé brutalement en 6 heures. SHA-1 est seulement légèrement plus lent, cela prendrait un jour. Les mots de passe de vos utilisateurs sont beaucoup plus faibles, et (même avec le salage) tomberont à un taux de milliers de mots de passe par seconde. Les fonctions de hachage sont conçu pour être rapide . Vous ne voulez pas de cette pour les mots de passe. Utilisez scrypt, bcrypt, ou PBKDF-2.

MD5 a été jugé faible en 1996, et ne doit plus être utilisé à des fins cryptographiques. SHA-1 est un remplacement couramment utilisé, mais a des problèmes similaires . Le site SHA-2 famille de fonctions de hachage sont les remplacement de SHA-1. Les membres de SHA-2 sont désignés individuellement par SHA-224, SHA-256, SHA-384 et SHA-512.

Actuellement, plusieurs fonctions de hachage sont en concurrence pour devenir SHA-3 le prochain algorithme de hachage cryptographique normalisé. Un gagnant sera désigné en 2012. Aucun d'entre eux ne doit encore être utilisé !

Pour le hachage des mots de passe vous pouvez également envisager d'utiliser quelque chose comme bcrypt . Il est conçu pour être suffisamment lent pour rendre les attaques par force brute à grande échelle infaisables. Vous pouvez régler la lenteur vous-même, de sorte qu'il peut être rendu plus lent lorsque les ordinateurs deviennent plus rapides.

Attention : bcrypt est basé sur un ancien algorithme de cryptage bidirectionnel, Blowfish, pour lequel de meilleures alternatives existent aujourd'hui. Je ne pense pas que les propriétés cryptographiques de hachage de bcrypt soient complètement comprises. Quelqu'un me corrige si je me trompe ; je n'ai jamais trouvé de source fiable qui discute des propriétés de bcrypt (autres que sa lenteur) d'un point de vue cryptographique.

Il peut être quelque peu rassurant de constater que le risque de collisions est moins important pour le hachage de mots de passe que pour la cryptographie à clé publique ou les signatures numériques. Utiliser MD5 aujourd'hui est un très mauvaise idée pour SSL, mais pas aussi désastreux pour le hachage des mots de passe. Mais si vous avez le choix, choisissez simplement une solution plus puissante.

L'utilisation d'une bonne fonction de hachage est pas assez pour sécuriser vos mots de passe. Vous devez hacher les mots de passe avec sels qui sont longues et cryptographiquement aléatoire . Vous devriez également aider vos utilisateurs à choisir des mots de passe ou des phrases de passe plus forts si possible. Un mot de passe plus long est toujours préférable.

9 votes

"Plus c'est long, mieux c'est". Pas nécessairement vrai. J'ai entendu des affirmations anecdotiques selon lesquelles le fait de forcer les utilisateurs à choisir des mots de passe plus longs les amène parfois à choisir des mots de passe avec moins entropie, afin qu'ils puissent s'en souvenir. Personnellement, je peux me souvenir d'un mot de passe généré aléatoirement de 8 alphanums si je l'utilise quotidiennement. Au-delà, je vais devoir inventer moi-même des mots de passe, et je ne sais pas quelle entropie ils ont.

1 votes

@Steve Les attaquants ne passent pas progressivement des tentatives de mots de passe à faible entropie à des tentatives à plus forte entropie. Ils essaient l'attaque par dictionnaire, puis la force brute. Ainsi, "ooGoo!ooooooo876" a une entropie plus faible que "d!NA0sue732bnfuw", mais il n'est pas moins sûr.

0 votes

Pour le hachage de mots de passe, MD5 doit toujours être considéré comme une option raisonnable (comme vous l'avez laissé entendre), à condition que vos mots de passe soient forts et que vous utilisiez un sel (ce qui s'applique à tout hachage). D'après moi, les attaques par collision ne sont pas pertinentes pour le hachage de mots de passe.

10voto

Matt Solnit Points 13528

Excellente question ! Cette page est une bonne lecture. En particulier, l'auteur affirme que MD5 n'est pas approprié pour le hachage des mots de passe :

Le problème est que le MD5 est rapide. Ses concurrents modernes, comme SHA1 et SHA256, le sont aussi. La vitesse est un objectif de conception d'un hachage sécurisé moderne, car les hachages sont une composante de base de presque tous les cryptosystèmes et sont généralement exécutés à la demande, par paquet ou par message.

La rapidité est exactement ce que vous ne voulez pas dans une fonction de hachage de mot de passe.

L'article explique ensuite quelques alternatives et recommande de Bcrypt comme le "bon choix" (ses mots, pas les miens).

Avertissement : Je n'ai pas du tout essayé Bcrypt. Il s'agit d'une recommandation amicale, mais je ne peux pas l'étayer par ma propre expérience technique.

0 votes

L'auteur recommande également le schéma de hachage de mot de passe développé pour FreeBSD, qui utilise MD5 à la base mais itère la fonction de hachage des milliers de fois. Il existe une construction similaire basée sur SHA-1 disponible dans la glibc.

6voto

Tony The Lion Points 28208

Pour augmenter la force du mot de passe, vous devez utiliser une plus grande variété de symboles. Si le mot de passe comporte 8 à 10 caractères, il devient assez difficile à craquer. Bien que le fait de le rendre plus long le rendra plus sûr, uniquement si vous utilisez des caractères numériques/alphabétiques/autres.

SHA1 est un autre algorithme de hachage (cryptage à sens unique). Il est plus lent, mais son condensé est plus long. (message codé) (160 bit) où MD5 a seulement 128 bit.

Ensuite, SHA2 est encore plus sûr, mais il est moins utilisé.

7 votes

Je noterai que le ralentissement est en fait un avantage lorsqu'il s'agit de se défendre contre les attaques par force brute.

1 votes

Ce n'est pas tant "plus lent" que "difficile à rendre rapide même avec du matériel dédié/des tables précalculées/une analyse mathématique..." qui est important. La raison d'être du concours SHA-3 du NIST est que les fonctions de hachage cryptographiques actuelles, bien qu'elles soient toujours aussi lentes qu'auparavant sur des ordinateurs à usage général, ont été affaiblies récemment pour diverses autres raisons. En particulier MD5 (voir la page Wikipedia MD5).

0 votes

Toute confiance dans la vitesse à laquelle l'ordinateur peut créer le hachage est déplacée. La différence de vitesse entre les calculs MD5 et SHA1 ne fournira aucune protection perceptible contre les attaques par force brute. La seule chose qui devrait compter est la qualité du hachage, c'est-à-dire sa capacité à protéger contre la déduction de l'entrée à partir du hachage et sa capacité à protéger contre la production erronée du même hachage avec différentes entrées.

4voto

David Morrow Points 1162

Saler le mot de passe est toujours un niveau de défense supplémentaire.

$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );

2 votes

Il est important qu'un nouveau sel soit généré à chaque fois qu'un mot de passe est défini, et non pas une valeur fixe.

0 votes

@caf : Le calcul ne prendrait-il pas plus de temps s'il était toujours le même, ce qui augmenterait le temps nécessaire à la force brute ? - Si le sel est différent à chaque fois, il faudrait qu'il soit stocké dans la même ligne que le mot de passe pour que le mécanisme de connexion puisse comparer la tentative de hachage au vrai mot de passe.

0 votes

Si le sel est toujours le même, l'attaquant peut a) forcer brutalement tous vos mots de passe en parallèle (chaque hachage de test peut être comparé à tous vos hachages de mots de passe) ; et b) calculer les hachages avant de voir votre base de données. Oui, le sel devrait être stocké avec le hachage - c'est exactement ce que font les hachages de mots de passe de type UNIX.

3voto

Seth Points 18568

En constatant que les ordinateurs deviennent de plus en plus rapides et que les mathématiciens continuent à développer ces algorithmes.

Le cryptage RSA est sûr car il repose sur un très grand nombre qui est dur de facteur. Un jour, les ordinateurs deviendront suffisamment rapides pour factoriser le nombre en un temps raisonnable. Pour garder une longueur d'avance, vous utilisez un nombre plus grand.

Cependant, pour la plupart des sites web, l'objectif du hachage des mots de passe est de rendre incommode pour qu'une personne ayant accès à la base de données puisse lire le mot de passe, et non pour assurer la sécurité. Dans ce cas, le MD5 convient parfaitement. 1 .

L'implication ici est que si un utilisateur malveillant accède à l'ensemble de votre base de données, il n'a pas besoin du mot de passe. (Le verrou de la porte d'entrée ne m'empêchera pas de passer par la fenêtre).


1 Ce n'est pas parce que le MD5 est "cassé" que vous pouvez l'inverser quand vous le voulez.

2 votes

"Cependant, pour la plupart des sites web, le but du hachage des mots de passe est de rendre peu pratique la lecture du mot de passe par une personne ayant accès à la base de données, et non de fournir une sécurité." - c'est peut-être tout ce que la plupart des sites atteindre L'objectif est de faire en sorte qu'il soit impossible d'inverser les mots de passe stockés par vos utilisateurs, ce qui est tout à fait réalisable.

0 votes

Je suis d'accord, j'ai fortement essayé d'expliquer à mes collègues pourquoi les faiblesses du MD5 ne devraient pas empêcher son utilisation pour le hachage des mots de passe. Il va sans dire que l'utilisation d'un sel et d'un mot de passe de force minimale est toujours conseillée.

0 votes

Je suis d'accord que s'ils ont votre base de données entière, ils n'ont pas besoin des mots de passe des utilisateurs pour entrer dans votre système, mais puisque beaucoup de gens réutilisent leurs mots de passe, c'est toujours une mauvaise idée de négliger l'importance d'un algorithme de hachage fort + sel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X