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


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… :-)

Jean-François Audenard

Au sein de la direction sécurité du Groupe Orange, je suis en charge de la veille sécurité et de la sensibilisation à la sécurité. Franchise, optimisme et bonne-humeur sont mes moteurs quotidiens