• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 1/3/24

Hachez vos données menu menu

Le chiffrement vous permet de protéger la confidentialité de vos données à l'aide d'une clé secrète. Cependant, il existe un autre type de cryptographie qui n'utilise pas de clé, qu'on appelle la cryptographie sans secret, et qui est principalement composée de fonctions de hachage cryptographique. Je vous propose de nous pencher en détail sur cette fonction de hachage.

Appréhendez la terminologie des fonctions de hachage

Qu'est-ce qu'une fonction de hachage ?

Cette fonction est déterministe, c'est-à-dire que pour la même donnée en entrée, elle fournit toujours la même donnée en sortie, appelée haché ou empreinte. Ainsi, si vous calculez le haché de deux données et que ces deux hachés sont différents, vous êtes certain que les deux données sont elles-mêmes différentes.

Il est beaucoup plus rapide de comparer des hachés, qui ont un format fixe et une petite taille, plutôt que de comparer des données de grande taille comme des fichiers. Les fonctions de hachage sont donc très utilisées en informatique. Par exemple, une table de hachage (hashtable) est un tableau de clés/valeurs dont la clé est le haché de la valeur.

Utilisez des fonctions de hachage cryptographiques

Ces fonctions sont largement utilisées en cryptographie :

Contrôler l'intégrité d'un message

La première application d'une fonction de hachage cryptographique est de protéger l'intégrité d'un message ou d'un fichier, en calculant l'empreinte (ou le haché) du message. Vous verrez comment faire un contrôle d'intégrité dans le prochain chapitre. L'empreinte d'un fichier peut également servir d'identifiant unique du fichier, dans la mesure où le risque d'une collision est pratiquement nul.

Stocker des mots de passe

Les mots de passe sont des données particulièrement sensibles.

Lorsqu'un serveur vérifie qu'un utilisateur connaît son mot de passe, le serveur n'a pas besoin de connaître la valeur du mot de passe, mais uniquement de vérifier que l'empreinte du mot de passe saisi correspond à l'empreinte du mot de passe enregistré. Le serveur ne stocke donc pas le mot de passe dans sa base de données, mais il stocke l'empreinte du mot de passe avec une fonction de hachage de mot de passe.

Lorsque l'utilisateur fournit son mot de passe pour s'authentifier, le serveur calcule alors le haché de ce mot de passe et compare la valeur du haché fourni avec la valeur du haché enregistré. Si les hachés sont identiques, le mot de passe est valide.

Ainsi, si un attaquant vole la base de données du serveur, il ne pourra pas directement retrouver les mots de passe. L'inconvénient est que si l'utilisateur oublie son mot de passe, le serveur ne pourra pas le lui redonner, car il ne le connaît pas lui-même.

Générer des nombres pseudo-aléatoires

Les fonctions de hachage sont souvent utilisées comme GNPA pour générer des données pseudo-aléatoires, puisqu’elles respectent toutes les conditions d'un GNPA cryptographique (si vous avez oublié ce qu’est un GNPA, je vous invite à cliquer par ici).

