Bitcoin : partons à la découverte de cette monnaie !

1. Le Bitcoin, c’est quoi ?

Le Bitcoin domine aujourd’hui le marché de la cryptomonnaie. Compte tenu de la hausse remarquable des derniers mois, certains les visualisent comme une source d’investissement. Sans oublier que comparées aux banques, les cryptomonnaies offrent de meilleures performances pour leur rapidité et leur fiabilité de transfert d’argent.

Il s’agit d’un premier article d’une série de deux articles sur le Bitcoin. Nous nous pencherons aujourd’hui sur les principes de fonctionnement et le modèle de sécurité du Bitcoin.

Le Bitcoin, de la famille des cryptomonnaies, a été publié en 2009. Son créateur demeurant anonyme est connu sous le pseudonyme Satoshi Nakamoto.

Il s’agit d’un système de paiement décentralisé, sécurisé et anonyme entre particuliers. Il n’est pas nécessaire d’avoir une banque comme intermédiaire pour vérifier l’identité des utilisateurs et valider une transaction. Les bitcoins peuvent être échangés contre d’autres monnaies, biens ou services. Néanmoins, il ne remplit pas le rôle d’une monnaie.

Le Bitcoin est considéré, par les autorités, comme un « crypto-actif » [1]. Il ne possède pas d’autorité centrale ou d’administrateur unique. Il est basé sur un consensus de l’ensemble des nœuds du réseau. Pour ce faire, les serveurs votent avec leur puissance de calcul afin de déterminer la chaîne de transaction légitime.

bitcoin article image 2

2. Système et principe de fonctionnement du Bitcoin

Avant de rentrer dans les détails, commençons par définir les ustensiles nécessaires à la compréhension de la suite de l’article !

○ Quelques définitions

Les utilisateurs :  Les utilisateurs possèdent une clé privée et une clé publique. Chaque utilisateur est identifié par une ou plusieurs adresses.

Une adresse de taille 25 à 34 octets est représentée par :
• Une empreinte cryptographique de sa clé publique.
• Un préfixe qui indique le format de l’adresse (1,3 ou bc1).
• Une somme de contrôle qui invalide les adresses contenant une faute de frappe.

Mineurs : Utilisateurs du réseau de Bitcoin qui entrent en concurrence pour résoudre des énigmes cryptographiques afin de valider les transactions.

Énigme cryptographique : Challenge difficile à résoudre en raison du temps de calcul et de l’énergie nécessaire pour trouver la valeur cible.

Bloc : Page contenant toutes les transactions qui se sont déroulées au cours des dernières minutes et qui ont été partagées avec l’ensemble du réseau.

Blockchain : Registre virtuel représentant une suite de blocs reliés entre eux par une chaîne et contenant les transactions d’un réseau de Bitcoin.

Transaction : Une transaction est un contrat entre un acheteur et un vendeur permettant de débiter un compte pour en créditer d’autres. Ces transactions possèdent des entrées et des sorties. Chaque sortie comporte un programme qui autorise ou non le transfert du montant vers une autre transaction. Chaque entrée représente une sortie d’une transaction antérieure et chaque sortie comporte le montant et la clé publique de l’adresse créditée. Il s’agit aussi d’un taux de commission qui représente les frais que les mineurs reçoivent pour traiter une transaction. La somme des valeurs des sorties doit être inférieure ou égale à la somme des valeurs des entrées sinon cela signifie qu’il existe une erreur au niveau de la blockchain.

article bitcoin transaction
Figure 1 : Une transaction – Source : https://bitcoin.fr/bitcoin-explique-par-son-inventeur/

Le minage et la preuve de travail : En pratique, les mineurs ne minent pas les transactions une par une, ils regroupent les transactions en attente dans un bloc.

Les mineurs minent ce bloc en calculant sa valeur hachée avec un « nonce » variable. L’algorithme de hachage utilisé est SHA-256. Les mineurs font varier ce nonce jusqu’à trouver la bonne valeur hachée correspondant à une valeur commençant par un certain nombre de zéro. Cette valeur cible est de taille 256 bits partagée par tous les mineurs. Une fois qu’un mineur calcule la valeur de hachage correcte pour un bloc, il diffuse immédiatement le bloc dans le réseau avec le hash calculé et le nonce. En parallèle, il ajoute ce bloc dans sa blockchain privée. Lorsque les autres mineurs reçoivent un nouveau bloc, ils peuvent vérifier rapidement son exactitude en comparant la valeur de hachage donnée dans le bloc reçu par rapport à la valeur cible. Ils mettront également à jour leur chaîne de blocs locale en ajoutant le bloc nouvellement miné.

