• Arnaud Mauduit

Minage de crypto-monnaie


Introduction


Cet article décrit le procédé du minage de crypto-monnaies d'un point de vue fonctionnel et technique, sans rentrer dans les aspects financiers et boursiers, en l'illustrant avec l'exemple du Bitcoin.


Rappel sur les crypto-monnaies

Base des transactions


La base de données de toutes les transactions n'est pas gérée par une instance centrale comme une banque, mais elle est partagée dans un immense réseau peer to peer.


Tous les gens connectés au réseau peuvent héberger une copie de la base de données qui contient toutes les transactions, c'est à dire que n'importe qui peut inscrire une transaction dans la base de données.


Authentification des transactions


Quand on voit un message dans la base de données qui annonce un transfert de crypto-monnaie, comment peut-on être certain de son auteur ?


On va utiliser le principe de la cryptographie asymétrique. En cryptographie, généralement on utilise une clé qui permet de chiffrer et déchiffrer des messages. Mais il existe des systèmes de chiffrage plus sophistiqués comme l'algorithme RSA qui sont asymétriques, c'est-à-dire que la clé qui sert à chiffrer le message n'est pas la même que celle qui sert à le déchiffrer.


Le chiffrage asymétrique n'est pas une opération lettre à lettre, elle transforme le message dans son ensemble et est impossible à faire dans l'autre sens si l'on n'a pas la clé de déchiffrage.


Une des utilisations classiques de la cryptographie asymétrique c'est d'avoir une clé de chiffrement qui est publique : vous la donnez à tout le monde et n'importe qui peut vous envoyer des messages codés. Mais la clé de déchiffrement reste privée, vous la gardez uniquement pour vous.

Signature électronique des transactions


Imaginez que j'ai une clé de chiffrement que je garde pour moi, qui soit privée et que la clé de déchiffrement soit publique.


N'importe qui peut appliquer ma clé publique pour reconstituer le texte de la transaction.


Du coup, on est sûr que c'est moi qui ai inscrit la transaction puisque personne d'autre n'aurait pu la chiffrer de cette manière-là, et c'est cela qui fournit l'authentification. Les transactions sont donc impossible à falsifier sans posséder la clé privée. Une clé privée permet de calculer une clé publique mais l'inverse est impossible. C'est là-dessus que repose la sécurité.


En pratique, pour échanger des crypto monnaies, il faut créer un compte et vous recevrez un identifiant, une clé privée et une clé publique qui sera connue de tous les nœuds du réseau. Si vous perdez la clé privée, c'est fatal pour votre monnaie (vous ne pourrez plus y accéder).


Technologie Blockchain (chaîne de blocs)


Quand on inscrit la structure des transactions, on inclut aussi une référence vers les transactions précédentes qui nous ont fourni l'argent. Cela a deux intérêts, pour valider une transaction on n'a pas besoin du solde du compte de quelqu'un, il suffit juste de vérifier que les transactions auxquelles il fait référence comme étant les sources n'ont pas déjà été utilisées dans une transaction passé. Le deuxième intérêt est que cela empêche de faire du copier-coller de transaction.


Il y a de multiples copies de la base de données des transactions et elles doivent communiquer entre-elles pour se synchroniser. L'idée, c'est que chaque nœud du réseau enregistre les nouvelles transactions dont il a connaissance dans une liste de transactions "en attente". Et donc tous les nœuds du réseau possèdent une liste de transactions en attente qui peuvent être très légèrement différentes les unes des autres et chaque nœud fait ainsi croitre sa liste de transactions en attente. Puis périodiquement, environ toutes les 10 minutes, il y a des nœuds du réseau dont on prend les transactions en attente et on les déclare validées et out le monde se synchronise là-dessus. Ce groupe de transactions, on l 'appelle "un bloc" et on recommence ainsi toutes les 10 minutes.


Du coup, la liste des transactions validées se présente sous la forme d'une suite de blocs, c'est ce qu'on appelle la chaîne de blocs ou blockchain.


Un bloc peut contenir un nombre quelconque de transactions (généralement entre 1000 et 2000) sans que sa taille dépasse le mégaoctet (cas du bitcoin).


Fonctionnement du manage