Vous utilisez alors une graine aléatoire (issue de l'entropie externe) en entrée de la fonction de hachage, et le haché fourni en sortie est le nombre pseudo-aléatoire. Il est ensuite possible d'utiliser le haché précédent comme entrée de la fonction de hachage pour générer le nombre pseudo-aléatoire suivant, et ainsi de suite.

Preuve de travail des blockchains

Le concept de blockchain est basé sur la preuve de travail, qui permet de sécuriser des cryptomonnaies comme le Bitcoin.

La preuve de travail est un algorithme décentralisé qui permet de sélectionner parmi une liste de serveurs celui qui a fourni le plus de temps de calcul sur une période donnée. Pour le faire de manière décentralisée, l'algorithme définit un challenge qui consiste à trouver une donnée dont la valeur du haché est plus grande qu'une valeur donnée. Chaque serveur calcule donc aléatoirement les hachés d'une grande quantité de données, jusqu'à ce qu'il trouve un haché plus grand que la valeur du challenge. Le premier serveur qui satisfait ce challenge ajoute un bloc de transactions à la blockchain et est récompensé par une petite quantité de cryptomonnaie. Commence alors un nouveau challenge. On appelle cela le minage de cryptomonnaie.

Les conditions de sécurité d'une fonction de hachage cryptographique

Voici les 3 conditions de sécurité qui permettent à une fonction de hachage d’être utilisée en cryptographie :

Être résistante à la 1e préimage

Si vous connaissez la valeur du haché (aussi appelé image) H d'une donnée D, mais que vous ne connaissez pas la valeur de la donnée D (aussi appelée préimage de H), il est impossible de retrouver cette valeur D.

On dit aussi que la fonction de hachage est une fonction à sens unique ou irréversible, c'est-à-dire qu'il n'existe pas de fonction inverse qui, en prenant le haché H en entrée, fournit la valeur initiale D (ou préimage) en sortie.

Ainsi, si vous fournissez le haché d'une donnée, cela ne vous donne aucune information sur la valeur de cette donnée. Il est toujours possible de retrouver la préimage par la recherche exhaustive, c'est-à-dire en essayant toutes les valeurs de donnée possibles, en calculant leur haché et en le comparant à la valeur de haché H. Cependant, cette attaque n'est pas réalisable si l'espace des données initiales est suffisamment grand, c'est-à-dire de taille supérieure à 2^128.

Être résistante aux collisions

Il doit être impossible de trouver une collision pour n'importe quelle valeur de haché.

La résistance aux collisions n'implique pas que les collisions n'existent pas (elles existent forcément, comme expliqué dans le paragraphe suivant) mais qu'il est difficile d'en trouver une, c'est-à-dire qu'il n'y a pas d'algorithme plus rapide que la recherche aléatoire pour trouver une collision.

Je vous ai perdu ? Cette règle est en fait liée au paradoxe des anniversaires. Ce paradoxe dit qu'il suffit de 23 élèves dans une classe pour que la probabilité que 2 élèves aient leur anniversaire le même jour soit supérieure à 50 %. Dans cet exemple, les élèves sont les données et leur anniversaire est le haché, qui a 365 valeurs possibles. On dit que c’est un paradoxe, car  23 est une valeur bien inférieure à ce qu'on pourrait imaginer intuitivement.

Ainsi, pour une résistance aux collisions équivalente à la sécurité d'un algorithme de chiffrement de 128 bits, une fonction de hachage doit avoir une taille de haché de 256 bits.

Être pseudo-aléatoire

Le haché d'une donnée doit être imprévisible et ne pas avoir de corrélation avec la donnée initiale. En pratique, cela signifie qu'une infime modification de la donnée initiale, par exemple le changement d'un seul bit, conduit à un nouveau haché totalement différent du haché initial.

Étudiez le problème des collisions

La taille de sortie d'une fonction de hachage est fixée, c'est-à-dire qu'il y a une quantité finie de valeurs de haché possibles. Par exemple, si le haché d'une fonction de hachage a une taille de 8 bits, il y a 2^8 = 256 valeurs de haché possibles.

Cependant, le nombre de valeurs en entrée possibles est bien plus grand. L'ensemble des valeurs de sortie est donc plus petit que l'ensemble des valeurs en entrée. Toutes les valeurs en entrée ont un haché qui leur est associé. Il y a donc forcément plusieurs valeurs en entrée différentes qui ont la même valeur de haché, c'est-à-dire des collisions. Cependant, parmi les valeurs en entrée, il n'y en a qu'un petit nombre qui seront effectivement utilisées, l'ensemble des messages réalistes.

Si l'ensemble des messages réalistes est beaucoup plus petit que l'ensemble des hachés, et que les hachés ont une distribution aléatoire par rapport aux messages, le risque de collision est faible.

Voici un exemple :

On veut hacher des messages composés de mots. L'ensemble des messages possibles est toutes les combinaisons de lettres possibles (par exemple "gueurhg rikslif qfq"). Dans le schéma ci-dessous, c'est le grand cercle bleu.

En revanche, l'ensemble des messages réalistes n'est que les combinaisons de mots du dictionnaire (par exemple "demain dès l'aube"). L'ensemble des messages réalistes est donc beaucoup plus petit que l'ensemble des messages possibles. Dans le schéma, c'est le petit cercle jaune.

Enfin, le cercle orange, de taille moyenne, représente l'ensemble des hachés. Chaque élément du cercle bleu a une valeur de haché possible. Comme le nombre de hachés est plus petit que le nombre de messages possibles, il y a forcément des collisions. Cependant, nous n'utiliserons la fonction de hachage que sur l'ensemble des messages réalistes. Comme cet ensemble est plus petit que l'ensemble des hachés, il est possible qu'il n'y ait aucune collision pour l'ensemble des messages réalistes.

Schéma de collision
Schéma de collision

Dans le schéma, vous pouvez voir une collision entre 2 messages. 2 messages différents ont le même haché.

Apprenez-en plus sur les algorithmes de hachage cryptographiques

Avec le développement des fonctions de hachage, le gouvernement américain a sélectionné des fonctions de hachage qui se sont imposées comme standard :

  • la première version, SHA-1 (Secure Hash Algorithm version 1) est aujourd'hui considérée comme vulnérable, car des chercheurs ont démontré qu'il était possible de trouver des collisions, et l'ont prouvé en créant 2 fichiers PDF différents ayant le même haché avec SHA-1. Il ne faut donc plus l'utiliser ;

  • depuis 2002, la seconde version, SHA-2, est LA fonction standard de hachage cryptographique. C'est donc la fonction de hachage qu'il vous est conseillé d'utiliser. Elle est déclinée en plusieurs versions, dont SHA-256 dont le haché est de 256 bits ; elle fournit une sécurité de 128 bits contre les collisions et est la plus utilisée actuellement ;

  • en 2015, une troisième version, SHA-3, a été sélectionnée comme alternative à SHA-2. Cette fonction ne remplace pas SHA-2 qui est toujours la fonction conseillée. Elle servira d'alternative dans le cas où des chercheurs réussiraient à casser la sécurité de SHA-2 à l'avenir.

Il existe également d'autres algorithmes de hachage sécurisés, comme BLAKE, qui a l'avantage d'être particulièrement rapide.

En résumé

  • Les fonctions de hachage permettent de calculer une empreinte de taille fixe pour n'importe quel message ;

  • connaître la valeur d'un haché ne permet pas de retrouver la valeur du message original ;

  • grâce à la résistance aux collisions, si deux messages ont le même haché, les deux messages peuvent être considérés comme étant identiques ;

  • la fonction de hachage sécurisé recommandée est SHA2 avec des hachés de 256 bits.

Example of certificate of achievement
Example of certificate of achievement