Titre d'identification du site
Format PDF
Menu principal :
Catégories :
À propos :

Plusieurs d'entre nous ont toujours ce désir d'apprendre de nouvelles choses afin d'enrichir leur savoir. Que ce soit pour parfaire une culture personnelle, pour des raisons professionnelles ou encore éducatives. On peut aussi avoir le désir de rafraîchir certaines notions qu'on a déjà apprises mais oubliées avec le temps. Par exemple, en faisant un retour plusieurs années plus tard sur des matières qu'on a aimées à l'école, et peut-être même sur celles qu'on a détestées!

Quoiqu'il en soit, ce site vous propose des contenus sur différents sujets de culture générale. Je me présente, Claude Mallette, retraité dans le domaine de l'informatique. Je suis toujours animé par cette soif d'étendre mon champ de connaissances et j'aimerais en partager le fruit avec vous. J'ai une préférence pour tout ce qui concerne la science mais j'ai aussi un intérêt pour d'autres domaines comme, par exemple, l'histoire.

Les sujets dans ce site sont présentés sous forme d'articles et de tableaux regroupés par catégories. Le tout est présenté dans un style condensé qui permet de prendre connaissance de plusieurs faits dans un même contenu. Pour emprunter une formule souvent entendue, ici on essaie de « faire plus avec moins »!

Bien que le site puisse être utilisé sur un appareil mobile comme un téléphone, il est toutefois recommandé de le consulter sur PC afin de bénéficier d'une meilleure expérience utilisateur en raison des tableaux qui peuvent s'étendre en largeur.

Fermer

Algorithmes de hachage

Publication initiale : 4 juillet 2025

À savoir avant de commencer :

  • Notation hexadécimale;
  • Si possible, quelques notions sur les opérations modulo;
  • Si possible, quelques notions sur les opérations sur des bits : OU exclusif, décalage, etc.

1. Introduction

Le hachage est une opération qui consiste à convertir dans un bloc de longueur fixe, appelé empreinte, un texte ou message d'une longueur quelconque (en réalité, il y a une limite mais celle-ci est très grande). Le hachage est effectué à l'aide d'un algorithme consacré à cette tâche comme SHA-256, de la famille SHA-2 (SHA pour Secure Hash Algorithm). Celle-ci est très largement utilisée sur Internet et sera décrite plus en détail dans cet article.

(Texte brut)

bonjour

2CB4B1431B84EC15D35ED83BB927E27E8967D75F4BCD9CC4B25C8D879AE23E18

(Empreinte avec algorithme de hachage SHA-256, notation hexadécimale)

L'empreinte fournie par un algorithme de hachage paraît avoir un aspect cryptographique comme montré ci-dessus et peut ressembler à un message secret chiffré par un émetteur et déchiffré par son destinataire, mais ce n'est pas le cas. Le hachage est différent du chiffrement des données et ne doit pas être confondu avec ce dernier.

Le hachage sert d'une certaine manière à protéger des données, au même titre que le chiffrement, mais dans le but d'en vérifier l'intégrité et non pas d'en faire des textes secrets. Le hachage peut permettre aussi d'authentifier des données (plus de détails à ce sujet plus loin dans l'article), ce qui est différent du chiffrement des données.

2. Propriétés

2.1 Faibles risques de collision

La conception d'un algorithme de hachage repose notamment sur le principe de fournir un résultat presque unique pour chaque texte brut. Les risques de « collision » résultant d'un hachage, c'est-à-dire la possibilité d'avoir une même empreinte pour deux textes différents fournis en entrée, sont toujours possibles puisqu'un algorithme de hachage peut accepter en principe un nombre extrêmement élevé de textes bruts différents. Dans ce cas, il peut inévitablement se produire en principe des collisions mais les risques demeurent très faibles.

2.2 Déterminisme

En dépit de l'apparence aléatoire qu'une empreinte de hachage telle que vue dans l'exemple montré plus haut, celle-ci sera toujours la même à chaque fois qu'on lui fournit en entrée le même texte brut. Ainsi, le mot « bonjour » va toujours donner la même empreinte à chaque fois qu'on l'utilise avec l'algorithme SHA-256. Cela fait en sorte que le hachage est un algorithme « déterministe ».

