Aller au contenu

C’est quoi le hachage ?

hachage

hachage

C’est quoi le hachage ? (hash)

ou

c’est quoi les fonctions de hachage ?

Au programme : C’est quoi et à quoi ça sert le hachage ? Comment ça marche le hachage ? Quelques fonctions de hachage très connues et surtout très utilisées.

hachage
« Matrix Tech Shows Digitally Abstract And Data” by Stuart Miles

Introduction

On retrouve les fonctions de hachage dans de nombreuses applications et vous les utilisez tous les jours sans forcément le savoir. Je vais introduire ces notions de hachage par un exemple concret d’utilisation. Et nous verrons ensuite quelques exemples d’applications où le hachage est utilisé.

Allons-y :

Peut-être vous êtes-vous posé la question :  mais comment sont stockés mes mots de passe ?
Et, est-ce que quelqu’un peut lire mon mot de passe ?

Dans la plupart des cas, les mots de passe sont enregistrés mais personne ne peut les lire. Et en lisant, la phrase qui précède vous vous dites « Mais si les mots de passe sont illisibles, alors comment fait l’ordinateur pour savoir si j’ai saisi le bon mot de passe ? ». Eh bien, c’est ce que je propose que nous regardions ensemble.

Le mauvais exemple :

J’ai bien commencé le paragraphe du dessus par « Dans la plupart des cas … » car ce n’est pas toujours le cas. Oui, parfois, les mots de passe sont enregistrés en clair et sont facilement lisibles par toute personne qui accède au fichier contenant les mots de passe : heureusement c’est de moins en moins le cas ! ( D’ailleurs sur certains sites ou dans certaines entreprises, si vous oubliez votre mot de passe, on peut vous le donner : ce n’est pas très chouette car ça prouve qu’on peut le lire ! )

Et si on représente ça par un schéma, voila ce que cela donne :

hachage

Les mots de passe des utilisateurs circulent et sont stockés en clair, il est facile d’accéder au fichier pour lire les mots de passe : c’est très mauvais pour la sécurité.

Je ne ferai aucun commentaire sur le mot de passe que j’ai mis dans ce schéma, mais « cind123 » comme mot de passe : c’est pire que mauvais, jetez un œil à « Comment bien choisir ses mots de passe »

 

Utilisation d’une fonction de hachage

Et si nous utilisions une fonction de hachage ?
Cette fonction va prendre le texte du mot de passe et le « mouliner » pour obtenir une signature (cette signature est aussi appelée « empreinte »).

L’ordinateur ne va pas envoyer le mot de passe au serveur, mais une signature du mot de passe. Le serveur ne va enregistrer le mot de passe mais enregistrera cette signature. Lorsque l’utilisateur se connectera, le serveur ne va pas vérifier si le mot de passe est identique, mais il va vérifier que la signature du mot de passe saisi est bien la même que la signature du mot de passe enregistré. Voyons ce que cela donne avec le même schéma qu’au dessus mais avec utilisation d’une fonction de hachage :

hachage

Attention, dans le schéma ci-dessus, j’ai volontairement limité la longueur de la signature, en réalité la signature est plus longue. (Il y manque aussi la notion de sel, mais là c’est une autre histoire)

 

Définition des fonctions de hachage.

Voici la définition d’une fonction de hachage telle que je pourrais la résumer : Une fonction de hachage est une fonction qui va calculer une empreinte (ou signature) unique à partir des données fournies.

Une fonction de hachage doit respecter les règles et propriétés suivantes :

Propriétés des fonctions de hachage :

  1. La longueur de la signature doit être toujours la même (quelque soit la longueur des données en entrée. Nous verrons plus loin quelles sont les longueurs des empreintes suivants les fonctions de hachage.)
  2. Il n’est pas possible de trouver les données originales à partir des empreintes : Les fonctions de hachage ne fonctionnent que dans un seul sens.
  3. Il ne doit pas être possible de prédire une signature. (Il n’est pas possible d’essayer d’imaginer ce que pourrait être la signature en examinant les données)
  4. Et enfin, évidemment pour des données différentes : les signatures doivent être différentes.

Signature, empreinte ?