○ Déroulement d’une transaction

Une personne voulant acheter quelque chose en utilisant des bitcoins :

Première étape : l’expéditeur crée une transaction signée avec sa clé privée.

Deuxième étape : sur le réseau Bitcoin, les mineurs concourent les uns contre les autres afin de vérifier que la transaction corresponde bien au portefeuille de l’acheteur. Une fois la transaction vérifiée, elle sera ajoutée au bloc afin de commencer le « minage » de ce bloc.

Troisième étape :  le mineur trouvant le bon hash correspondant au bloc en premier, diffuse ce bloc et la valeur trouvée à tous les autres mineurs.

Quatrième étape : les autres mineurs vérifient la légitimité de la valeur trouvée. Une fois cette dernière validée, le bloc sera intégré dans la blockchain et qui sera, par la suite, stocké dans les registres locaux de chaque nœud.

Cinquième étape : le mineur qui a trouvé le bon hash reçoit une rétribution en bitcoins.

Sixième étape : le bénéficiaire se voit transférer dans son porte-monnaie électronique le paiement.

article bitcoin déroulement d'une transaction
Figure 2 : Déroulement d’une transaction

○ Vérification de la transaction

La vérification de la transaction permet de valider :
• si son expéditeur possède les bitcoins qu’il souhaite envoyer ;
• si l’expéditeur n’a pas déjà envoyé ces bitcoins à une autre personne ;

Plus concrètement, l’expéditeur fournit une signature numérique dans un programme de Bitcoin. Si la signature correspond à la clé publique de l’expéditeur, la transaction sera validée.

○ Traitement de la transaction

Une fois la transaction validée, le mineur va l’ajouter dans un bloc contenant les transactions précédentes. À l’aide d’une fonction de hachage, ces transactions vont être transformées en une empreinte alphanumérique de longueur fixe de 256 bits.

Chaque bloc de la chaîne contient l’empreinte du bloc précédent, ce qui rend la modification des transactions impossible. En effet, un changement d’une valeur précédente entraînerait la modification de l’empreinte du bloc.

Un bloc contiendra :
• Un en-tête qui indique sa version ;
• L’empreinte de l’en-tête du bloc précédent ;
• L’horodatage correspondant à l’heure et la date de validation du bloc ;
• La valeur cible du réseau ; La racine d’un arbre de Merkle [2] constitué des transactions du bloc ;
• Le nonce.

L’arbre de Merkle permet de vérifier l’intégrité de l’ensemble des transactions sans toutes les vérifier.

Durant le traitement de la transaction, il est possible qu’une nouvelle chaîne se crée à partir de la création de deux blocs différents créés durant le même cycle. Le choix de la chaîne légitime se portera sur la somme des difficultés des blocs la composant. Ces difficultés présentent dans l’en-tête de chacun de ces blocs témoignent du travail demandé pour le construire.

Au cours du traitement, si une chaîne secondaire présente une charge de travail supérieur à la principale, elle deviendra alors la chaîne principale. Finalement, la chaîne validée sera la chaîne principale.

○ La gratification d’un mineur

Le premier mineur qui trouve la solution de l’énigme cryptographique reçoit des portions de Bitcoin provenant de la génération des blocs. En plus de la récompense minière pour chaque ajout réussi d’une transaction, le mineur recevra également un montant appelé frais de transaction. Ce montant représente une quantité de bitcoins supplémentaire définie par l’émetteur de la transaction. Généralement, les mineurs vont accorder une priorité de traitement aux transactions comportant des frais de transactions importants afin d’obtenir une meilleure rémunération.

○ La cryptographie

L’intérêt de la cryptographie dans ce système est d’assurer l’authentification des utilisateurs du réseau Bitcoin. Pour se faire, chaque utilisateur doit signer la transaction qui lui correspond. Elle est effectuée à l’aide de la cryptographie à courbes elliptiques.

Grâce à la signature et les fonctions de hachage de la transaction, on assure l’authentification et la non-répudiation.

