La blockchain est encore jeune, mais quelques applications sont déjà opérationnelles : traçabilité des aliments, sécurisation des transactions commerciales, désintermédiation dans la publicité, indemnisation par un assureur, digitalisation des titres financiers, possession d’objets dans le cadre d’un jeu vidéo… Mais quels sont les principes fondamentaux de la blockchain ? Un sujet d’actualité, celui des crypto-monnaies, domaine fondateur du concept, est l’occasion d’une belle investigation mathématique.
Le Bitcoin, dont la capitalisation s’élève à 120 milliards de dollars, est la crypto-monnaie la plus connue. Certaines entreprises de commerce électronique acceptent déjà le paiement en Bitcoins. Facebook, à travers son projet de crypto-monnaie Libra (finalement mis à mal par les autorités publiques), cherche à fluidifier les échanges commerciaux B2B (« business to business » : activités d’une entreprise visant une clientèle d’entreprises) ou B2C (« business to customer » : activités d’une entreprise visant directement le consommateur) à l’échelle mondiale, à accroître le nombre des acteurs dans ces domaines et donc à générer de nouveaux besoins publicitaires qui augmenteront ses revenus. Du coup, les crypto-monnaies suscitent une opposition des régulateurs, Banques centrales ou États.
Quelques principes de cryptographie
-----------------------------------
La blockchain n’existerait pas sans la cryptographie, l’art de rendre confidentielles des données et, surtout, de les authentifier. Deux primitives, des algorithmes de bas niveau, sont essentielles : le hashing (hachage) et la signature.
Le hachage calcule, à partir d’une donnée fournie en entrée, une empreinte numérique servant à identifier rapidement la donnée initiale, au même titre qu’une signature sert à identifier une personne. Le standard ISO SHA (pour Secure Hash Algorithm) transforme un bloc de quelques kilo-octets en un hash de 256 bits d’une façon imprévisible et non inversible. Il est impossible de retrouver le message initial à partir du hash. Il s’agit d’une impossibilité pratique car il suffirait en fait d’essayer toutes les combinaisons pour le retrouver, mais cela nécessiterait un temps de calcul monstrueux. Le hashing peut s’appliquer sur un grand volume de données en les décomposant en blocs et en chaînant les calculs (le calcul du hash du bloc i + 1 incorporant le résultat du calcul sur le bloc i).