Que signifient hash et hachage ?

 

quelle est l'utilité d'utiliser des fonctions de hachage et des hash dans la technologie blockchain, pour bitcoin et les crypto-actifs

 

Vous avez peut-être déjà vu dans un article au sujet d’un quelconque crypto-actif, l’expression “fonction de hachage”, sans que cela soit nécessairement expliqué. Contrairement à ce que laisse penser le nom du procédé, le hachage n’a rien à voir avec le steak. Et il en est de même pour le salage, qui n’a rien à voir avec le sel.
En effet, ces termes désignent des procédés mathématiques et informatiques.

Les fonctions de hachage constituent en fait une part essentielle de l’aspect “crypto” des crypto-actifs. Mais de quoi parle-t-on exactement ?

 

Principes généraux des fonctions de hachage

Les fonctions de hachage (hash functions en anglais) sont des suites d’opérations mathématiques et cryptographiques produisant un résultat, que l’on appelle également empreinte ou signature. Elles servent généralement à sécuriser un transfert d’informations entre deux systèmes informatiques.

Les fonctions de hachage permettent notamment de confirmer certaines propriétés d’un message informatique, telles que sa provenance ou son contexte, ou bien de faire la différence entre deux éléments similaires, sans pour autant révéler leur contenu entier.

Comment fonctionnent-elles exactement ? C’est à la fois très simple, et très compliqué.

Pour ce qui est de l’aspect purement mathématique, tout dépend de la fonction de hachage dont il est question : il en existe des dizaines, certaines plus sécurisées que d’autres. Toutes les fonctions existantes se basent sur des procédés différents les uns des autres : substitutions, permutations, ajouts de contenu, ou retraits de contenu. Chaque fonction aboutit en conséquence à des résultats différents.

Pour faire simple, l’aspect mathématique des fonctions de hachage n’est pas bien différent des systèmes de chiffrement de texte de l’Antiquité, ou de ceux « brisés » par les Alliés lors de la Seconde Guerre Mondiale. Et pour comprendre ce que signifie le résultat, il faut simplement connaître la procédure utilisée (ainsi que certaines données, en fonction du but recherché).

Les fonctions de hachage ont toutefois pour particularité qu’elles sont conçues dans un objectif d’utilisation informatique. Et contrairement aux systèmes de chiffrements susmentionnés, l’intérêt n’est pas de pouvoir retrouver le message d’origine à partir du résultat de la fonction.

Les fonctions de hachage sont donc censées répondre à plusieurs critères précis :

  • Le déterminisme : le résultat de la fonction doit être invariable en toutes circonstances. Quelle que soit le moment où la fonction est utilisée, la personne qui s’en sert ou la quantité de fois que la fonction est utilisée, si le message de départ est le même, alors le résultat doit être le même.
  • L’efficacité : la fonction de hachage doit permettre d’obtenir un résultat immédiat, autrement elle risque de ralentir de manière excessive les systèmes informatiques qui en dépendent.
  • La résistance aux attaques : il ne doit pas être possible de recréer le message d’origine à partir du résultat de la fonction, sauf en essayant tous les résultats possibles un par un.
  • L’aisance de distinction: deux messages extrêmement similaires doivent générer deux résultats facilement différenciés.
  • L’unicité des résultats: il doit être impossible de générer deux résultats identiques avec deux messages différents.

 

Bien évidemment, ces critères évoluent avec le temps. La sécurité ultime d’hier ne représente que la médiocrité la plus totale dans les systèmes de sécurité d’aujourd’hui, et certaines tâches informatiques autrefois considérées colossales sont devenues ridiculement aisées pour les processeurs modernes.

Par exemple, il existe une technique ralentissant légèrement les fonctions de hachage, qui est celle du salage. Le principe est simple : plutôt que de calculer directement l’empreinte du message d’origine, une suite de caractères va être générée aléatoirement et mélangée avec le texte du message. Ensuite, c’est le résultat de cette opération qui voit son empreinte calculée. Cette technique permet d’éviter de permettre à un attaquant de calculer quel est le message en observant son empreinte. Ainsi, contrairement à notre bien-aimée cuisine française, on peut dire qu’il n’y a jamais trop de sel dans les crypto-actifs.

L’humour des cryptographes veut qu’une autre méthode similaire existe, mais dont le code associé est appelé poivre. Ce dernier est en fait une suite de caractères secrets et non aléatoires, comme une sorte de mot de passe complémentaire, que l’on rajoute au message avant de calculer son empreinte. Le principe reste toutefois le même : il s’agit d’une étape supplémentaire dans la fonction de hachage, qui rajoute de la complexité à cette dernière et ralentit l’ordinateur qui l’exécutera.

