web-dev-qa-db-fra.com

SHA512 contre Blowfish et Bcrypt

Je cherche des algorithmes de hachage, mais je n'ai pas trouvé de réponse.

  • Bcrypt utilise Blowfish
  • Blowfish est meilleur que MD5
  • Q: mais Blowfish est-il meilleur que SHA512?

Merci..

Mise à jour:

Je tiens à préciser que je comprends la différence entre le hachage et le cryptage. Ce qui m'a incité à poser la question de cette façon est cet article , , où l'auteur se réfère à bcrypt comme "hachage adaptatif"

Puisque bcrypt est basé sur Blowfish, j'ai été amené à penser que Blowfish est un algorithme de hachage. Si c'est le cryptage, comme l'ont indiqué les réponses, il me semble qu'il ne devrait pas y avoir de place dans cet article. Ce qui est pire, c'est qu'il conclut que bcrypt est le meilleur. Ce qui me dérange également à présent, c’est que la classe phpass (utilisée pour le hachage de mots de passe, je crois) utilise bcrypt (c’est-à-dire blowfish, c.-à-d. Le cryptage). Sur la base de cette nouvelle information que vous me dites (Blowfish est un cryptage), cette classe ne sonne pas bien. Est-ce que je manque quelque chose?

219
Chris

Il suffit de dire si bcrypt ou SHA-512 (dans le contexte d'un algorithme approprié comme PBKDF2) est assez bon. Et la réponse est oui, l'un ou l'autre des algorithmes est suffisamment sécurisé pour qu'une violation se produise via une faille de mise en œuvre, et non une analyse cryptographique.

Si vous tenez à savoir qui est "meilleur", SHA-512 a fait l'objet d'études approfondies par le NIST et d'autres. C'est bien, mais des failles ont été reconnues qui, bien que non exploitables à présent, ont conduit à la compétition SHA-3 pour de nouveaux algorithmes de hachage. De plus, gardez à l'esprit que l'étude des algorithmes de hachage est "plus récente" que celle des chiffrements, et que les cryptographes en apprennent toujours davantage.

Même si bcrypt dans son ensemble n’a pas fait l’objet d’un examen aussi minutieux que Blowfish lui-même, j’estime qu’être basé sur un chiffrement avec une structure bien comprise lui confère une sécurité inhérente qui manque à l’authentification par hachage. En outre, il est plus facile d'utiliser des GPU courants comme outils pour attaquer les hachages basés sur SHA-2; En raison de ses besoins en mémoire, l'optimisation de bcrypt nécessite un matériel plus spécialisé, tel que le FPGA, doté d'une mémoire vive intégrée.


Remarque: bcrypt est un algorithme qui utilise Blowfish en interne. Ce n'est pas un algorithme de chiffrement en soi. Il est utilisé pour masquer les mots de passe de manière irréversible, tout comme les fonctions de hachage sont utilisées pour effectuer un "hachage à sens unique".

Les algorithmes de hachage cryptographique sont conçus pour être impossibles à inverser. En d'autres termes, étant donné que la sortie d'une fonction de hachage, il devrait falloir "pour toujours" pour trouver un message qui produira la même sortie de hachage. En fait, il devrait être impossible, sur le plan des calculs, de trouver deux messages produisant la même valeur de hachage. Contrairement à un chiffrement, les fonctions de hachage ne sont pas paramétrées avec une clé; la même entrée produira toujours la même sortie.

Si quelqu'un fournit un mot de passe qui hache la valeur stockée dans la table des mots de passe, il est authentifié. En particulier, en raison de l’irréversibilité de la fonction de hachage, il est supposé que l’utilisateur n’est pas un attaquant qui a mis la main sur le hachage et l’a inversé pour trouver un mot de passe valide.

Considérons maintenant bcrypt. Il utilise Blowfish pour chiffrer une chaîne magique, en utilisant une clé "dérivée" du mot de passe. Plus tard, lorsqu'un utilisateur entre un mot de passe, la clé est à nouveau dérivée et si le texte chiffré produit en chiffrant avec cette clé correspond au texte chiffré stocké, l'utilisateur est authentifié. Le texte chiffré est stocké dans la table "mot de passe", mais la clé dérivée n'est jamais stockée.

Afin de casser la cryptographie ici, un attaquant devrait récupérer la clé du texte chiffré. C'est ce qu'on appelle une attaque de type "texte en clair connu", car l'attaque connaît la chaîne magique qui a été cryptée, mais pas la clé utilisée. Blowfish a fait l'objet de nombreuses études et aucune attaque permettant à un attaquant de trouver la clé avec un seul texte en clair n'est connue.

Ainsi, tout comme les résumés cryptographiques basés sur des algorithmes irréversibles, bcrypt produit une sortie irréversible, à partir d'un mot de passe, d'un sel et d'un facteur de coût. Sa force réside dans la résistance de Blowfish aux attaques en texte clair connues, ce qui est analogue à une "première attaque de pré-image" sur un algorithme d'empreinte numérique. Puisqu'il peut être utilisé à la place d'un algorithme de hachage pour protéger les mots de passe, bcrypt est appelé, de façon confuse, un algorithme de "hachage" lui-même.

En supposant que les tables Rainbow aient été contrecarrées par l'utilisation correcte du sel, toute fonction véritablement irréversible ramène l'attaquant à des essais et à des erreurs. Et la vitesse à laquelle l’attaquant peut effectuer des essais est déterminée par la vitesse de cet algorithme irréversible de "hachage". Si une seule itération d’une fonction de hachage est utilisée, un attaquant peut effectuer des millions d’essais par seconde avec un équipement coûtant environ 1000 $, en testant tous les mots de passe de 8 caractères au maximum en quelques mois.

Cependant, si la sortie du résumé est "renvoyée" des milliers de fois, il faudra des centaines d'années pour tester le même ensemble de mots de passe sur ce matériel. Bcrypt réalise le même effet de "renforcement de clé" en effectuant une itération dans sa routine de dérivation de clé. Une méthode appropriée, basée sur le hachage, telle que PBKDF2, fait de même. à cet égard, les deux méthodes sont similaires.

Ainsi, ma recommandation de bcrypt découle des hypothèses 1) selon lesquelles un Blowfish est soumis à un niveau de contrôle similaire à celui de la famille de fonctions de hachage SHA-2 et 2) que les méthodes cryptanalytiques des chiffrements sont plus développées que celles des fonctions de hachage.