3. Mécanismes de sécurité du Bitcoin

Le Bitcoin utilise la technologie peer-to-peer (P2P) et fonctionne sans aucune autorité tierce de confiance (ex. banque), comptable agréé (CA), notaire ou tout autre service centralisé. En particulier, un propriétaire a un contrôle total sur ses bitcoins et il peut les dépenser à tout moment, n’importe où sans impliquer d’autorité centralisée. La conception de Bitcoin est « open source » et personne ne la possède ni ne la contrôle.

○ Sécurité des transactions avec les Bitcoins

Un mécanisme de transaction est utilisé pour déplacer les bitcoins d’un portefeuille utilisateur à l’autre. L’adresse de destination (également appelée adresse Bitcoin) est générée en effectuant une série d’opérations de hachage cryptographique irréversible sur la clé publique de l’utilisateur.

Chaque utilisateur de Bitcoin est identifié par une adresse qui :
• est dérivée de la clé publique de l’utilisateur par une fonction de hachage ;
• est facile à échanger entre individus grâce à une notation simplifiée ;
• identifie de manière sûre la clé à laquelle elle est liée tout en étant plus petite.

article bitcoin Dérivation de l'adresse Bitcoin à partir de la clé publique
Figure 3 : Dérivation de l’adresse Bitcoin à partir de la clé publique – Source : https://cryptoast.fr/cles-privees-cles-publiques-et-adresses-dans-bitcoin

Les bitcoins sont représentés sous forme de transactions et plus précisément, une chaîne de transactions. Pour autoriser une transaction, l’utilisateur fournit sa clé publique et la signature cryptographique de la transaction générée à l’aide de sa clé privée.

Le protocole Bitcoin s’appuie fortement sur la cryptographie à courbe elliptique pour sécuriser les transactions. En particulier, Bitcoin utilise l’algorithme de signature numérique à courbe elliptique (ECDSA) qui est normalisé par le NIST pour signer les transactions.

Au sein du système du Bitcoin, chaque utilisateur agit comme une banque et conserve une copie de ce registre. Le rôle du registre distribué est joué par la blockchain. Cependant, le stockage de plusieurs copies de la blockchain dans le réseau ajoute de nouvelles vulnérabilités dans le système et il devient difficile de maintenir la cohérence de la vue globale de la blockchain.

Pour éviter ce problème, le processus de vérification des transactions est distribué afin de garantir l’exactitude de la transaction et la globalité du réseau doit être informée rapidement d’une transaction traitée avec succès pour assurer l’état cohérent de la blockchain. Afin de répondre à ces exigences, Bitcoin utilise le concept de preuve de travail, proof-of-work (PoW) en anglais, avec un protocole probabiliste de consensus distribué. Le processus distribué de vérification des transactions garantit que la majorité des mineurs vérifiera la légitimité d’une transaction avant son ajout dans la blockchain. De ce fait, lorsque la blockchain entre dans un état incohérent, tous les nœuds mettent à jour leur copie locale de la blockchain avec l’état sur lequel la majorité des mineurs sont d’accord. L’état correct de la blockchain est donc obtenu par élection.

○ Sécurité du Blockchain

La sécurité du Bitcoin est basée sur la sécurité de la chaîne des blocs « Blockchain ». La présence d’une erreur dans un bloc engendrera une erreur pour toute la chaîne de bloc à laquelle il appartient. Dans cette partie, nous nous intéressons aux problématiques de sécurité d’une « blockchain ».

La blockchain est une infrastructure de données publique basée sur une « liste chaînée », c’est-à-dire une liste d’éléments avec un lien entre chacun des éléments de cette liste. Elle stocke l’historique des transactions de l’ensemble du réseau sous forme de blocs. Chaque bloc contient également un hachage du bloc précédent. Pour ajouter un nouveau bloc dans la blockchain, les mineurs doivent vérifier (miner) un bloc en résolvant le puzzle « preuve de travail » difficile à calculer (l’idée consiste à résoudre un puzzle mathématique cryptographique complexe. Il implique de rechercher une valeur « nonce » qui, lorsqu’elle est hachée, produit un hachage qui répond aux exigences du système Bitcoin et commençant par un certain nombre de zéros).

