web-dev-qa-db-fra.com

Bcrypt est-il un algorithme de hachage ou mon matériel d'étude est-il incorrect?

J'étudie actuellement pour mon examen Comptia Security + et sur un test de pratique en ligne, j'ai eu cette question:


Ou, représenté sous forme de texte:

▶ Which of the following are hashing algorithms? (Select all that apply)
----------------------------------
???? ✔️ ☑️  MD5 (☑️ Your answer)
???? ✔️ ☑️  RIPEMD (☑️ Your answer)
???? ☐ ➖  Bcrypt (❌ Your answer)
???? ✔️ ☑️  HMAC (☑️ Your answer)
???? ✔️ ☑️  SHA (☑️ Your answer)
----------------------------------
➖ Your answer to this question is incorrect or incomplete.

Ai-je eu tort d'inclure Bcrypt comme algorithme de hachage?

62
treefidy

Ce n'est pas une bonne question. Vous n'avez pas tort d'appeler bcrypt un "algorithme de hachage", mais ils n'ont pas tort qu'il soit qualitativement différent des autres, bien qu'il soit curieux qu'ils distinguent bcrypt et pas HMAC aussi. Nous pouvons les regrouper en trois catégories:

  • bcrypt est censé être un mot de passe , également connu sous le nom de mot de passe fonction de dérivation des clés, dont le but est d'être coûteux à calculer de sorte que même si cela ne prend pas beaucoup d'essais en moyenne pour un adversaire pour deviner quelle était l'entrée, il y a un coût élevé à tester chaque supposition. D'autres exemples incluent PBKDF2, scrypt et Argon2 et Balloon hash.

  • MD5, RIPEMD et SHA sont censés être hachés résistants aux collisions , dont le but est pour rendre difficile la recherche de messages distincts ayant le même hachage. En l'occurrence, MD5, RIPEMD, SHA-0 et SHA-1 (mais pas SHA-2 ou SHA-3) sont tous cassés - des collisions ont été signalées pour tous. Ils sont également conçus pour être résistants à la pré-image, de sorte qu'il est difficile de trouver un message ayant un hachage prescrit, et résistant à la deuxième pré-image, de sorte qu'il soit difficile de trouver un deuxième message ayant le même hachage qu'un message prescrit; aucun d'eux n'a eu ces propriétés cassées. D'autres exemples - qui, à la différence de MD5, RIPEMD et SHA-0/SHA-1, sont ininterrompus à ce jour - incluent BLAKE2b et SHAKE128.

  • HMAC est une technique de construction familles de fonctions pseudo-aléatoires (PRF) ou codes d'authentification de message (MAC) sur certaines fonctions de hachage comme SHA-256; parfois HMAC est vaguement appelé un `` hachage à clé '', mais cela ne précise pas vraiment quel est l'objectif de sécurité, qui est l'imprévisibilité en tant que MAC ou la pseudo-aléatoire en tant que PRF: si la clé est choisie uniformément au hasard, un adversaire qui ne sait pas que la clé ne peut pas deviner le MAC d'un message et ne peut pas distinguer le hachage d'un message d'une chaîne de bits aléatoire uniforme.

Le mot "hachage" seul en cryptographie signifie simplement une fonction qui brouille son entrée ou sa sortie brouillée. Il existe d'autres types de fonctions de hachage: la fonction de hachage de chaîne FNV-1, parfois utilisée dans les tables de hachage; familles de hachage universelles comme Poly1305, avec des limites garanties sur les probabilités de collision, parfois utilisées pour créer des codes d'authentification de message extrêmement bon marché avec une haute sécurité; des fonctions de dérivation de clés comme HKDF, utilisées pour transformer des chaînes de bits à entropie élevée mais non uniformes comme Diffie – Hellman partageant des secrets en chaînes de bits aléatoires uniformes; etc. Il n'est pas faux d'appeler l'un de ces "hachages", mais il peut être utile d'utiliser une terminologie plus spécifique comme hachage résistant aux collisions ou famille de fonctions pseudo-aléatoires ou famille de hachage universelle .

85

Curieusement, deux de ces choses ne sont pas comme les autres, mais apparemment, cela n'a marqué que l'une d'entre elles comme étant incorrecte.

Toutes les options ci-dessus sont sans doute des fonctions de hachage, en ce sens qu'elles prennent toutes un message d'entrée et produisent un "condensé" ou "hachage": un ensemble de longueur fixe de bits à haute entropie qui est déterministe sur ses entrées mais n'est pas réversible. Il existe cependant des différences à la fois dans les entrées et dans l'utilisation.

