Fonctions de hachage et valeur hachées expliquées simplement
Dans le domaine de la sécurité informatique et de la blockchain, il est souvent question de valeurs de hachage - le hash - et de fonctions de hachage, de MD5 ou de SHA. Ces termes sont également mentionnés, voire confondus, dans le contexte du chiffrement. Dans cet article, nous expliquerons à l’aide d’exemples ce que sont les valeurs de hachage et les fonctions de hachage et quels sont leurs champs d’application.
Les hashs sont très pratiques lorsque vous souhaitez identifier ou comparer des fichiers ou des bases de données. Plutôt que de comparer les données dans leur forme originale, il est beaucoup plus facile pour les ordinateurs de comparer les valeurs de hachage. Qu’il s’agisse du stockage des mots de passe, des images numériques, de logiciels ou de documents… Voyez le Hash comme l’empreinte digitale d’un fichier : elle est unique.
Nous allons tenter d’expliquer les fonctions de hachage, sans trop rentrer dans la technique, et découvrir leurs champs d’applications.
La fonction de hachage
Une fonction de hachage est une fonction mathématique qui convertit une valeur numérique d’entrée en une autre valeur numérique compressée . L’entrée de la fonction de hachage est de longueur arbitraire mais la sortie est toujours de longueur fixe.
Les valeurs renvoyées par une fonction de hachage sont appelées digest de message ou simplement valeurs de hachage.
Pour rendre l’explication plus simple, commençons par une image :
À gauche de l’illustration, nous avons 2 chaînes de caractères de longueur variable. La fonction de hachage (algorithme) convertit ces 2 « phrases » en des chaînes de caractères d’une longueur fixe, c’est la valeur de hachage. Pour la phrase « Bonjour ! », on obtient la valeur de hachage ab557953e6057cbeddc3
, et pour « Hey ! », la valeur de hachage ba2af8b2cb904b1060631
est attribuée.
Premièrement, les fonctions de hachage réduisent les chaînes de caractères de n’importe quelle longueur à des chaînes de caractères de longueur fixe, elles sont donc réduites à une forme petite et compacte.
Deuxièmement, les fonctions de hachage fonctionnent à sens unique, c’est-à-dire qu’il n’est pas possible de retrouver le contenu original à partir de la valeur de hachage.
Caractéristiques d’une fonction de hachage
Une fonction de hachage doit avoir les caractéristiques suivantes :
- Déterministe : La fonction est déterministe , c’est-à-dire qu’une même entrée aura toujours la même valeur de hachage.
- Fonction à sens unique : Il ne doit pas être possible de générer le contenu original à partir de la valeur de hachage. Dans l’exemple du dessus, il ne doit pas être possible de générer le texte original « Bonjour ! » à partir de la valeur de hachage
ab557953e6057cbeddc3
. - Sécurité contre les collisions : La même valeur de hachage ne doit pas être attribuée aux différents textes. En d’autres termes, pour chaque entrée différente, le résultat doit être différent. Si cette condition est remplie, on parle également de fonctions de hachage cryptographiques. Dans notre exemple, si nos 2 textes avaient la même valeur de hachage, on parlerait de collision. Ainsi, la fonction de hachage n’est pas protégée contre les collisions et il ne s’agit pas d’une fonction de hachage cryptographique.
- La rapidité : La procédure de calcul de la valeur de hachage doit être rapide. Même si le temps de calcul augmente avec la taille de la chaine à /hacher/, il faut que l’algorithme puisse le faire dans un temps respectable.
- Résistance : Doit être résistante à la falsification (la moindre modification du message aboutit à un résultat totalement différent)
Champs d’application
Nous avons vu que les fonctions de hachage réduisent une grande quantité de données à une chaîne de caractères plus petite. En outre, les fonctions de hachage peuvent servir de protection de l’intégrité en calculant une « empreinte digitale » électronique (la résistance aux collisions mentionnée joue ici un rôle important). Dans le détail, on peut citer à titre d’exemple les champs d’application suivants :
Enregistrement et stockage des mots de passe
Il n’est pas facile de conserver une base de données en lieu sûr. Même avec de bonnes méthodes de chiffrement et une attention particulière, les bases de données contenant des informations sensibles, comme des mots de passe, sont susceptibles d’être compromises.
C’est pourquoi les mots de passe doivent être stockés sous forme de hash afin qu’ils ne puissent pas être lus en clair en cas d’attaque. On peut calculer le hachage d’un mot de passe, mais on ne peut pas prendre une valeur hachée et le reconvertir dans sa forme originale.
Alors comment vérifier le mot de passe de l’utilisateur ?
Avant toute chose, rappelons que notre fonction de hash cryptographique est déterministe, c’est-à-dire que la même entrée, produit toujours la même sortie. Cette fonction est essentielle pour l’authentification, car nous devons avoir la garantie qu’un mot de passe donné produira toujours le même hachage; sinon, il serait impossible de vérifier de manière cohérente les informations d’identification des utilisateurs avec cette technique.
Lorsqu’un utilisateur s’enregistre sur un site/application, au lieu de stocker le mot de passe en clair, nous hachons le mot de passe et stockons la paire nom d’utilisateur et hachage dans la table de la base de données. Lorsque l’utilisateur se connecte, nous hachons le mot de passe envoyé et le comparons au hachage lié au nom d’utilisateur fourni. Si le mot de passe haché et le hachage stocké correspondent, nous avons une connexion valide. Il est important de noter que nous ne stockons jamais le mot de passe en clair dans le processus, nous le hachons et l’oublions ensuite.
Utilisation juridique et légale
Les fonctions de hachage apparaissent aussi de manière surprenante dans la pratique juridique. Vous trouverez ci-dessous quelques exemples de la manière dont les avocats interagissent avec ces fonctions.
Pour rappel, les fonctions de hachage sont utilisées pour maintenir l’intégrité des données. Au lieu de hacher une seule phrase, nous pouvons hacher un fichier entier pour créer une empreinte digitale unique. Si le nom, le contenu ou les métadonnées de ce fichier changent, même légèrement, la valeur de hachage sera modifiée et nous saurons que le fichier a été modifié. C’est pourquoi, lorsqu’ils collectent des fichiers auprès des clients, les fournisseurs de documents prennent (ou devraient prendre) d’abord un instantané des valeurs de hachage de tous les fichiers collectés.
Les valeurs de hachage sont également utilisées pour garantir l’intégrité des données transmises lors d’un dépôt de preuve : créations, logicielles et propriété intellectuelle.
Par exemple, les certificats de dépôt de preuve d’Ownbase.org utilisent les valeurs de hachage pour garantir qu’un fichier déposé n’a pas été modifié entre-temps. Lorsqu’un utilisateur génère un certificat de preuve, le document qu’il a certifié est inscrit dans un certificat sous sa forme de hash.
Les avocats, comme les huissiers peuvent alors comparer la valeur de hachage de sortie à celle fournie par le certificat et s’assurer que ce qui est fourni comme éléments de preuve correspond à ce qui a été certifié.
Si les valeurs de hachage ne correspondent pas, c’est que quelque chose a changé en cours de route et que le document certifié est différent de celui qui est fourni.
Les signatures numériques
Dans la signature numérique (l’équivalent de la signature manuscrite), les fonctions de hachage sont utilisées pour calculer les « empreintes digitales » des messages. L’empreinte digitale est envoyée avec le message au destinataire comme preuve d’intégrité.
En revanche, rien ne prouve que le message a bien été envoyé par celui que l’on croit être l’expéditeur. Alors, pour garantir l’authentification du message, il suffit à l’expéditeur de chiffrer (ou signer) le message à l’aide de sa clé privée (le haché signé est appelé sceau) et d’envoyer le sceau au destinataire.
Voici une illustration du fonctionnement de la signature numérique :
- L’expéditeur calcule une valeur de hachage à partir de son message.
- Il chiffre cette valeur de hachage avec sa clé privée (signature numérique) et transmet le message au destinataire avec la valeur de hachage chiffrée.
- Le destinataire calcule également de son côté la valeur de hachage du message reçu (à l’aide de la même fonction de hachage).
- Il déchiffre ensuite la valeur de hachage reçue avec la clé publique et compare les deux valeurs.
Si les deux valeurs sont identiques, le destinataire peut supposer que le message n’a pas été modifié lors de la transmission et qu’il provient bien de son interlocuteur.
Important : il convient de noter que la signature numérique ne chiffre pas le message, mais vise à vérifier son intégrité. Si le message est confidentiel, il convient de le chiffrer en plus.
Les sommes de contrôle (checksum en anglais)
L’intégrité d’un fichier peut être compromise, ce qui signifie généralement que le fichier est corrompu. Un fichier peut être corrompu de diverses manières :
- Supports de stockage défectueux,
- Erreurs de transmission,
- Erreurs d’écriture lors de la copie ou du déplacement,
- Bogues logiciels,
- Piratage,
- etc.
L’usage le plus courant pour les sommes de contrôle se trouve lorsque l’on télécharge un programme sur Internet et que l’on veut s’assurer qu’il s’agit de l’original et non d’un programme manipulé qui pourrait contenir un logiciel malveillant (ou qui a été manipulé pendant le téléchargement).
Pour cela, on calcule une fois pour toutes la valeur de hachage du programme original (certains fabricants la mettent à disposition) et on dispose ainsi d’une empreinte digitale du programme.
Une fois le programme téléchargé, on peut à nouveau calculer la valeur de hachage avec la même fonction de hachage et comparer les deux valeurs de hachage. S’il y a une différence entre les 2 résultats, alors il s’agit d’une version manipulée.
Les fonctions de hachage permettent donc de détecter d’éventuelles manipulations.