2.3 Irréversibilité

De plus, l'empreinte fournie par un algorithme de hachage est irréversible, c'est-à-dire qu'il n'est pas possible de déterminer le texte initial fourni en entrée à partir de l'empreinte. Ainsi avec l'empreinte donnée en exemple plus haut, on ne peut pas, en faisant le chemin inverse à partir de l'empreinte, savoir qu'elle correspond au mot « bonjour ».

2.4 Effet avalanche

Finalement, un algorithme de hachage va retourner des empreintes très différentes pour deux valeurs en entrée qui sont presque identiques et qui n'ont qu'une très légère différence entre eux. C'est ce qu'on appelle l'« effet avalanche », par analogie au fait qu'une toute petite perturbation dans les hauteurs enneigées d'une montagne peut déclencher une énorme avalanche.

(Texte brut de l'exemple montré plus haut mais avec un B majuscule)

Bonjour

9172E8EEC99F144F72ECA9A568759580EDADB2CFD154857F07E657569493BC44

(Empreinte avec algorithme SHA-256)

Comparaison :

2CB4B1431B84EC15D35ED83BB927E27E8967D75F4BCD9CC4B25C8D879AE23E18 (bonjour)

9172E8EEC99F144F72ECA9A568759580EDADB2CFD154857F07E657569493BC44 (Bonjour)

3. Utilisation

3.1 Principe général

L'utilisation la plus simple d'un algorithme de hachage consiste à vérifier l'intégrité des données transmises entre un émetteur et un destinataire selon la description donnée en étapes dans les prochaines sections.

3.1 1 Hachage par l'émetteur

L'émetteur applique l'algorithme de hachage au texte brut T afin d'obtenir l'empreinte initiale H.

Hachage par l'émetteur
Fig. 1 : Hachage par l'émetteur

3.1 2 Envoi par l'émetteur/réception par le destinataire

L'émetteur transmet le texte brut T et l'empreinte H. Le destinataire reçoit les données (censément les mêmes) qui, de son côté, sont nommées T' et H', respectivement.

Envoi par l'émetteur/réception par le destinataire
Fig. 2 : Envoi par l'émetteur/réception par le destinataire

3.1 3 Hachage par le destinataire

Le destinataire applique l'algorithme de hachage au texte brut reçu T' afin d'obtenir une empreinte de vérification H''.

Hachage par le destinataire
Fig. 3 : Hachage par le destinataire

3.1 4 Comparaison des empreintes par le destinataire

Le destinataire compare l'empreinte reçue H' avec celle de vérification H''. Si les empreintes sont identiques, l'intégrité du texte transmis est assurée. Dans le cas, contraire, les données sont compromises, soit par une manipulation intentionnelle non autorisée, soit suite à un incident quelconque (ex. : difficulté dans la communication).

Comparaison des empreintes par le destinataire
Fig. 4 : Comparaison des empreintes par le destinataire

3.2 Détection des défauts d'intégrité

Si seul le texte brut T est altéré, celui-ci donnera une empreinte de vérification H'' différente de l'empreinte reçue H' (qui n'a pas changé) du côté du destinataire et une erreur sera détectée dans cette situation.

Altération du texte brut
Fig. 5 : Altération du texte brut

Si seule l'empreinte H est altérée, l'empreinte reçue H' sera différente de l'empreinte initiale et de celle de vérification H'', ce qui sera aussi détecté comme une erreur.

Altération de l'empreinte
Fig. 6 : Altération de l'empreinte

3.3 Volet authentification

Les cas d'altération du texte brut seul ou de l'empreinte seule présentés précédemment sont plus susceptibles de se produire lors de difficultés techniques dans la communication (ex. : bris, bruit) entre l'émetteur et le destinataire. Cependant en cas d'intervention malveillante par un tiers, il est plus probable que le texte brut ainsi qu'une empreinte tout à fait valide pour ce texte se substituent aux données envoyées par l'émetteur. L'utilisation du hachage en prenant en compte seulement le texte brut n'est pas suffisante pour prevenir un tel cas et un volet authentification est nécessaire pour cela.

Pour prévenir toute manipulation malintentionnée des données entre l'émetteur et le destinataire, une clé commune, connue seulement de l'émetteur et du destinataire, doit alors être ajoutée au texte brut et ainsi être incluse dans l'opération de hachage pour rendre la transmission plus sécuritaire.

Authentification avec clé commune
Fig. 7 : Authentification avec clé commune

3.4 Gestion des mots de passe

Les algorithmes de hachage sont aussi utilisés pour la gestion des mots de passe des comptes d'utilisateurs pour des sites Internet. Le modèle d'opération pour la gestion des mots de passe est différent de ce qui a été montré précédemment mais celui-ci repose essentiellement sur le principe d'authentification.

Dans ce modèle, tout le travail est fait au niveau de serveur du site. Une gestion rigoureuse et sérieuse des mots de passe par un site exigera de celui-ci de ne jamais conserver sur le serveur les mots de passe en clair. Il doit plutôt conserver leurs empreintes.

Un des algorithmes les plus utilisés pour la gestion des mots de passe est l'algorithme bcrypt. Celui-ci a recours à un nombre aléatoire, appelé le « sel », généré lors de la création (ou modification) du mot de passe. Ce sel agit à titre de « clé commune connue de l'émetteur et du récepteur » telle que mentionnée à la section précédente concernant le volet authentification.

3.4 1 Lors de la création ou modification du mot de passe

L'utilisateur entre d'abord son code U et le mot de passe de son choix P, puis le serveur détermine le sel S à l'aide d'un générateur de nombres aléatoires.

Entrée du mot de passe et génération du sel
Fig. 8 : Entrée du mot de passe et génération du sel

Le serveur poursuit en appliquant l'algorithme de hachage bcrypt au mot de passe P et au sel S mis bout à bout afin d'obtenir l'empreinte H.

Hachage par le serveur
Fig. 9 : Hachage par le serveur

À noter que l'empreinte montrée ici est représentée par une notation propre à bcrypt, adaptée à partir de la notation base64 (plus de détail à propos de la notation base64 sur Wikipédia).

Le code d'utilisateur U, le sel S et l'empreinte H sont finalement conservés dans la base de données du serveur.

Conservation des données par le serveur
Fig. 10 : Conservation des données par le serveur

3.4 2 Lors d'une connexion ultérieure

L'utilisateur entre d'abord son code U et le mot de passe P, puis le serveur récupère de sa base de données le sel S et l'empreinte H pour l'utilisateur U.

Récupération des données par le serveur
Fig. 11 : Récupération des données par le serveur

Le serveur valide le mot de passe P entré par l'utilisateur en lui ajoutant le sel S afin d'appliquer au tout l'algorithme bcrypt pour obtenir l'empreinte de vérification H'. Il fait ensuite la comparaison entre cette empreinte et celle déjà conservée, H, afin de déterminer si l'accès doit être accordé ou non à l'utilisateur.

Validation du mot de passe
Fig. 12 : Validation du mot de passe

3.5 Chaîne de blocs ou blockchain

Le hachage joue un rôle primordial dans la technologie de la blockchain. Très sommairement, la blockchain consiste en une sorte de « grand livre comptable » maintenu en plusieurs exemplaires par des ordinateurs, appelés les noeuds, dans lequels sont conservées des transactions.

Comme son nom l'indique, la blockchain est séparée en blocs reliés entre eux et chaque nouveau bloc ajouté à la chaîne est le résultat d'une « compétition », appelée le minage, entre des noeuds du réseau. Le « gagnant » reçoit une récompense puisée dans les frais de transactions effectuées dans le réseau de la blockchain.

Dans la blockchain, le hachage est principalement effectué dans les contextes suivants :

  • Identifier les transactions par des empreintes et valider celles-ci lorsqu'elles sont ajoutées à un bloc;

  • Relier les blocs entre eux pour rendre impossible toute altération de l'un ou l'autre de ceux-ci par une partie mal intentionnée;

  • Pour le minage, générer de façon répétitive des empreintes à partir des données des transactions incluses dans un bloc en utilisant à chaque fois un nouveau nombre aléatoire jusqu'à ce qu'un noeud soit désigné le « gagnant » pour la création d'un nouveau bloc dans la blockchain.

4. Description générale de l'algorithme SHA-384

Pour les prochaines sections, nous allons utiliser comme modèle d'algorithme de hachage l'algorithme SHA-384, qui utilise une empreinte H de 512 bits. Cet algorithme fait également partie de la famille SHA-2 au même titre que SHA-256, utilisé jusqu'ici dans l'article et basé sur une empreinte de 256 bits.

Bien qu'il soit moins utilisé actuellement sur Internet que SHA-256, l'algorithme SHA-384 est tout de même très répandu dans les organisations (gouvernement, institutions bancaires, etc.) conservant des données sensibles afin d'en accroître le degré de protection avec une plus longue empreinte. Le principe général de fonctionnement est le même pour les deux algorithmes (comme pour toute la famille SHA-2 d'ailleurs); la différence se situe principalement au niveau de la taille des données manipulées, dont l'empreinte.

Le but de l'algorithme SHA-384 est de produire une empreinte très probablement unique de 512 bits H pour un texte brut T d'une longueur quelconque. Le résultat retourné est constitué des 384 premiers bits de l'empreinte H.

4.1 Prétraitement du texte brut T

Avant de commencer l'exécution de l'algorithme, un prétraitement qui consiste à ajouter certaines données additionnelles de contrôle à la fin du texte brut est effectué afin que le tout consiste en un « texte formaté » Tf dont la longueur est un multiple exact de 1024 bits. Le détail sur les données additionnelles est donné un peu plus loin, à la section 5.1.

Prétraitement du texte brut <i>T</i>
Fig. 13 : Prétraitement du texte brut T

4.2 Initialisation de l'empreinte H

Le début de l'algorithme comprend également une étape d'initialisation de l'empreinte H avec des valeurs prédéfinies. Pour cela, l'empreinte de 512 bits est divisée en 8 mots de 64 bits, identifiés de a à h. Les valeurs, déterminées par les concepteurs de l'algorithme, sont données à l'annexe A.

Empreinte <i>H</i> divisée en 8 mots
Fig. 14 : Empreinte H divisée en 8 mots

4.3 Fonctionnement global divisé en blocs de 1024 bits

Une fois le prétraitement et l'initialisation de l'empreinte complétés, le traitement de l'algorithme consiste à diviser conceptuellement le texte formaté T en blocs de 1024 bits et à appliquer pour chaque bloc de 1024 bits parcouru une série de transformations de l'empreinte H à partir du contenu du bloc. Le contenu de l'empreinte H après le dernier bloc constitue le résultat fourni en sortie par l'algorithme.

Fonctionnement global divisé en blocs de 1024 bits
Fig. 15 : Fonctionnement global divisé en blocs de 1024 bits

4.4 Série de transformations à chaque bloc de 1024 bits

Chaque série de transformations de l'empreinte H pour un bloc donné consiste à appliquer sur l'empreinte 80 rondes de transformation numérotées de 0 à 79. En support aux rondes de transformations, deux tableaux de 80 éléments chacun, K et W, sont utilisés. Les éléments dans chacun de ceux-ci sont également numérotés de 0 à 79 afin qu'ils correspondent chacun à la ronde du même numéro.

Série de transformations à chaque bloc de 1024 bits
Fig. 16 : Série de transformations à chaque bloc de 1024 bits

4.4 1 Tableau de constantes K

Le premier tableau K contient des constantes dont les valeurs ne changent pas d'un bloc de 1024 bits à l'autre. Les valeurs des constantes sont données à l'annexe B.

4.4 2 Tableau de contrôle W

Le second tableau, le tableau de contrôle W, a un contenu qui change à chaque bloc de 1024 bits. Pour le mettre à jour, on utilise le bloc actuel de 1024 bits en le divisant en 16 mots de 64 bits. On reproduit ensuite les valeurs de ceux-ci dans les 16 premiers éléments W0 à W15.

Les valeurs dans W0 à W15 sont ensuite utilisées pour propager des nouvelles valeurs aux éléments W16 à W79 qui sont modifiées d'un élément à l'autre. Le procédé utilisé à cette fin est donné en détail un peu plus loin, à la section 5.2.

Tableau de contrôle <i>W</i>
Fig. 17 : Tableau de contrôle W

5. Détail des opérations

Cette section donne de manière plus formelle des détails sur les parties les plus complexes de l'algorithme dont la description générale a été présentée à la section précédente. Il est important ici d'avoir certaines connaissances concernant les opérations modulo et les opérations sur des bits comme le OU exclusif et le décalage pour avoir une certaine compréhension du contenu de la section. Les lecteurs moins familiers peuvent tout de même se baser sur les sections précédentes pour avoir un aperçu général du fonctionnement d'un algorithme de hachage et passer immédiatement à la prochaine section 6 (Autres algorithmes de la famille SHA-2).

5.1 Données additionnelles ajoutées à la fin du texte brut

Comme mentionné plus tôt à la section 4.1, un prétraitement consistant à ajouter certaines données additionnelles à la fin du texte brut T est effectué. Ces données sont indiquées ci-dessous :

  • Un bit de délimitation 1;
  • Une suite de bits de remplissage de longueur variable avec la valeur 0;
  • Dans un champ de 128 bits, la longueur en bits L du texte brut original T.

Tout l'ensemble composé du texte brut T et des données additionnelles mentionnées ci-dessus formera le texte formaté T servant à l'opération de hachage dans son entier afin de transformer l'empreinte H. L'ajout des données additionnelles fait en sorte que la longueur de T sera toujours un multiple de 1024 bits.

Dans certains cas, l'ajout des données additionnelles peut nécessiter l'ajout d'un bloc de 1024 bits additionnel. Le tout dépend du nombre de bits R dans le dernier bloc de 1024 bits du texte brut original T. Les différentes possibilités concernant la manière de disposer les données additionnelles sont montrées ci-dessous.

Possibilités de disposition des données additionnelles
Fig. 18 : Possibilités de disposition des données additionnelles

5.2 Mise à jour du tableau de contrôle W

Comme mentionné plus tôt à la section 4.4.2, les 16 premiers éléments de W contiennent essentiellement les mêmes valeurs que celles des 16 mots de 64 bits formant le bloc de 1024 bits où l'on est rendu.

Pour les éléments aux positions 16 à 79 du tableau W, le traitement est plus complexe comme en fait foi le diagramme ci-dessous.

Mise à jour du tableau de contrôle W pour les positions 16 à 79
Fig. 19 : Mise à jour du tableau de contrôle W pour les positions 16 à 79

Les symboles σ0 et σ1 utilisés dans la figure ci-dessus sont ceux mentionnés tels quels par les concepteurs de l'algorithme.

Pour chaque élément à la position t dans le tableau, il faut ainsi prendre en compte les valeurs des éléments aux positions suivantes : t - 2, t - 7, t - 15 et t - 16.

Exemples :

  • Pour W16, il faut prendre en compte les valeurs aux positions 14, 9, 1 et 0;
  • Pour W17, il faut prendre en compte les valeurs aux positions 15, 10, 2 et 1;
  • Pour W79, il faut prendre en compte les valeurs aux positions 77, 72, 64 et 63.
  • 5.2 1 Addition modulo

    L'addition modulo 264 mentionnée dans le diagramme est utilisée à plusieurs reprises dans l'algorithme. Cette addition se fait entre deux mots de 64 bits et consiste à ne garder que les 64 bits les moins significatifs du résultat de l'addition.

    L'exemple simplifié ci-dessous en base 28 permet d'illustrer l'opération. Le principe est essentiellement le même avec la base 264 car il s'applique de façon identique à toutes les puissances de 2.

      Binaire     Hexa     Décimal
      10011101     9D     157  
    + 10101010   + AA   + 170  
    = 101000111   = 147   = 327  
    = 01000111 (mod 28) = 47 (mod 100 [hexa]) = 71 (mod 256)

    La « perte » de bits découlant de l'addition modulo constitue en fait un avantage pour l'algorithme de hachage car elle lui permet d'être irréversible, faisant en sorte qu'il n'est pas possible de reconstituer le texte brut original à partir de l'empreinte résultant de l'algorithme.

    5.3 Ronde de transformation de l'empreinte H

    Cette partie constitue le noyau de l'algorithme SHA-384. Sa fonction est, lors de toute ronde de transformation pour un bloc de 1024 bits donné, d'attribuer aux mots a à h de l'empreinte H des nouvelles valeurs correspondantes a' à h' et par le fait même un nouveau contenu d'empreinte H'. Pour cela, plusieurs opérations sur des bits choisies par les concepteurs de l'algorithme sont utilisées.

    5.3 1 Mise à jour des mots b, c, d, f, g et h

    La partie la plus simple d'une ronde de transformation consiste à déterminer les nouvelles valeurs pour b', c', d', f' g' et h'. La même opération est employée pour chacun de ces mots et consiste à faire l'addition modulo 264 de l'ancienne valeur du mot et celle du mot qui précède dans l'empreinte.

    Mise à jour des mots b, c, d, f, g et h
    Fig. 20 : Mise à jour des mots b, c, d, f, g et h

    5.3 2 Mise à jour du mot a

    Pour déterminer la nouvelle valeur a', les calculs sont nettement plus complexes tels que montrés ci-dessous.

    Mise à jour du mot <i>a</i>
    Fig. 21 : Mise à jour du mot a

    Sans entrer dans les détails, les calculs pour la nouvelle valeur de a utilisent essentiellement toutes les anciennes valeurs de a à h. Le mot de contrôle Wt et la constante Kt correspondant à la ronde sont également employés. Les symboles Σ0, Σ1, CH et Maj sont ceux utilisés par les concepteurs de l'algorithme.

    5.3 3 Mise à jour du mot e

    Pour déterminer la nouvelle valeur e', il y a moins de calculs mais ceux-ci demeurent complexes.

    Mise à jour du mot <i>e</i>
    Fig. 22 : Mise à jour du mot e

    6. Autres algorithmes de la famille SHA-2

    Le tableau ci-dessous donne la liste des algorithmes de la famille SHA‑2 et les principales différences entre eux.

    • Seuls les 32 premiers bits de d sont retenus par l'algorithme SHA-512/224.
    Tableau 1 - Famille d'algorithmes SHA-2
    Algorithme Taille mot (octets / bits) Longueur H (bits) Longueur bloc (bits) Partie de H retenue Rondes transf. Long. max. texte (bits)
    SHA-224 4 / 32 256 512

    a b c d e f g

    (224 bits)

    64 264
    SHA-256 4 / 32 256 512

    a b c d e f g h

    (256 bits)

    64 264
    SHA-384 8 / 64 512 1024 

    a b c d e f g

    (384 bits)

    80 2128
    SHA-512 8 / 64 512 1024 

    a b c d e f g h

    (512 bits)

    80 2128
    SHA‑512/224 8 / 64 512 1024 

    a b c d *

    (224 bits)

    80 2128
    SHA‑512/256 8 / 64 512 1024 

    a b c d

    (256 bits)

    80 2128

    Comme mentionné plus tôt au début de la section 4, l'algorithme SHA‑384 utilise une empreinte H de 512 bits et des blocs de 1024 bits de texte formaté basés sur des mots de 64 bits. Ce n'est cependant pas le cas de tous les algorithmes de la famille SHA‑2 dont SHA‑384 fait partie.

    Les algorithmes SHA‑224 et SHA‑256, de leur côté, utilisent des mots de 32 bits, ce qui se répercute dans la longueur de l'empreinte H — qui comprend 8 mots pour toute la famille SHA‑2 — ainsi que dans la longueur du bloc utilisée pour diviser un texte formaté (le bloc comporte toujours 16 mots). SHA‑224 et SHA‑256 utilisent par ailleurs moins de rondes de transformation.

    Les algorithmes ont également des différences entre eux concernant les points suivants, non indiqués dans le tableau :

    • Valeurs d'initialisation de l'empreinte H;
    • Valeurs dans le tableau K de constantes.

    7. Sécurité des données

    7.1 Situation actuelle

    Bien que les algorithmes de hachage ne soient pas utilisés pour faire du chiffrement de données, les empreintes qui sont conservées suite à leur application recèlent souvent des données sensibles (mot de passe, numéro de carte de crédit, etc.) et peuvent ainsi être des cibles d'attaques numériques.

    Étant donné le caractère irréversible des empreintes de hachage, il n'est pas possible de reconstituer à partir d'une empreinte le texte brut qui en est à l'origine. Le travail à effectuer pour une intervention malveillante consiste donc plutôt à prendre un texte brut quelconque et tenter de générer une empreinte identique à une autre qui est déjà conservée sur un serveur.

    Les algorithmes de hachage couramment utilisés comme SHA‑256, SHA‑384 et bcrypt constituent des valeurs sûres en matière de sécurité des données. L'empreinte de 256 bits de SHA‑256 et celle de 384 bits pour SHA‑384 sont suffisamment grandes pour rendre impossible la tâche de générer des empreintes identiques dans le cadre d'une attaque par force brute.

    Du côté de l'algorithme bcrypt, l'empreinte est de 192 bits. Bien que cette empreinte soit plus petite, l'application de l'algorithme bcrypt est beaucoup plus lente que celle de SHA‑256 et SHA‑384, ce qui rend également très compliquée la possibilité de faire une attaque par force brute.

    7.2 Résistance face aux ordinateurs quantiques

    Avec l'émergence des ordinateurs quantiques dans un futur plus ou moins lointain, les algorithmes comme SHA‑256, SHA‑384 et bcrypt devraient demeurer des moyens fiables pour protéger les données. Ceux-ci peuvent résister à l'application de l'algorithme de Grover, un algorithme développé pour les ordinateurs quantiques permettant de réduire de la racine carrée l'effort actuellement requis pour une attaque par force brute.

    Considérant que l'effort d'une attaque par force brute pour SHA‑256, par exemple, est de l'ordre de 2256 (environ 1077) opérations, cela donnerait 2128 (environ 1038) opérations à effectuer, ce qui est encore énorme, même pour un ordinateur quantique. L'utilisation de SHA‑384 augmente exponentiellement cet ordre de complexité.

    Pour l'algorithme bcrypt, le principe est similaire, en réduisant de moitié l'exposant. De 2192 (environ 1057) opérations requises, on passe à 296 (environ 1028) opérations pour une attaque par force brute avec l'algorithme de Grover. En prenant en compte la lenteur de l'application de l'algorithme bcrypt, l'opération demeure impensable.

    Malgré les signes rassurants concernant les algorithmes de hachage, une certaine vigilance est de rigueur car d'autres algorithmes plus performants que Grover pourraient voir le jour et compromettre leur sécurité. C'est pourquoi des recherches sont en cours pour trouver des alternatives « post-quantiques » aux algorithmes existants, même si ceux-ci sont robustes.

    8. Conclusion

    De façon sommaire, un algorithme de hachage permet d'obtenir une empreinte numérique quasi-unique pour un texte brut. Grâce à l'effet avalanche, cette empreinte sera très différente si on modifie le moindrement le texte brut. Par exemple, « bonjour » et « Bonjour » vont générer des empreintes complètement différentes qui ne permettront pas de voir que la seule différence entre les deux mots est le « B » majuscule au début.

    La faculté d'un algorithme de hachage de produire une empreinte irréversible procure un certain degré de confidentialité dans le sens qu'il n'est pas possible de reconstituer le texte brut à partir de l'empreinte. Ce n'est toutefois pas le seul facteur qui contribue à rendre un algorithme de hachage robuste sur le plan sécuritaire; la taille de l'empreinte et la lenteur de l'algorithme y sont pour beaucoup.

    L'utilisation à laquelle est destinée l'empreinte résultant d'un hachage consiste à comparer cette empreinte avec une autre empreinte afin de vérifier si les deux empreintes ont été déterminées pour le même texte brut. Un résultat indiquant que les deux empreintes sont pareilles permet d'assurer l'intégrité des données ou, selon le cas, d'authentifier un accès quelconque.

    Références

    National Institute of Standards and Technology (Août 2015). Secure Hash Standard (SHS). NIST - National Institute of Standards and Technology.
    https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf

    Constantin, L. (2021, 13 janvier). Hashing explained: Why it’s your best bet to protect stored passwords. CSO.

    Bybit (2023, 7 novembre). Explained: What Is Hashing in Blockchain?. Bybit.

    Pages Wikipédia

    Utilitaire de test

    AES Encryption and Decryption Online. Devglan.
    https://md5calc.com/hash

    Annexe A - Initialisation des l'empreinte H

    Les mots de 64 bits a à h composant l'empreinte H de bits sont initialisés avec les valeurs suivantes, déterminées par les concepteurs de l'algorithme :

    • a = CBBB9D5DC1059ED8;
    • b = 629A292A367CD507;
    • c = 9159015A3070DD17;
    • d = 152FECD8F70E5939;
    • e = 67332667FFC00B31;
    • f = 8EB44A8768581511;
    • g = DB0C2E0D64F98FA7;
    • h = 47B5481DBEFA4FA4.

    Remarques :

    • Chaque algorithme de la famille SHA-2 a ses propres valeurs d'initialisation pour l'empreinte H;
    • Les nombres proviennent des 64 premiers bits de la partie fractionnaire des racines carrées des nombres premiers 23, 29, 31, 37, 41, 43, 47 et 53.

    Annexe B - Contenu du tableau de constantes K

    (Notation hexadécimale)

    428A2F98D728AE22
    7137449123EF65CD
    B5C0FBCFEC4D3B2F
    E9B5DBA58189DBBC
    3956C25BF348B538
    59F111F1B605D019
    923F82A4AF194F9B
    AB1C5ED5DA6D8118
    D807AA98A3030242
    12835B0145706FBE
    243185BE4EE4B28C
    550C7DC3D5FFB4E2
    72BE5D74F27B896F
    80DEB1FE3B1696B1
    9BDC06A725C71235
    C19BF174CF692694
    E49B69C19EF14AD2
    EFBE4786384F25E3
    0FC19DC68B8CD5B5
    240CA1CC77AC9C65
    2DE92C6F592B0275
    4A7484AA6EA6E483
    5CB0A9DCBD41FBD4
    76F988DA831153B5
    983E5152EE66DFAB
    A831C66D2DB43210
    B00327C898FB213F
    BF597FC7BEEF0EE4
    C6E00BF33DA88FC2
    D5A79147930AA725
    06CA6351E003826F
    142929670A0E6E70
    27B70A8546D22FFC
    2E1B21385C26C926
    4D2C6DFC5AC42AED
    53380D139D95B3DF
    650A73548BAF63DE
    766A0ABB3C77B2A8
    81C2C92E47EDAEE6
    92722C851482353B
    A2BFE8A14CF10364
    A81A664BBC423001
    C24B8B70D0F89791
    C76C51A30654BE30
    D192E819D6EF5218
    D69906245565A910
    F40E35855771202A
    106AA07032BBD1B8
    19A4C116B8D2D0C8
    1E376C085141AB53
    2748774CDF8EEB99
    34B0BCB5E19B48A8
    391C0CB3C5C95A63
    4ED8AA4AE3418ACB
    5B9CCA4F7763E373
    682E6FF3D6B2B8A3
    748F82EE5DEFB2FC
    78A5636F43172F60
    84C87814A1F0AB72
    8CC702081A6439EC
    90BEFFFA23631E28
    A4506CEBDE82BDE9
    BEF9A3F7B2C67915
    C67178F2E372532B
    CA273ECEEA26619C
    D186B8C721C0C207
    EADA7DD6CDE0EB1E
    F57D4F7FEE6ED178
    06F067AA72176FBA
    0A637DC5A2C898A6
    113F9804BEF90DAE
    1B710B35131C471B
    28DB77F523047D84
    32CAAB7B40C72493
    3C9EBE0A15C9BEBC
    431D67C49C100D4C
    4CC5D4BECB3E42B6
    597F299CFC657E2A
    5FCB6FAB3AD6FAEC
    6C44198C4A475817

    Remarque :

    • Ces valeurs proviennent des 64 premiers bits de la partie fractionnaire des racines cubiques des 80 premiers nombres premiers (2, 3, 5, 7, 11, 13, 17, etc.)
    © Claude Mallette 2025 – Tous droits réservés.
    Algorithmes de hachage :