MD5, RIPEMD et SHA (maintenant généralement appelé SHA1) sont tous à peu près la même classe de fonction, prenant une seule entrée (un message arbitraire) et produisant rapidement le résumé de ce message (qui , au moins en théorie, possède une résistance aux collisions et à la pré-image.) Leurs caractéristiques particulières (à la fois mécaniquement, comme la longueur du condensé, et pratiquement, comme la sécurité) varient, mais à un niveau élevé, elles sont interchangeables.

Bcrypt prend deux paramètres supplémentaires: un sel et un facteur coût/travail. En outre, il est destiné à hacher uniquement des chaînes courtes (mots de passe ou similaires) et limite la longueur d'entrée à 72 octets utiles. Il produit une sortie comme une fonction de hachage standard, mais (peut-être beaucoup) plus lentement.

HMAC est une construction qui nécessite une fonction de hachage définie en externe. En tant que fonction, HMAC nécessite des entrées d'un message, un sel et une fonction de hachage à utiliser. Contrairement à bcrypt, il n'introduit aucune contrainte sur le message d'entrée - de cette façon, il ressemble plus aux trois autres - mais contrairement aux quatre autres, il ne spécifie pas réellement d'algorithme pour calculer un condensé, déléguant cette opération à la fonction de hachage spécifiée.

En résumé, vous pouvez plaider pour l'une des réponses suivantes:

  • Les cinq sont des fonctions de hachage, car elles prennent un message et produisent un condensé unidirectionnel, de longueur fixe, déterministe et à haute entropie.
  • Bcrypt est le seul qui n'est pas une fonction de hachage, car il ne peut pas fonctionner sur des messages de longueur arbitraire.
  • HMAC est le seul qui n'est pas une fonction de hachage, car il ne définit pas de procédure pour calculer un condensé.
  • Seuls MD5, RIPEMD et SHA sont véritables fonctions de hachage).

De toute évidence, votre matériel d'étude prend le deuxième point de vue. Personnellement, je me penche davantage vers la troisième ou la quatrième vue. HMAC-SHA-256 est une fonction de hachage (qui diffère des fonctions "pures" en nécessitant une clé), mais HMAC en soi n'est pas une fonction de hachage. Ce serait comme dire "obtenir de la farine, du sel, de l'eau et une personne qui sait comment faire des tortillas; donner la farine, l'eau et le sel à la personne; lui dire de produire une tortilla" est une recette de tortilla.

35
CBHacking

On peut trouver de nombreuses questions de "certification" qui ne sont pas idéales en essayant d'exploiter les nuances de formulation pour tester la compréhension du sujet, mais sans avoir de véritable sens dans un sens pratique. Bien que vous puissiez valablement faire valoir le point dans la réalité du monde réel, cela n'a vraiment pas d'importance face à ce que le test de certification tente d'évaluer.

Venant de mes antécédents réseau, j'ai pu facilement trouver de nombreux exemples autour de réseaux "classe". Cela fait partie des raisons pour lesquelles les questions de certification sont généralement hors sujet sur la pile Network Engineering . Il semble inutile de répondre pourquoi Test X indique que 10.250.0.0/255.255.0.0 n'est pas un réseau valide (réponse - un réseau "Classe A" a un masque de 255.0.0.0) quand il n'a vraiment aucune incidence sur la gestion d'un réseau dans le monde d'aujourd'hui.

Je ne sais pas non plus pourquoi les réponses populaires sont focalisées sur les "fonctions de hachage". La question certification demande: "Lesquels des éléments suivants sont des algorithmes de hachage ?" (c'est moi qui souligne). Il n'est pas fait mention de fonctions de hachage.

Ainsi, sur les cinq fournis, quatre peuvent être considérés comme des algorithmes à part entière, qu'ils aient ou non leurs propres fonctions de hachage intégrées. En revanche, bcrypt (alors qu'une fonction) utilise un algorithme basé sur Blowfish, ce n'est pas un algorithme en soi.

C'est peut-être une distinction stupide, mais encore une fois, c'est c'est une question de certification.

5
YLearn

De Wikipédia:

bcrypt est une fonction de hachage de mot de passe conçue par Niels Provos et David Mazières, basée sur le chiffrement Blowfish, et présentée à USENIX en 1999.

Remarque: les algorithmes de hachage de mot de passe n'ont pas besoin d'être résistants aux collisions, voir réponse de Thomas . C'est la distinction des algorithmes de hachage cryptographique.

1
kelalaka