Heureusement, la puissance des ordinateurs modernes fait que ces deux fonctions ont un impact absolument risible sur les fonctions de hachage y ayant recours. Alors que ces opérations étaient chronophages en 1980, elles ne représentent aujourd’hui qu’un obstacle tellement insignifiant qu’il est dommage de ne pas y avoir recours, puisqu’elles augmentent la sécurité de la fonction.

Et ces deux méthodes ne sont pas les seules : arbres de Merkle, étirements de clé, et bien d’autres techniques permettront aux cryptographes d’améliorer la sécurité d’une manière ou d’une autre, généralement au détriment de la rapidité d’exécution de la fonction.

Enfin, il faut savoir que les critères mentionnés ci-dessus ne s’appliquent pas tous de la même manière aux fonctions de hachage, selon les objectifs recherchés. La plupart des fonctions de hachage auront besoin de produire un résultat instantanément, mais dans certains contextes, un délai de dix secondes est tout à fait acceptable si cela permet d’améliorer la sécurité. En résumé, tout dépend de ce que l’on souhaite en faire. Ces critères ne sont que des idéaux, et pas des règles.

 

Exemple de fonction de hachage

Nous allons observer directement les qualités de la fonction de hachage qui est probablement la plus connue à ce jour : la fonction SHA-256, mise au point par la NSA, agence gouvernementale étasunienne bien connue.

Et puisqu’il est question de hachage, sel et poivre, nous allons calculer l’empreinte du mot bœuf.

MessageEmpreinte
bœuf06d2c4c0420e18394520d8ccde3a2a937da4040e3f69a8f440077a935ab7b968
Bœuf7abd6d70f64e3b264f657c6ba92ad752a422a7dd27ca61fa957c0b79ca36dd0b
boeuf9c0ed395dc2af34608210254d1f7828757bd750a86d02b63db177ec404d3dd01

 

Vous pourrez constater le respect du premier critère, qui est le déterminisme, en allant choisir vous-même un site offrant de calculer un hachage SHA-256. N’importe lequel fera l’affaire, puisque chacun utilise la même méthode. Vous trouverez exactement le même résultat que moi, à condition de taper exactement le même message. Attention, par exemple, à l’o-e entrelacé de bœuf qui constitue un caractère de texte à part, entièrement différent du O et du E séparés.

Vous constaterez dans le même temps le respect du critère de l’efficacité, puisque ce calcul sera instantané.

Enfin, vous pourrez constater le respect du troisième critère, qui est celui de l’aisance de distinction, puisque les empreintes que vous pouvez voir ci-dessus ne se ressemblent aucunement, et qu’il en sera de même pour tout mot similaire dont vous souhaiteriez calculer l’empreinte.

Bien évidemment, la vérification du respect des critères de la résistance aux attaques et de l’unicité des résultats n’est pas si aisée. Il s’agit là d’effectuer des calculs mathématiques extrêmement complexes, et parfois de passer plusieurs années à réfléchir au même problème. Ce n’est pas une tâche à la portée de tout le monde, et il va donc falloir faire confiance aux spécialistes en la matière.

En ce qui concerne le SHA-256, la fonction semble sécurisée à l’heure actuelle. Mais ses prédécesseurs ont tous été brisés par des cryptographes et mathématiciens d’exception, il ne faut donc pas oublier que cela pourrait arriver au SHA-256 également.

C’est pour cette raison que de nombreux cryptographes mettent constamment au point des fonctions alternatives, modulées de sorte à répondre mieux à certains besoins, qu’il s’agisse de sécurité ou de rapidité. La fonction SHA-3, également dénommée Keccak, et la fonction Whirlpool, parmi tant d’autres, visent à explorer différentes méthodes de calcul permettant d’obtenir de meilleurs résultats.

 

Lien entre les fonctions de hachage et les crypto-actifs

Maintenant que ce concept de fonction de hachage est bien défini, la question que l’on se pose est : quel est le rapport avec le Bitcoin ? Et avec les autres ?

C’est une question à laquelle il n’existe pas de réponse universelle : chaque crypto-actif utilise des fonctions de hachage à un moment ou un autre, mais les détails varient de l’un à l’autre.

 