Il permet de donner la solution à la question suivante : comment choisit-on le nœud qui détient les transactions validées ?


La règle c'est que pour proposer sa propre liste de transactions en attente comme étant le nouveau bloc su lequel tout le monde doit s'aligner, il faut d'abord lui trouver un identifiant et on a défini des règles qui font que trouver un identifiant à un bloc, c'est un problème mathématique extrêmement compliqué.


Donc chaque nœud du réseau travaille en permanence pour essayer de résoudre ce problème mathématique et trouver un identifiant pour sa liste de transactions en attente et le premier qui y parvient peut proposer son bloc et tout le monde se synchronise dessus.


Pourquoi c'est difficile à résoudre ?


Hachage


Nous allons d'abord expliquer la fonction de hachage.


Une fonction de hachage est une fonction qui prend en entrée une chaine de caractères de n'importe quelle longueur et qui donne en sortie une autre chaîne de caractères qui est de longueur fixe. Cette fonction a une autre caractéristique qui fait que le moindre changement dans la chaîne d'entrée, provoque un grand changement dans la chaine de sortie.


La sourie est mangée par le chat à 2UYE5D00NJ8NS654 (16 car)

La sourit est mangée par le chat ! à 3G6R3Q10DHUTXM12 (16 car) complètement différente de ci-dessus.


Par exemple, l'algorithme de hachage SHA256 qui est utilisé par le protocole Bitcoin a une taille de sortie toujours de 256 bits.


Identifiant de bloc


Pour trouver un identifiant à chaque nouveau bloc de la blockchain, on va utiliser le principe du hachage.

Pour cela, on fabrique un fichier qui contient toutes les transactions qu'on veut valider, ainsi que l'identifiant du bloc précédent et on fait passer le tout deux fois par une fonction de hachage. On obtient ainsi une suite de caractères qu'on va utiliser conne identifiant.


L'intérêt de ce système c'st de protéger la base de données contre la moindre modification. Si vous voulez changer une transaction ou même juste rajouter un 0, ça va complètement changer le hachage et cela va donc changer l'identifiant du bloc. Mais comme l'identifiant du bloc est utilisé dans le hachage du bloc suivant, il faut aussi changer l'identifiant du bloc suivant et ainsi de suite dans toute la chaine. Donc impossible d'aller changer une transaction dans le passé sans avoir à recalculer les identifiants de tous les blocs qui sont arrivés depuis.


Un éventuel pirate pourrait tout à fait rajouter ses blocs à toute vitesse dans la blockchain.


Ce qui protège de cette action, c'est qu'on a ajouté des conditions supplémentaires sur l'identifiant qui fait que le trouver, c'est compliqué. L'idée c'est que quand on fabrique le fichier qu'on veut hacher, on ajoute à la fin un nombre qu'on appelle un nonce et la précence de ce nonce va évidemment modifier le hachage. En fait, on impose des conditions sur le résultat qui font qu'il faut essayer plein de nonces différents avant d'en trouver un qui convienne et le seul moyen d'y arriver, c'est la force brute.


Le nonce est une valeur entière de 32 bits, ce qui donne 4 milliards de possibilités..


On essaye donc plein de nonces à toute vitesse jusqu'à en trouver un qui convienne et les conditions sont faites pour qu'une solution soit trouvée en moyenne toutes les 10 minutes dans le réseau. Evidemment, au fur et à mesure que le réseau grandit et que la puissance de calcul des ordinateurs augmente, on rend les conditions de plus en plus difficiles pour rester sur cette moyenne de 10 minutes.


Difficulté de minage


Afin de rendre le minage difficile, il y a ce qu'on appelle la difficulté cible. Afin de créer un bloc valide, un mineur doit trouver un hash qui est inférieur à la difficulté cible (par exemple le résultat du hash doit commencer par un zéro, puis deux zéro, etc.). La difficulté change tous les 2016 blocs (bitcoin). Le réseau ajuste la difficulté afin que le temps de génération de ces 2016 blocs soit de 14 jours, quelle que soit la puissance de calcul déployée. C'est pourquoi la difficulté augmente donc avec la puissance du réseau.


Preuve de travail


