Il devrait suffire 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 algorithme est suffisamment sécurisé pour qu'une brèche se produise à travers une faille d'implémentation, pas une cryptanalyse.
Si vous insistez pour savoir ce qui est "meilleur", SHA-512 a fait l'objet de critiques approfondies par le NIST et d'autres. C'est bien, mais des défauts ont été reconnus qui, bien qu'ils ne soient pas exploitables maintenant, ont conduit à la compétition SHA-3 pour de nouveaux algorithmes de hachage. Gardez également à l'esprit que l'étude des algorithmes de hachage est "plus récente" que celle des chiffrements et que les cryptographes en apprennent encore plus.
Même si bcrypt dans son ensemble n'a pas fait l'objet d'un examen aussi minutieux que Blowfish lui-même, je pense qu'être basé sur un chiffrement avec une structure bien comprise lui confère une sécurité inhérente qui fait défaut à l'authentification basée sur le hachage. De plus, il est plus facile d'utiliser des GPU courants comme outil 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é comme FPGA avec une certaine mémoire RAM intégrée.
Remarque: bcrypt est un algorithme qui utilise Blowfish en interne. Ce n'est pas un algorithme de chiffrement lui-même. 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 unidirectionnel".
Les algorithmes de hachage cryptographiques sont conçus pour être impossibles à inverser. En d'autres termes, étant donné uniquement la sortie d'une fonction de hachage, il devrait prendre "indéfiniment" pour trouver un message qui produira la même sortie de hachage. En fait, il devrait être impossible de trouver deux messages qui produisent la même valeur de hachage. Contrairement à un chiffre, 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 s'est emparé du hachage et l'a inversé pour trouver un mot de passe de travail.
Considérez maintenant bcrypt. Il utilise Blowfish pour crypter 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 par chiffrement 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 en "texte en clair connu", car l'attaque connaît la chaîne magique qui a été chiffrée, mais pas la clé utilisée. Blowfish a été étudié de manière approfondie, et aucune attaque n'est encore connue qui permettrait à un attaquant de trouver la clé avec un seul texte en clair connu.
Ainsi, tout comme les digestions cryptographiques basées 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 connues en texte clair, qui est analogue à une "première attaque pré-image" sur un algorithme de résumé. Puisqu'il peut être utilisé à la place d'un algorithme de hachage pour protéger les mots de passe, bcrypt est désigné par confusion comme un algorithme de «hachage» lui-même.
En supposant que les tables arc-en-ciel ont été contrecarrées par une bonne utilisation du sel, toute fonction vraiment irréversible réduit l'attaquant à des essais et erreurs. Et la vitesse à laquelle l'attaquant peut effectuer des essais est déterminée par la vitesse de cet algorithme de «hachage» irréversible. Si une seule itération d'une fonction de hachage est utilisée, un attaquant peut faire des millions d'essais par seconde en utilisant un équipement qui coûte de l'ordre de 1000 $, testant tous les mots de passe jusqu'à 8 caractères en quelques mois.
Si toutefois, 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 obtient le même effet de "renforcement des clés" en itérant à l'intérieur de sa routine de dérivation de clés, et une méthode basée sur le hachage appropriée comme PBKDF2 fait la même chose; à cet égard, les deux méthodes sont similaires.
Donc, ma recommandation de bcrypt découle des hypothèses 1) qu'un Blowfish a eu un niveau d'examen similaire à la famille SHA-2 de fonctions de hachage, et 2) que les méthodes cryptanalytiques pour les chiffrements sont mieux développées que celles pour les fonctions de hachage.