Il n’est pas possible d’effectuer des modifications dans un bloc, cela changerait le hachage du bloc. En effet, si une transaction dans un bloc est falsifiée, la valeur de hachage de ce bloc change, ce qui, à son tour, change les blocs suivants. La blockchain augmente constamment en longueur en raison du processus d’extraction continu dans le réseau. Le processus d’ajout d’un nouveau bloc est le suivant :
• Une fois qu’un mineur détermine une valeur de hachage valide pour un bloc, il ajoute le bloc dans sa blockchain locale et diffuse la solution.
• Lors de la réception d’une solution pour un bloc valide, les mineurs vérifieront rapidement sa validité. Si la solution est correcte, les mineurs mettent à jour leur copie locale de la blockchain, sinon le bloc est rejeté.

De manière générale, la sécurité dans Bitcoin repose sur l’hypothèse que les mineurs honnêtes contrôlent la majorité des ressources informatiques. Le principal facteur déterminant que les mineurs vérifient honnêtement un bloc est la récompense (6,25 BTC à l’heure actuelle) qu’ils reçoivent à chaque ajout de bloc réussi dans la chaîne de blocs. Comme mentionné précédemment, pour vérifier un bloc, les mineurs doivent résoudre le crypto-puzzle dur associé. La probabilité de résoudre le puzzle est proportionnelle à un certain nombre de ressources informatiques utilisées.

Bien que le système Bitcoin représente un modèle qui semblerait sécurisé dans son ensemble, ce dernier souffre principalement d’un problème de confiance qui peut entraîner la dégradation des valeurs et principes de Bitcoin.

bitcoin article image 3

4. Conclusion sur le Bitcoin

Au cours de cet article, nous avons essentiellement abordé le fonctionnement de Bitcoin et le processus de « minage ». Tout le monde concourt pour gagner le trophée et remporter des milliers d’euros. Néanmoins, bien que le Bitcoin puisse offrir un très haut niveau de sécurité s’il est utilisé correctement, certaines attaques liées au système, telles que l’attaque 51%, existent. De ce fait, nous abordons les sujets des vulnérabilités et des bonnes pratiques liés au Bitcoin dans notre article dédié à découvrir ici 😊

[1] Des actifs virtuels stockés sur un support électronique permettant à une communauté d’utilisateurs les acceptant en paiement de réaliser des transactions sans avoir à recourir à la monnaie légale. Pour plus d’informations : https://fr.wikipedia.org/wiki/Cryptomonnaie

[2] Un arbre de Merkle est une structure de données divisée en plusieurs couches afin de relier chaque nœud avec une seule racine qui leur est associée. Pour plus d’informations : https://academy.bit2me.com/fr/qu%27est-ce-qu%27un-arbre-merkle/

Je partage

Derniers articles

Illustration de sécurité WordPress avec logo central et éléments numériques de sécurité

Renforcer la sécurité WordPress, du développement des plugins à la configuration serveur

Il y a peu, dans le cadre de recherches sur des plugins WordPress, notre pentester Vincent Fourcade a découvert une injection de code, côté client, dans un module du célèbre CMS. Celle-ci fut vérifiée et validée par les équipes de WPScan. Aujourd’hui, une CVE lui a été attribuée. L’occasion de revenir aujourd’hui sur la sécurité, au sens large, dans le CMS WordPress, que ce soit au niveau de la couche applicative, de la configuration du serveur ou du bureau. C’est parti !

Lire l'article

Analyse des Métriques XSS : comprendre l’Impact des injections de code côté client

Lors des tests d’intrusion, l’injection de code côté client est généralement plus aisée à découvrir qu’une injection côté serveur. Le nombre de paramètres dynamiques transitant du back au front, la difficulté d’échapper correctement à l’entrée et à la sortie et la multitude d’encodage liés à l’affichage peuvent être des vrais casse-têtes pour qui souhaite faire la chasse à la XSS. Le JavaScript malveillant semble ainsi avoir de beaux jours devant lui. Cependant, il n’est pas rare qu’à l’issu de l’audit, la criticité d’une telle injection découle directement de la configuration des cookies présents sur l’application. En effet, l’absence de l’attribut HttpOnly majore irrémédiablement les risques liés à ce type d’attaque. Néanmoins, cela signifie-t-il que la présence de cet attribut doive absolument amenuiser la criticité d’une injection ?

Lire l'article