Ce qui est intéressant avec ce système c'est que l'on protège la blockchain de la fraude, en demandant de manière un peu artificielle aux nœuds du réseau de résoudre un problème compliqué pour avoir le droit de contribuer, c'est ce qu'on appelle la preuve de travail. La conséquence de cela, c'est la capacité à frauder devient liée à la puissance de calcul dont on dispose et non pas au nombre de nœuds du réseau qu'on possède.


On est presque au bout de la technologie de la blockchain, il reste juste un problème à résoudre. Il existe une petite probabilité que deux nœuds du réseau arrivent à proposer tous les deux leur bloc de manière quasi simultanée et puis il existe aussi un tout petit risque que quelqu'un arrive, sur un des nœuds du réseau, à pirater un bloc ou deux, s'il est suffisamment puissant et avec un peu de chance.


En cas de piratage du dernier bloc ou si pas de chance, deux nœuds du réseau arrivent tous les deux à proposer leur bloc, on se retrouve avec deux chaines de bloc différentes. Et là, la règle est simple puisque tous les nœuds du réseau doivent conserver les deux chaines, mais on ne travaille que sur la plus longue des deux, ce qui fait que rapidement, l'une des deux chaines va prendre le pas sur l'autre.


On est protégé par le fait que chacun ne possède qu'une faible puissance de calcul comparée au total. En fait, si quelqu'un voulait vraiment compromettre la blockchain, il faudrait qu'il possède plus de 50% de la puissance de calcul du réseau.


Récompense par bloc


On peut se demander pourquoi tous les ordinateurs du réseau accepteraient de mettre leur puissance de calcul au service de la protection de la crypto-monnaie.


La réponse c'est qu'on les paye et on les paye en crypto-monnaie créée à cet effet. Pour un bloc bitcoin validé par exemple, ce jour on reçoit 12.5 bitcoins (cela représente 56300 euros au cours actuels).


Et ces bitcoins, ils viennent de nulle part, ils sont créés artificiellement pour l'occasion, c'est d'ailleurs le seul mécanisme de création de bitcoins.


Et c'est pour cela que les ordinateurs qui participent à la sécurisation du réseau, on les appelle parfois des mineurs, en référence aux mineurs qui allaient chercher de l'or pour augmenter la masse monétaire.


Alors 50000 euros pour résoudre un problème, ça à l'air intéressant, sauf que maintenant il faut mettre tellement de puissance de calcul pour y arriver le premier qu'il n'y a quasiment aucune chance d'y arriver tout seul, il faut se regrouper dans des coopératives. En 2016, une dizaine de coopératives se trouvant majoritairement en Chine ont fourni 95% des blocs.


Et puis le mécanisme aussi appelé havling est tel que la récompense en bitcoin va décroitre au cours du temps (divisé par 2 tous les 210000 bloc) :

  • Du bloc 210000 au bloc 419999 (créé le 9 juillet 2016), la récompense est de 25 bitcoin par bloc

  • Du bloc 420000 au bloc 629999, la récompense est de 12.5 bitcoins par bloc

  • Du bloc 630000 au bloc 839999, la récompense est de 6.25 bitcoins par bloc

  • ...


Actuellement, un bloc est produit environ toutes les 10 minutes ce qui signifie qu'environ 1800 nouveaux bitcoins sont extraits chaque jour.


Actuellement il y a 17.65 millions de bitcoins en circulation et le bloc dernièrement miné devait être le bloc 572010. Le cours du bitcoin (BTC) est de 4504 euros au 16/04/2019.


Au final, la masse monétaire des bitcoins va converger vers 21 millions de bitcoins, guère plus.


Consommation électrique


Le minage est une activité décriée en raison de l'importance de sa consommation énergétique. La consommation mondiale entrainée par le minage au 1er juillet 2018 serait l'équivalent à l'énergie produite par an par 6 réacteurs nucléaires de 1300MW fonctionnant à plein régime.


Conclusion


Le minage des crypto-monnaies, permettant de sécuriser les transactions, utilise finalement une technique assez simple allié à la technologie de stockage blockchain mais nécessite toutefois de disposer d'une puissance de calcul assez conséquente.


Le minage est sans doute le processus le moins connu du grand public mais son utilité est indéniable et il est ce qui permet à la technologie blockchain d'exister.

31 vues