En ce qui concerne le Bitcoin, la fonction de hachage SHA-256 est utilisée à plusieurs endroits :

D’abord, lors de la création d’adresses Bitcoin, deux fonctions de hachage sont utilisées : la fonction SHA-256 et la fonction RIPEMD160, l’une après l’autre, sur la clé publique, afin de créer l’adresse Bitcoin associée. L’intérêt de la fonction RIPEMD160 est ici tout simplement de réduire la taille de l’adresse : l’empreinte calculée par cette fonction est plus courte que celle calculée par la fonction SHA-256.

Ensuite, lors de la création de bloc, préalablement au minage, le mineur insère dans le nouveau bloc une empreinte SHA-256 du bloc précédent. Cela permet, entre autres, de s’assurer que les blocs sont dans le bon ordre.

Le nouveau bloc doit également contenir l’empreinte de la somme des empreintes des transactions qui y sont effectuées . La fonction SHA-256 est donc utilisée sur ses propres résultats. Ceci, afin de permettre facilement à d’autres mineurs et nœuds de s’assurer qu’aucune transaction n’a été oubliée au sein du bloc nouvellement créé.

Enfin, et c’est là son usage le plus important : au moment du minage des blocs. Lorsque le procédé de minage commence, quand le bloc a été constitué comme indiqué ci-dessus, le mineur observe, sur le réseau, quelle est la cible (target en anglais) à atteindre.

La cible est en fait une empreinte d’une certaine “hauteur”, laquelle est déterminée en fonction de valeurs numériques associées aux lettres et chiffres la composant.

Exemple : si A=1 et B=2, alors AB=3 et ABBA=6. Une règle similaire est appliquée pour calculer la valeur d’une empreinte.

Si le mineur veut valider son bloc, il doit choisir un code aléatoire dénommé nonce et associé au bloc, dont l’empreinte sera calculée. Si cette empreinte a une valeur inférieure à la cible, son bloc est publié ; autrement, il doit recommencer.

Comme vous avez pu le constater avec le mot « bœuf » et ses variantes, la génération d’empreinte avec la fonction SHA-256 donne un résultat complètement aléatoire. En conséquence, la capacité à trouver un résultat correspondant à la cible dépend uniquement de deux facteurs : la chance, et la capacité à effectuer un hachage SHA-256 rapidement.

Lorsque la cible est suffisamment basse, il est très difficile de trouver un résultat y correspondant, même en étant très chanceux. Il est donc nécessaire d’effectuer des centaines, milliers ou millions de hachages avant d’arriver à publier un bloc, ce qui demande une puissance de calcul élevée.

 

La fonction SHA-256 a beau être la plus répandue (et la plus connue), elle n’est pas la seule, et de nombreux autres crypto-actifs utilisent des procédés différents. Litecoin, par exemple, utilise la fonction de hachage Scrypt, conçue pour éviter certaines des déboires de la fonction SHA-256 dans le monde des crypto-actifs. Monero et tous ses forks utilisent eux la fonction de hachage Cryptonight. Enfin, Ethereum utilise principalement la fonction SHA-3 (alias Kaccak) dont il était fait mention ci-dessus.

Il faut préciser également que l’utilisation de plusieurs fonctions de hachage est possible : soit parce que l’on souhaite calculer avec une fonction l’empreinte de l’empreinte obtenue avec l’autre fonction, soit tout simplement parce que l’on favorise différentes caractéristiques en fonction des éléments concernés. Par exemple, Litecoin utilise la fonction Scrypt pour ce qui est du minage, mais a conservé la fonction SHA-256 pour ce qui est de la création des adresses Litecoin.

 

Conclusion

Les fonctions de hachage représentent le cœur de la crypto-monnaie. En état d’évolution constante, elles sont le pilier sur lequel repose tout l’écosystème.

Il est donc essentiel de connaître au moins le nom de la fonction utilisée par les crypto-actifs dans lesquels vous choisissez d’investir, car une faille dans une fonction de hachage équivaut à une faille au sein du crypto-actif qui utilise cette fonction. Et si par malheur vous appreniez qu’une faille existe dans une fonction de hachage bien précise, faites attention à tous les crypto-actifs s’y rapportant de près ou de loin.

 


Benjamin

Passionné de crypto à ses heures perdues, Benjamin est un juriste originaire du Sud de la France. Il est également philosophe, et il aime le foot, les échecs et les porte-bonheurs chinois.

facebook-cryptoast twitter-soothsayerdata


Poster un Commentaire

avatar