Il ne devrait pas être possible, d’un point de vue informatique, de travailler à rebours à partir du hachage de sortie jusqu’à l’entrée.
Il existe un outil dans le répertoire des praticiens de la sécurité qu’il est utile que tout le monde comprenne, indépendamment de ce qu’ils font avec les ordinateurs : les fonctions de hachage cryptographique.
Cela peut sembler mystérieux, technique et peut-être même ennuyeux, mais j’ai une explication concise de ce que sont les hachages et de l’importance qu’ils revêtent pour vous.
Une fonction de hachage cryptographique, telle que SHA-256 ou MD5, prend en entrée un ensemble de données binaires (généralement sous forme d’octets) et produit un résultat que l’on espère unique pour chaque ensemble d’entrées possibles. La longueur de la sortie (le « hachage ») d’une fonction de hachage donnée est généralement la même pour n’importe quel modèle d’entrée (pour SHA-256, elle est de 32 octets ou 256 bits – l’indice est dans le nom). Ce qui est important, c’est ceci : Il doit être impossible sur le plan informatique (les cryptographes détestent le mot « impossible ») de travailler à rebours à partir du hachage de sortie jusqu’à l’entrée. C’est pourquoi on parle parfois de fonctions de hachage à sens unique.
Mais à quoi servent les fonctions de hachage ? Et pourquoi la propriété d’être unique est-elle si importante ?
Sortie unique
L’expression « sortie unique » d’une fonction de hachage est essentielle, car les fonctions de hachage sont utilisées pour produire un résultat totalement unique.
Les fonctions de hachage, par exemple, sont utilisées pour vérifier que la copie d’un fichier que vous avez téléchargé est un duplicata octet par octet du fichier que j’ai téléchargé. Vous verrez ce processus de vérification à l’œuvre lorsque vous téléchargerez une ISO Linux ou un logiciel à partir d’un dépôt Linux. Sans unicité, la technologie devient inutile, du moins pour l’usage que vous en faites généralement.
Si deux entrées produisent le même résultat, on dit qu’il y a « collision ». En fait, le MD5 est devenu obsolète parce qu’il est désormais possible de trouver des collisions avec les systèmes matériels et logiciels disponibles dans le commerce.
Une autre propriété importante est qu’un changement minime dans un message, même s’il ne s’agit que d’un seul bit, devrait entraîner une modification notable du résultat (c’est l' »effet d’avalanche »).
Vérification des données binaires
L’utilisation typique des fonctions de hachage consiste à s’assurer que lorsque quelqu’un vous remet un morceau de données binaires, il correspond bien à ce que vous attendez.
Dans le monde de l’informatique, toutes les données peuvent être décrites en format binaire, qu’il s’agisse d’un texte, d’un exécutable, d’une vidéo, d’une image ou d’une base de données complète, de sorte que les hachages sont largement applicables, c’est le moins que l’on puisse dire.
La comparaison directe de données binaires est lente et ardue sur le plan informatique, mais les fonctions de hachage sont conçues pour être très rapides. Si vous disposez de deux fichiers de plusieurs mégaoctets ou gigaoctets, vous pouvez produire des hachages à l’avance et reporter les comparaisons au moment où vous en aurez besoin.
Il est généralement plus facile de signer numériquement des hachages de données que de grands ensembles de données eux-mêmes. Cette caractéristique est si importante que l’une des utilisations les plus courantes des hachages en cryptographie consiste à générer des signatures « numériques » .
Étant donné qu’il est facile de produire des hachages de données, il n’est souvent pas nécessaire de disposer des deux ensembles de données.
Supposons que vous souhaitiez exécuter un fichier exécutable sur votre ordinateur
Mais avant de le faire, vous voulez vérifier qu’il s’agit bien du fichier que vous pensez être et qu’aucun acteur malveillant ne l’a modifié. Vous pouvez hacher ce fichier très rapidement et facilement, et tant que vous avez une copie de ce à quoi le hachage devrait ressembler, vous pouvez être pratiquement certain que vous avez le fichier que vous voulez.
Voici un exemple simple :
$ shasum -a256 ~/bin/fop
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c /home/bob/bin/fop
Si je sais que la somme SHA-256 de l’exécutable fop, telle qu’elle est fournie par son vendeur (la Fondation Apache, dans ce cas) est :
87227baf4e1e78f6499e4905e8640c1f36720ae5f2bd167de325fd0d4ebc791c
…alors je peux être sûr que l’exécutable sur mon disque est bien le même que celui que la Fondation Apache distribue sur son site web. C’est là que l’absence de collisions (ou du moins la difficulté à calculer les collisions), propriété des fonctions de hachage, est si importante.
Si un acteur malveillant peut créer un fichier de remplacement qui partage le même hachage que le fichier réel, le processus de vérification est alors essentiellement inutile.
En fait, il existe des noms plus techniques pour les différentes propriétés, et ce que j’ai décrit ci-dessus en rassemble trois importantes. Plus précisément, ces noms techniques sont les suivants :
- Résistance à la pré-image : Étant donné un hachage, il devrait être difficile de trouver le message à partir duquel il a été créé, même si vous connaissez la fonction de hachage utilisée.
- Deuxième résistance à l’image : Étant donné un message, il devrait être difficile de trouver un autre message qui, une fois haché, génère le même hachage.
- Résistance aux collisions : Il devrait être difficile de trouver deux messages quelconques qui génèrent le même hachage.
La résistance aux collisions et la deuxième résistance aux images peuvent sembler être la même propriété, mais elles sont subtilement (et significativement) différentes. La résistance à la pré-image indique que si vous avez déjà un message, vous ne serez pas en mesure de trouver un autre message avec un hachage correspondant. La résistance aux collisions fait qu’il est difficile d’inventer deux messages qui généreront le même hachage et il s’agit d’une propriété beaucoup plus difficile à respecter dans une fonction de hachage.
Permettez-moi de revenir au scénario d’un acteur malveillant qui tente d’échanger un fichier (avec un hachage, que vous pouvez vérifier) avec un autre. Pour utiliser des hachages cryptographiques « dans la nature », c’est-à-dire dans le monde réel, au-delà des implémentations parfaitement sûres et exemptes de bogues, peuplées de licornes et débordant de beignets sans graisse, il faut respecter certaines conditions importantes et difficiles. Les lecteurs très paranoïaques ont peut-être déjà repéré certaines d’entre elles, en particulier :
- Vous devez avoir l’assurance que la copie du hachage que vous possédez n’a pas été altérée.
- Vous devez avoir l’assurance que l’entité qui effectue le hachage le fait et le rapporte correctement.
- Vous devez avoir l’assurance que l’entité qui compare les deux hachages rapporte correctement le résultat de cette comparaison.
Il n’est pas nécessairement facile de s’assurer que l’on peut satisfaire à ces garanties. C’est l’une des raisons pour lesquelles les modules de plate-forme de confiance (TPM) font partie de nombreux systèmes informatiques. Ils agissent comme une racine de confiance matérielle capable de fournir des garanties sur les outils de cryptographie qui vérifient l’authenticité des données binaires importantes.
Les TPM sont un outil utile et important pour les systèmes du monde réel, et je prévois d’écrire un article à leur sujet à l’avenir.