Depuis le début, je parle à la fois de signature ou d’empreinte. Vous trouverez même parfois le terme de « condensé » (voire même hashcode). Tous ces termes ont le même sens, vous pouvez utiliser l’un ou l’autre sans problème.

Quelques exemples

Voici quelques exemples de données et leurs signatures. Vous pouvez constater le respect des propriétés énoncées au-dessus :
(les signatures ont été générées avec la fonction MD5, nous verrons MD5 plus loin)

Données en entrée Signature
123 202cb962ac59075b964b07152d234b70
124 c8ffe9a587b126f152ed3d89a146b445
1234 81dc9bdb52d04dc20036dbd8313ed055
123456789012345678901234567890 a46857f0ecc21f0a06ea434b94d9cf1d
abcde ab56b4d92b40713acc5af89985d4b786
abcdef e80b5017098950fc58aad83c8c14978e

A quoi ça sert le hachage ?

Ce qui est intéressant dans le hachage, ce n’est pas les données elles-mêmes mais leurs signatures. Puisque chaque donnée à sa propre signature, on peut se dire que si les signatures sont identiques alors les données sont identiques.
Et à l’inverse, si les signatures sont différentes alors les données sont forcément différentes.

Donc le hachage est utilisé pour comparer les données (en comparant les signatures).

Quelques utilisations concrètes des fonctions de hachage.

La liste ci-dessous est loin d’être exhaustive, car il existe bien d’autres utilisations des fonctions de hachage, mais ceux-ci sont faciles à comprendre :

  • Comparaison des mots de passe. Nous l’avons vu sur le schéma du dessus. Attention : Ce schéma n’est pas complet, car idéalement, lors l’enregistrement des mots de passes doit utiliser en plus une chaîne complémentaire appelée « sel » : mais ce n’est pas l’objet de cet article.
  • Vérification des données téléchargées.
    Par exemple, dans certains cas, lorsque vous téléchargez un fichier sur Internet la signature du fichier original est disponible (soit dans un fichier à part, soit directement affichée sur le site). Pour être sûr que le fichier a été correctement téléchargé, il vous suffit de vérifier que la signature du fichier téléchargé est bien identique à celle fournie . (Je pense que je vais faire vite un petit article pour montrer comment faire et je mettrai le lien ici).
  • La signature électronique (ou signature numérique) des documents. Les documents envoyés sont passés dans une fonction de hachage, et l’empreinte est envoyée chiffrée (avec le mécanisme de clés asymétriques) en même temps que les documents. Il suffit au destinataire de déchiffrer l’empreinte reçue et vérifier que celle-ci correspond bien au calcul de l’empreinte des données reçues.
  • Pour l’utilisation de tables de hachage, utilisées en développement des logiciels.
  • Pour le stockage des données : si la signature d’un fichier est présente, alors on peut dire que le fichier est présent : il n’est pas nécessaire de l’enregistrer à nouveau. Cela peut être intéressant car si le fichier est très gros, il faudra beaucoup moins de temps pour calculer sa signature que de l’enregistrer à nouveau.

 

C’est quoi les collisions ?

Oui, à la lecture des définitions du dessus, une question ou remarque doit vous forcément vous venir à l’esprit : Que se passe-t-il lorsque des données produisent la même empreinte ?

C’est ce qu’on appelle une collision. Dans la plupart des cas, ce n’est pas bien grave car il ne s’agit que de contrôles : on contrôle que l’empreinte des données reçues est la même que l’empreinte des données envoyées.

Cela peut être un peu plus gênant, pour les mots de passe car deux mots de passe différents produisant la même empreinte permettront de s’identifier ! (c’est une des raisons pour laquelle on ajoute du « sel » au mot de passe, mais ce n’est pas la seule raison).

C’est carrément très gênant pour les tables de hachage ou pour les stockages de données. C’est pourquoi, il est conseillé d’utiliser des fonctions de hachage avec de faibles taux de collisions.

 

Quelques fonctions de hachage célèbres

Quelques fonctions célèbres et quelques sites qui permettent de calculer avec ces fonctions.

MD5

