Un algorithme de hachage organise l’application d’une fonction de hachage a un ensemble de valeurs numerique.
Cette introduction peut paraître confuse, pourtant le concept n’est pas difficile à comprendre. Bien sûr nous n’allons pas entrer dans le détail du fonctionnement de l’algorithme, mais décrire à quoi il sert.
Dans le cadre des Technologies de Registre Décentralisés, la fonction de hachage (qui est appliquée par l’algorithme) a pour objet principal de comparer des groupes de données importants et déterminer si leur contenu a été altéré ou non. En effet, le hachage d’un groupe de donné sera toujours le même tant que ce groupe de donné n’est pas modifié. Par contre si un infime changement est apporté à ce groupe de données, le hachage du nouveau groupe sera totalement différent.
Comme son nom l’indique, un algorithme de hachage découpe les données pour produire un nouveau groupe de données totalement différent
Plus concrètement, une fonction de hachage est une fonction mathématique qui permet de convertir une valeur numérique d’une certaine taille dans une valeur numérique d’une autre taille. On pourrait comparer la fonction de hachage à une presse dans laquelle est inséré un objet, qui une fois compressé ressort avec une taille plus petite, mais toujours identique, quelque soit la taille de l’objet inséré.
Dans l’exemple ci-dessus, l’algorithme de hachage est SHA256, qui est celui utilisé par le protocol Bitcoin. L’objet auquel est applique la fonction (“input”) est une valeur numérique dont la taille peut varier selon l’algorithme. Ici les Input sont des morceaux de phrases, mais il est possible d’imaginer n’importe quelle type de donnée (chiffres, letters, signes…) ayant une taille variée.
La taille correspond au nombre de caractères qui compose le groupe de données. Les trois inputs sont donc soumis ensemble à l’algorithme de hachage et la valeur numérique qui en résulte (“output”) est par contre toujours de taille fixe (entre 160 et 512 bits selon le type de fonction). Dans le cas de SHA256, la taille de l’output est toujours 256bits, soit 256 caractères…logique.
Les fonctions de hachage presentent de nombreuses autres particularités, qu’il est important de noter:
- “Compression”: La valeur d’entrée (“input”) est généralement plus grande que la valeur de sortie (“output”). Dans ce cas il est considéré que la fonction de hachage compresse les données qui lui sont soumises.
- “Résistant aux collisions”: deux valeurs d’entrées différentes ne peuvent pas aboutir à une valeur de sortie identique. De ce point de vue les fonctions de hachage sont considérées comme résistantes aux collisions (“Collision resistant”). A noter que même une variatation minime entre deux valeurs d’entrées (une virgule en plus ou en moins par exemple) peut aboutir à deux valeurs de sorties complètement différentes.
- L’inverse est egalement vrai. Une même valeur d’entrée ne peut aboutir à deux valeurs de sorites différentes.
- “Pre-image resistance”: Il est impossible de trouver une valeur d’entrée à partir de la valeur de sortie. La seule façon de trouver la valeur d’entrée est d’appliquer une méthode dite de “force brute”, c’est à dire que la seule façon est d’essayer toutes les valeurs d’entrée possible jusqu’a ce qu’on tombe sur la bonne. Il est essentiel de comprendre cette particularité dans le cadre des crypto-monnaies parce que le mode de consensus de la “Preuve du travaille” (“Proof of Work”) repose précisément sur ce concept.
Un algorithme de hachage détermine la façon dont va être utilisée la fonction de hachage. Il est donc important de différencier l’algorithme et la fonction.
De manière générale, un algorithme de hachage est programme pour appliquer la fonction de hachage à des “données d’entrées”, selon plusieurs séquences successives dont le nombre peut varier selon les algorithmes. L’ensemble des séquences de hachage forment une série. Durant chaque séquences de la série, deux blocks de données dont la taille varie selon les algorithmes (généralement entre 128 bits a 512 bits), sont soumis à la fonction de hachage en vu d’obtenir une “valeur de sortie” (“output”).
Une fréquence de la série de hachage:
La valeur de sortie constitue ensuite un des deux blocks de données de la séquence suivante. L’autre block est généralement constitue des données du plus recent block de données. Ce mécanisme se répète jusqu’à ce que le message entier ait été soumis à la fonction de hachage. C’est la raison pour laquelle il est souvent fait référence à un “effet d’avalanche”.
Une série de hachage:
Il existe de nombreux types d’algorithme de hachage tels que Message Digest (MD, MD2, MD4, MD5 and MD6), RIPEMD (RIPEND, RIPEMD-128, et RIPEMD-160), Whirlpool (WHIRLPOOL-0, WHIRLPOOL-T, and WHIRLPOOL) ou encore Secure Hash Function (SHA-0, SHA-1, SHA-2, and SHA-3). Dans l’univers des crypto-monnaies, les algorithmes de hachage les plus courant sont SHA-256 et X11.
L’algorythme SHA-256
SHA-256 (“Secured Hash Algorithme 256”) est l’algorithme qui a été retenu par les concepteurs du protocol Bitcoin. Il est utilisé lors de la creation de la clé publique à partir de la clé privée, mais aussi pour la réalisation du processus de Proof of Work. Cet algorithme a été développé par la NSA (“ United States National Security Agency”) en 2001 et continue a être utilisé par de nombreuses institutions financières et de gouvernements pour le cryptage de leurs données.
Le succès du bitcoin pose toutefois un problème important concernant l’utilisation de l’algorithme SHA-256. Comme nous l’avons déjà vu, chaque nouveau bitcoin créé revient au mineur ayant réalisé et soumis au réseau la “Proof of Work” le premier. Or la probabilité pour un mineur de fournir la “Proof of Work” en premier est directement proportionnelle à la capacité de calcul qu’il est capable de déployer.
D’autre part, le Protocol Bitcoin a été programmé pour ajouter un block à la blockchain toutes les 8-10 minutes, pas plus mais pas moins non plus. Le Protocol Bitcoin s’ajuste donc automatiquement à la capacité de calculs des mineurs en augmentant ou en diminuant la difficulté de la “Proof of Work”.
Or la popularité du bitcoin a entrainé une rapide augmentation du nombre des mineurs, nous avons donc assisté à une veritable course à l’équipement des mineurs dont les capacités de calcul ont littéralement explosé ces dernières années. En quelques années, nous sommes passé des premiers mineurs qui en 2009 pouvaient miner des bitcoins depuis leurs ordinateurs portables (Central Processing Unit mining – “CPU”) ou en l’améliorant avec un carte graphique (Graphic Processing Unit mining – “GPU”), à des fermes de minages fonctionnant uniquement avec des “Application Specific Integrated Circuits” (ASIC). Les ASIC sont des circuits intégrés ne pouvant avoir qu’une function particulière (par exemple miner du bitcoin) et non pas une vocation générale. Ainsi les ASIC peuvent miner des centaines de fois plus rapidement que les CPU et GPU, pour une fraction de leur consommation d’énergie et donc du coût, le tout en produisant moins de chaleur et de bruit.
Les investissements dans les ASICs ont rapidement augmentés excluant du même coup tous les mineurs individuels. La seule manière aujourd’hui pour les individus de concurrencer les fermes de minages est de rejoindre de “groups de mineurs” (“Mining Pools”). Or ces groups atteignent parfois des tailles inquiétantes pour le réseau bitcoin dans la mesure ou certain sont en capacité de dépasser la barre fatidique de 51% de la capacité de minage (“Hashrate”) et sont ainsi potentiellement en mesure de prendre le contrôle du réseau. Car en effet si un acteur détient plus de capacité de minage que le reste du réseau, il détient la capacité de revenir unilatéralement sur les blocks déjà ajoutés à la blockchain (voir “l’attaque des 51%”). Ce fut notamment le cas de la cooperative de mineur GHash qui dépassa le seuil des 51% debut 2014.
Cette concentration des capacités de minage issue de la course à l’équipement des mineurs est le principale problème de l’utilisation de l’algorithme SHA-256 (avec les effets écologiques désastreux qu’il génère évidement), puisqu’il remet en question la philosophie même du bitcoin. Cet algorithme est en effet susceptible de remettre en question l’aspect entièrement décentralisé du bitcoin.
L’algorythme X11
C’est dans ce contexte qu’est apparu fin 2014 l’algorithme X11. Cet algorithme qui a été conçu dans l’optique de servir uniquement à des crypto-monnaies, est encore plus sécurisé que l’algorithme SHA-256 et présente l’avantage de ne pas pouvoir être utilisé par des “Application Specific Integrated Circuits”. Il est actuellement utilisé dans plusieurs crypto-monnaies, le plus célèbre étant DASHCOIN.
X11 organise en effet une chaine de 11 algorithmes de hachage différents: blake, bmw, groestl, jh, keccak, skein, luffa, cubehash, shavite, simd, et echo. Pour être défaillant il faut donc que l’ensemble des algorithmes de hachages fassent défaut simultanément. Il est estimé que la probabilité d’une telle situation est proche de zero.
D’autre part, comme nous l’avons vu plus haut, les ASICs ne peuvent être programmés que pour une seule fonction qui dans le cas du bitcoin, est l’utilisation de l’algorithme SHA-256 à une vitesse inégalée. Pourtant un ASIC ne pourra être programme pour procéder au hachage de deux algorithmes différents simultanément. C’est la raison pour laquelle les ASCs ne pourront être utilisé pour procéder l’algorithme X11 puisqu’il inclus 11 algorithmes différents.
MERCI D’AVOIR LU CET ARTICLE. SI IL VOUS A PLU N’HESITEZ PAS A LE LIKER OU A LA PARTAGER. VOS COMMENTAIRES ET QUESTIONS SONT EGALEMENT LES BIENVENUS!!
I must thank you for the efforts you’ve put in writing this website.
I am hoping to see the same high-grade content from you later on as well.
In fact, your creative writing abilities has encouraged me to
get my very own site now 😉
I’m not that much of a online reader to be honest but your sites really nice, keep it up! I’ll go ahead and bookmark your site to come back later on. Many thanks
Greetings from Colorado! I’m bored at work so I decided to browse your site on my iphone during lunch break. I really like the knowledge you present here and can’t wait to take a look when I get home. I’m shocked at how fast your blog loaded on my cell phone .. I’m not even using WIFI, just 3G .. Anyhow, amazing blog!
It’s really a nice and helpful piece of information. I’m happy that
you shared this helpful info with us. Please stay us up to date
like this. Thanks for sharing.
Pretty nice post. I simply stumbled upon your weblog and
wished to mention that I have really enjoyed browsing your weblog posts.
After all I will be subscribing on your feed and I hope you write
once more soon!
Very good write-up. I absolutely appreciate this website.
Thanks!
It’s a pity you don’t have a donate button! I’d most certainly donate to this superb blog!
I suppose for now i’ll settle for bookmarking and adding your RSS feed to my Google account.
I look forward to fresh updates and will talk about this blog with my Facebook group.
Chat soon!
Saved as a favorite, I love your blog!