Sorry, you need to enable JavaScript to visit this website.

Image CAPTCHA
Saisir les caractères affichés dans l'image.

Les 5 minutes du professeur Audenard - épisode 12 : les fonctions de hachage

Les 5 minutes du professeur Audenard - épisode 12 : les fonctions de hachage
2013-05-292013-07-05sériesfr
Les codes de hachage (ou "hash-codes") sont un moyen de prendre l'empreinte de données ou d'informations et sont utilisés un peu partout (navigateurs Internet, certificats SSL, les structures de stockage de données ou encore pour sécuriser les mots de passe). Mais quid de leur sécurité ?
Publié le 29 Mai 2013 par Jean-François Audenard dans séries
les 5 minutes du professeur audenard


Regarder cette vidéo directement sur Dailymotion.

Les codes de hachage (ou "hash-codes") sont un moyen de prendre l'empreinte de données ou d'informations. Il existe différents  algorithmes de création de hash-codes dont le fameux MD5 mais aussi  SHA1 (Secure Hash Algorithm 1).

Ces codes de hachage sont utilisés un peu partout (navigateurs Internet, certificats SSL, les structures de stockage de données ou encore pour sécuriser les mots de passe).

c'est quoi un code de hachage ?

Un code de hachage est généré par une "fonction de hachage". A partir d'un fichier on peut donc le passer à la "moulinette" d'une fonction de hachage et en sortir une signature : c'est le "hash-code".

L'une des utilisations des hash-codes est de pouvoir vérifier que le transfert d'un fichier s'est bien passée : avant d'envoyer le fichier, l'émetteur va calculer en local l'empreinte du fichier et va envoyer ces deux informations (le fichier et l'empreinte) vers le destinataire. Une fois les informations reçues par le destinataire, celui-ci va recalculer l'empreinte sur la base du fichier reçu et en utilisant le même algorithme de hachage et comparer le résultat de son calcul avec l'empreinte qui lui a été envoyée par l'émetteur : si les empreintes correspondent cela indique qu'il n'y a pas eu d'erreur durant le transfert. Simple non ?

les codes de hachage sont très utiles

Les codes de hachage  sont utilisés dans une foule de protocoles, logiciels et systèmes. En fait, nous utilisons des codes hachage toute la journée (sans le savoir bien évidemment). Ils sont utilisés pour

  • des structures de stockage de données ("tables de hachage")
  • les signatures électroniques (ces fameux "certificats" SSL)
  • dans les tunnels chiffrés SSL ou IPSEC (intégrité des communications)
  • dans des protocoles d'authentification comme RADIUS (permet d’authentifier un client et un serveur RADIUS via un « secret partagé » mais aussi de « chiffrer » le mot de passe de connexion)
  • pour la génération de clefs de chiffrement (le hashcode d'un mot de passe saisi devient la clef de chiffrement)
  • dans la création de de monnaie électronique comme les BitCoins (cf le BitCoin Mining)
  • le stockage des mots de passe (on ajoute un "sel" au mot de passe et on génère un hash-code qui est mis dans un fichier)
  • pour accélérer et optimiser le transfert d'informations (synchronisation ou déduplication de données, etc.)
  • dans les systèmes de génération de preuves (pour s'assurer que des données n'ont pas été modifiées depuis leur collecte initiale)
  • les bases de réputation d'URL (pour savoir si une URL est "dangereuse" ou non, et ce sans que la liste des URLs soit accessible)
  • les antivirus (pour optimiser les traitements, savoir qu'un fichier est sain car scanné très récemment)
  • (...)

propriétés d'une fonction de hachage

  • Réductrice : le résultat d'une fonction de hachage a toujours le même format et la même taille, et ce quelle que soit la taille ou la nature des données en entrée. Dans le cas de l'algorithme MD5 le résultat sera toujours une chaine de 128bits (ex: BF34 65CD E275 CE93).
  • Injective : à partir d'une signature ou d'un hash-code, il n'est pas possible de "revenir" ou de "retrouver" les  informations qui ont servi à générer le hash-code.
  • Absence de collision : pour deux informations différentes en entrée de l'algorithme les hash-codes en sortie seront différent.
  • Cryptographique : une fonction de hachage est dite "cryptographique" s’il n'est pas possible de prédire à l'avance la signature.

quel algorithme de hachage utiliser ?

Si dans le cadre d'un projet de développement logiciel ou de la configuration d'un système, vous devez choisir quel algorithme de hachage utiliser, voici quelques conseils :

  • Eviter MD5 (Message Digest 5). Oui, MD5 est un "grand classique" mais il est à proscrire car cette fonction de hachage n'est plus considérée comme sûre. Il est donc préférable d'utiliser SHA1 (Secure Hash Algorithm 1) qui est très largement supporté.
  • Pour ceux souhaitant un algorithme encore plus sécurisé ils pourront utiliser SHA-256 (qui est en fait l'un des algorithmes de la suite "SHA2"... donc le successeur de SHA1).
  • Il existe aussi d'autres algorithmes de hachage comme Tiger ou Whirlpool : leur utilisation reste rare et, sauf besoin spécifique, il est généralement préférable d'éviter de les utiliser.

pour aller plus loin

Les fonctions de hachage :

n’hésitez pas à poser des questions !

Si vous avez des questions, posez-les ! Une idée de sujet pour un futur épisode des 5 minutes du Professeur Audenard ? Proposez-la !

Jean-François Audenard (aka Jeff)

PS : un grand « merci » à Olivier RUBELLIN, le caméraman attitré du Professeur Audenard ! Sans lui, nous n’aurions pas eu ces petits effets « accélération ». Et promis, on va éviter le feutre vert car c’est tout juste visible… :-)

5 Commentaires

  • 6 Mai 2016
    2016-05-06
    par
    Fadila
    Bonjour, merci pour votre présentation, j'aimerai bien connaitre comment utiliser SH1 pour haché un code pin de mes utilisateurs pour généré un code haché. ce code sera un paramètre de sécurité pour leurs connexion au niveau de mon application. et que ce code sera reconnu par la partie serveur.
  • 22 Novembre 2013
    2016-05-06
    par
    Miss_Voile
    Merci beaucoup Monsieur. Je trouve ça intéressant surtout pour un débutant dans le domaine de la sécurité informatique.
  • 11 Juin 2013
    2016-05-06
    par
    Jerome
    J'adore ! Merci Professeur Audenard :)
  • 4 Juin 2013
    2016-05-06
    par

    Bonjour.
    Merci pour le feedback encourageant.:-)
    C'est tout à fait exact ! Une fonction de hachage est bien déterministe comme vous l'expliquez très bien.
    Concernant la propriété "Cryptographique", il faut comprendre que c'est le calcul du 1er hashcode qui n'est pas déterministe (pas possible de prédire la "forme" du hashcode en manipulant en amont l'artefact).
    Jeff.
     

  • 29 Mai 2013
    2016-05-06
    par
    Sanlaville
    Merci pour cette explication très intéressante et bien faite en 5 minutes. Concernant les propriétés d'une fonction de hachage, il me semble qu'on peut en ajouter une autre :
    Déterministe : pour un même artefact (fichier, URL...) le résultat de la fonction de hachage est toujours le même. Du coup, je me posais la question concernant la propriété Cryptographique : cela est vrai si pour la première fois car ensuite on connait la valeur de par la propriété déterministe.

Ajouter un commentaire

comments

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <br>

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Email HTML

  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
Image CAPTCHA
Saisir les caractères affichés dans l'image.
Changer d'affichage