Vous en avez forcément entendu parlé. Cette fonction de hachage est toujours très utilisée bien qu’au niveau de la sécurité, il est recommandé de passer à des versions plus robustes car des suites de collisions ont été trouvées.

Cette fonction renvoie une empreinte de 128 bits.

SHA1

Était la fonction remplaçante de MD5 car elle produisait des empreintes 160 bits et avec impossibilité de trouver des collisions … jusqu’en 2004-2005, date à laquelle des attaques ont prouvé des possibilités de générer des collisions. Depuis, cette date il n’est plus conseillé d’utiliser la fonction SHA1. Mais, elle est encore très utilisée.

Les certificats numériques utilisant SHA1 ne sont plus plus valides au 31 décembre 2016.

SHA2 …

SHA256 et SHA512 sont 2 des grands standards utilisés actuellement, car il n’y a pas à ce jour d’attaques ayant trouvé des failles de sécurité sur ces fonctions de hachage. Elles produisent comme vous pouvez vous en douter des signatures de respectivement 256 et 512 bits.

 

Et enfin, comme promis voici quelques sites permettant de générer des signatures numériques avec des données ou des fichiers, et en utilisant différentes fonctions de hachage :

Pour crypter du texte :

http://www.cryptage-md5.com/

Pour crypter du texte ou des fichiers (en anglais) :

http://onlinemd5.com/

 

 

Comme d'habitude, tous les commentaires sont les bienvenus.
Inscrivez-vous à la lettre d'information. Celle-ci vous parviendra dès la parution de nouveaux articles. Vous trouverez la zone d'inscription à la lettre d'information en haut à droite de l'écran.
 
Et enfin, pour toutes vos questions techniques, utilisez le forum. D 'autre utilisateurs pourront vous répondre et vous aider. Cliquez ici pour accéder au forum...

