vendredi 9 avril 2021

Blockchain, Bitcoin et crypto monnaies (1)

Ces objets compliqués sont difficiles à comprendre. Je n'ai pas trouvé de livre suffisamment pertinent pour me faire une idée (les commentaires des internautes sont partagés). J'ai donc demandé à un spécialiste une page de présentation claire me donnant une base de départ pour aller plus loin. Voila :

Bitcoin est une crypto-monnaie paire-à-paire décrite en 2008 par Satoshi Nakamoto. Les transactions sont stockées dans une blockchain qui est une base de données (ou registre, ledger) publique et distribuée que tout le monde peut récupérer (en 2017 elle faisait quand même 137 Go) ou juste consulter sur des sites spécialisés. La blockchain consiste en un ensemble de blocs de taille fixe (1Mo dans le cas de Bitcoin) qui contient l’empreinte hachée du bloc précédent.
Une fois qu’un bloc est validé (une fois toute les 10 minutes environ dans le cas de Bitcoin, 15 secondes pour Ethereum), celui-ci est horodaté et ne peut plus être modifié. Il ne faut pas mélanger blockchain et bitcoin : la blockchain est le conteneur et les transactions bitcoin sont le contenu, mais on peut y mettre ce que l’on veut (smart contracts, blockchain privées avec droits d’accès,...). Je ne parle que de bitcoin, mais il existe une multitude de crypto-monnaies, dont plus de 1600 mortes d’après ce site : https://99bitcoins.com/deadcoins/. Un bloc contient notamment un ensemble de transactions en bitcoin. Si on va sur le site https://www.blockchain.com/explorer on trouve des exemples de transactions, par exemple en regardant les derniers blocs. La validation d’un bloc se fait à l’aide d’un algorithme de consensus, basé sur une preuve de travail (proof-of-work ou PoW) appelé minage dans le cas de Bitcoin. Cela consiste à déterminer une donnée à insérer dans le bloc courant pour que l’empreinte hachée du bloc soit inférieure à un certain seuil, déterminé pour que cette preuve de travail prennent en moyenne le temps prévu, soit 10 minutes dans le cas de Bitcoin. En pratique cela est réalisé par des coalitions (pool ) de mineurs (ou nœud du réseau) qui possèdent chacun des fermes de matériels dédiés à ce calcul. Il n’y a aucun rapport entre mineurs et possesseurs de bitcoin (on peut être mineur sans posséder un portefeuille bitcoin, et on peut posséder des bitcoins sans miner ou stocker la blockchain) sauf que l’ensemble des mineurs qui trouvent la preuve de travail est rémunéré en bitcoin. Il existe de nombreux autres systèmes de consensus : dans la crypto-monnaie que j’avais faite avec mes étudiants, on avait proposé un système hybride preuve de travail - jeton. Les transactions sont réalisées à l’aide de scripts et sont signées par l’utilisateur. Chaque utilisateur de bitcoin possède un portefeuille bitcoin wallet qui contient un couple de clé publique/privée (wallet logiciel ou solution en ligne, avec des solutions variées pour stocker les clés, y compris des QR codes papier). La clé privée sert pour réaliser la signature et la clé publique envoyée avec la transaction permet de vérifier la validité de la signature (si besoin par le(s) bénéficiaire(s) de la transaction, mais surtout par les nœuds du réseau, i.e. les mineurs). L’identifiant ou l’adresse de la personne réalisant la transaction est le hash de la clé publique dans un format base58. S’il perd sa clé privée, il ne peut plus signer de transaction, donc il perd définitivement son argent. Pour être certain d’être anonyme, le mieux est de créer un couple de clé publique/privée à chaque transaction, sinon on peut lier entre elles les transactions et potentiellement se de-anonymiser (une personne peut créer autant d’adresses qu’elle le souhaite).

P. Lacharme, Maître de Conférences à l'ENSICAEN

***

Le premier concept clé à comprendre est celui de base de données. Toute base de donnée est un lot d'enregistrements et chaque enregistrement est structuré en champs. Les blocs sont indexés, c'est à dire numérotés. Ici la base de données est la blockchain, l'enregistrement est le bloc, et ce bloc comprend les champs suivants : 

ENTETE de 80 octets

Version de la Blockchain (4 octets)
Merkle root = hachage de l'ensemble des transactions (32 octets)
Hachage du bloc précédent (32 octets)
Horodatage (4 octets)
Nonce (4 octets)
Difficulté de la cible (4 octets)

LISTE DES TRANSACTIONS

J'y reviendrai ensuite dans le détail. 

Le second concept clé est celui de la fonction de hachage ou empreinte numérique. Pour ne pas rentrer plus loin dans les détails, la fonction de hachage est une moulinette qui va donner de toute chaîne numérique une empreinte ou signature sous forme d'un nombre hexadécimal unique (en base 16 et non en base 10). Si la fonction hash256 est utilisée, on obtiendra un nombre de 256 chiffres (c'est énorme). Facile à réaliser sous linux. 

Le hash du fichier toto.doc s'obtient en tapant la commande :

has256sum toto.doc

Pour une chaîne de caractères c'est un peu plus compliqué pour éviter que le retour à la ligne soit pris en compte !

echo -n "Salut, comment vas-tu ?" | sha256sum
aa18df91235417e90640cfc11d97f12e8cbe816c62a5d167fec89092faa4866e  -

En hexadécimal, a vaut 10, b vaut 11 ... f vaut 15. On peut donc encoder une valeur allant jusqu'à (16 puissance 257) - 1. Notez que cette empreinte est unique. Si on rajoute un espace, le résultat n'a rien à voir avec le précédent:

echo -n "Salut, comment vas-tu ? " | sha256sum
0a6fc4df2a68803df432e3ab6f6c5c368c2300b41aaffad53572206b54b8a534  -

La probabilité pour que deux chaînes différentes aient la même empreinte est infinitésimale. En outre, il est impossible de remonter de l'empreinte à la chaîne d'origine. A suivre.

Ajout 2022 : coût du minage par pays  : https://cms.zerohedge.com/s3/files/inline-images/2022-08-06_10-15-04.jpg?itok=YLI6q0hm


L'ancien président de Pfitzer : les gouvernement vous mentent et préparent le dépeuplement massif. Media-Presse-Info.







Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.