317
erickson

Je suis d'accord avec la réponse de erickson, avec une mise en garde: pour l'authentification par mot de passe, bcrypt est loin meilleur qu'une itération unique de SHA-512 - simplement parce que c'est beaucoup plus lent. Si vous ne comprenez pas pourquoi la lenteur est un avantage dans ce jeu en particulier, lisez à nouveau l'article que vous avez lié (faites défiler jusqu'à ". La vitesse est exactement ce que vous ne voulez pas dans un hachage de mot de passe". fonction. ").

Vous pouvez bien sûr créer un algorithme de hachage de mot de passe sécurisé autour de SHA-512 en le répétant des milliers de fois, tout comme le fonctionnement de l'algorithme MD5 de PHK. lrich Drepper a fait exactement cela , pour la crypt de glibc (). Cependant, il n'y a pas de raison particulière de le faire si vous avez déjà une implémentation bcrypt testée disponible.

49
caf

Blowfish n'est pas un algorithme de hachage. C'est un algorithme de chiffrement. Cela signifie que vous pouvez chiffrer quelque chose en utilisant blowfish, puis plus tard, vous pouvez le déchiffrer en texte brut.

SHA512 est un algorithme de hachage. Cela signifie qu'en théorie, une fois que vous avez haché l'entrée, vous ne pouvez plus récupérer l'entrée d'origine.

Ce sont 2 choses différentes, conçues pour être utilisées pour différentes tâches. Il n'y a pas de réponse "correcte" à "le blowfish est-il meilleur que SHA512?" Vous pourriez aussi bien demander "sont des pommes mieux que des kangourous? "

Si vous voulez en savoir plus sur le sujet, voici quelques liens:

31
Glen

Blowfish n'est pas meilleur que le MD5 ou le SHA512, car ils servent différents objectifs. MD5 et SHA512 sont des algorithmes de hachage, Blowfish est un algorithme de cryptage. Deux fonctions cryptographiques totalement différentes.

4
blowdart

Je recommanderais la mise en œuvre de la cryptographie basée sur SHA-256/SHA-512 d'Ulrich Drepper.

Nous avons porté ces algorithmes en Java et vous pouvez en trouver une version sous licence libre à l’adresse suivante: ftp://ftp.arlut.utexas.edu/Java_hashes/ .

Notez que la plupart des (L) Unices modernes supportent l'algorithme de Drepper dans leurs fichiers/etc/shadow.

2
Jonathan Abbey

Je viens de rencontrer ça:

http://codahale.com/how-to-safely-store-a-password/

L'auteur de cet article peut-il se tromper?

2
disappearedng