53 commentaires sur “C’est quoi le hachage ?”

  1. Bonjour,

    merci pour votre article très clair.
    J’ai une question dont je n’arrive pas à trouver la réponse sur l’identification d’une signature/empreintes entre 2 bases de données.
    Vous dites : « Il n’est pas possible de trouver les données originales à partir des empreintes : Les fonctions de hachage ne fonctionnent que dans un seul sens. »

    Je travaille avec un prestataire de base de données d’emails. Afin de voir le taux de correspondance entre sa base et la mienne, je lui envoie mes emails hachés. Le prestataire ne voit donc que les empreintes que je lui envoie. Il fait le recoupement avec sa base et me dit ensuite lesquels sont déjà dans sa base. Dans la mesure où il a dans sa base ces mêmes emails, j’imagine qu’il peut donc voir au final en clair les emails communs identiques à partir des empreintes envoyées, est-ce le cas ? Ce qui veut dire que dans ce cas, le prestataire voit les données originales pour les emails communs qu’il a dans sa base. En revanche, il ne voit pas les données originales des emails uniques à ma base car il n’a que les empreintes.

    Ai-je bien compris ?

    Merci,

    JC

    1. Bonjour JC,
      pas à tout à fait.
      En fait, si tu haches toutes tes adresses mails : tu obtiens une signature pour chacune des adresses emails. C’est cette liste que tu lui fournis.
      Je ne sais pas ce qu’il a de son côté, mais s’il a les adresses et qu’il les hache toutes (en utilisant le même système de hachage), il obtient lui aussi une liste de signatures pour chacune de ses adresses mails.
      Sinon, il peut n’avoir que la liste des signatures.

      Si une signature existe de ton côté mais pas du sien : ça veut dire qu’il n’a pas l’adresse mail dans sa base.
      Il ne compare pas les adresses mais les signatures (comme une signature est unique pour une adresse).
      Est-ce que c’est plus clair ?
      A bientôt

      1. Oui c’est clair. Le presta peut en fait n’avoir que les signatures.
        Dans mon cas en fait, le presta peut aussi servir de routeur d’envoi d’emails qu’on lui loue donc j’imagine qu’il a aussi les emails originaux pour faire ces envois.
        Pour résumé :
        -soit le presta n’a que les signatures et il ne peut lire les adresses emails en clair mais peut comparer les signatures entre elles
        -soit le presta a sa propre base d’adresses emails en clair et dans ce cas, il est capable à partir de signatures qu’on lui envoie, de voir à quelles adresses emails cela correspond (si bien sûr il les a en base).
        Corrige moi si je me trompe.
        Mille mercis de ta réponse rapide en tout cas ! c’est top ! bonne continuation !

  2. bonjour,
    on va vérifier que la signature du mot de passe saisi est bien la même que la signature du mot de passe enregistré. c’est adire dans le serveur la signature de mot de passe celui qui est enregistrer pas le mot de passe merci de mieux expliquer
    merci d’avance

    1. Bonjour,
      lors de la 1ere utilisation : le hachage du mot de passe est enregistré.
      Pour les utilisations suivantes, on vérifie que le hachage du mot de passe saisi est bien égal au hachage enregistré.
      Est-ce que c’est plus clair ?
      Je vais modifier l’article.
      A bientôt

  3. Einstein aurait dit que, si on ne sait pas
    expliquer qqc de compliqué à un enfant de 6 ans,
    on n’a pas compris ce qu’on explique.
    Avec vos articles, j’ai toujours au moins 6 ans.
    Cordialement

  4. Un article de référence pour comprendre le hashage, cela est la base pour le minage de crypto-monnaies, je m’en suis inspiré pour un article sur le sujet.

    Mon site

    Olivier

  5. bonsoir
    pourriez vous m’expliquer les propriétés d’une fonction de hachage?
    a savoir:la compression,résistance aux collisions,résistance a la pré-image,facilité de calcule.
    merci d’avance

  6. Bonsoir,
    Tout d’abord merci et bravo pour ces articles ultra-pédagogiques, j’adore.
    Concernant le hashage, j’ai le même blocage que Philippe que je cite : « Sauf qu’un vilain hacker pourra donc récupérer le login et le mot de passe haché et ensuite se connecter sans passer par le moteur de hash, directement en sortie?
    D’avance merci beaucoup

    1. Bonjour Fanny,
      non ce n’est pas possible puisque l’on saisit le mot de passe. Il est en ensuite hashé et c’est cette partie qui est contrôlée. Ce n’est pas la même chose que si l’on saisit le hash (qui lui même serait hashé et qui donnerait un autre résultat.
      J’espère avoir été un peu plus clair.
      A bientôt

      1. Bonsoir,
        Merci beaucoup pour votre réponse.
        J’ai enfin compris ! En fait, j’imaginais le cas suivant : le pirate s’empare sur le réseau de l’identifiant et du mot de passe hashé, puis il les envoie au serveur mais sans passer par l’interface utilisateur (saisie mot de passe).
        Désolée. C’est parfaitement clair maintenant.
        Merci beaucoup.

  7. Je viens de découvrir votre site après avoir lu deux ou trois autres articles sur le hachage. On voit tout de suite la différence. Comment expliquer un truc de la manière la plus basique pour se faire comprendre par la grande masse. À lire d’autres contenus, on dirait que les auteurs écrivent pour être lus par d’autres spécialistes. J’ajoute votre site à mes favoris. Et continuez votre formidable travail !

    1. Merci Yannis,
      ce n’est pas la 1ere fois que je retrouve mes articles copiés (sans accord de ma part) et c’est toujours énervant.
      C’est une violation des règles de Copyright et je viens de prévenir le site qu’il fallait qu’ils les retirent.
      Merci

  8. Bonjour
    si le mot de passe est hacher alors qu est ce qui ce passe quand on demande une réinitialisation de mots de passe sur un site quelconque?

    sinom merci pour cette article de qualité

  9. Bonjour,
    Je fais suite à la remarque de Romain (28/09/2016). et je suis d’accord avec la réponse. Sauf qu’un vilain hacker pourra donc récupérer le login et le mot de passe haché et ensuite se connecter sans passer par le moteur de hash, directement en sortie?
    Merci pour ces articles très intéressant

  10. Perso,j’ai toujours trouvé trouvé le hashage un peu inutile pour les mots de passe,car il est vrai que celà est peut-être nécessaire pour protéger l’utilisateur contre des attaques man in the middle ou l’usurpant peut réussir à récupérer un mot de passe haché,mais qui ne lui servira à rien,car s’il veut l’utiliser pour se loger,celui-ci sera à son tour haché et donc avoir une signature différente de celle se trouvant dans le serveur d’autant plus que le hashage se fait bien avant l’émission.Mais,une fois le mot de passe haché dans la base des données,bien que haché,d’autres informations relatives à l’utilisateur sont en claire dans la base,et donc visible et au niveau de l’hébergeur de la base.Si admettons c’est un social network,ses messages sont stockés en claire,etc..donc ceux qui gèrent la base des données et qui ont un accès plénipotentiaire à la base savent presque tout voir,et dans tout ça où se trouve la sécurité?Je penses perso que c’est beaucoup plus intéressant quand il s’agit de vérifier la non altération des données,etc..mais pour les mot de passe il n’y pas de garantie vu qu’il n’y a pas que le mot de passe qui peut être stocké comme Info sur le user.

  11. Bonjour,
    Merci beaucoup pour cette article et aussi pour le site, il m’ets tres utile!

    Concernant le hashage il y quelque chose que je ne comprends pas tres bien.
    Pour reprendre votre exemple, si avec la fonction MD5 la saisie « 123 » a pour signature « 202cb962ac59075b964b07152d234b70 » cela veut-il dire qu’avec MD5 cette saisie aura toujours cette signature?? Si ce n’est pas le cas comment mon MDP pourrait-il toujours avoir la meme signature ?

    Et aussi comment est « calcule » cette empreinte ?

    1. Je viens de verifier moi-meme avec les liens fournis dans l’article est donc en effet 123 aura toujours la meme signature via MD5 (j’aurais du verifier avant de demander, desole :p)

      Si vous pouviez juste m’eclairer sur ma derniere question, a savoir comment est calculee cette empreinte? Merci d’avance.

  12. bonjour, je fais suite à la question de romain. Si il existe une fonction permettant de hacher un mot de passe en signature, inversement, avec une signature, n existe il pas une fonction permettant de récupérer le mot de passe?
    cordialement,

    1. Bonjour Maxime,
      non il n’est pas possible de récupérer le mot de passe de passe en partant de la signature (ou alors il faut essayer un plein de mots de passe en espérant trouver le mot de passe qui corresponde à la signature fournie).
      C’est justement le principe du hachage : ce n’est pas réversible. Relis l’article, tu verras c’est expliqué.
      A bientôt

  13. Ma question est : si on arrive a recuperer la signature du mot de passe de cindy ainsi que son identifiant on arrivera a se connecter avec ses identifiants. Du coup je ne vois pas l’intérêt de hacher son mot de passe

    Merci d’avance

    1. Bonjour Romain,
      eh bien non.
      Car si dans la zone du mot de passe on saisit la signature du mot de passe, celui-ci va être haché comme tout ce qui est saisi dans cette zone et le résultat du hachage ne sera pas le même donc le mot de passe ne sera pas bon.
      A bientôt

      1. Bonjour et supers articles !

        oui et non pour moi car dans l’exemple le hash se fait côté client, donc si on attaque le serveur avec le login et un pwd (en brute force par exemple ou bien après piratage de la base) on peut s’authentifier.

        Pour moi il faut faire le hash côté serveur non ?

  14. Bonjour, Excellentes informations mais quelques défauts de saisie :

    – Ajouter un s à ET dans la phrase « contrôles : on contrôle que l’empreinte des données reçues eSt la même que l’empreinte des données envoyées. »

    – Il manque 2 mots : « L’ordinateur ne VA pas envoyer le mot de passe au serveur, mais une signature du mot de passe. Le serveur ne va PAS enregistrer le mot de passe »

    1. Bonjour Caroline,
      non, cryptage et hachage, c’est différent.
      Le but du cryptage (chiffrement) est de coder les données pour les rendre illisibles. Mais c’est aussi de permettre à quelqu’un possédant la clé et la méthode de déchiffrement de pouvoir lire les données.
      Dans le hachage, il ne faut pas pouvoir lire les données. L’objectif est d’obtenir une empreinte de ces données qui identifient les données (un peu comme une carte d’identité infalsifiable).
      A bientôt

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock